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
150
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
320
yield再入門 #phpcon
o0h
PRO
0
1.8k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
460
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
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
Workers Cache を知る
syumai
0
360
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
230
パスワード再設定メールのURLについて知っておこう
uyuki234
0
150
すこし踏み込む CancellationToken
htkym
2
1.7k
残高管理から台帳サービスへの進化
artoy
1
200
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
1
190
Agents on Rails - Rails at Scale 2026
irinanazarova
0
540
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.1k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1k
APNsからLive Activityを開始する話
yumnumm
0
170
golang-bob.pdf
iwatsukayura
0
130
Featured
See All Featured
Mind Mapping
helmedeiros
1
400
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
The Invisible Side of Design
smashingmag
301
52k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
560
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Building AI with AI
inesmontani
PRO
1
1.3k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Leo the Paperboy
mayatellez
10
2.4k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
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
おしまい! お付き合いいただき ありがとうございました!!