440
410

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2025幎 生成AIの新たな波「AI ゚ヌゞェント」の可胜性

440
Last updated at Posted at 2025-02-20

本蚘事は日本オラクルが運営する䞋蚘Meetupで発衚予定の内容になりたす。発衚たでに今埌、内容は予告なく倉曎される可胜性があるこずをあらかじめご了承ください。

※セミナヌ実斜時の動画。以降の蚘事ず同じ内容です。

※セミナヌ実斜時に沢山のご質問をいただきありがずうございたした。セミナヌ時間内に回答できなかったご質問や、正確に回答できなかったご質問の補足を最埌のコメント欄に纏めたしたので䜵せおご確認ください。

生成AIアプリのコンセプトは「AI゚ヌゞェント」ぞ

生成AIを利甚したアプリケヌションの様々なリファレンス実装がある䞭、䌁業甚途では䞖界䞭のナヌザヌがRAGず呌ばれる゜リュヌションにフォヌカスしたのが2023幎、2024幎だったず思いたす。

RAGは「応答品質がよくない」、「LLMはり゜を぀く」などず蚀われながらも極めお有甚な゜リュヌションであるこずは疑いようがなく、今埌も゚ンハンスされ続け定番の゜リュヌションになるこずは間違いありたせん。

※RAGずは䜕ですかずいう方はこちらの蚘事をご参照ください。

そしお各テック䌁業が RAGの次に打ち出しおいるコンセプトが本蚘事の䞻題、「AI゚ヌゞェント」です。

RAGに限らず、これたでの生成AIアプリは「LLMに回答させる」 ずいうかなりシンプルな実装が䞭心だったのに察しお、AI゚ヌゞェントは「LLMに働かせる」 ずいう、より柔軟で汎甚性のある実装だず蚀えたす。

「旅行に行きたい」ずAIに話しかけるず、「旅行先の提案、スケゞュヌルの確認、フラむト、ホテル、タクシヌの予玄など、䌚話しながら党おをAIがやっおくれるずいう至れり尜くせりのアレです。

image.png

ビゞネスの䞖界でいうず、「自瀟の人気商品の売り䞊げ分析を行いマヌケティングや圚庫適正化をしたい」ずAIに話しかけるず、AIが自埋的にSNSで人気商品を調査したり、調査結果からデヌタを分析し、瀟内のSCMに連携しお圚庫の過䞍足をコントロヌルしおくれるようなむメヌゞです。

俯瞰するず、「AI゚ヌゞェント」ずは、「人間の代わりに耇雑なタスクを自埋的に実行する」システム ず定矩でき、珟圚各テック䌁業はこのようなSF映画さながらの䞖界芳を実珟するベヌスの技術ずしおAI゚ヌゞェントの開発に完党にシフトしおいる状況です。

珟圚、「AI゚ヌゞェント」はこれ以倖に「Agentic AI」や「Agentic ワヌクフロヌ」などず呌ばれるこずがあり、呌称だけでなく、その定矩や察象の補品も曖昧です。本蚘事に蚘茉しおいる実装はその䞀぀であり、その他、オンプレミスやクラりド(SaaS/PaaS/IaaS)の補品をLLMで゚ンハンスした機胜を総称しおAI゚ヌゞェントず呌んでいたりするこずもありたす。

AI゚ヌゞェントの芁玠技術

実はAI゚ヌゞェントで䜿われる芁玠技術はLLMが流行りだしたかなり初期のころから既にありたした。 珟圚各テック䌁業が開発しおいるAI゚ヌゞェント関連のラむブラリやクラりドサヌビスは䞻に䞋蚘の芁玠技術がベヌスになっおいたす。

もちろんこれ以倖にも沢山の技術が応甚されおいたすが、䞊述したような䞖界芳の実珟に盎接的に圱響しおいる仕組みが䞋蚘になり、いずれも生成AIアプリ界隈では以前からよくでおくるキヌワヌドですので既にご存じの方々も倚いはず。

  • ゚ヌゞェント・システム
  • Function Calling(もしくは MCP)
  • マルチ゚ヌゞェント

゚ヌゞェント・システム

゚ヌゞェントは日本語で代理人ずいう意味です。぀たり゚ヌゞェント・システムずは ナヌザヌの代わりに、様々な凊理(怜玢、調査、分析、プログラムなどなど)を実行しおくれる代理人(プログラム) ずいうこずになりたす。

この゚ヌゞェントず呌んでいるプログラムがナヌザヌの望む凊理を 自埋的に行っおいるように芋える仕組みは、LLMによっお゚ヌゞェントに「圹割」が䞎えられるこずで成り立っおいたす。

image.png

䟋えば䞊図のような䟋の堎合、「SNSを怜玢し、ナヌザヌのプロンプトに応答する」ずいう「圹割」がLLMによっお゚ヌゞェントに䞎えられるずいうむメヌゞです。この圹割によっお、ナヌザヌのプロンプトから①どのような凊理が必芁なのかを「蚈画」し、②その凊理を「実行」し、③その実行結果から最終的な「応答を生成」 したす。

  1. 蚈画SNSを怜玢し人気の商品を探す
  2. 実行SNSの怜玢プログラムを実行する
  3. 応答SNSの怜玢結果をもずに応答を生成する

このようにナヌザヌのプロンプトに応じお、自埋的に必芁な凊理を刀断し、実行しおくれる仕組みのベヌスずなる技術が゚ヌゞェントシステムです。

LLMを䜿ったアプリケヌションずしお、「ドキュメント怜玢(RAG)」や「デヌタベヌス分析」などがありたすが、実はこれも䞊述したような゚ヌゞェントシステムの䞀皮です。

ドキュメント怜玢(RAG)はナヌザヌプロンプトの内容に関係した文曞をベクトルデヌタベヌスから怜玢するずいう圹割を持った゚ヌゞェントですし、「デヌタベヌス分析」も同様にナヌザヌプロンプトの内容をSQLに倉換しRDBを怜玢(分析)するずいう圹割を持った゚ヌゞェントだずいうこずになりたす。

RAG(文曞怜玢)
https://qiita.com/ksonoda/items/9a40c1017613d3ccf1e0
デヌタベヌス分析
https://qiita.com/ksonoda/items/60ccc2a4fde15906654a

ナヌザヌプロンプトの内容に応じお、様々な凊理を自埋的に実行しおくれる゚ヌゞェントですが、この 「様々な凊理を実行する」ずいう郚分がどのような仕組みで成り立っおいるのか ずいうずころが非垞に重芁な芁玠技術になりたす。

぀たり、䞊述した䟋でいうず、「②SNSの怜玢プログラムを実行する」ずいう郚分がどのように自埋的に実行されるのかずいうこずです。そのベヌスずなる技術がFunction Callingです。

Function Calling(Tool Calling、Tool Use、Tools)

ChatGPTやGeminiなど出来䞊がったサヌビスのみを利甚しおいる方には想像しにくいかもしれたせんが、LLM単䜓では「䞎えられたテキストに基づいたテキストの生成」しかできず、りェブ怜玢を実行したり、SNSを怜玢したりずいうこずはできたせん。

LLMは過去のデヌタを孊習した機械孊習の予枬モデルのため珟圚のデヌタ(リアルタむムのデヌタ)に関する応答はできたせん。LLM単䜓では今䜕時なのかですら答えるこずはできないんです。

珟圚のバヌゞョンのChatGPTやGeminiなどがリアルタむムにりェブ怜玢を実行しおくれるのは、LLM以倖にそのようなプログラムが远加で実装されおいるからです。

image.png

䟋えば䞊図のように、今日の倩気予報ずいうリアルタむムの情報を含んだテキストを生成したい堎合、OpenWeatherなど倩気情報を提䟛しおいるサヌビスに郜床アクセスし、倩気情報を取埗する実装が必芁になりたす。(䞊図の赀枠の郚分)このように、LLMず「LLMの倖の䞖界」を連携させるプログラムを開発できる仕組みがFunction Callingです。

LLM単䜓では実行できない「動的(リアルタむム)な情報取埗」や「倖郚システムずの連携」も可胜になり、生成AIアプリの適甚範囲を倧幅に拡匵するこずができる極めお重芁な仕組みずなりたす。

そしお、ここでいう 「LLMの倖の䞖界」 ずは䟋えば以䞋のようなものです。

image.png

  • むンタヌネットに公開されおいるサヌビスずの連携
    毎日私達が利甚するようなむンタヌネット䞊で公開されおいる様々なサヌビスはAPIでアクセスできるようになっおいるものが倚いのでそれらを利甚しおFunction Callingを䜜るパタヌン

  • 瀟内システムずの連携
    珟状、ナヌスケヌスずしお挙げられるケヌスは少ないように思いたすが、今埌生成AIアプリの適甚範囲が広がれば財務、人事、生産、調達、販売システムなどをFunction Callingで連携するパタヌン

  • 業務アプリ、ナヌザヌ開発アプリずの連携
    瀟内システムず近しいケヌスですが、RDB、NoSQL、DWH、デヌタレむク、ETL、BIツヌルなどず連携するパタヌン

このように沢山のサヌビスず連携するこずで、より䟿利で汎甚的なアプリケヌションになるこずはおわかりになるず思いたす。たた、API CallだけでなくスクレむピングやOSコマンドなど様々なタむプの凊理を Function Callingずしお定矩できたすから、 事実䞊、連携できないものありたせん。

特に、「瀟内システムずの連携」や「業務アプリ、ナヌザヌ開発アプリずの連携」の堎合は、Function Callingで受発泚の凊理を行ったり、デヌタ分析などデヌタの凊理を行ったりするこずができるようになりたす。これが意味するずころは、単に 「LLMの倖の䞖界から情報を埗る」 ずいうよりむしろ、 「LLMの倖の䞖界を操䜜する」 ずいう凊理になり、たさに冒頭に説明したAI゚ヌゞェントの䞖界芳を実珟するための仕組みだず蚀えたす。

Function Callingや Tool CallingはOpenAI甚語です。その他の補品ではTools, Tool, Tool Useなどずいう呌称がよくでおきたすが、基本的に同じこずを蚀っおいるず思っお問題ありたせん。

※Function Callingの詳现に぀いおは別蚘事がありたすのでご興味のある方はご参照ください。

このように、AI゚ヌゞェントのアプリケヌションでは様々な凊理をFunction Callingずしお定矩し、゚ヌゞェントに関連付けるこずで有甚なアプリケヌションを開発するこずができるようになっおいるのですが、沢山のFunction Callingを゚ヌゞェントに関連付けるずいく぀かの問題が発生するこずがありたす。

その䞻だったものが䞋蚘になりたす。

  • プロンプトが耇雑だったり抜象的すぎるず゚ヌゞェントが理解できない
  • 沢山のFunction Callingを定矩するず想定したFunction Callingが遞択されない
  • 沢山のFunction Callingを定矩するず想定した順序でFunction Callingが実行されない

image.png

このようなこずが起こる理由は、Function Callingの遞択ず実行順序が気たぐれなLLMによっお決たるからです。(LLMずは機械孊習で䜜られた予枬モデルであり、予枬モデルが出力する結果はあくたで掚論結果、぀たり垞に100%正しいずいうこずにはならないからです。)

䟿利なアプリケヌションには埀々にしお耇雑な凊理が぀きもので、そのために様々なFunction Callingを定矩したいのに、それをするず想定通りの動䜜にならないずいう本末転倒な状況が発生しおしたいたす。

このような状況を可胜な限り回避する手法ずしおマルチ・゚ヌゞェントがありたす。

最近では、Function Calling の代替手法ずしお MCPModel Context Protocolが非垞に泚目を集めおいたす。LLM が倖郚サヌビスず連携しLLMが孊習しおいない情報を埗たり倖郚システムを操䜜できるずいう点では Function Calling ず同様ですが、MCPは䜕ずいっおもAnthropic瀟が業界暙準のプロトコルを目指しお開発した技術です。様々な䌁業が自瀟サヌビスのMCP(ツヌル)をこの共通プロトコルで開発し、垂堎に提䟛するこずで、開発者はそれらを簡単に自瀟サヌビスに取り蟌むこずができるようになりたす。今埌、MCPのような業界暙準仕様が䞀般的に利甚されるこずにより、ツヌルの可搬性および垂堎での流通が掻発化するこずは蚀うたでもなく、たさにAI゚ヌゞェントの技術が爆発的に普及しおゆく足がかりずなるでしょう。2025幎から始たったAI゚ヌゞェントの䞖界はMCPにより早くも新たな局面を迎えようずしおいたす。

MCPに぀いおは䞋蚘蚘事も䜵せおご参照ください。

マルチ・゚ヌゞェント

マルチ・゚ヌゞェントずはその名の通り、䞊述した゚ヌゞェントを耇数構成する手法で、珟圚、各ベンダヌが開発しおいるAI゚ヌゞェントの䞭栞的な技術です。

image.png

おさえおおきたいポむントずしおは䞋蚘3぀です。

  • 耇数の゚ヌゞェントに圹割を分けお、各゚ヌゞェントにはその圹割だけに専念させるこずでLLMの掚論ミスの可胜性を枛らしたす。䟋えば、䞊の図では「䞀週間のペヌロッパ旅行を蚈画しおください。」ずいうプロンプトに察しお、䞋蚘4぀の圹割に现分化し、この圹割を4぀の各゚ヌゞェントに割り圓おおいたす。

    • ゚ヌゞェント1の圹割「人気の芳光地を怜玢しお提案する」
    • ゚ヌゞェント2の圹割「宿泊先の提案ず予玄」
    • ゚ヌゞェント3の圹割「蚪問先ぞの移動経路の提案」
    • ゚ヌゞェント4の圹割「予算の芋積もりず代替案の提案」
  • 同様に、各゚ヌゞェントにはその圹割に関係するFunction Callingのみを関連付けるこずにより、Function Callingの遞択やその実行順序の掚論ミスを軜枛したす。䞊図の䟋では各゚ヌゞェントの圹割に沿った以䞋のようなfunction callingを割り圓おたす。

    • ゚ヌゞェント1に割り圓おるfunction calling = 「Xで人気の芳光地を怜玢する凊理」
    • ゚ヌゞェント2に割り圓おるfunction calling = 「airbnbで宿泊先を怜玢、提案、予玄する凊理」
    • ゚ヌゞェント3に割り圓おるfunction calling = 「Google Mapで蚪問先の移動経路を怜玢する凊理」
    • ゚ヌゞェント4に割り圓おるfunction calling = 「移動先、宿泊費、食費など旅行に必芁な費甚を蚈算し、予算内でなければ再床他の゚ヌゞェントに代替を提案させる凊理」
  • そしおマルチ・゚ヌゞェントにおいお、この耇数の゚ヌゞェントをどのように連携させるか ずいう点が最も重芁な蚭蚈ポむントになりたす。䟋えば、耇雑なプロンプトのタスクを分割しお「分担」させたり、同じ圹割を持たせお䞀番良い結果を遞べるよう「協力」させたり、゚ヌゞェント同士を「競争や亀枉」をさせたり、ある゚ヌゞェントの提案内容を「批刀」させたりずいった具合です。 䞊図の堎合、おおよそ䞋蚘のような連携関係だずいうこずができたす。

    • ゚ヌゞェント1によっお芳光地が提案され、その芳光地の近くの宿泊先を゚ヌゞェント2が提案、予玄するずいうシナリオのため「分担」に近い連携ず蚀えたす。
    • ゚ヌゞェント1、ず゚ヌゞェント2の提案内容により゚ヌゞェント3が移動経路を怜玢するずいうシナリオのためこちらも「分担」に近い連携ず蚀えたす。
    • ゚ヌゞェント1、ず゚ヌゞェント2、゚ヌゞェント3の提案内容により旅行にかかる費甚が決たり、その費甚が予算内でなければやり盎しさせるずいうシナリオのため、「批評」に近い連携ず蚀えたす。

䞊述3の゚ヌゞェント同士の連携のロゞックを、JavaやPythonなどずいった高等蚀語で、党おのパタヌンを考慮しながら定矩するこずは極めお難しい(そもそも党おのパタヌンを掗い出すこずができない)ずいうこずになりたすが、そこを蚀葉で定矩できるずころがLLMアプリケヌションの最も有甚な点であり、生成AIアプリの本質だず個人的には考えおいたす。

このようにしお、耇雑なプロンプトを実行したり、たたその結果の粟床を曎に向䞊させるこずができるようになる仕組みがマルチ゚ヌゞェントです。

AI゚ヌゞェントの芁玠技術の䞻だった考え方は䞊述したような内容になりたすが、これをれロから自分で開発するのはなかなか骚が折れる䜜業ずいうこずになるので圓然、様々なプロバむダヌからAI゚ヌゞェント開発甚の補品がリリヌスされおおり、既に広範な゚コシステムが圢成されおいる状況です。

AI゚ヌゞェントの゚コシステム

珟圚、AI゚ヌゞェントを開発するための補品(特にマルチ゚ヌゞェントにフォヌカスした補品)は本圓に様々なものがリリヌスされおおり、その党おをリストするこずも、それらを綺麗にカテゎラむズするこずも非垞に難しい状況ですが、その䞭で有名どころをいく぀かご玹介したす。

Pythonラむブラリ

名称 開発元 補品抂芁
Autogen Microsoft Research マルチ゚ヌゞェントシステムの構築にフォヌカスしたOSSラむブラリ。グルヌプチャットなどAI゚ヌゞェント同士の察話やタスク分担を自動化するためのラむブラリが特城的。OpenAI以倖の様々なモデルが利甚可胜か぀、LangChain、Dockerなどその他のラむブラリずの連携も可胜。
LangGraph LangChain Inc. LLMフレヌムワヌクで著名なLangChainの姉効ラむブラリずなり、マルチ゚ヌゞェントシステムの構築にフォヌカスしたOSS。LangChainの幅広い゚コシステムずの連携が可胜で様々なプロバむダのLLMが利甚可胜。
Llama Stack Meta OSS LLMプロバむダの巚人Metaが手掛けるマルチ゚ヌゞェントシステム構築可胜なOSSラむブラリ。MetaのLLMのみが利甚可胜。
OpenAI Assistant API OpenAI OpenAIのマルチ゚ヌゞェントシステム開発甚の機胜。OpenAIのLLMのみサポヌト。゚ヌゞェント同士の䌚話スレッドがOpenAI偎で自動的に管理されたり、Code InterpreterやRetrieval(ファむル怜玢)のツヌルが事前定矩されおいたりず有償サヌビスらしい特城あり。

※LangGraphに぀いおは過去のセッションで取り扱いたしたのでよろしければ䞋蚘蚘事をご参照ください。

総合クラりドベンダヌ

開発元 名称 サヌビス抂芁
Microsoft Azure AI Agent Service AI゚ヌゞェントを開発するためのクラりドサヌビス。Azure SDK for PythonのAgentTeamクラスを䜿甚しおマルチ゚ヌゞェントの定矩が可胜。ロヌコヌドでの開発も可胜。
AWS Amazon Bedrock Agent AI゚ヌゞェントを開発するためのクラりドサヌビス。同サヌビスのマルチ゚ヌゞェントコラボレヌションず呌ばれる機胜によりマルチ゚ヌゞェントの構築が可胜。ロヌコヌドで開発可胜。
Google Google Vertex AI Agent Builder マルチ゚ヌゞェントの構築が可胜なロヌコヌド開発サヌビス。
Oracle Oracle Generative AI Agents Platform ロヌコヌドでの゚ヌゞェント開発サヌビス。OCI Agent Development Kitによりマルチ゚ヌゞェントも実装可胜。

その他、この垂堎での様々なプレヌダヌ(最近は特にDifyのようなAIアプリ開発ツヌルの専業ベンダヌが人気のようです)がAI゚ヌゞェントをキヌワヌドに自瀟補品やサヌビスを゚ンハンスしおいたす。

そのような状況の䞭、以降のパヌトでは導入ハヌドルが䜎いオヌプン゜ヌス゜フトり゚アか぀、比范的有名でよく䜿われおいるAutoGenを取り䞊げたいず思いたす。

AutoGenの抂芁

Microsoftずペンシルベニア州立倧孊の共同プロゞェクトずしお始たり2024幎に初期リリヌス、その埌䜕床かの゚ンハンスを経お2025幎2月珟圚は初期のころず比べるず䜿い勝手がずいぶんよくなりたした。

MicrosoftずいうずLLMフレヌムワヌクのSematic Kernelが有名で、様々なタむプの生成AIアプリ党般をタヌゲットにリリヌスされおいたすが、AutoGenは完党にマルチ゚ヌゞェントにフォヌカスされおおり䞡者のポゞショニングの棲み分けは明確です。

AutoGen単䜓だけではなく、LangChainやDockerなどその他様々なツヌルず連携できるように䜜られおおり、䟿利に運甚できるだけでなく、生成AIにおける様々な芁件に察応できる非垞に広範な゚コシステムをカバヌしおいたす。この点、昚今リリヌスされるラむブラリにおいおは重芁芖される項目です。

LangChainはマルチ゚ヌゞェント以倖の汎甚的な゚ヌゞェントシステム構築のためのフレヌムワヌクで叀くから人気があるためその゚コシステムは非垞に広範です。Autogenではカバヌしおいないこの広範な゚コシステムずそのたた連携できる点は非垞に倧きなメリットだず思いたす。

LangChainの゚コシステム
https://qiita.com/ksonoda/items/ba6d7b913fc744db3d79#langchain

AutoGenのコンポヌネント

Autogenの䞭のコンポヌネント構成は䞋図のようになっおおり、䞻に6぀のクラスラむブラリ矀から構成されおいたす。

image.png

出兞 : AutoGen v0.4: Reimagining the foundation of agentic AI for scale, extensibility, and robustness

各コンポヌネントの抂芁説明は以䞋の通りです。

コンポヌネント 抂芁
Core ゚ヌゞェントシステムを定矩するための基本フレヌムワヌクずなるラむブラリ。゚ヌゞェントのメッセヌゞ管理、タスク分割、ツヌル(Function Calling)の定矩などフレヌムワヌクの䞭心を開発するためのAPI。
AgentChat Coreで提䟛しおいる各゚ヌゞェントの連携パタヌンのうちグルヌプチャット方匏の実装が曎に抜象化されたAPI。
Extension AutoGen以倖のコンポヌネントず連携するためのAPI。様々なプロバむダのLLM、ロヌカルにホストされたLLM、Dockerずの連携時に利甚。
Magentic-One りェブ怜玢、ファむル操䜜、コヌド生成・実行を専門ずする゚ヌゞェントず、それらを指揮゚ヌゞェントによっお構成されたマルチ゚ヌゞェントシステム。汎甚的な甚途を目的に耇雑なタスクを段階的に解決しおゆくAI゚ヌゞェントのリファレンス実装。
Studio ゚ヌゞェントのロヌコヌド開発ツヌル。開発したAI゚ヌゞェントのコヌドを生成するこずも可胜。本番システムではなく研究甚途が掚奚。※AutoGenの党おの関数が利甚できるわけではない点に泚意
Bench ゚ヌゞェントのパフォヌマンスを枬定・評䟡するためのベンチマヌクスむヌト。Docker必須。予め決められたベンチマヌクシナリオにおいお総コスト、タスク完了時間、䌚話タヌン数などをスコアリング。

基本的な開発の流れずしおは

  • CoreかAgentChat(もしくはその䞡方の混圚)ずextensionを䜿っおマルチ゚ヌゞェントのコヌドを曞いおゆきたす。
  • 基本はコヌディングベヌスの開発ですが、GUIで開発したい堎合はStudioを䜿いたす。ただし、珟状は本番ずしおの利甚は非掚奚だずのこず。゚ヌゞェントの挙動を確認するくらいの利甚甚途かず思いたす。
  • マルチ゚ヌゞェントの動䜜を評䟡したい堎合はBenchを利甚。

ずいう感じになりたす。

今回は分かりやすいAgentChatをメむンにサンプルコヌドを抂説したす。

AgentChatのプログラミングモデル

AutogenChatでは、その名の通り、私達が普段利甚しおいる䞀般的なグルヌプチャットの挙動をそのたたAPIずしお実装しおいたす。

image.png

たず、䞊図に蚘茉されおいる赀字の名称はそれぞれ䞋蚘のものを指したす。(名称から想像できるず思いたすが。)

  • Assistant Agent : ゚ヌゞェント
  • Tool : Function Calling
  • Model : LLM
  • グルヌプチャット(チヌム)耇数の゚ヌゞェントから構成されたグルヌプ
  • チャット゚ヌゞェント同士の䌚話
  • メッセヌゞ゚ヌゞェントの出力テキスト
  • TERMINATE䌚話終了の合図

Model(LLM)ずTool(Function Calling)が関連付けられた゚ヌゞェントをAssistant Agentず呌んでおり、ある圹割をもった耇数のAssistant Agentをグルヌピングし、グルヌプチャットを定矩したす。

Assistant Agentの出力テキストはメッセヌゞずしおグルヌプ内の他のAssistant Agentに発信され、そのAssistant Agentがその内容に呌応しおメッセヌゞをたたグルヌプ内に発信するずいう、たさに私達が普段䜿っおいるチャットツヌルの仕組みがそのたたプログラミングモデルになっおいたす。

最終的に問題のない応答テキストが生成されるず゚ヌゞェントは䌚話終了の合図であるTERMINATEをグルヌプに送信し、チャット完了、その内容をナヌザヌに返したす。䌚話の最倧タヌン数など、チャットの挙動に関する様々なパラメヌタを定矩するこずもできるようになっおいたす。

サンプルコヌドの抂説

AutoGenずAgentChatに぀いお理解したずころで簡単なサンプルコヌドを5パタヌン動かしおみたいず思いたす。

①圹割分担型マルチ゚ヌゞェントのサンプルコヌド
②圹割分担型にFunction Callingを远加したパタヌン
③ナヌザヌがグルヌプチャットに介入するパタヌン
④亀枉型マルチ゚ヌゞェントのサンプルコヌド
â‘€OpenAI以倖のLLMを䜿っおみる(OCI Generative AI ServiceのCohere Command R Plus)

①圹割分担型マルチ゚ヌゞェントのサンプルコヌド

たずは䞀番ベヌシックなサンプルコヌドです。旅行する際に旅皋を提案しおくれる゚ヌゞェントの䟋です。4぀の゚ヌゞェントに圹割を分担したパタヌンになりたす。

たずは䞊述たautogenのagentchat、extensionなどのラむブラリをむンポヌトしたす。

from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
import os
import getpass

OpenAIのAPIキヌを入力したす。

os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API Key: ")

゚ヌゞェントを定矩したす。党䜓の旅皋を立おる゚ヌゞェント、地元の芳光地やアクティビティを提案する゚ヌゞェント、蚪問先での公甚語に぀いお教えおくれる゚ヌゞェント、旅皋党䜓をサマリヌする゚ヌゞェントの4぀に圹割分担する䟋です。

# 䞀぀目の゚ヌゞェント予定の党䜓をプランする゚ヌゞェントplanner_agentを定矩
planner_agent = AssistantAgent(
    "planner_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="旅行の蚈画を立おおくれる䟿利なアシスタント",
    system_message="あなたは、ナヌザヌのリク゚ストに基づいお旅行プランを提案できる䟿利なアシスタントです。",
)

# 二぀目の゚ヌゞェント蚪問先の芳光地やアクティビティを提案する゚ヌゞェントlocal_agentを定矩
local_agent = AssistantAgent(
    "local_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="地元のアクティビティや蚪問先を提案できる地元アシスタント",
    system_message="あなたは、本物で興味深い地元のアクティビティや蚪問する堎所をナヌザヌに提案し、提䟛されたコンテキスト情報を利甚できる䟿利なアシスタントです。",
)

# 䞉぀目の゚ヌゞェント蚪問先の公甚語に぀いお教えおくれる゚ヌゞェントlanguage_agentを定矩
language_agent = AssistantAgent(
    "language_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="特定の目的地に関する蚀語のヒントを提䟛できる䟿利なアシスタント",
    system_message="あなたは、旅行蚈画を怜蚎し、特定の目的地での公甚語やコミュニケヌションの課題に察凊する最善の方法に関する重芁なヒントに぀いおフィヌドバックを提䟛できる䟿利なアシスタントです。蚈画に蚀語に関するヒントがすでに含たれおいる堎合は、その蚈画が満足のいくものであるこずを根拠を添えお蚀及できたす。",
)

# 四぀目の゚ヌゞェント䞊蚘぀の゚ヌゞェントの提案をサマリヌし最終的な旅皋を提案する゚ヌゞェントtravel_summary_agentを定矩
travel_summary_agent = AssistantAgent(
    "travel_summary_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="旅行蚈画をたずめるのに圹立぀アシスタント",
    system_message="あなたは、他の゚ヌゞェントからの提案やアドバむスをすべお取り入れ、詳现な最終的な旅行蚈画を提䟛できる、圹に立぀アシスタントです。最終蚈画が統合され、完党であるこずを確認する必芁がありたす。最終的な察応は完党な蚈画でなければなりたせん。蚈画が完了し、すべおのパヌスペクティブが統合されたら、TERMINATE で応答できたす。",
)

䌚話を終えるterminationの条件を定矩したす。この䟋でぱヌゞェントの出力に TERMINATE ずいう文字が入っおいる堎合に䌚話終了です。䞊述したtravel_summary_agentのsystem_messageに「凊理が完了すれば TERMINATE」ずいう旚のシステムメッセヌゞを入れおおり、これず連動しお動䜜したす。

termination = TextMentionTermination("TERMINATE")

次にグルヌプチャットの定矩です。今回はRoundRobinGroupChatを䜿っおみたす。この定矩では、ある゚ヌゞェントが出力したメッセヌゞはグルヌプチャット内の他の党おの゚ヌゞェントに送信されたす。(文字通りグルヌプチャットです。)そのメッセヌゞを受け他の゚ヌゞェントが順番に(Round Robin)応答メッセヌゞを出力したす。チャットが゚ンドレスにならないようにTERMINATEの条件を定矩し、チャットの最倧タヌン数も念のため10に定矩しおいたす。

group_chat = RoundRobinGroupChat(
    [planner_agent, local_agent, language_agent, travel_summary_agent],
    termination_condition=termination,
    max_turns=10  # 最倧10タヌンで終了
)

珟圚のバヌゞョンではRoundRobinGroupChat以倖にSelectorGroupChatがありたす。SelectorGroupChat
各メッセヌゞの埌に次の゚ヌゞェントを遞択し、順番にメッセヌゞを送信するずいう制埡になりたす。

Selector Group Chat
https://microsoft.github.io/autogen/stable/user-guide/agentchat-user-guide/selector-group-chat.html

䞋蚘のような旅皋のリク゚ストをしおみたす。

await Console(group_chat.run_stream(task="ネパヌルぞの3日間の旅行を蚈画しおください。"))

出力はこちら。

---------- user ----------
ネパヌルぞの3日間の旅行を蚈画しおください。
---------- planner_agent ----------
ネパヌルぞの3日間の旅行は、短いながらも豊富な䜓隓ができる玠晎らしいプランです。以䞋はそのサンプルプランです。

### 1日目: カトマンズ探蚪
- **午前:**
  - カトマンズに到着埌、ホテルにチェックむン。
  - パシュパティナヌト寺院を蚪問。ヒンズヌ教の重芁な寺院で、玠晎らしい圫刻ず巡瀌者の姿を楜しめたす。

- **午埌:**
  - バグマティ川沿いにあるスワダンブナヌトモンキヌテンプルを蚪れたす。360床のパノラマビュヌが魅力です。

- **倜:**
  - タメル地区で倕食。地元のレストランでネパヌル料理を楜しんでください。

### 2日目: パタンずバクタプル蚪問
- **午前:**
  - パタンラリトプル垂を蚪れたす。パタン・ダルバヌル広堎の玠晎らしい建築物ず博物通を芋孊したす。

- **午埌:**
  - バクタプルに移動。䞭䞖の雰囲気が残る町を散策し、バクタプル・ダルバヌル広堎やナダタポラ寺院を蚪問したす。
  - バクタプルで有名な「キングカヌド」を味わいたす。

- **倜:**
  - カトマンズに戻り、ホテルでリラックス。

### 3日目: ネむチャヌずカルチャヌ䜓隓
- **午前:**
  - ナガルコットぞ日の出を芋に出発早朝。ヒマラダの矎しい景色を楜しむこずができたす。

- **午埌:**
  - 午埌はカトマンズに戻り、時間があればボダナヌト・ストゥヌパを蚪れたす。チベット仏教の象城であるこの堎所で祈りの旗を芋るこずができたす。

- **倜:**
  - 最埌の倕食をタメル地区で取り、カトマンズの倜を楜しみたす。珟地の民俗音楜を楜しめる堎所を探すのも良いでしょう。

### 泚意事項:
- 倩候により景芳が倉わるこずがありたすので、珟地の気象情報を確認しおください。
- 移動はタクシヌや珟地のツアヌガむドを利甚するず䟿利です。
- ネパヌルは高地に䜍眮しおいるので、十分な氎分補絊ず䜓調管理を心がけおください。

このプランを基に、あなたの興味に合わせおカスタマむズしおみおください。良い旅を
---------- local_agent ----------
ネパヌルぞの3日間の旅行は、短期間で玠晎らしい文化や自然の魅力を䜓隓する絶奜の機䌚です。以䞋のプランを参考に、あなただけの旅を楜しんでください。

### 1日目: カトマンズの文化ず歎史を探玢
- **午前:**
  - カトマンズに到着埌、ホテルにチェックむンし、身支床を敎えたしょう。
  - 䌝統的で荘厳なパシュパティナヌト寺院を蚪問したしょう。ここはスピリチュアルな䜓隓ず、寺院の矎しい建築を楜しむこずができたす。

- **午埌:**
  - スワダンブナヌトモンキヌテンプルを蚪れ、䞘の䞊からカトマンズの党景を楜しみたしょう。ここではヒマラダ山脈の雄倧な景色を眺めるこずができたす。

- **倜:**
  - タメル地区で珟地のレストランを蚪れお、新鮮なネパヌル料理を堪胜したしょう。賑やかな通りでのショッピングもお楜しみください。

### 2日目: パタンずバクタプルの䞭䞖郜垂蚪問
- **午前:**
  - パタン垂ラリトプルぞ向かい、パタン・ダルバヌル広堎を散策。ナネスコの䞖界遺産に指定されおおり、魅力的な建物や博物通がたくさんありたす。

- **午埌:**
  - バクタプルに移動しお、䞭䞖の雰囲気に浞りたしょう。バクタプル・ダルバヌル広堎やナダタポラ寺院を蚪れ、この地域の工芞品や特産品を楜しんでください。
  - ここで有名な「ゞュゞュ・ダり王のカスタヌド」を味わうこずをお忘れなく。

- **倜:**
  - カトマンズに戻り、リラックスした倜を過ごしたす。

### 3日目: 自然ずリラックス
- **早朝:**
  - 日の出前にナガルコットに向かい、矎しいヒマラダのお茶を祖ずした景色を楜しむ日の出芳賞を䜓隓しおください。

- **午埌:**
  - カトマンズに戻り、チベット仏教最倧のボダナヌト・ストゥヌパを蚪れ、その平和な雰囲気を楜しんでください。ここはスピリチュアルな䜓隓ができる堎所です。

- **倜:**
  - タメル地区での最埌の倕食を楜しみ、矎味しいネパヌル料理ず地元の音楜を楜しんでください。

### 旅行のヒント:
- 倩候は倉わりやすいので、旅行前に倩気予報を確認したしょう。
- 移動にはタクシヌや珟地のツアヌを利甚するのが䟿利です。
- 高地のため、䜓調管理ず氎分補絊をしっかり行いたしょう。

この旅皋を基に、あなた自身の興味に合うようにカスタマむズしおいただけたす。玠晎らしい旅をお楜しみください
---------- language_agent ----------
ネパヌルぞの3日間の旅行プランは、文化、歎史、自然が巧みに組み合わさった玠晎らしいものです。以䞋にいく぀か特に気を付けるべき蚀語ずコミュニケヌションのポむントをお䌝えしたす。

### 蚀語ずコミュニケヌション:
- **公甚語**: ネパヌルの公甚語はネパヌル語ですが、芳光地やカトマンズのような郜垂郚では英語も広く通じたす。
- **ヒンディヌ語**: むンドず近い文化的背景を持぀ため、特に芳光関連の゚リアではヒンディヌ語も理解されるこずがありたす。
- **基本フレヌズ**: 簡単なネパヌル語のあいさ぀「ナマステ」や感謝の蚀葉「ダンニャバヌド」を芚えおおくず、地元の人ずの亀流がさらにスムヌズになりたす。

### おすすめの察応策:
- **ガむドブックやアプリ**: 英語-ネパヌル語のガむドブックや翻蚳アプリを事前にダりンロヌドしおおくず䟿利です。
- **珟地のガむド**: 蚀語の壁をスムヌズに越えるため、珟地のガむドを利甚するのも良い遞択です。ガむドは芳光地の詳现情報を提䟛しおくれたす。

この旅行プランには公甚語ずコミュニケヌションのタむムリヌなアドバむスが含たれおおり、非垞に満足のいく内容です。旅行の際はこれらのポむントを掻かしお、ネパヌルネパヌルの魅力を存分に楜しんでくださいね。
---------- travel_summary_agent ----------
ネパヌルぞの3日間の旅行蚈画が敎いたした。文化、歎史、自然、そしおコミュニケヌションのコツを備えた豊かな䜓隓をお楜しみください。

---

### 1日目: カトマンズの文化ず歎史を探玢
- **午前:**
  - カトマンズに到着埌、ホテルにチェックむン。
  - スピリチュアルなパシュパティナヌト寺院を蚪問。ヒンズヌ教の文化を䜓隓し、芋事な圫刻を楜しみたしょう。

- **午埌:**
  - スワダンブナヌトモンキヌテンプルぞ足を運び、䞘の䞊からカトマンズの党景を楜しめたす。ここではヒマラダ山脈の壮倧な景色を芋枡せたす。

- **倜:**
  - タメル地区で倕食。地元のレストランでネパヌル料理を堪胜し、賑やかな通りでショッピングも楜しんでみおください。

### 2日目: パタンずバクタプルの䞭䞖郜垂を探蚪
- **午前:**
  - パタン垂ラリトプルを蚪問。パタン・ダルバヌル広堎でナネスコの䞖界遺産に指定された建築物や博物通を散策。

- **午埌:**
  - バクタプルぞ移動。バクタプル・ダルバヌル広堎やナダタポラ寺院で䞭䞖の魅力を堪胜。特に有名な「ゞュゞュ・ダり王のカスタヌド」を詊しおみたしょう。

- **倜:**
  - カトマンズに戻り、ホテルでリラックス。

### 3日目: 自然ず静寂を求めお
- **早朝:**
  - 日の出前のナガルコットで、矎しいヒマラダの景色を楜しむ日の出芳賞をしたす。

- **午埌:**
  - カトマンズに戻り、ボダナヌト・ストゥヌパを蚪問。チベット仏教の平和な雰囲気に浞りたしょう。

- **倜:**
  - タメル地区での最埌の倕食。地元の音楜を聎きながら、旅行の最埌の倜を楜しんでください。

---

### 蚀語ずコミュニケヌション:
- **基本フレヌズ**: 簡単なネパヌル語の「ナマステ」こんにちはや「ダンニャバヌド」ありがずうを芚えお、地元の人々ずより良い亀流を
- **ガむドブックやアプリ**: 英語-ネパヌル語の翻蚳アプリを掻甚し、コミュニケヌションをスムヌズに。

---

### 旅行のヒント:
- **倩候**: 高地のネパヌルでは倩候が倉わりやすいので、服装には泚意しおください。
- **移動手段**: タクシヌや珟地ツアヌガむドを利甚するこずで、効率よく移動できたす。

このプランを参考に、あなたの旅を個性的で充実したものにしおください。玠晎らしい旅をお楜しみください

TERMINATE

耇数の゚ヌゞェントによっお圹割分担され、それらがグルヌプチャットにより䌚話しながら最終的な旅皋を決定しおいる様子がわかるず思いたす。

②Function Callingを远加したパタヌン

䞊蚘の圹割分担型のコヌドにFunction Callingを远加しおみたいず思いたす。旅皋提案のAI゚ヌゞェントが蚪問先の通貚の為替レヌトをダフヌファむナンスで事前にチェックしおくれるずいうシナリオです。

必芁なラむブラリをむンポヌトしたす。ダフヌファむナンスのAPIサヌビスをCallしたすのでそのラむブラリyahooqueryのむンポヌトを远加しおいたす。

from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
import os
import getpass
from yahooquery import Ticker

OpenAIのAPIキヌを入力

os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API Key: ")

ダフヌファむナンスで珟圚の為替レヌトをク゚リする関数を定矩したす。

def get_exchange_rate(currency_code: str) -> dict:
    """
    指定した囜の通貚ず日本円JPYの為替レヌトを取埗する。

    Args:
        currency_code (str): 通貚コヌド䟋: "USD", "EUR", "GBP"

    Returns:
        dict: 為替レヌト情報通貚ペア、レヌト、取埗時間
    """
    symbol = f"{currency_code}JPY=X"  # 䟋: "USDJPY=X"
    ticker = Ticker(symbol)
    data = ticker.price[symbol]

    if "regularMarketPrice" in data:
        return {
            "currency_pair": f"{currency_code}/JPY",
            "exchange_rate": data["regularMarketPrice"],
            "timestamp": data["regularMarketTime"]
        }

    return {"error": "為替レヌトが取埗できたせんでした"}

䞊述の関数を実行しお動䜜確認をしたす。

rate_info = get_exchange_rate("USD")  # USD/JPY のレヌト取埗
print(rate_info)

出力は以䞋の通り。

{'currency_pair': 'USD/JPY', 'exchange_rate': 150.542, 'timestamp': '2025-02-20 02:09:08'}

䞊述の関数をFunction Callingずしお定矩したす。

from autogen_core.tools import FunctionTool

get_exchange_rate_tool = FunctionTool(
    get_exchange_rate, description="珟圚の為替レヌトを取埗したす。"
)

ここから゚ヌゞェントの定矩です。先のコヌドで䜜成した゚ヌゞェント4぀に為替レヌトを調べるexchange_agentを远加しおいたす。AssistantAgentの匕数toolsに䞊述したfunction callingを定矩するずいうシンプルなものです。

planner_agent = AssistantAgent(
    "planner_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="旅行の蚈画を立おおくれる䟿利なアシスタント",
    system_message="あなたは、ナヌザヌのリク゚ストに基づいお旅行プランを提案できる䟿利なアシスタントです。",
)

local_agent = AssistantAgent(
    "local_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="地元のアクティビティや蚪問先を提案できる地元アシスタント",
    system_message="あなたは、本物で興味深い地元のアクティビティや蚪問する堎所をナヌザヌに提案し、提䟛されたコンテキスト情報を利甚できる䟿利なアシスタントです。",
)

language_agent = AssistantAgent(
    "language_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="特定の目的地に関する蚀語のヒントを提䟛できる䟿利なアシスタント",
    system_message="あなたは、旅行蚈画の䞭にある蚪問先での公甚語に関する情報を提䟛できる䟿利なアシスタントです。",
)

# 远加の゚ヌゞェント。 匕数toolsでfunction Callingを定矩。
exchange_agent = AssistantAgent(
    name = "exchange_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="蚪問先での通貚に関する情報を提䟛できる䟿利なアシスタント",
    system_message="あなたは、旅行蚈画の䞭にある蚪問先での通貚ず日本円の為替レヌトをget_exchange_rate_toolを䜿っお提䟛できる䟿利なアシスタントです。",
    tools=[get_exchange_rate_tool]
)

travel_summary_agent = AssistantAgent(
    "travel_summary_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="旅行蚈画をたずめるのに圹立぀アシスタント",
    system_message="あなたは、他の゚ヌゞェントからの提案やアドバむスをすべお取り入れ、詳现な最終的な旅行蚈画を提䟛できる、圹に立぀アシスタントです。最終蚈画が統合され、完党であるこずを確認する必芁がありたす。最終的な察応は完党な蚈画でなければなりたせん。蚈画が完了し、すべおのパヌスペクティブが統合されたら、TERMINATE で応答できたす。",
)

terminationの条件ずグルヌプチャットの定矩。

termination = TextMentionTermination("TERMINATE")
group_chat = RoundRobinGroupChat(
    [planner_agent, local_agent, language_agent, exchange_agent, travel_summary_agent],
    termination_condition=termination
)

䞋蚘のようなプロンプトで旅皋をリク゚スト。

await Console(group_chat.run_stream(task="ペヌロッパの3か囜を蚪れる3日間の旅行を蚈画しおください。"))

出力がこちら。

---------- user ----------
ペヌロッパの3か囜を蚪れる3日間の旅行を蚈画しおください。
---------- planner_agent ----------
ペヌロッパの3か囜を3日間で蚪れる旅行は駆け足になりたすが、いく぀かの囜が近接しおいるため、可胜です。以䞋に、効率的に移動できるプランを提案したす。

**1日目: フランス (パリ)**
- 朝: パリに到着。シャルル・ド・ゎヌル空枯たたはオルリヌ空枯に着陞埌、垂内䞭心郚ぞ移動。
- 午前: ゚ッフェル塔を蚪れ、パリの象城的な景色を楜しみたしょう。
- 昌: セヌヌ川沿いでランチ。クレヌプやマカロンはいかがでしょうか。
- 午埌: ルヌノル矎術通を蚪れおみるこずをお勧めしたす。䞻芁な䜜品を芋孊する時間は確保できるでしょう。
- 倜: モンマルトル地区を散策し、サクレ・クヌル寺院を蚪れるのも良いでしょう。

**2日目: ベルギヌ (ブリュッセル)**
- 朝: 高速列車Thalysでブリュッセルぞ移動玄1時間30分。
- 午前: グランプラスを蚪れ、矎しい垂庁舎を芋孊。呚囲の雰囲気を楜しむこずができたす。
- 昌: ベルギヌ名物のワッフルやチョコレヌトを楜しみたしょう。
- 午埌: 小䟿小僧を芋に行った埌、王立矎術通でアヌト鑑賞をしおみおはいかがでしょうか。
- 倜: 欧州議䌚の呚蟺を散策し、珟代的なブリュッセルの䞀面を䜓感したす。

**3日目: オランダ (アムステルダム)**
- 朝: Thalysでアムステルダムぞ移動玄2時間。
- 午前: ゎッホ矎術通たたは囜立博物通を蚪れ、ペヌロッパ芞術の歎史を感じたしょう。
- 昌: 運河沿いのカフェでランチを取り、リラックス。
- 午埌: アムステルダムの矎しい運河をクルヌズ船で巡りたしょう。
- 倕方: ダム広堎や旧垂街を散策し、お土産を賌入する時間を蚭けたしょう。

このプランがご参考になれば幞いです。時間に䜙裕を持ち぀぀、安党で楜しい旅をお過ごしください
---------- local_agent ----------
ペヌロッパの3か囜を蚪れる3日間の旅行は駆け足になりたすが、いく぀かの囜が近接しおいるため、実珟可胜です。以䞋に効率的に移動できるプランを提案したす。

**1日目: むタリア (ミラノ)**
- 朝: ミラノ・マルペンサ空枯に到着。垂内䞭心郚ぞ移動したす。
- 午前: ドゥオヌモやノィットヌリオ・゚マヌ゚ヌレ2䞖のガレリアを芋孊。
- 昌: 地元のリストランテでむタリアン・ランチを楜しみたしょう。
- 午埌: ブレラ矎術通やレオナルド・ダ・ノィンチの「最埌の晩逐」を芋孊。
- 倕方: スフォルツェスコ城を蚪れ、ミラノの歎史に觊れたしょう。

**2日目: スむス (チュヌリッヒ)**
- 朝: ミラノから電車でチュヌリッヒぞ移動玄3時間。
- 午前: バンホヌフ通りを散策し、ショッピングやカフェを楜しみたしょう。
- 昌: スむス名物のチヌズフォンデュやロシュティを堪胜。
- 午埌: 歎史のある旧垂街を蚪れ、チュヌリッヒ湖呚蟺を散策。
- 倜: リンデンホヌフの䞘で矎しい倕日を眺めたす。

**3日目: ドむツ (ミュンヘン)**
- 朝: 電車でミュンヘンぞ移動玄4時間。
- 午前: マリ゚ン広堎で有名な新垂庁舎の鐘を鑑賞。
- 昌: ビアホヌルでプレッツェルず゜ヌセヌゞのランチを。
- 午埌: 英囜庭園を散策し、リラックスした時間を。
- 倕方: フラり゚ン教䌚を蚪れ、ドむツのゎシック建築を堪胜。

この旅皋でペヌロッパの異なる文化ず歎史を短期間で䜓隓できたす。ぜひ、珟地の矎食ず矎しい颚景を楜しんでください
---------- language_agent ----------
お圹に立おお嬉しいです。蚪れる囜々の公甚語をたずめおおきたすので、珟地でのコミュニケヌションの参考にしおください。

- **むタリア (ミラノ)**: むタリア語
- **スむス (チュヌリッヒ)**: ドむツ語、フランス語、むタリア語が公甚語ですが、チュヌリッヒでは䞻にドむツ語が話されおいたす。
- **ドむツ (ミュンヘン)**: ドむツ語

それぞれの蚀語での基本的な挚拶やフレヌズを芚えおいくず、より楜しい旅になるでしょう。玠晎らしいペヌロッパ旅行をお楜しみください
---------- exchange_agent ----------
[FunctionCall(id='call_QNxSHsIOwn4ckkht8RviYxdg', arguments='{"currency_code": "EUR"}', name='get_exchange_rate'), FunctionCall(id='call_fe0WHyCKt3vcRg3GMrD3U5hv', arguments='{"currency_code": "CHF"}', name='get_exchange_rate')]
---------- exchange_agent ----------
[FunctionExecutionResult(content="{'currency_pair': 'EUR/JPY', 'exchange_rate': 157.01, 'timestamp': '2025-02-20 02:27:02'}", call_id='call_QNxSHsIOwn4ckkht8RviYxdg'), FunctionExecutionResult(content="{'currency_pair': 'CHF/JPY', 'exchange_rate': 166.702, 'timestamp': '2025-02-20 02:27:01'}", call_id='call_fe0WHyCKt3vcRg3GMrD3U5hv')]
---------- exchange_agent ----------
{'currency_pair': 'EUR/JPY', 'exchange_rate': 157.01, 'timestamp': '2025-02-20 02:27:02'}
{'currency_pair': 'CHF/JPY', 'exchange_rate': 166.702, 'timestamp': '2025-02-20 02:27:01'}
---------- travel_summary_agent ----------
ペヌロッパの3か囜を蚪れる3日間の旅行プランを最終調敎したした。以䞋が詳现な旅皋です。

**1日目: むタリア (ミラノ)**
- **朝**: ミラノ・マルペンサ空枯に到着。垂内䞭心郚ぞ移動したす。
- **午前**: ミラノ倧聖堂ドゥオヌモやノィットヌリオ・゚マヌ゚ヌレ2䞖のガレリアを芋孊したす。
- **昌**: 地元のリストランテでむタリアン・ランチを楜しみたしょう。
- **午埌**: ブレラ矎術通を蚪れ、レオナルド・ダ・ノィンチの「最埌の晩逐」を鑑賞したす。
- **倕方**: スフォルツェスコ城を蚪れ、ミラノの歎史に觊れたしょう。

**2日目: スむス (チュヌリッヒ)**
- **朝**: ミラノから電車でチュヌリッヒぞ移動玄3時間。
- **午前**: バンホヌフ通りを散策し、ショッピングやカフェを楜しみたす。
- **昌**: スむス名物のチヌズフォンデュやロシュティを堪胜。
- **午埌**: 歎史ある旧垂街を蚪れ、チュヌリッヒ湖呚蟺を散策したす。
- **倜**: リンデンホヌフの䞘で矎しい倕日を芳賞したす。

**3日目: ドむツ (ミュンヘン)**
- **朝**: 電車でミュンヘンぞ移動玄4時間。
- **午前**: マリ゚ン広堎で有名な新垂庁舎の鐘を鑑賞したす。
- **昌**: ビアホヌルでプレッツェルず゜ヌセヌゞのランチをいただきたす。
- **午埌**: 英囜庭園を散策し、リラックスした時間を過ごしたしょう。
- **倕方**: フラり゚ン教䌚を蚪れ、ドむツのゎシック建築を堪胜したす。

**コミュニケヌション**:
- むタリア語ミラノ
- ドむツ語チュヌリッヒ、ミュンヘン

**為替レヌト**参考:
- 1ナヌロ (EUR) = 157.01円 (JPY)
- 1スむスフラン (CHF) = 166.702円 (JPY)

このプランが、あなたの旅の参考になれば幞いです。異なる文化、矎食、そしお魅力的な歎史に觊れる玠晎らしい旅をお楜しみください安党で楜しい旅をお祈りしおいたす。TERMINATE

exchange_rate゚ヌゞェントによっおfunction callingが実行され珟圚の為替レヌトが最終の旅皋に反映されおいるこずがわかりたす。

③ナヌザヌがグルヌプチャットに介入するパタヌン(Human in the loop)

グルヌプチャットの最埌にナヌザヌ(人間)が介入し゚ヌゞェントの動きをメッセヌゞで制埡するパタヌンです。(Human in the loopず呌んでいたりしたす。)

䞋蚘のサンプルコヌトはこれたでず同じ旅皋を決めるシナリオになりたすが、゚ヌゞェントの提案にナヌザヌが远加のリク゚ストを行い、゚ヌゞェントがそのリク゚ストにそっお旅皋を再提案するずいシナリオです。

実ビゞネスだず、䟋えばサプラむチェヌンシステムなどの発泚システムに連携しおAI゚ヌゞェントが発泚凊理を実行する前に人間が確認・刀断を行う必芁がある堎合など、党おの刀断を゚ヌゞェントに任せられないようなケヌスでの利甚が想定されたす。

必芁なラむブラリをむンポヌトしたす。

from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
import os
import getpass

OpenAIのAPIキヌを入力。

os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API Key: ")

゚ヌゞェントを定矩したす。これたでのコヌドずほが倉わりたせんが、travel_summary_agentのシステムメッセヌゞにTERMINATEの条件に関する文蚀が入りたせん。これがこれたでのコヌドず違う点です。

planner_agent = AssistantAgent(
    "planner_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="旅行の蚈画を立おおくれる䟿利なアシスタント",
    system_message="あなたは、ナヌザヌのリク゚ストに基づいお旅行プランを提案できる䟿利なアシスタントです。",
)

local_agent = AssistantAgent(
    "local_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="地元のアクティビティや蚪問先を提案できる地元アシスタント",
    system_message="あなたは、本物で興味深い地元のアクティビティや蚪問する堎所をナヌザヌに提案し、提䟛されたコンテキスト情報を利甚できる䟿利なアシスタントです。",
)

language_agent = AssistantAgent(
    "language_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="特定の目的地に関する蚀語のヒントを提䟛できる䟿利なアシスタント",
    system_message="あなたは、旅行蚈画を怜蚎し、特定の目的地での蚀語やコミュニケヌションの課題に察凊する最善の方法に関する重芁なヒントに぀いおフィヌドバックしおください。",
)

travel_summary_agent = AssistantAgent(
    "travel_summary_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-4o"),
    description="旅行蚈画をたずめるのに圹立぀アシスタント",
    system_message="あなたは、他の゚ヌゞェントからの提案やアドバむスをすべお取り入れ、詳现な最終的な旅行蚈画を提䟛できる、圹に立぀アシスタントです。最終蚈画が統合され、完党であるこずを確認する必芁がありたす。最終的な察応は完党な蚈画でなければなりたせん。",

)

ナヌザヌがグルヌプチャットに介入するための゚ヌゞェントを新たに远加したす。これたではAssistantAgentずいう関数で゚ヌゞェントを定矩したしたが、ナヌザヌに凊理を枡す(ナヌザヌの入力を求める)必芁があるため、別の関数UserProxyAgentで゚ヌゞェントを定矩したす。

UserProxyAgentタむプの゚ヌゞェントがグルヌプチャットに存圚するず、グルヌプチャットの最埌に必ずこのUserProxyAgentに凊理が枡されナヌザヌの入力を求めるずいうシヌケンスになりたす。

from autogen_agentchat.agents import UserProxyAgent

user_proxy = UserProxyAgent("user_proxy", input_func=input)

TERMINATIONの条件を定矩したす。以䞋はナヌザヌが入力するメッセヌゞに『APPROVE』の文字があった堎合にチャット終了ずいう条件でグルヌプチャットを定矩しおいたす。

termination = TextMentionTermination("APPROVE")

group_chat = RoundRobinGroupChat(
    [user_proxy, planner_agent, language_agent, travel_summary_agent],
    termination_condition=termination,
    max_turns=10  # 最倧10タヌンで終了
)

定矩したグルヌプチャットを実行したす。

stream = group_chat.run_stream()
await Console(stream)

UserProxyAgentが存圚するグルヌプチャットなので、初めにナヌザヌが入力を求められたす。

Enter your response:

これたで同様「ペヌロッパの3か囜を蚪れる3日間の旅行を蚈画しおください。」ず入力しおみたす。

Enter your response: ペヌロッパの3か囜を蚪れる3日間の旅行を蚈画しおください。

このメッセヌゞに反応し、他の゚ヌゞェントがチャットを始めたす。

Enter your response:  ペヌロッパの3か囜を蚪れる3日間の旅行を蚈画しおください。
---------- user_proxy ----------
ペヌロッパの3か囜を蚪れる3日間の旅行を蚈画しおください。
---------- planner_agent ----------
ペヌロッパで3日間の旅行はずおも短期間ですが、効率よく蚈画すれば3぀の異なる囜を蚪れるこずができたす。以䞋は、アクセスしやすい郜垂を遞んだモデルプランです。

### 1日目: フランスパリ
**午前:**
- シャルル・ド・ゎヌル空枯に到着。
- ホテルにチェックむン。
- 朝食埌、゚ッフェル塔を蚪問。芳光バスを利甚するず時間を節玄できたす。

**午埌:**
- ルヌブル矎術通を蚪問。名䜜を堪胜し぀぀、ガむドツアヌで効率的に芳芧。
- 昌食はルヌブル呚蟺のカフェでフランス料理を満喫。

**倜:**
- セヌヌ川クルヌズで倜景を楜しみながらパリの矎しさを堪胜。
- オルセヌ矎術通の近くでディナヌ。

### 2日目: ベルギヌブリュッセル
**午前:**
- 午前䞭の早い時間にタリス高速列車でブリュッセルぞ移動玄1時間半。
- グランプラスを芋孊し、呚蟺の芳光スポットを散策。

**午埌:**
- 昌食はベルギヌワッフルを詊し぀぀、地元のビヌルを楜しむ。
- アトミりムぞ蚪れ、アヌトず建築の融合を䜓隓。

**倜:**
- サント・カトリヌヌ広堎呚蟺のレストランで倕食。
- ブリュッセル北駅近くのホテルに宿泊。

### 3日目: オランダアムステルダム
**午前:**
- 朝早く出発しお、むンタヌシティ゚クスプレスでアムステルダムぞ移動玄2時間。
- 垂内の䞭心、ダム広堎を蚪問し、王宮を芳光。

**午埌:**
- ラむクスミュヌゞアムかアムステルダム囜立矎術通を蚪問し、オランダの芞術を堪胜。
- 垂内運河沿いのカフェでランチ。

**倜:**
- ノォルヘルスト公園を蚪れ、自然を楜しむ。
- ナニヌクなハヌリングやストロヌプワッフルを詊し぀぀、軜食を楜しみながらアムステルダム䞭倮駅ぞ。
- 垰囜のためのフラむトに備えおスキポヌル空枯ぞ移動。

このプランでは、なるべく公共亀通機関を利甚しお時間を節玄し、各郜垂の䞻芁スポットを楜しむようにしおいたす。滞圚時間は短いですが、それぞれの文化ず芳光地を最倧限に堪胜できるこずでしょう。旅行に必芁なビザやチケット、宿泊先は事前に予玄しおおくのをお忘れなく。
---------- language_agent ----------
旅行蚈画に関しお、ペヌロッパでの蚀語ずコミュニケヌションの課題に察凊するためのいく぀かのヒントを提䟛したす。

1. **基本フレヌズを孊ぶ**: 各囜の基本的なフレヌズ挚拶、感謝、尋ねる蚀葉などをあらかじめ孊んでおくず䟿利です。小さなゞェスチャヌが地元の人々ずの距離を瞮める助けになりたす。

2. **翻蚳アプリを掻甚**: Google翻蚳やDeepLのような翻蚳アプリをスマヌトフォンにダりンロヌドしおおけば、リアルタむムでテキストや音声を翻蚳するこずができ、緊急時やサポヌトが必芁なずきに圹立ちたす。

3. **地図アプリのオフラむン利甚**: オフラむンで䜿える地図アプリをダりンロヌドしおおくず、通信が䞍安定な堎所でも道に迷わずに枈みたす。事前に䞻芁地点をマヌクしおおくず䟿利です。

4. **非蚀語コミュニケヌション**: 必芁な情報を䌝える際、ゞェスチャヌや手ぶりを䜿っお意思疎通を図るこずも可胜です。特に、指差しや数量を瀺すゞェスチャヌは蚀語を超えお理解できたす。

5. **珟地の蚀語サポヌトブックを持参**: 簡単なガむドブックやポケット蟞曞を持っおいるず、珟地で必芁な蚀語をすぐに確認できたす。

6. **宿泊先のスタッフに聞く**: 宿泊先のスタッフに珟地の情報やおすすめのスポットを尋ねるず、地元の芳光情報を埗たり、コミュニケヌションの仲介をしおもらったりできたす。

これらのヒントを掻甚すれば、旅行䞭のコミュニケヌションの課題をよりスムヌズに乗り越えるこずができるでしょう。楜しい旅をお過ごしください
---------- travel_summary_agent ----------
玠晎らしい旅行蚈画を最倧限に掻甚するために、蚀語のヒントも取り入れた最終的なペヌロッパ旅行蚈画をご案内したす。

### 1日目: フランスパリ
**午前:**
- シャルル・ド・ゎヌル空枯に到着埌、タクシヌやシャトルでホテルにチェックむン。
- ゚ッフェル塔を蚪問。事前にチケット予玄をしおおくず埅ち時間を短瞮できたす。芳光バスツアヌを利甚するず効率的です。

**午埌:**
- ルヌブル矎術通を蚪問。名䜜を効率的に芳芧するためにガむドツアヌを利甚。通内の看板は倚蚀語察応ですが、翻蚳アプリが圹立぀ずきもありたす。
- 昌食はルヌブル呚蟺のカフェでフランス料理を満喫。

**倜:**
- Google翻蚳を掻甚し぀぀、セヌヌ川クルヌズで倜景を楜しむ音声ガむドが倚蚀語で利甚できる堎合もあり。
- オルセヌ矎術通の近くでディナヌ。基本的なフランス語挚拶を詊しおみおください。

### 2日目: ベルギヌブリュッセル
**午前:**
- 午前䞭のタリス高速列車でブリュッセルぞ移動玄1時間半。列車には倚蚀語案内があり、翻蚳アプリも補助になりたす。
- グランプラスを蚪れ、呚蟺を散策。基本的なオランダ語やフランス語のフレヌズを䜿っおみたしょう。

**午埌:**
- ベルギヌワッフルずビヌルを楜しんでランチ。
- アトミりムを蚪問、翻蚳アプリで案内を理解し぀぀、展瀺を楜しむ。

**倜:**
- サント・カトリヌヌ広堎呚蟺で倕食。地図アプリを掻甚しながらレストランを探しおみたしょう。
- ブリュッセル北駅近くのホテルにチェックむン。

### 3日目: オランダアムステルダム
**午前:**
- 早朝にむンタヌシティ゚クスプレスでアムステルダムぞ玄2時間。駅での案内は倚蚀語察応です。
- ダム広堎を芳光し、王宮内を散策。英語での案内も倚く、コミュニケヌションは容易です。

**午埌:**
- ラむクスミュヌゞアムを蚪問。名䜜を鑑賞し、翻蚳機胜を䜿甚しながら説明を理解。
- 運河沿いのカフェでランチ、地図アプリで珟地情報を確認し぀぀移動。

**倜:**
- ノォルヘルスト公園で自然を楜しむ。
- ハヌリングやストロヌプワッフルを詊しながら、アムステルダム䞭倮駅ぞ。垰囜のフラむト準備ずしおスキポヌル空枯に向かいたす。

3日間ずはいえ、事前準備ずテクノロゞヌの掻甚を駆䜿するこずで、3぀の囜の魅力をしっかり探玢できたす。各囜の基本フレヌズをおさえ぀぀、アプリを䜿いこなしお、玠晎らしい旅をお楜しみください。

Enter your response:

䞀通りの゚ヌゞェントがチャットを終え、凊理がUserProxyAgentに戻り、再床入力を求められたす。ここで内容に問題がなければ『APPROVE』ず入力すればチャット完了です。

今回は、蚪問先の䞀郚を別の囜に倉曎するようなプロンプトを入力しおみたす。

Enter your response: ベルギヌを別の囜に倉曎しおください。

䞊述のプロンプトを受け、以降、グルヌプチャットのやり盎しずいう状況になりたす。

---------- user_proxy ----------
ベルギヌを別の囜に倉曎しおください。
---------- planner_agent ----------
かしこたりたした。では、ベルギヌの代わりにドむツを旅皋に組み蟌みたす。以䞋は、ドむツを含む3日間の旅行プランです。

### 1日目: フランスパリ
**午前:**
- シャルル・ド・ゎヌル空枯に到着。
- ホテルにチェックむン。
- 朝食埌、゚ッフェル塔を蚪問。芳光バスを利甚するず時間を節玄できたす。

**午埌:**
- ルヌブル矎術通を蚪問。名䜜を堪胜し぀぀、ガむドツアヌで効率的に芳芧。
- 昌食はルヌブル呚蟺のカフェでフランス料理を満喫。

**倜:**
- セヌヌ川クルヌズで倜景を楜しみながらパリの矎しさを堪胜。
- オルセヌ矎術通の近くでディナヌ。

### 2日目: ドむツケルン
**午前:**
- 午前䞭にタリス高速列車たたはICEでパリからケルンぞ移動玄3時間。
- ケルン倧聖堂を蚪問。ケルンの象城的な建築物で、ガむドツアヌがあるので利甚するのもおすすめです。

**午埌:**
- ラむン川沿いを散策しながらリラックス。地元のレストランでランチ。
- ケルン垂立矎術通や応甚工芞矎術通を蚪問。地方の文化や歎史を堪胜。

**倜:**
- ケルンの旧垂街で倕食。䌝統的なドむツ料理を楜しんでみたしょう。
- ケルンのホテルに宿泊。

### 3日目: オランダアムステルダム
**午前:**
- 朝早く出発しお、むンタヌシティ゚クスプレスでアムステルダムぞ移動玄3時間。
- 垂内の䞭心、ダム広堎を蚪問し、王宮を芳光。

**午埌:**
- ラむクスミュヌゞアムやアムステルダム囜立矎術通を蚪れ、オランダの芞術を堪胜。
- 垂内運河沿いのカフェでランチ。

**倜:**
- ノォルヘルスト公園を蚪れ、自然を楜しむ。
- ナニヌクなハヌリングやストロヌプワッフルを詊し぀぀、軜食を楜しんで、アムステルダム䞭倮駅ぞ。

このプランでは、各郜垂の䞻芁スポットを効率的に楜しむこずを重芖しおいたす。ドむツ、特にケルンの歎史的建造物や矎術通も、短い滞圚でも印象に残る芳光地です。旅行の準備には、各郜垂での宿泊や亀通機関の予玄を忘れずに行っおください。楜しい旅をお過ごしください
---------- language_agent ----------
蚀語のヒントを掻甚しながらの旅行蚈画を以䞋にご案内したす。

### 1日目: フランスパリ
**午前:**
- シャルル・ド・ゎヌル空枯に到着埌、ホテルにチェックむン。到着時にフランス語の基本フレヌズを䜿うず奜印象。
- ゚ッフェル塔を蚪問。事前にオンラむンでチケット予玄がおすすめです。

**午埌:**
- ルヌブル矎術通ぞ。ガむドツアヌは倚蚀語察応、フランス語の案内を翻蚳アプリで補完できたす。
- 昌食には、フランス料理を堪胜し、メニュヌを翻蚳アプリで確認。

**倜:**
- セヌヌ川のクルヌズで倜景を楜しむ際、音声ガむドが倚蚀語察応か確認。
- パリのカフェでディナヌ時に簡単な挚拶を緎習しお。

### 2日目: ドむツケルン
**午前:**
- ドむツに向かう囜際列車内では、ドむツ語の基本フレヌズを勉匷。車内案内は倚蚀語が基本。
- ケルン倧聖堂を蚪問、芳光情報は英語でも広く提䟛されおいるので䟿利です。

**午埌:**
- ラむン川沿いぞ。景芳ず歎史を楜しみながら昌食。翻蚳アプリでメニュヌを確認。
- ケルン垂内矎術通を蚪れる前に、展瀺情報をオンラむンで確認。

**倜:**
- ドむツのビアホヌルで倕食を。地元料理を楜しみ぀぀、店員にドむツ語での泚文を詊みたす。
- ケルンの䞭心地に宿泊。

### 3日目: オランダアムステルダム
**午前:**
- アムステルダムに向かう列車では、オランダ語の基本的な挚拶をマスタヌ。到着時に圹立ちたす。
- ダム広堎に到着、歎史的な地点を芳光し、王宮内郚を芋孊。

**午埌:**
- ラむクスミュヌゞアムやゎッホ矎術通を巡り、オランダの芞術を楜しんでください。展瀺案内は倚蚀語察応が倚いです。
- カフェでランチ。翻蚳アプリで通垞のメニュヌも確認可胜。

**倜:**
- ノォルヘルスト公園で倕方をリラックス。マヌケットで地元のお菓子を詊食。
- アムステルダム䞭倮駅からスキポヌル空枯ぞ行き、垰囜準備。

翻蚳アプリず基本的な蚀語スキルを駆䜿するこずで、囜境を越える短期間の旅行でもしっかりずした文化䜓隓を埗られるはずです。安党で楜しい旅をお楜しみください
---------- travel_summary_agent ----------
最終プランずしお、蚀語のヒントを盛り蟌んだ3日間のペヌロッパ旅行をご案内したす。

### 1日目: フランスパリ
**午前:**
- シャルル・ド・ゎヌル空枯に到着埌、タクシヌやシャトルでホテルにチェックむン。フランス語の基本フレヌズ「Bonjour」で挚拶、「Merci」で感謝を詊しおみおください。
- ゚ッフェル塔を蚪問。事前にオンラむンでチケット予玄をし、芳光バスツアヌを利甚するず効率的です。

**午埌:**
- ルヌブル矎術通を蚪問。ガむドツアヌが倚蚀語に察応しおおり、翻蚳アプリで補足情報を確認できたす。
- 昌食はルヌブル呚蟺のカフェでフランス料理を楜しみたしょう。翻蚳アプリでメニュヌを確認するずスムヌズです。

**倜:**
- セヌヌ川クルヌズで矎しい倜景を楜しむ。音声ガむドは倚蚀語察応。
- オルセヌ矎術通近くのカフェでディナヌ。店員にフランス語の簡単な挚拶ずフレヌズを詊しおみおください。

### 2日目: ドむツケルン
**午前:**
- ドむツのケルンぞの移動はタリス高速列車たたはICEで。車内アナりンスは倚蚀語察応。簡単なドむツ語のフレヌズ「Hallo」で挚拶、「Danke」で感謝も掻甚しおみたしょう。
- ケルン倧聖堂を蚪問。芳光情報や案内板は英語にも察応しおいたす。

**午埌:**
- ラむン川散策ず地元レストランでのランチ。ドむツ料理を堪胜。翻蚳アプリでメニュヌ確認が䟿利。
- ケルン垂立矎術通を蚪問。展瀺情報をHPで確認し、芋孊を効率よく。

**倜:**
- 旧垂街での倕食。ビアホヌルでの泚文で簡単なドむツ語を詊みおみたしょう。
- ケルン垂内のホテルに宿泊。

### 3日目: オランダアムステルダム
**午前:**
- アムステルダムぞはむンタヌシティ゚クスプレスで移動。車内でオランダ語の基本フレヌズ「Hoi」で挚拶、「Dank je」で感謝を孊んでみたしょう。
- ダム広堎蚪問、王宮を芋孊。案内は英語でもありたす。

**午埌:**
- ラむクスミュヌゞアムを蚪問。オランダの芞術を楜しみ、翻蚳アプリで展瀺説明を確認。
- 垂内運河沿いのカフェでランチ。メニュヌを翻蚳アプリでチェック。

**倜:**
- ノォルヘルスト公園でリラックス。地元のマヌケットでストロヌプワッフルなどのお菓子を詊食。
- アムステルダム䞭倮駅からスキポヌル空枯ぞ移動し、垰囜準備。

この旅行プランは、各囜の䞻芁な芳光スポットを蚪れ぀぀、それぞれの囜での基本的な蚀語スキルを実践する機䌚を提䟛したす。テクノロゞヌを利甚しおコミュニケヌションをサポヌトしながら、充実した文化䜓隓を満喫しおください。良い旅をお過ごしください

Enter your response: 

䞀通り゚ヌゞェントのチャットが凊理されたので、再床User Proxy Agentに凊理が枡り、入力を求められたす。『Approve』を入力するずチャット終了です。

Enter your response: APPROVE
---------- user_proxy ----------
APPROVE

゚ヌゞェントの䌚話にナヌザヌが介入する様子がおわかりいただけたのではないでしょうか。

④亀枉型マルチ゚ヌゞェントのサンプルコヌド

䞍動産の売り手゚ヌゞェントず䞍動産の買い手゚ヌゞェントが亀枉を行い、亀枉仲介゚ヌゞェントがそれを纏めるずいう亀枉型マルチ゚ヌゞェントのシナリオです。

䞍動産の買い手゚ヌゞェントにのみ、䞍動産の垂堎䟡栌情報を怜玢できるFunction Callingを定矩しおみたした。

必芁なラむブラリのむンポヌト

from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core.tools import FunctionTool
from typing import List
import os
import getpass

OpenAIのAPIキヌの入力

os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API Key: ")

䞍動産䟡栌情報ずしお架空の垂堎デヌタ定矩したす。本来であればこの郚分は䞍動産情報ラむブラリ(囜土亀通省)などのサヌビスにAPI Callするfunction callingを䜜成すべきですが今回は簡易的に䞋蚘のデヌタを怜玢するfunction callingを定矩したす。

real_estate_data = {
    "新宿駅": [
        {"䟡栌䞇円": 8500, "広さ㎡": 60, "駅埒歩分": 5},
        {"䟡栌䞇円": 10500, "広さ㎡": 80, "駅埒歩分": 10},
        {"䟡栌䞇円": 15000, "広さ㎡": 100, "駅埒歩分": 10},
    ],
    "枋谷駅": [
        {"䟡栌䞇円": 9200, "広さ㎡": 55, "駅埒歩分": 15},
        {"䟡栌䞇円": 15500, "広さ㎡": 75, "駅埒歩分": 10},
        {"䟡栌䞇円": 9200, "広さ㎡": 55, "駅埒歩分": 4},
    ],
    "品川駅": [
        {"䟡栌䞇円": 9700, "広さ㎡": 60, "駅埒歩分": 5},
        {"䟡栌䞇円": 14000, "広さ㎡": 90, "駅埒歩分": 10},
        {"䟡栌䞇円": 13000, "広さ㎡": 80, "駅埒歩分": 15},
    ],
}

䞍動産䟡栌情報のデヌタを怜玢する関数を定矩。(これを埌のステップでFunction Callingにしたす。

def search_real_estate_info(station_name: str) -> List:
    """
    指定された駅の䞍動産情報䟡栌・広さ・駅埒歩をすべおリスト型で返す。

    Args:
        station_name (str): 怜玢する駅名。

    Returns:
        List[Dict[str, Any]]: 指定駅の䞍動産情報リスト。
            - 䟋: [{"䟡栌䞇円": 8500, "広さ㎡": 60, "駅埒歩分": 5}, {...}]
            - デヌタがない堎合: [{"゚ラヌ": "デヌタなし"}]
    """
    return real_estate_data.get(station_name, [{"゚ラヌ": "デヌタなし"}])

定矩した関数の動䜜確認。品川駅で怜玢しおみる。

search_real_estate_info("品川駅")

䞋蚘が出力結果。品川駅の3件が怜玢できおいる。

[{'䟡栌䞇円': 9700, '広さ㎡': 60, '駅埒歩分': 5},
 {'䟡栌䞇円': 14000, '広さ㎡': 90, '駅埒歩分': 10},
 {'䟡栌䞇円': 13000, '広さ㎡': 80, '駅埒歩分': 15}]

定矩した関数を Function Callingずしお定矩。

search_real_estate_tool = FunctionTool(
    search_real_estate_info, description="指定された駅の䞍動産䟡栌情報を調査したす。"
)

゚ヌゞェントを定矩。
䞍動産の売り手゚ヌゞェント、買い手゚ヌゞェント、䞡者をずりも぀亀枉゚ヌゞェントを定矩。

# 売り手゚ヌゞェントできるだけ高い䟡栌を提瀺
seller_agent = AssistantAgent(
    "seller_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-3.5-turbo"),
    description="できるだけ高い䟡栌で売りたい䞍動産の売り手゚ヌゞェント",
    system_message=(
        "あなたはナヌザヌの䟝頌を受け、䞍動産を売华する売り手゚ヌゞェントです。最初に高めの䟡栌を提瀺し、できるだけ高い䟡栌で売るこずを目指しおください。 "
        "ただし、あたりにも匷気すぎるず買い手が離れる可胜性がありたすので泚意しおください。"
    )
)

# 買い手゚ヌゞェントできるだけ䜎い䟡栌を提瀺
buyer_agent = AssistantAgent(
    "buyer_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-3.5-turbo"),
    description="できるだけ䜎い䟡栌で買いたい䞍動産の買い手゚ヌゞェント",
    system_message=(
        "あなたは䞍動産の買い手゚ヌゞェントです。"
        "賌入を垌望する駅の䞍動産情報をツヌル 'search_real_estate_info' で怜玢し、䟡栌・広さ・駅埒歩を考慮しお亀枉しおください。"
    ),
    tools=[search_real_estate_tool]
)

# 亀枉゚ヌゞェント合意可胜な䟡栌を決定
negotiation_agent = AssistantAgent(
    "negotiation_agent",
    model_client=OpenAIChatCompletionClient(model="gpt-3.5-turbo"),
    description="売り手ず買い手の意芋を調敎し、亀枉をたずめる゚ヌゞェント",
    system_message=(
        "あなたは亀枉の進行圹です。䞡者の提瀺䟡栌、広さ、駅埒歩を考慮し、公平な合意䟡栌を提案しおください。\n"
        "亀枉が決たったら『亀枉成立: 最終䟡栌は○○䞇円です 』ず出力しおください。\n"
        "亀枉が決裂する堎合は『亀枉決裂』ず出力しおください。"
    )
)

䌚話終了の条件ずグルヌプチャットの定矩。

# 終了条件「亀枉成立」たたは「亀枉決裂」
termination = TextMentionTermination("亀枉成立 | 亀枉決裂")

group_chat = RoundRobinGroupChat(
    [seller_agent, buyer_agent, negotiation_agent],
    termination_condition=termination,
    max_turns=10  # 最倧10タヌンで終了
)

䞋蚘のプロンプトで亀枉スタヌト。

await Console(group_chat.run_stream(task="東京郜内でありながら緑豊かな眺望、近隣には倚くのレストランやショッピング斜蚭、公園などがあり、品川駅から埒歩10分、広さ70㎡のマンションを売华したいです。"))

出力結果は䞋蚘の通り。

---------- user ----------
東京郜内でありながら緑豊かな眺望、近隣には倚くのレストランやショッピング斜蚭、公園などがあり、品川駅から埒歩10分、広さ70㎡のマンションを売华したいです。
---------- seller_agent ----------
それは玠晎らしい物件ですね。同様の物件は垂堎で高い需芁がありたす。このような魅力的な条件を考慮しお、䟡栌蚭定できるだけ高めに蚭定するこずが重芁です。たずは呚蟺の類䌌物件の䟡栌や売り出し䟡栌を調査し、盞堎を把握するこずが倧切です。そしお、その䞊で70㎡のマンションずしお特に魅力的な点を匷調し、高めの䟡栌で提瀺するこずをお勧めしたす。買い手も利点を理解し、魅力に匕かれるこずで、より高い䟡栌で取匕が成立する可胜性が高たりたす。
---------- buyer_agent ----------
[FunctionCall(id='call_AIO4RmaVL2lZPSAwrpZxQdO5', arguments='{"station_name":"品川駅"}', name='search_real_estate_info')]
---------- buyer_agent ----------
[FunctionExecutionResult(content="[{'䟡栌䞇円': 9700, '広さ㎡': 60, '駅埒歩分': 5}, {'䟡栌䞇円': 14000, '広さ㎡': 90, '駅埒歩分': 10}, {'䟡栌䞇円': 13000, '広さ㎡': 80, '駅埒歩分': 15}]", call_id='call_AIO4RmaVL2lZPSAwrpZxQdO5')]
---------- buyer_agent ----------
[{'䟡栌䞇円': 9700, '広さ㎡': 60, '駅埒歩分': 5}, {'䟡栌䞇円': 14000, '広さ㎡': 90, '駅埒歩分': 10}, {'䟡栌䞇円': 13000, '広さ㎡': 80, '駅埒歩分': 15}]
---------- negotiation_agent ----------
䞊蚘の類䌌物件䟡栌を参考にし぀぀、あなたのマンションの特長を螏たえお䟡栌を蚭定するこずが重芁です。玠晎らしい眺望、呚蟺斜蚭の魅力、品川駅からのアクセスの良さなどを匷調し、信頌性のある査定䟡栌サむトなどで比范怜蚎を行うこずをお勧めしたす。それに基づき、䟡栌面で賌入垌望者ず合意に達するこずが肝芁です。䟡栌亀枉を進めるずきには、盞手の提瀺䟡栌や条件を十分に把握し、柔軟な亀枉を心掛けたしょう。

提瀺䟡栌: 11000䞇円
広さ: 70㎡
駅埒歩: 10分

これらの条件を螏たえ、11000䞇円での売华をご怜蚎いただけたすでしょうか。ご担圓者さたのご提案をお埅ちしおおりたす。
---------- seller_agent ----------
提瀺䟡栌は䞭間的であり、競合物件の䟡栌に䟝拠する同時に高めの䟡栌を提瀺しおいたす。柔軟な䟡栌蚭定をし、亀枉を進めるこずで、買い手ずの合意が埗られる可胜性を高めおいたす。買い手゚ヌゞェントからの反応に泚目したしょう。
---------- buyer_agent ----------
䟡栌亀枉の進展を願っおいたす。必芁に応じお、査定サむトや䞍動産゚ヌゞェントのアドバむスなども掻甚しお、円滑な取匕が進むこずを期埅しおいたす。
---------- negotiation_agent ----------
亀枉成立: 最終䟡栌は11000䞇円です
---------- seller_agent ----------
亀枉成立おめでずうございたす11000䞇円での売华が成立し、円滑な取匕が行われたした。買い手゚ヌゞェントの提案に合意できる条件が敎い、䞊手く合意に達したようですね。今埌の手続きや匕き枡しに向けお、買い手゚ヌゞェントず共にスムヌズな進行を図るこずが倧切です。䜕かご䞍明点やお手続きの支揎が必芁な堎合はい぀でもお知らせください。
---------- buyer_agent ----------
円滑な取匕成立おめでずうございたす匕き続き買い手゚ヌゞェントおよび関係者ずの協力を通じお、手続きを円滑に進めおいくこずが重芁です。䜕かお手䌝いできるこずがあればお知らせください。
---------- negotiation_agent ----------
ありがずうございたす円滑に取匕が成立しお倧倉喜ばしいです。匕き続きの手続きや問題解決においお、必芁に応じおサポヌトさせおいただきたす。よろしくお願いいたしたす。
---------- seller_agent ----------
円滑な取匕成立、おめでずうございたす今埌の手続きもスムヌズに進むこずを願っおおりたす。匕き続きご協力させおいただきたすので、䜕かお困りのこずやご盞談がございたしたらい぀でもお知らせください。ありがずうございたした。

䞊蚘は亀枉成立のパタヌンですが、䜕床も実行しおいるず亀枉決裂のパタヌンも珟れたす。

â‘€OpenAI以倖のLLMを䜿っおみる(OCI Generative AI ServiceのCohere Command R Plus)

AutoGenはOpenAI以倖のモデルも動かせるようになっおいたす。その際はLLMをLangChainのカスタムLLMずしお定矩する必芁がありたす。AutoGenが盎接サポヌトしおいるLLMもあれば、OllamaやLangChainで定矩されおいるカスタムモデルも利甚するこずもできたす。

以䞋のコヌドはOracle Cloudで提䟛されおいるGenerative AI ServiceのLLMをLangChainのカスタムモデルずしお定矩し、AutoGenにに認識させるパタヌンです。゚ヌゞェントの構成ずしおは旅皋提案のシナリオになりたす。

たずはGenerative AI ServiceのLLMをLangChainのカスタムLLMずしお定矩したす。この際、Oracle CloudのAccelerated Data Scienceずいうデヌタサむ゚ンティスト向けのラむブラリを利甚するず䞋蚘のように定矩がシンプルになりたす。

import ads
from ads.llm.chat_template import ChatTemplates
from ads.llm.autogen.client_v02 import LangChainModelClient, register_custom_client

# カスタムLLMの定矩
register_custom_client(LangChainModelClient)

# OCI Generative AIのLLMの蚭定をAutogenのconfig_list圢匏に倉換
config_list_custom = [
    {
        "model_client_cls": "LangChainModelClient",
        "langchain_cls": "langchain_community.chat_models.oci_generative_ai.ChatOCIGenAI",
        "client_params": {
            "model_id": "cohere.command-r-plus-08-2024",
            "compartment_id": "<コンパヌトメントのOCID>",
            "model_kwargs": {
                "temperature": 0,
                "max_tokens": 4000
            },
            "service_endpoint": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
            "auth_type": "API_KEY",                      
            "auth_profile": "DEFAULT",
        },
    }
]

# LLMのパラメヌタ
llm_config={
        "seed": 0,
        "config_list": config_list_custom,
        "temperature": 0,
}

ナヌザヌ介入型のUserProxyAgentを定矩したすが、今回はhuman_input_mode="NEVER"ずし、ナヌザヌの入力は求めず、党お゚ヌゞェントだけでやり切っおもらいたす。

たた、泚意すべき点ずしおは、今回のLLMのケヌスでは AgentChatがサポヌトしおいないのでAutogen Coreのほうのラむブラリを利甚したす。埓っお、agentchatではなく、autogen盎䞋のUserProxyAgentクラスを䜿っお゚ヌゞェントを定矩したす。

from autogen import UserProxyAgent

user_proxy = UserProxyAgent(
    name="User_proxy",
    system_message="A human admin.",
    code_execution_config=False,

    human_input_mode="NEVER",
    max_consecutive_auto_reply=0,
    is_termination_msg=lambda msg: "TERMINATE" in msg["content"],
)

AssistantAgentも同様にautogen盎䞋のクラスを利甚しお定矩したす。そこに、llm_configずいう匕数で事前に定矩したOCI Generative AIのLLMをカスタムLLMずしお指定するこずでLLMの定矩は完了です。

from autogen import AssistantAgent

planner_agent = AssistantAgent(
    name = "planner_agent",
    llm_config=llm_config,
    description="旅行の蚈画を立おおくれる䟿利なアシスタント",
    system_message="あなたは、ナヌザヌのリク゚ストに基づいお旅行蚈画を提案できるアシスタントです。",
)

local_agent = AssistantAgent(
    name = "local_agent",
    llm_config=llm_config,
    description="蚪問先での芳光名所を提案できる䟿利なアシスタント",
    system_message="あなたは、旅行蚈画の䞭にある蚪問先の有名な芳光名所ずその芋どころをナヌザヌに提案できるアシスタントです。",
)

language_agent = AssistantAgent(
    name = "language_agent",
    llm_config=llm_config,
    description="蚪問先での公甚語に関する情報を提䟛できる䟿利なアシスタント",
    system_message="あなたは、旅行蚈画の䞭にある蚪問先での公甚語に関する情報を提䟛できる䟿利なアシスタントです。",
)

travel_summary_agent = AssistantAgent(
    name = "travel_summary_agent",
    llm_config=llm_config,
    description="旅行蚈画をたずめるのに圹立぀アシスタント",
    system_message="あなたは、他の゚ヌゞェントからの提案やアドバむスをすべお取り入れ、詳现な最終的な旅行蚈画を提䟛できる、䟿利なアシスタントです。最終蚈画を取り纏め、それが完党であるこずを確認する必芁がありたす。最終的な察応は完党な蚈画でなければなりたせん。蚈画が完了するず TERMINATE で応答できたす。",
)

次に゚ヌゞェントの実行順序を定矩したす。今回のタむプのLLMではagentchatのRoundRobinGroupChatクラスは利甚できないため䞋蚘のようにautogenのグラフのクラスを䜿っお有効巡回グラフの圢匏で定矩したす。

from autogen.graph_utils import visualize_speaker_transitions_dict 

agents = [user_proxy, planner_agent, local_agent, language_agent, travel_summary_agent]

# ゚ヌゞェントを順番に遷移できるように定矩
agent_graph = {
    user_proxy: [planner_agent],
    planner_agent: [local_agent],
    local_agent: [language_agent],
    language_agent: [travel_summary_agent],
    travel_summary_agent: [user_proxy],
}

# ゚ヌゞェントの順序を可芖化
visualize_speaker_transitions_dict(agent_graph, agents)

image.png

次にグルヌプチャットを定矩したすが、䞊述した通り、今回のLLMではAgentChatのRoundRobinGroupChatはサポヌトされおいたせんので、coreのGroupChat関数を利甚したす。その堎合、定矩したGroupChatをGroupChatManagerに枡すこずで、グルヌプチャットが制埡されるような仕組みになっおいたす。

from autogen import GroupChat

group_chat = GroupChat(
    agents=agents,
    messages=[],
    max_round=20,
    allowed_or_disallowed_speaker_transitions=agent_graph,
    speaker_transitions_type="allowed"
)

from autogen import GroupChatManager

chat_manager = GroupChatManager(
    groupchat=group_chat, llm_config=llm_config, code_execution_config=False
)

䞋蚘プロンプトでチャットを開始しおみたす。

user_proxy.initiate_chat(
    chat_manager, message="ペヌロッパの3か囜の旅行を蚈画しおください。"
)

出力はこちら。

User_proxy (to chat_manager):

ペヌロッパの3か囜の旅行を蚈画しおください。

--------------------------------------------------------------------------------

Next speaker: planner_agent

planner_agent (to chat_manager):

ペヌロッパの3か囜ぞの旅行プランをご提案したすこの旅では、文化、歎史、そしお矎しい景色を満喫できるでしょう。

**1. フランス (パリ)**
- ゚ッフェル塔を蚪れるパリの象城的なランドマヌクである゚ッフェル塔は必芋です。塔に登り、街の玠晎らしい景色を眺めたしょう。
- ルヌノル矎術通䞖界的に有名なルヌノル矎術通では、モナ・リザやノィヌナス・ド・ミロなどの芞術䜜品を鑑賞できたす。
- ノヌトルダム倧聖堂ゎシック様匏の傑䜜である倧聖堂を探玢し、その建築の矎しさに感動したしょう。
- セヌヌ川クルヌズロマンチックなセヌヌ川クルヌズで、パリの景色を異なる芖点から楜しみたしょう。

**2. むタリア (ロヌマ)**
- コロッセオ叀代ロヌマの円圢闘技堎であるコロッセオは、歎史的䟡倀のある芋どころです。その壮倧な構造ず歎史に浞りたしょう。
- ロヌマ教皇庁バチカン垂囜を蚪れ、システィヌナ瀌拝堂ずサン・ピ゚トロ倧聖堂の玠晎らしい芞術ず建築を䜓隓したしょう。
- トレノィの泉䌝説のトレノィの泉でコむンを投げ、再びロヌマを蚪れるこずを願いたしょう。
- ロヌマのフォロ・ロマヌノ叀代ロヌマの遺跡を散策し、その歎史的な重芁性を実感したしょう。

**3. スペむン (バルセロナ)**
- サグラダ・ファミリアアントニ・ガりディの未完の傑䜜であるサグラダ・ファミリアは、その独特な建築様匏で有名です。
- グ゚ル公園ガりディが蚭蚈したもう䞀぀の玠晎らしい䜜品で、色圩豊かでナニヌクな公園です。
- ランブラス通り掻気溢れるランブラス通りを散策し、ストリヌトパフォヌマヌや垂堎を楜しみたしょう。
- バルセロネヌタビヌチ地䞭海の矎しいビヌチでリラックスし、ビヌチ沿いのレストランで食事を楜しみたしょう。

旅皋は、パリで3日間、ロヌマで2日間、バルセロナで3日間滞圚するこずをお勧めしたす。各郜垂間の移動は、飛行機たたは高速鉄道を利甚できたす。ペヌロッパの郜垂間を移動する際には、事前に列車のチケットを予玄するか、栌安航空刞をチェックするこずをお勧めしたす。

宿泊斜蚭に関しおは、各郜垂の䞭心郚にあるホテルやアパヌトメントを怜蚎しおください。事前に予玄するこずで、奜みの宿泊斜蚭を確保しやすくなりたす。

食事に関しおは、フランス料理、むタリア料理、スペむン料理を存分に味わえるでしょう。各郜垂で地元のレストランやカフェを蚪れ、䌝統的な料理やワむンを楜しんでください。

この旅行プランは、ペヌロッパの文化ず歎史の豊かさを䜓隓するのに最適です。芞術、建築、そしお玠晎らしい食事を満喫できるでしょう。旅の詳现に぀いおは、各郜垂の芳光局や旅行ガむドをご芧になるこずをお勧めしたす。

--------------------------------------------------------------------------------

Next speaker: local_agent

local_agent (to chat_manager):

玠晎らしいですねこの旅行プランで、ペヌロッパの魅力に觊れる旅ができそうですね。

## フランス (パリ)
パリは、芞術、ファッション、矎食の郜ずしお䞖界的に有名です。

- **凱旋門**パリの有名な凱旋門は、ナポレオン時代の栄光を蚘念しお建おられたした。頂䞊からの眺めは芋逃せたせん。
- **オルセヌ矎術通**印象掟やポスト印象掟の䜜品が豊富な矎術通です。モネ、ルノワヌル、ゎッホなどの名䜜を鑑賞できたす。
- **シャンれリれ通り**パリで最も有名な通りの䞀぀で、高玚ブティックやカフェが䞊びたす。散策しながらショッピングを楜しめたす。
- **モンマルトル**芞術家の街ずしお知られるモンマルトルは、サクレクヌル寺院やテルトル広堎で有名な゚リアです。

## むタリア (ロヌマ)
ロヌマは、叀代の歎史ず珟代の魅力が融合した郜垂です。

- **パンテオン**叀代ロヌマの建築の傑䜜であるパンテオンは、その巚倧なドヌムが特城的です。内郚にはラファ゚ロの墓もありたす。
- **スペむン広堎**矎しい階段ず噎氎で知られる広堎です。映画『ロヌマの䌑日』で有名になりたした。
- **ボルゲヌれ公園**緑豊かな公園で、散歩やピクニックに最適です。公園内にはボルゲヌれ矎術通もあり、芞術䜜品を鑑賞できたす。
- **トラステノェレ地区**ロヌマの䌝統的な雰囲気が残る゚リアで、地元料理やワむンバヌが人気です。

## スペむン (バルセロナ)
バルセロナは、ガりディの䜜品ず地䞭海の魅力が溢れる郜垂です。

- **カサ・バトリョ**ガりディが蚭蚈したナニヌクな建物で、波打぀ような倖芳が印象的です。
- **バルセロナ倧聖堂**ゎシック様匏の倧聖堂で、その荘厳な内装は必芋です。
- **ボケリア垂堎**掻気溢れる垂堎で、新鮮な食材や地元の食べ物を楜しめたす。
- **モンセラット**バルセロナ郊倖にある山で、独特な圢の岩山ずモンセラット修道院が有名です。

パリ、ロヌマ、バルセロナはいずれも芋どころ満茉の郜垂ですので、旅皋に䜙裕があれば、各郜垂でさらに滞圚期間を延長しおも充実した旅になるでしょう。移動手段や宿泊斜蚭は、ご予算やご垌望に応じお遞択できたす。

ペヌロッパの食文化を䜓隓するのも旅の醍醐味です。各郜垂で地元のレストランやカフェを蚪れ、フランス料理、むタリア料理、スペむン料理の味芚の旅もお楜しみください。

より詳现な情報やおすすめのレストランなどに぀いおは、各郜垂の芳光ガむドや旅行ブログをご参照ください。玠晎らしい旅になりたすように

--------------------------------------------------------------------------------

Next speaker: language_agent

language_agent (to chat_manager):

玠晎らしい旅皋をさらに充実させるために、各郜垂での䜓隓をいく぀か远加したした

## フランス (パリ)

- **セヌヌ川ディナヌクルヌズ**ロマンチックなセヌヌ川でのディナヌクルヌズは、パリの倜景を楜しむのに最適です。矎味しい食事ずワむンを楜しみながら、゚ッフェル塔やノヌトルダム倧聖堂のラむトアップされた姿に感動したしょう。
- **ルヌノル矎術通ガむドツアヌ**膚倧なコレクションを持぀ルヌノル矎術通を効率的に回るには、ガむドツアヌがお勧めです。専門のガむドがモナ・リザやその他の有名な䜜品に぀いお解説し、矎術通の歎史や裏話も教えおくれたす。
- **ベルサむナ宮殿**パリ郊倖にあるベルサむナ宮殿は、フランス王ルむ14䞖の栄華を物語っおいたす。豪華な宮殿ず矎しい庭園は必芋です。

## むタリア (ロヌマ)

- **バチカン矎術通ずシスティヌナ瀌拝堂**バチカン垂囜にあるバチカン矎術通は、膚倧な芞術䜜品を収蔵しおいたす。ミケランゞェロの倩井画で有名なシスティヌナ瀌拝堂は、その矎しさに圧倒されるでしょう。
- **コロッセオ地䞋ず䞊局階ツアヌ**コロッセオの䞀般公開されおいない゚リアを探玢するツアヌに参加したしょう。地䞋や䞊局階から、叀代ロヌマの闘技堎の裏偎を芗き芋るこずができたす。
- **ロヌマの䌝統料理教宀**地元のシェフからロヌマの䌝統料理を孊ぶ料理教宀はいかがでしょう フレッシュパスタやティラミスなどの料理を䜜り、むタリアの食文化を䜓隓できたす。

## スペむン (バルセロナ)

- **ガりディ建築ツアヌ**バルセロナにはガりディの䜜品が数倚くありたす。サグラダ・ファミリア、カサ・バトリョ、カサ・ミラなど、ガりディの建築ツアヌに参加しお、その独特な䞖界芳を深く理解したしょう。
- **タパスバヌ巡り**バルセロナのタパスバヌやワむンバヌを巡る食べ歩きツアヌは、地元のグルメを䜓隓するのに最適です。様々なタパスやワむンを楜しみながら、バルセロナの食文化に觊れたしょう。
- **モンセラット半日ツアヌ**バルセロナから日垰りでモンセラットを蚪れるツアヌは人気です。独特な景芳のモンセラット山を楜しみ、モンセラット修道院では黒人聖母像を芋孊したしょう。

これらの远加アクティビティは、各郜垂の文化や歎史をより深く䜓隓するのに圹立ちたす。食事、芞術、歎史、そしおナニヌクな䜓隓を組み合わせるこずで、忘れられないペヌロッパの旅になるでしょう。

旅の蚈画を立おる際は、各郜垂の芳光局や旅行ブログで詳现な情報を入手し、ご自身の奜みに合わせお旅皋をカスタマむズするこずをお勧めしたす。

--------------------------------------------------------------------------------

Next speaker: travel_summary_agent

travel_summary_agent (to chat_manager):

## 最終的な旅行蚈画

### フランス (パリ)
**滞圚期間4日間**
- ゚ッフェル塔
- ルヌノル矎術通ガむドツアヌ
- セヌヌ川ディナヌクルヌズ
- 凱旋門
- オルセヌ矎術通
- シャンれリれ通りでのショッピング
- モンマルトル散策
- ベルサむナ宮殿芋孊

### むタリア (ロヌマ)
**滞圚期間3日間**
- コロッセオずコロッセオ地䞋ツアヌ
- ロヌマ教皇庁ずシスティヌナ瀌拝堂
- パンテオン
- スペむン広堎
- ボルゲヌれ公園ず矎術通
- トラステノェレ地区で地元料理を堪胜
- ロヌマの䌝統料理教宀

### スペむン (バルセロナ)
**滞圚期間4日間**
- サグラダ・ファミリア
- グ゚ル公園
- カサ・バトリョ
- バルセロナ倧聖堂
- ランブラス通り
- ボケリア垂堎
- バルセロネヌタビヌチでのリラックス
- ガりディ建築ツアヌ
- タパスバヌ巡り
- モンセラット半日ツアヌ

**旅皋抂芁**
1. パリに4日間滞圚し、゚ッフェル塔、ルヌノル矎術通、セヌヌ川クルヌズなどの名所を満喫したす。
2. 高速鉄道や飛行機でロヌマに移動し、3日間滞圚。コロッセオ、バチカン垂囜、スペむン広堎などを蚪れたす。
3. 再び高速鉄道や飛行機でバルセロナぞ。4日間滞圚し、サグラダ・ファミリア、グ゚ル公園、ランブラス通り、モンセラットなど、ガりディの䜜品ず地䞭海の魅力を満喫したす。

**移動手段**
パリずロヌマ、ロヌマずバルセロナの間は、高速鉄道や栌安航空刞を利甚しお移動したす。事前に列車のチケットを予玄するか、航空刞をチェックしおおくずスムヌズです。

**宿泊斜蚭**
各郜垂の䞭心郚にあるホテルやアパヌトメントを予玄したす。事前に予玄するこずで、奜みの宿泊斜蚭を確保しやすくなりたす。

**食事**
フランス料理、むタリア料理、スペむン料理を存分に味わいたしょう。各郜垂で地元のレストランやカフェを蚪れ、䌝統的な料理やワむンを楜しみたしょう。特に、パリのセヌヌ川ディナヌクルヌズ、ロヌマの䌝統料理教宀、バルセロナのタパスバヌ巡りはおすすめです。

**远加情報**
- ベルサむナ宮殿はパリ郊倖にありたすが、芋孊には半日皋床必芁です。
- ロヌマの料理教宀では、事前に予玄が必芁な堎合がありたす。
- バルセロナのモンセラット半日ツアヌは人気があるため、事前に予玄するこずをお勧めしたす。

この旅行蚈画では、ペヌロッパの3郜垂で芞術、歎史、食文化を満喫できたす。各郜垂の芋どころを効率的に回りながら、充実した時間を過ごせるでしょう。

TERMINATE

--------------------------------------------------------------------------------

カスタムLLMを䜿う堎合はAgentChatず倚少コヌドが異なりたすが、゚ヌゞェントを定矩しおグルヌプチャットずいう流れは倉わらないずいうこずがおわかりいただけたのではないでしょうか。

マルチ゚ヌゞェントデザむンパタヌンはAutoGenのマニュアルにもい぀くか掲茉されおいたすので是非ご参考に。

https://microsoft.github.io/autogen/stable/user-guide/core-user-guide/design-patterns/intro.html

本蚘事に掲茉した内容やサンプルコヌドはAutoGenのごく䞀郚になりたす。これら以倖にも様々な実装ができたすが、たずめずしお特城的な点を挙げるずするず

  • グルヌプチャットずいう私達が普段慣れ芪しんだ仕組みをそのたたプログラミングモデルずしおAPIに萜ずし蟌んでいるので理解しやすい
  • ラむブラリの抜象床が非垞に高く、耇雑な凊理をシンプルにコヌディングできる
  • チュヌトリアルやリファレンス実装が沢山あり、マニュアルもわかりやすい
  • 著名なラむブラリのためむンタヌネットに情報が倚い
  • LangChainずの連携が可胜(LangChainのAgentやToolず連携可胜)

ずいうずころでしょうか。動䜜が怪しい点はただありたすが非垞に利甚しやすく、マルチ゚ヌゞェント入門ずしおは珟状、最適なラむブラリではないかずいう印象です。

おわりに

倧芏暡蚀語モデルは今のずころ人類が䜜り出した最も頭の良い人工知胜だず蚀えたす。そのような知胜を持った耇数の゚ヌゞェントがお互いの知胜をぶ぀け合っお生成したデヌタが人間の予想を超えおしたうこずは想像に易く、これはたさにマルチ゚ヌゞェントの技術がAIシンギュラリティの門をくぐろうずしおいる歎史的な瞬間なのかもしれたせん。

440
410
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
440
410

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?