Upgrade to Pro — share decks privately, control downloads, hide ads and more …

顧客体験を加速させるチャットボットで始めるAIエージェント入門 / Introduction ...

Avatar for shuntaka shuntaka
November 27, 2025
1.6k

顧客体験を加速させるチャットボットで始めるAIエージェント入門 / Introduction to AI Agents: Starting with Chatbots to Accelerate Customer Experience

Avatar for shuntaka

shuntaka

November 27, 2025
Tweet

More Decks by shuntaka

Transcript

  1. ⾃⼰紹介 2 • 2016年 ⾦融情報ベンダー⼊社 バックエンド ◦ 株価配信Web API開発 • 2019年 クラスメソッド⼊社

    ◦ CX/IoT事業部にてIoT案件を複数 • 2024年 製造ビジネステクノロジー部担当 ◦ R&D業務/サーバーサイド/RAG/AI Agent開発 • 部署 ◦ 製造ビジネステクノロジー部 • 名前(shuntaka) ◦ 髙橋 俊⼀ • 出⾝‧住まい ◦ 東京 詳細はhttps://shuntaka.dev/whoを⾒てね
  2. AIエージェントとは 6 自律的を分解すると Reasoning(推論) + Action(行動) という要素がより強い [GoogleCloud|AI エージェントとは](https://cloud.google.com/discover/what-are-ai-agents) 簡単に言えば自律的に目標を達成

    するために行動できるAIシステム [OpenAI AGI 5段 階](https://www.bloomberg.com/news/articles/2024-07-11/openai-sets-levels-to-track-progress-toward-su perintelligent-ai) アシスタントとエージェントの境界は 特に連続的でグラデーションがあると 言える
  3. AI-SDK 9 ‧TypeScript向けAIツールキット ‧Next.jsの開発元のVercelが提供 ‧AIプロダクト構築に必要な機能を揃えたOSS SDK ‧⼤体9ヶ⽉毎にv1→v3 v3→v4 v4→v5と約9ヶ ⽉ごとにメジャーが進み、機能とAPI設計が継

    続的に最適化 メジャー リリース時期 ※1 v1 2023-06-15 v2 2023年後半 ~ 2024年初頭 v3 2024-03-01 v4 2024-11-18 v5 2025-07-31 ※ 公開告知を参考としており、Alpha/Beta段階は含みません
  4. 当時(25年5⽉)の技術選定の観点 FW 言語 領域 主な特徴 見送った理由/採用理由 Chainlit Python FE,BE ・LangChainがBEに使える

    UI側は考えなくて良い ・ストレージ統合 ・UIカスタマイズ ・TSエンジニアが組織に多い Open WebUI TS FE リッチなChatUI WebSocketが必要でApp Runnerが非 対応のため Mastra TS (FE),BE ・BEで書いたAgentsをFEで使 える ・o11y機能 ・AI SDKの上位レイヤー担うコ ンセプト ・ストレージ統合 当時Bedrock呼び出しをAgentsに委ね ており、Prompt cachingなど問い合わ せ時のカスタマイズが出来なそう ...だっ たため AI SDK (採用) TS FE,BE FE: useChatを使ったUIカスタ マイズ性を残しつつ汎用的な API BE: AIモデル問い合わせの汎 用的なAPIを提供 ・useChatを使った簡単なチャット UI構 築が可能 ・ツールの実行をBE->FEにStreaming 返す機能が良い ・Bedrockへ柔軟な呼び出し可能
  5. 18 最終回答までに過程をストリーミングし体験向上 最終的な成果物が出来るまでの時間 は変わらないが、UXが段違い ⼀⽅でユーザーが⾒て⽌めるきっか けになるような本質的な情報を出⼒ すべき ※ TTFT …

    ユーザーがクエリを⼊⼒した後、モデルの出⼒を表⽰し始める速度 󰢏 呼び出す関数の引数情報 → 期間などのミスに気付ける 󰢏 計画の情報、思考の過程 → ⽅針のミスに気付ける 󰢃 定型メッセージ(〇〇中です...) → ユーザーが意図しない回答になる 可能性があり。単にチャットのTTFT を早くすれば良いわけではない。
  6. Prompt caching 19 tools 前⽅⼀致で キャッシュ 7,000トークン 94トークン 変動しやすいトークン 静的なので環境要因

    がなければヒットす る https://aws.amazon.com/jp/blogs/news/effectively-use-prompt-caching-on-amazon-bedrock/ system user
  7. CRIPだとキャッシュが散らばる 20 tools → systemまででキャッシュポイント を⽣成し、キャッシュを確認 クロスリージョンプロファイルだとキャッ シュ書き込んだリージョンに刺さらないと キャッシュが読み込まれない挙動も確認し た

    > プロンプトキャッシュは、クロスリージョン推論( CRIS)と併用できます。(中略 ) 需要が集中する時間帯 には、これらの最適化によりキャッシュ書き込みが増加する可能性があります。
  8. 6⽉ Sonnet4 Bedrock利⽤料(開発や利⽤) 21 約3割程度は削減効果があった (削減額 = Cache Read ×

    $2.70 − Cache Write × $0.75 = 13.6M × $2.70 − 1.4M × $0.75 = $36.7 − $1.1 ≒ $35.6)
  9. plan-and-executeフローの実装 24 https://langchain-ai.github.io/langgraph/tutorials/plan-and-execute/plan-and-execute/ 流れは以下の通り 1. 計画⽴案 2. サブタスク回答 3. 最終回答作成

    タスクを明確なステップに分解ため にLLMに複数回問い合わせるケース がある 特に内省を指定回ループで回答精度 を上げる。
  10. 時間がかかることへの対策 28 28 WorkflowでLLMに複数回問い合わせをすると、 インタラクションがなく体験が悪化 → 定型⽂章を表⽰ → 慣れてしまうと遅いだけで体験は悪い...😭 参考:

    https://ai-sdk.dev/docs/ai-sdk-ui/streaming-data writer.write({ type: 'data-notify-plan-started', id: 'plan-start', data: { message: '計画を作成中 ...', }, transient: true, }); const plan = await planNode({ question, pastMessages, }); writer.write({ type: 'data-notify-subtasks-started', id: 'subtasks-start', data: { totalTasks: plan.subTasks.length, message: '検索中...', }, transient: true, }); const subTaskResults = await execSubTaskListNode({ plan, question, pastMessages, }); writer.write({ type: 'data-notify-answer-started', id: 'answer-start', data: { message: '最終回答を作成中 ...', }, transient: true, }); const streamResult = await finalAnswerNode({ subTaskResults, question, pastMessages, }); writer.merge(streamResult.toUIMessageStream()); ※ 通知目的なら会話履歴に含めない設定 が必要!
  11. 評価やデバッグをするならo11yツールは必須 30 +import * as ai from 'ai'; import {

    convertToModelMessages, - generateObject, type ModelMessage, - streamText, type UIMessage, type UIMessageStreamWriter, } from 'ai'; +import { wrapAISDK } from 'langsmith/experimental/vercel'; +const { streamText, generateObject } = wrapAISDK(ai); 後⼊れでもimport差し替えとAPIキーの環境変数登録 で対応完了 👉 ただ、LLM呼び出しを⼀つのトレースにまとめたりは 多少実装が必要だが、AIコーディングエージェントを 使えばすぐ実装してくれる。 デバッグはエラーメッセージを読むのとは異なる⼤量 の⾃然⾔語を読むことになる。⾃然⾔語をJSONロガー で読むのはかなり負荷が⾼い。複雑であるほど必須。 langfuseはdocker composeでローカルにたてられる ので、最低ローカルは⼊れた⽅が良い。