Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
同じ苦労をしないでほしい!生成AI活用システムの開発体験談
Search
Ryo Machida
August 02, 2024
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
同じ苦労をしないでほしい!生成AI活用システムの開発体験談
私が初めてマルチエージェントシステムをプロトタイプしたときにハマってしまった落とし穴や教訓についてお話した際の資料です。
Ryo Machida
August 02, 2024
Other Decks in Programming
See All in Programming
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
Next.js: The final boss of Web Performance
guaca
0
280
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
110
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
980
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.3k
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
570
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
230
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
AWSに止められる覚悟してますか?
morizo_1984
2
540
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
800
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
2
12k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
410
Google's AI Overviews - The New Search
badams
0
1.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
Agile that works and the tools we love
rasmusluckow
331
22k
WCS-LA-2024
lcolladotor
0
890
Git: the NoSQL Database
bkeepers
PRO
433
67k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
The Curious Case for Waylosing
cassininazir
1
570
Transcript
町田 凌 同じ苦労をしないでほしい! 生成AI活用システムの 開発体験談 2024年7月31日 関西生成AI祭り LT
初めてのパブリックな場でのLTです 🎉 生成AIについて色々お話聞けると嬉しいです 👂✨ 初めてのプロトタイプ開発の中で僕がハマってしまった落とし穴の話や、やってよかったことを お話します 町田 凌 フルスタックエンジニア ~2023年 2023年~
大阪出身。大学院までずっと関西。特にAIとは深く関わらず過ごす BIPROGY(旧: 日本ユニシス)入社、現在新卒2年目。 自社サービスのアジャイル開発の後、 現在は、設計書をインプットとするソースコード生成システムの開発を担当
LLMが複雑な目的に取り組むための システム構成
Prompt Chain 段々複雑になるLLMを使ったシステム 目的達成の難しさに応じて、システムの構成が複雑になる マルチ エージェント プロンプト 複雑度 低 複雑度
高 構成の複雑さについて考えるため、ここでは 以下のようにシステムを分類してみる エージェント
プロンプトによる単純な生成 考慮すべき:利用モデル、プロンプトエンジニアリング 翻訳文 翻訳の指示 原文
Prompt Chain [1] あるプロンプトの出力結果を他のプロンプトの入力とし、 生成を繰り返すこと 考慮すべき:下流のプロンプトに役立つ情報を上流から 提供できるか より原文を理解し 文化的に伝わりやすい 翻訳文
原文の入力 原文の理解 文化的な違いの考慮 翻訳 [1]: The Prompt Report: A Systematic Survey of Prompting Techniques, https://doi.org/10.48550/arXiv.2406.06608
エージェント[1] 目的の達成のため、LLMの外部のシステムとの連携を行う システムのこと 考慮すべき:外部システムから得た情報が役立つか 専門知識を 踏まえた翻訳文 原文の入力 翻訳の参考になる情報の 検索ワードを生成 翻訳
専門知識DB [1]: The Prompt Report: A Systematic Survey of Prompting Techniques, https://doi.org/10.48550/arXiv.2406.06608 専門性のある翻訳エージェント
マルチエージェント 目的達成のために複数のエージェントが協調するシステム 考慮すべき:下流のエージェントに役立つ情報を上流から 提供できるか 各分野での 専門的な外部情報を 踏まえた上での 翻訳文 原文の入力 原文理解
エージェント 文化的背景 エージェント 翻訳 エージェント 校正 エージェント
考慮すべきことが増えていく だからこそ、構成要素となるプロンプト/エージェントを しっかり設計・実験し、それらを組み合わせた上位レイヤ に進まないと大変 Prompt Chain マルチ エージェント プロンプト 複雑度
低 複雑度 高 エージェント
ここでいう設計とは プロンプト/エージェントが目指す出力は何? プロンプト/エージェントへ渡す変数はどんな情報? プロンプト/エージェントのどんなテクニックを使う? これらを意識しながら、プロンプト/エージェントの改善を 繰り返す
失敗体験談
いざ初めてのプロトタイプ! コード生成の既存ツールから、ふるまいや実装を勉強 GitHub Copilot / Cursor Devin / OpenDevin (OSS)
/ Devika (OSS) ⇒大抵エージェント要素があるので、マルチエージェント で作ろう!
生まれたプロトタイプ Devikaを拡張し、エージェントを数種類実装 Planner君 タスクを読み解いて 皆に仕事を与えます < DependencyFetcher君 依存関係 教えるよ <
SimilarityFetcher君 似た実装 探してくるよ < WebResearcher君 Web検索 するよ < Coder君 コード 書くよ < Patcher君 テスト実行して コード修正するよ < 基本的に左から右へ仕事が受け渡される
いざ実行して挙動を監視すると コード生成の結果は大したことはなかったが、 それ以上に重大なミスがあった Patcher君 うーん、コード生成難しいw <
良い影響を与えていないエージェント 参考になる既存実装をCoderに渡して、コーディングの 参考にさせたかったが、出力にその影響はなかった SimilarityFetcher君 僕は自分の仕事を きっちりこなしたけどな < Coder君 君の情報あんまり 役に立ってないよ
> 僕 ・・・ <
実験の不足が原因 Coderエージェントの生成物を良くするには何が必要か Coderエージェント単体で十分に実験してから、 追加のエージェントを実装すべきだった 下流エージェントに役立つ情報が何か実験すること を怠ったまま、上流エージェントを追加していた
更に原因を深掘りすると思い込みがあった LLMの原理は理解しつつも、ついつい 「人間がコーディングするなら」ベースで エージェントを加えていた 巷にあふれる、人になぞらえたマルチエージェント システムの情報から「人間と同じように組織すれば 上手くいきそう」と上っ面だけで思い込んでしまった
目的達成のために絶対に必要なエージェントから 小さく作る 新たにエージェントを作る前に、既存のエージェント 単体で何があれば出力が改善されるか実験する 無駄なものを作り出さない教訓 僕 SimilarityFetcher君 コーディング規約を守らせるには 他の方法の方が良かったから 既存コードの情報いらないよ
じゃあ休んどくね < > Coder君
コードを整え、実験しやすい環境を作った Jinja2というテンプレートエンジンを活用し、コードか ら「プロンプトの記述」という責務を分離 Tests as Documentation(テストがユニットテストと IO仕様のドキュメントの両方の役割を果たす) プロンプト/エージェント単体でマニュアル実行できる ようなテスト関数を追加 エージェントを改善しやすくするために
今日の話題のまとめ マルチエージェントを採用してシステムの複雑度が増しても、 プロンプト/エージェント単位での設計・実験が大事
ご清聴ありがとうございました!
エージェント開発の小さな工夫 (時間の都合で発表できず)
テンプレートエンジン(Jinja2)が便利 MVCフレームワークのViewでよくある 動的な文字列コンテンツを作るためのテンプレートエンジン forやifのような簡単な処理をテンプレートに書ける
コードとプロンプトの責務を分離できる プロンプトの整形をJinja2に任せてしまって、コードは LLMに渡すデータの収集に専念する コード上にプロンプトの 内容を見せない
Jinja2は著名なOSSでも使える
エージェントのためのテストコード 以下の2つを用意できると、安心して開発を続けられる LLM部分をモック化したテストコード プロンプト/エージェント単体での マニュアル実行のためのテストコード もし可能なら用意したい プロンプト/エージェントの評価のためのテストコード
① LLM部分をモック化したテストコード 不確実性のあるLLM部分以外をテストすることで、 確実性のある他の処理がエージェントの挙動に悪い影響を 与えていないことを担保できる これがないと問題が起こった際に生成結果が悪いのか、 その他の部分が悪いのか切り分けが面倒
Tests as Documentation LLM以外の部分がどういう想定だったか読み取れるようにな るため、開発者がエージェント内部を理解しやすくなる
Planner君内部での とあるプロンプト による生成結果 コード生成は以下のステップで行います Step 1: ネット検索 ... Step N:
コード書き込み 次にテストは以下のステップで行います Step 1: テストケース作成 ... Step N: テスト実行 僕 あれ?ステップが二種類生成してる 実装者はこういう場合を想定してたんだろうか? プロンプトを修正すべきか?整形処理を拡張すべきか? エージェントの動きに悩まされたとき...
テストデータ ステップが数件の場合 期待値 Step 1: Web検索 ... Step M: コード生成
Step M+1: テストコード生成 ... Step N: テスト実行 僕 テストデータではステップのセットは1つだな! プロンプトは過去から変更がないので、モデルの違いが原因か 実例に即したテストデータは理解を助ける
著名ライブラリはLLMを抽象化でき便利 抽象クラスが提供されていたり テストダブルが提供されていたりと、至れり尽くせり
② 単体マニュアル実行用のテストコード プロンプト/エージェント単体で実験するため、 気軽に実行できる仕組みを作っておく (pytestのm flagで、手動実行しやすくしておくと良い) Tests as Documentationをやれてれば、データをそのまま
手動の実験に使えるのでGood
③ エージェント評価のためのテストコード G-EvalのようなLLMで結果を評価する仕組みが便利 confident-ai/deepeval の ような自動テストで使える 便利な評価ツールが 登場している
LLMに頼らないテスト基準も有用 一方、確実性が求められるタスクなら、LLMという不確実な ものに頼らないテスト基準を作りたい コード生成なら コンパイルできる 事前定義した単体テストを通過する など
テストの仕組みにコストをかけすぎない 社内システムのように、利用者の良識が期待できるもの なら、エージェントの入出力のモニタリングに留め、 自動テストの準備・運用にかかるコストをかけないのも 一つの手 Planner君 テストは悩ましいな <