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
hideki kinjyo
PRO
August 19, 2026
Programming
140
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
phperだってパンチカードでコーディングしたい
o0h
PRO
0
230
yield再入門 #phpcon
o0h
PRO
0
1.8k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
450
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
3
410
ソースコード→AST→オペコード、の旅を覗いてみる
o0h
PRO
1
380
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
640
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
300
夢の無限スパゲッティ製造機 #phperkaigi
o0h
PRO
0
1.1k
PHPer Book Revue 「雑に作る」 #phperkaigi
o0h
PRO
0
460
Other Decks in Programming
See All in Programming
残高管理から台帳サービスへの進化
artoy
0
170
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
360
APNsからLive Activityを開始する話
yumnumm
0
150
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
630
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
21
21k
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
320
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
180
The Rails Doctrine Decade
koic
2
520
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
460
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
360
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
730
WENDY [Excerpt]
tessaabrams
14
40k
Technical Leadership for Architectural Decision Making
baasie
3
590
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Raft: Consensus for Rubyists
vanstee
142
7.7k
RailsConf 2023
tenderlove
30
1.6k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
260
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
おしまい! お付き合いいただき ありがとうございました!!