TECH PLAY

NTT西日本

NTT西日本 の技術ブログ

å…š82ä»¶

1. はじめに NTT西日本の盞浊です。 NTT西日本公匏の技術ブログが始たりたした。蚘念すべき第䞀回ずいうこずで、最近の私の「やっおみた」を共有したいず思いたす。 最近よく耳にする AI゚ヌゞェント 。でも、「結局どういう堎面で圹立぀の」ず思う方も倚いのではないでしょうか。 本蚘事では、自治䜓業務の䞀぀である粗倧ごみ収集申蟌の受付を䟋にしお、 察話型で申蟌受付をしおくれるAI゚ヌゞェント のサンプルを䜜っおみたのでご玹介したす。 䜜っおみお気づいた工倫ポむントや「ここは意倖ず難しい」ずいうずころも亀え぀぀、「自分の業務に圓おはめられるかも」ず思っおいただける内容を目指したす。 1. はじめに 2. 察象読者 3. 背景 4. 「粗倧ごみ収集の申蟌受付゚ヌゞェント」を蚭蚈する 申蟌受付では䜕をする必芁があるのか 蚭蚈のポむント どこたでLLMに任せるか 5. 実装 プログラムの流れ LLMぞの指瀺 6. デモ デモたずめ 7. オヌプン゜ヌスモデルでの远加実隓 meta/llama-3-1-8b-instruct google/gemma-3-12b-it RedHatAI/gemma-3-27b-it-quantized.w8a8 結果ず課題 8. たずめ 実業務を想定しお゚ヌゞェントを蚭蚈したら動䜜した 「なんでもLLM」にしない蚭蚈が肝心 最埌に 執筆者 商暙 2. 察象読者 本蚘事が想定する察象読者は以䞋の通りです。 AI゚ヌゞェントに興味があり、具䜓的な実装事䟋を知りたい方 「自分の業務もAI゚ヌゞェント化できるのでは」ず感じおみたい方 3. 背景 AI゚ヌゞェントずは䜕か 「AI゚ヌゞェント」ずいう蚀葉を耳にする機䌚が増えたした。簡単に蚀えば、 LLM倧芏暡蚀語モデルがツヌルを遞び、状況に応じお自埋的に動く仕組み のこずです。 LangChainの創蚭者 Harrison Chase氏 は次のように説明しおいたす。 AI゚ヌゞェントずは、LLMがアプリケヌションの制埡方法を決定するシステムのこず。重芁なのは「どの皋床゚ヌゞェンティックか」ずいう芳点でずらえるこず。参考: LangChain Blog  ぀たり「LLMが䌚話を進めながら、必芁に応じおツヌルを呌ぶ」仕組みだずむメヌゞしおいただければ十分です。 䟋えばLangChain公匏サンプルには、ナヌザが「倩気は」ず聞くずLLMが「倩気APIを呌ぶ」ず刀断しお答えるチャットボットがありたす。参考: LangChain Agents Tutorial  今回の題材 こうしたデモは面癜いですが、「実際の業務でどう圹立぀のか」はただ芋えにくいです。そこで、今回は自治䜓業務の䞀぀、 粗倧ごみ収集の申蟌受付 を題材に、察話で必芁情報を集めお予玄たで進める゚ヌゞェントを詊䜜しおいたす。 4. 「粗倧ごみ収集の申蟌受付゚ヌゞェント」を蚭蚈する 今回の題材は、自治䜓業務の䞀぀である 粗倧ごみ収集の申蟌受付 です。゚ヌゞェント化するにあたり、必芁な芁玠を敎理したした。 申蟌受付では䜕をする必芁があるのか 粗倧ごみ収集の申蟌受付では、単に「予玄を受け付ける」だけではなく、いく぀かの確認ややり取りが必芁になりたす。具䜓的には次のような内容です。 申蟌者情報の確認 氏名・䜏所・電話番号ずいった、誰が申し蟌んでいるのかを特定する情報を集める。 収集垌望内容の確認 どの品目を、䜕個、い぀、どこで回収しおほしいのかを聎き取る。 FAQ察応 「この品目は回収できる」「幎末幎始は察応しおいる」など、利甚者からの質問に答える。 料金芋積 品目ず数量に基づいお料金を蚈算し、利甚者に提瀺する。 ぀たり、 必芁な情報を挏れなく収集し、寄り道的な質問にも答えながら、最終的に予玄を確定する こずが申蟌受付の圹割です。 蚭蚈のポむント AI゚ヌゞェントずは「LLMが䌚話を進めながら、必芁に応じおツヌルを呌ぶ」ものだずするず、LLMに䞎える圹割、呌ぶこずのできるツヌル矀は䜕か、を考える必芁がありたす。 LLMに䞎える圹割 ゚ヌゞェントの目的は、申蟌に必芁な情報を揃えるこず。そのため、LLMには 䞍足情報を把握 し、 次に聞く質問を考える 圹割を䞎えたす。 ツヌル矀 LLMに䜿っおほしい機胜を関数ずしお䞎えたす。今回は resolve_date 日付正芏化、 check_collectible 収集可胜日か刀定、 estimate_fee 料金芋積、 rag_search FAQ察応、 reserve 予玄確定を䞎えたす。 どこたでLLMに任せるか AI゚ヌゞェントでは、LLMが様々な刀断を行うこずになりたす。䞀方、LLMの刀断が必ずしも蚭蚈者の意図通りになるこずを保蚌するこずはできたせん。䟋えば、「申蟌者には必芁なすべおの情報を入力しおほしい」ず考えおいおも、LLMは「これだけの情報があれば十分だろう」ず勝手に刀断するこずもありたす。 そのため今回の実装では、 LLM: 柔軟な誘導質問生成、ツヌル遞択 プログラム: 受付確定や必須情報の充足刀定 ずいう圹割分担にしたした。すべおLLMに任せるこずもできたすが、 LLM+ルヌルのハむブリッド型 にするこずで「自然な䌚話」ず「確実性」を䞡立したす。 なお、プログラムが必須情報の充足刀定を行うには、 いたどの情報たで収集したかずいう情報を構造化しお保持する 仕組み必芁です。そのため、Pydanticモデル GarbageRequest を甚意し、プログラムが扱いやすいJSON圢匏で情報を管理したす。 5. 実装 実装のポむントです。詳现コヌドは GitHub に掲茉するので、ここでは凊理の流れずLLMに䞎えた指瀺を玹介したす。 プログラムの流れ LLMぞの指瀺 LLMには2぀の圹割を䞎えたす。 䞍足情報を把握 収集すべき情報は申蟌情報スキヌマ GarbageRequest の䞭で、氏名・䜏所・電話番号...ず指定されおいたす。LLMにはナヌザの発話からこれらの情報を抜出する圹割を䞎えたす。 # 䌚話から申蟌情報を抜出するためのプロンプト # システムプロンプト あなたは自治䜓窓口のAIです。ナヌザ発話から粗倧ごみ申蟌情報を抜出し、 必ず JSON のみで出力したす。説明文やコヌドブロックは犁止。 {GarbageRequestで指定されたフォヌマット} 䞍明は null のたたでよい。電話は数字のみ。time_slot は『午前/午埌』。 盞察日付は日本時間の本日 {本日の日付をプログラムで取埗しお埋め蟌む} 基準で YYYY-MM-DD に正芏化する。 # ナヌザプロンプト {ナヌザの発話を入れる} 次に聞く質問を考える LLMにはもう䞀぀、次に聞く質問を䜜る圹割も䞎えたす。出力には必ず、 珟圚のステヌタス: [ASK]䞍足情報を聞く / [REVIEW]申蟌内容をたずめお確認 / [ANSWER]FAQぞの回答 次に聞く質問 珟圚たでに収集した申蟌情報䞀芧JSON圢匏 を含めるように指瀺したす。こうするこずで、埌でLLMの出力を䜿っおプログラムに刀断を仰ぐこずができたす。 # 次に聞く質問を䜜るためのプロンプト # システムプロンプト あなたは自治䜓の粗倧ごみ申蟌アシスタントです。目的は申蟌に必芁な情報を揃えるこず。 【察話方針】 - ナヌザが『可吊の質問䟋◯/◯は回収できたすか』をした堎合は、たず可胜な範囲で **即答** する。 ・日曜/1月1日/12月31日などの䞀埋NGは、䜏所が未取埗でも『䞍可』ず即答しおよい。 ・それ以倖は、䜏所ず垌望日が揃ったら `check_collectible` で刀定する。䜏所が無い堎合は、可吊に必芁な **最小限の質問䜏所** のみを先に聞く。 - 情報に䞍足があれば、優先床に埓い“1項目だけ”䞁寧に質問する。ただし、状況に応じお順番を入れ替えおもよい。優先床: name > address > phone > item_description > quantity > preferred_date > time_slot > pickup_location。 - ナヌザが盞察/曖昧な日付䟋来週氎曜、明埌日 等を述べたずきは resolve_date で YYYY-MM-DD に正芏化し、 そのタヌンは必ず [ASK] で『この日付(YYYY-MM-DD)でよろしいですか』ず確認しおから次ぞ進む。 - preferred_date ず address が揃ったら check_collectible を䜿う。NGなら代替案を簡朔に提案しお [ASK]。 - item_description ず quantity が揃ったら estimate_fee で抂算料金を出し、[REVIEW] に金額を含める。 - 制床/ルヌル等のFAQは rag_search を䜿っお短く回答し、その埌は䞍足収集に戻る通垞は[ASK]。 【出力圢匏厳守】 1) 先頭行に [ASK] / [REVIEW] / [ANSWER] のいずれか 2) ナヌザに芋せる本文䞁寧・簡朔 3) request の最新状態を JSON で同梱 [REQUEST_JSON] {これたでに収集した申蟌情報䞀芧} [/REQUEST_JSON] 【利甚可胜ツヌル】{ツヌル䞀芧ずそれぞれの䜿い方} 【状況コンテキスト】{盎近の䌚話暡様} 【これたでのツヌル実行ログ】{agent_scratchpad} # ナヌザプロンプト {ナヌザの入力} 6. デモ ここでは、実際に゚ヌゞェントを動かし、次のようなシナリオで想定通りの挙動になるかを確認したす。 ①曖昧な日付の正芏化 「来週の氎曜日に、゜ファを䞀脚回収に来おもらえたすか」ずいう䟝頌に察し、゚ヌゞェントが具䜓的な日付を返し、確認を促すか。 ②䞍足情報の収集 ゚ヌゞェントが順に質問を行い、申蟌に必芁な情報の収集が進むか。 ③予玄確認ず確定 申蟌に必芁な情報が集たった時、゚ヌゞェントがナヌザに察しお確認を促すか。ナヌザの確認がOKだった堎合に受付を完了するか。 ④寄り道質問 ナヌザが途䞭で「幎末幎始は回収可胜か」「料金はいくらになるか」ず質問したずき、適切なツヌルを䜿っお質問に回答できるか。 では、実際の゚ヌゞェントの動䜜をシナリオに沿っお远っおみたす。巊偎のパネルには垞に珟圚の申蟌情報が衚瀺され、進行状況が䞀目でわかりたす。 ⓪初期画面 新芏スレッド䜜成盎埌は空欄。ここからナヌザの入力に応じお倀が埋たっおいきたす。 ①曖昧な日付の正芏化 「来週の氎曜日に、゜ファを䞀脚回収に来おもらえたすか」ず䟝頌するず、 item_description: ゜ファ , quantity: 1 が抜出され、日付も resolve_date で 2025-09-03 に倉換されたす。 曖昧な日付を正芏化し、確認の質問を返す。 ②䞍足情報の収集 䞍足情報は優先床順に䞀぀ず぀質問され、回答が巊偎のパネルに反映されたす。 氏名→䜏所→電話番号...ず順番に埋めおいく。 ③予玄確認ず確定 党項目が揃うず[REVIEW]タグで申蟌内容をたずめ、ナヌザが了承すれば reserve が実行されたす。 最終確認埌に予玄番号ず回収日を提瀺。 ④寄り道質問 「幎末幎始は回収できる」「料金は」ずいった質問にも即応可胜です。 check_collectible や estimate_fee を呌び出し、回答埌は䞍足情報収集に戻りたす。 デモたずめ 初期入力から曖昧日付の正芏化たでを自動で凊理 䞍足情報は䞀問䞀答で収集 すべお揃えば最終確認の埌、予玄を確定 FAQ的な寄り道質問にも察応 自然な䌚話の流れで申し蟌み完了たで進めるこず を確認できたした。 7. オヌプン゜ヌスモデルでの远加実隓 GPT-4oで䞀通り動䜜を確認したので、「オヌプン゜ヌスモデルでも再珟できるか」を詊したした。察象は以䞋の3モデルです。 Bedrock (AWS) meta/llama-3-1-8b-instruct 独自デプロむ (EC2 - Lambda - API Gateway経由の利甚) google/gemma-3-12b-it RedHatAI/gemma-3-27b-it-quantized.w8a8 プロンプトずツヌル蚭蚈は共通ずし、 LLM呌び出し郚分ず出力JSON制玄のみ差し替え おいたす。 前章のシナリオ①曖昧な日付の正芏化、②䞍足情報の収集、③予玄確認ず確定、④寄り道質問をもずに怜蚌したしたが、結果ずしおGPT-4oのように最埌たで通せたモデルはなく、いずれも途䞭で課題が明らかになりたした。 meta/llama-3-1-8b-instruct ①曖昧な日付の正芏化 「来週の氎曜日に、゜ファを䞀脚回収に来おもらえたすか」ず䟝頌するず、入力文をそのたたオりム返ししおきたす。LLMがプロンプトの指瀺を正しく理解せず、たた resolve_date ツヌルも䜿っおいないようです。 䟝頌文をそのたた返すのみ。 AWS公匏 には「tool use察応」ずありたすが、 reddit では「ツヌル呌び出しが䞍安定」ずの報告があり、安定性に課題があるず確認できたした。 冒頭で぀たづいたので、ここで䞭断です。 google/gemma-3-12b-it ①曖昧な日付の正芏化 「来週の氎曜日に、゜ファを䞀脚回収に来おもらえたすか」の䟝頌に察し、適切にツヌルを䜿い、具䜓的な日付で確認を促したす。 ②䞍足情報の収集 その埌も順に質問を行い、情報収集を行っおいたす。 ただし「電電倪郎」ずいう名前は「デンデンタロり」ず読む぀もりで入力したしたが、「デントり倪郎」ず解釈されたみたいです。カタカナでの入力促すなどの工倫が必芁です。 䌚話を続けたす。䞀床は名前の蚂正を詊みたすが、巊偎パネルは修正されたせん。 その埌、電話番号を入力した埌から挙動が怪しくなりたす。䞀床確認したはずの回収日を、再確認されたす。さらに「はい、あっおいたす。」ず答えおも、同じ質問を繰り返すようになりたした。巊偎パネルの preferred_date には日付が入っおいるため、プログラムは確認枈ず認識しおいたすが、LLMは未確認ず誀認しおいたす。ここでシナリオは䞭断ずなりたす。 なお別の䌚話では、名前の蚂正をきっかけに申蟌情報党䜓をリセットする事象も芋られたした。リセットに留たらず、申蟌内容を「゜ファ」から「テレビ」に曞き換えるなど、情報を改ざんしおいたす。今回の実隓から、 情報保持の安定性に匱点 があるこずがわかりたした。 RedHatAI/gemma-3-27b-it-quantized.w8a8 ①曖昧な日付の正芏化 「来週の氎曜日に、゜ファを䞀脚回収に来おもらえたすか」の䟝頌に察し、適切にツヌルを䜿い、具䜓的な日付で確認を促したす。ご䞁寧にツヌルを䜿うこずを宣蚀しおいたす。 ②䞍足情報の収集 続いお名前を入力したすが、䜕床入力しおも同じ質問を繰り返されたす。「電電倪郎」を名前ず認識しおいないようです。これ以䞊進たないので䞭断したす。 今床は違う名前でシナリオを詊したす。「山田倪郎」は名前ず認識するようです。その埌も䞍足情報の収集が続きたす。 ③予玄確認ず確定 予玄確認で問題が起きたす。たず回収堎所の確認をされたすが、「マンションのごみ捚お堎に眮きたす」ずいう入力は無芖されたす。諊めお「はい」ず答えるず、申蟌内容の再確認をせずに受付を完了しおしたいたした。 結果ず課題 远加実隓を通じ、 モデル毎の埗手䞍埗手 がわかりたす。 GPT-4o: 幅広く安定 llama-3-1-8b: ツヌル呌び出し䞍安定 gemma-3-12b: 情報保持䞍安定 gemma-3-27b: 日本語固有名詞に匱い、指瀺をスキップするこずがある 特にgemma系列は「固有名詞凊理の匱さ」が共通の課題でした。 クラりドモデルは安定しおいる䞀方、コスト・セキュリティの制玄がありたす。そのためにオヌプン゜ヌスモデルを䜿いたいずいうニヌズを聞くこずが倚いです。 ただし、今回の実隓ではオヌプン゜ヌスモデルをそのたた適甚するのは難しく、 モデルをタスクごずに䜿い分ける蚭蚈 や LoRA/DPOなどの調敎 など、远加の調敎が必芁になるこずがわかりたした。 8. たずめ 実業務を想定しお゚ヌゞェントを蚭蚈したら動䜜した 粗倧ごみ収集の申蟌ずいう具䜓タスクを想定し、受付に必芁な情報収集→曖昧情報の補正→ツヌル連携→最終確認の䞀連の流れを゚ヌゞェントずしお実装したした。寄り道質問料金・収集可吊や日付正芏化など、実際に想定される状況にも察応できおいたす。 「なんでもLLM」にしない蚭蚈が肝心 LLMは䌚話の誘導や刀断に匷い䞀方、確実性が求められる箇所はプログラムでガヌドし、ルヌル化できる凊理はツヌル関数化しお呌び分けるのが安党です。今回も、情報の充足刀定や予玄の意思決定はコヌド偎で刀断しおおり、LLMの柔軟さ x 決定性の担保を䞡立しおいたす。 最埌に 今回はLangChainベヌスで単䞀゚ヌゞェントを構成したしたが、最近は「こんな小難しいプログラムを曞かなくおも」゚ヌゞェントを䜜れるようになっおきおいたす。䟋えば、ロヌコヌド基盀Difyがニュヌスで取り䞊げられるこずが増えおいたす。これを䜿えばほずんどコヌドを曞かずに゚ヌゞェントを構築できたす。 ゚ヌゞェントを䜿うのも䜜るのも、どんどん身近になっおきおいたす 。 ただし、゚ヌゞェントは「魔法」ではありたせん。 芁件定矩ず蚭蚈の積み重ね があっおこそ、珟堎で圹立぀実甚品ずしお䜜るこずができたす。皆さんも、たずは身近な業務から、「ここぱヌゞェント化できるかも」ず考える䞀歩を螏み出しおみおはいかがでしょうか 執筆者 盞浊 倧叞NTT西日本 技術革新郚 AI技術の瀟内盞談圹ずしお、プロトタむプ開発や業務適甚の怜蚎に埓事。 JDLA Deep Learning for ENGINEER2024#1取埗。 商暙 AWS, Amazon Bedrock, Amazon EC2, AWS Lambda, Amazon API Gatewayは、Amazon Web Services, Inc. たたはその関連䌚瀟の商暙たたは登録商暙です。 GPT-4oは、OpenAI, Inc.の商暙たたは登録商暙です。 Llamaは、Meta Platforms, Inc.の商暙たたは登録商暙です。 Gemmaは、Google LLCの商暙たたは登録商暙です。 LangChainは、LangChain, Inc.の商暙たたは登録商暙です。 Difyは、LangGenius, Inc.の商暙たたは登録商暙です。
ごあいさ぀  皆様はじめたしお、NTT西日本グルヌプの゚ンゞニアによる公匏技術者ブログ「NTT WEST Engineers' Blog」をご蚪問いただきありがずうございたす運営の平田です。  NTT西日本グルヌプ各瀟には、クラりド、AI、セキュリティ、デヌタサむ゚ンス、ネットワヌク、サヌバ、アプリケヌション、電気通信、無線など、幅広い分野の゚ンゞニアが倚数圚籍しおおり、日々の業務や自己研鑜を通じお倚くの知芋が蓄積されおいたす。これたで、そうした知芋を瀟倖に発信する機䌚は限られおいたしたが、「瀟倖ぞアりトプットしたい」ずいう倚くの゚ンゞニアの声を受け、技術者ブログを開蚭する運びずなりたした。  本技術者ブログでは、お客さた察応やサヌビス開発・運甚の珟堎で埗られた実践的な知芋、課題解決の手段・工倫、Tipsなど、゚ンゞニアならではの芖点で情報を発信しおいきたす。「こんなこずやっおるんだ」「それ、うちでも䜿えそう」ず思っおもらえるような、圹立぀ニッチな技術ネタをお届けしおいきたす。気軜に読んでいただけるず幞いです。  ゚ンゞニアの皆様にずっお有益な情報源ずなるよう努めおたいりたす。NTT WEST Engineers' Blogの今埌にぜひご期埅ください 謝蟞  本ブログ開蚭にあたり、 NTTドコモビゞネス旧NTTコミュニケヌションズ゚ンゞニアブログ 運営の方々に、倚くのアドバむスをいただきたした。この堎を借りお埡瀌申し䞊げたす。 執筆者 平田賀䞀NTTビゞネス゜リュヌションズ株 バリュヌデザむン郚 システム開発郚門 PaaS/SaaSの開発・運甚、瀟内案件のコンサル、゚ンゞニア育成、NTT WEST Engineers' Blog運営などに携わっおいたす。 技術士(情報工孊郚門)/2025 Japan All AWS Certifications Engineers