Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Symfonyが 簡単にAI agentになる
Search
hideki kinjyo
PRO
August 19, 2026
Programming
62
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Symfonyが 簡単にAI agentになる
PHP勉強会@東京 第190回の発表資料です。
https://phpstudy.connpass.com/event/401438/
hideki kinjyo
PRO
August 19, 2026
More Decks by hideki kinjyo
See All by hideki kinjyo
yield再入門 #phpcon
o0h
PRO
0
1.4k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
350
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
3
330
ソースコード→AST→オペコード、の旅を覗いてみる
o0h
PRO
1
240
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
460
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
280
夢の無限スパゲッティ製造機 #phperkaigi
o0h
PRO
0
980
PHPer Book Revue 「雑に作る」 #phperkaigi
o0h
PRO
0
440
俺にも私がAIと作った オススメの個人ツールを語らせてくれ
o0h
PRO
0
96
Other Decks in Programming
See All in Programming
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
360
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
400
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
100
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
660
Oxlintはいいぞ(続)
yug1224
1
540
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
620
Hono + Inertia + React で LP を構築した話
oukayuka
2
200
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
270
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
140
Flow は今どうなっているか
mizdra
PRO
0
890
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
150
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
200
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.6k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
640
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
390
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
970
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
250
sira's awesome portfolio website redesign presentation
elsirapls
0
400
Transcript
あなたのSymfonyが 簡単にAI agentになるって 聞きました? 第190回 PHP勉強会@東京 Hideki Kinjyo GitHub: o0h
/ X: @o0h_ [公開用]
2 今日の話の前にあったこと 77webさん!! https://speakerdeck.com/77web/boost?slide=9
3 今日の登場人物 Symfony AI Agent Component AIエージェント簡単つくれる君
4 えーじぇんと? ◦◦について教えて〜 model ユーザーさん thinking...
5 えーじぇんと? ◦◦について教えて〜 コレを受け取って ユーザーさん
6 えーじぇんと? コッチに渡す役 model thinking...
7 えーじぇんと? 色々と複雑な振る舞いは modelにお任せだよ model thinking...
8 DEMO
None
None
11 のアプリが どんな風に実現しているのかを 紹介します
12 自己紹介 • 金城秀樹 / きんじょうひでき • GitHub: @o0h /
: @o0h_ • アイコンは美味しい鮭親子丼の写真です • 最近はPodcastをやっています ハッシュタグ: #readlinefm 𝕏 •
13 話すこと・話さないこと • 話すこと: symfony/ai-agentで簡単になること ➡ このパッケージ(バンドル)が何を助けているのか • 話さないこと: Symfony自体の話
➡ よくフルスタックFWに備わっている基本的な機能と繋ぎ込まれているんだな、 を感じてもらえるとハッピー
アプリの概要
15 概要 • 「Slack過去ログ調べる君」みたいなもの • 普通のSlack bot • チャットから入力文章を受けつけて、 Slackの過去ログを多段サーチして、
そこから得た知識で回答を出す
16 処理の流れ LLMの何か (AnthropicのAPIとか) Slack App 弊App Slack API
17 処理の流れ - Phase1 Slack 弊App • Slackの仕様上、 リクエストを受け取ったら素早くレスポンスを返さなければならない •
そのため、最初の応答はWeb Controllerを作って同期処理している
18 処理の流れ - Phase1.5 弊App(web) 弊App(worker) • LLM側の処理+Slack検索は凄く時間がかかる。 これを同期的に扱うと、Webリクエストがタイムアウトする •
そのため、ジョブワーカーを利用した非同期処理に流している
19 処理の流れ - Phase2 弊App(worker) LLMの何か (AnthropicのAPIとか) Slack API •
ワーカーは、指示内容を整えてLLMにリクエストを実行 • 結果が返ってきたら、Slackにチャットメッセージをポストする
Symfony + Ai Agent Bundle目線の話
21 Symfonyは強力なフレームワークだよ! • Slackとの連携だけアプリ独自の実装だけど・・・ • といっても、よくある「外部SaaS連携」の範疇 • 以下は「いつも通りのSymfony」で実装されている Web用のコントローラー(Phase 1)
• ジョブワーカー(Phase 1.5) • • 以下が「AI Bundle」が助けてくれる部分 modelに向けたリクエストの構築&リクエストの送信 • 独自サービスのTools化 •
基本的なリクエストの投げ方
23 基本的なリクエストの投げ方 https://symfony.com/doc/current/ai/index.html
24 基本的なリクエストの投げ方 プロンプトをDTOに入れて https://symfony.com/doc/current/ai/index.html
25 基本的なリクエストの投げ方 agentインスタンスは DIで入れておくと楽だし、 Symfony的に自然 https://symfony.com/doc/current/ai/index.html
26 基本的なリクエストの投げ方 作った$messagesを セットされた$agentに call()させる!それだけ! https://symfony.com/doc/current/ai/index.html
27 基本的なリクエストの投げ方 応答を取得してゴニョる https://symfony.com/doc/current/ai/index.html
設定ファイルにお任せできること
29 弊Appの設定例 config/packages/ai.php
30 弊Appの設定例 利用するプラットフォーム(LLMベンダー)は サクッと設定&乗り換えできる config/packages/ai.php
31 弊Appの設定例 複数のagent設定を持つことが可能で config/packages/ai.php
32 弊Appの設定例 リクエストのベース設定も簡単に指定OK (システムプロンプト、利用できるTools) config/packages/ai.php
33 弊Appの設定例 依存注入している様子が こんな感じになる
Toolsの用意
https://openai.com/ja-JP/index/unrolling-the-codex-agent-loop/
36 $agent->call()に「利用可能なtools」を添付しておく • 今回で言うと、 モデルに「Slack検索ツールが利用可能」という事を 最初のリクエストで提示している • そのため、 (agentは何も複雑な思考をしていないのに) モデルが気の済むまで「この検索よろしくね!」と
試行錯誤をしてくれるようになる
◦◦について教えて〜 弊App LLMの何か (AnthropicのAPIとか)
◦◦について教えて〜 ちなみに、 Slack検索ツールもあるよ 弊App LLMの何か (AnthropicのAPIとか)
OK、〇〇ね〜 弊App LLMの何か (AnthropicのAPIとか)
Slackで ◯◯検索して結果plz 弊App LLMの何か (AnthropicのAPIとか)
◯◯ [検索] Slack API 弊App ◯◯ とは〜 ◯◯ △□ 本当の◯◯
LLMの何か (AnthropicのAPIとか) 弊App ◯◯ とは〜 ◯◯ △□ 本当の◯◯
LLMの何か (AnthropicのAPIとか) 弊App △□についても調べて
何度も何度も往復する 弊App LLMの何か (AnthropicのAPIとか) Agentic Loop!
45 が、とても簡単に手に入る
46 Tools
47 Tools Class Attributeで、 ツール名と説明を付けて
48 Tools __invoke()メソッドを 実装すればOK
49 Tools - 余談 1クラスで 複数メソッドを 登録することも出来るし https://symfony.com/doc/current/ai/components/agent.html#tool-return-value
50 Tools - 余談 より精緻な パラメータの 提供もできる https://symfony.com/doc/current/ai/components/agent.html#tool-return-value
Toolsの利用とイベント(オブザーバー)
52 Toolsの利用とイベント(オブザーバー) • ユーザーは、高度な出力が期待できる場合なら比較的長い待ち時間にも 寛容になりやすい。ただし一般には、「なぜ待っているのか」を知りた いと考える。タスクの内容を説明したり、テキストでプロセスの流れを 説明したりすることで、ユーザーに状況を伝え続けることができる。 • ストリーミング表示、待機中にどのタイミングで情報を示すかの調整、 進捗インジケーターのような機能は、ユーザーの目的や利用状況に応じ
て選択的に使うべきである。適切に使えば、明確さと信頼を高められ る。 [AIインターフェースデザイン ―AI時代の対話・可視化・制御の原則 第4章]より
None
None
55 symfony/ai-agentの場合 • Toolsの利用に関するイベントが自動で発火されている • それらをリッスンすることで、 ユーザーに「今なにが起きているのか」の通知に(も)利用できる
56 Tools関連イベント
57 Tools関連イベント Toolの「呼び出し」「完了」の リスナーとして登録
58 Tools関連イベント • 今回は小さいアプリなので実装を端折って、 「利用されるToolはSlack検索しかない」という大胆設計! • 利用開始イベント => 「Slackを検索中」 •
実行完了イベント => 「検索結果を分析しています」
以上です!
60 いかがでしたか? • 一般的な「FWの知識・資産」をそのまま使える感じ良い◎ • DBの検索とかファイルの操作とかAPI連携とか、 そのまま「Toolsとして使う」が出来る • symfony/tuiとか繋ぎこんだら面白いことが出来そうですね!
61 関連読み物 • Symfony AI - Agent Component (Symfony Docs)
https:// symfony.com/doc/current/ai/components/agent.html • Symfony AI Bundle使ってみた - AIチャット編 - #LLM - Qiita https://qiita.com/ippey_s/items/7a6ac28d513bac9ca5e3 • symfony/aiとlaravel/boost - Speaker Deck https:// speakerdeck.com/77web/boost • symfony/mcp-bundleで、既存アプリケーションもお手軽にMCPサーバー 化 - Speaker Deck https://speakerdeck.com/o0h/phpconkagawa-lt-6
おしまい! お付き合いいただき ありがとうございました!!