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
Symfonyが 簡単にAI agentになる
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
hideki kinjyo
PRO
August 19, 2026
Programming
120
1
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.6k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
400
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
3
400
ソースコード→AST→オペコード、の旅を覗いてみる
o0h
PRO
1
240
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
600
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
290
夢の無限スパゲッティ製造機 #phperkaigi
o0h
PRO
0
1k
PHPer Book Revue 「雑に作る」 #phperkaigi
o0h
PRO
0
450
俺にも私がAIと作った オススメの個人ツールを語らせてくれ
o0h
PRO
0
99
Other Decks in Programming
See All in Programming
FreeBSDでZabbixを動かす
kenkino
0
330
速習iPhone Duo対応
yuukiw00w
2
830
Heart of Swift Concurrency
koher
0
980
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
7
4.9k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
280
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
190
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
300
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
450
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
140
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
4
4k
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
100
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3.2k
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
540
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Navigating Weather and Climate Data
rabernat
0
530
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
Are puppies a ranking factor?
jonoalderson
2
3.9k
BBQ
matthewcrist
89
10k
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
おしまい! お付き合いいただき ありがとうございました!!