1. 記事の目的
近年、大規模言語モデル(LLM)の進化に伴い、複雑なタスクを自律的に実行するAIエージェントの実装が注目されています。
それぞれの違いについては良く知らなかったので、AIエージェント実装の主要なフレームワークである LangGraph、AutoGenに焦点を当てて実装方法の違いや特徴についてまとめています。
2. 比較の観点
以下の5つの観点から、各フレームワークを比較します。
- コアパラダイム: 各フレームワークがどのような設計思想に基づいているか。
- 柔軟性と制御の粒度: ワークフローの制御をどれだけ細かく、自由に設定できるか。
- 学習曲線: フレームワークの習熟に要する時間と労力。
- 得意なユースケース: 各フレームワークの強みが最も発揮されるのはどのようなタスクか。
- 利点と欠点: それぞれのフレームワークのメリットとデメリット。
3. 主要なAIエージェントフレームワークの概要
LangGraph
概要
LangChainの状態遷移グラフ(State-based Graph)を構築するためのライブラリです。従来のLangChainのワークフローが有向非巡回グラフ(DAG)であったのに対し、LangGraphはサイクリックグラフ、すなわちループ(循環)を含むグラフを構築できるのが最大の特徴です。これにより、エージェントが繰り返し思考や行動を修正するような複雑な意思決定プロセスを実装できます。
- コアパラダイム: 状態とノードに基づくグラフ実行
- 柔軟性と制御の粒度: 高い。ノードと状態を自由に定義し、低レベルでの制御が可能。
-
得意なユースケース:
- 反復的な問題解決: エラーが発生した場合に前のステップに戻って再試行する。
- フィードバックループ: ユーザーからのフィードバックを受けて、タスクを修正・再実行する。
- 複雑な意思決定: 複数の選択肢から状況に応じて最適なパスを動的に選択する。
AutoGen
概要
Microsoftが開発した、マルチエージェント対話に特化したフレームワークです。開発者やユーザーを含む複数のエージェントが、互いに会話するように協調してタスクを解決する点が特徴です。各エージェントは独自の役割と能力を持ち、特定のゴールに向けて自律的に議論を進めます。
- コアパラダイム: マルチエージェントによる協調的な対話
- 柔軟性と制御の粒度: 中程度。エージェント間の対話ルールや役割を定義することでタスクを制御。
-
得意なユースケース:
- ソフトウェア開発: コーダー、プランナー、テスターといった役割のエージェントが協力してコードを生成・デバッグする。
- 複雑なリサーチ: 複数のエージェントが異なる情報源を調査し、議論を通じて統合的な結論を導き出す。
- 意思決定支援: 複数の視点を持つエージェントが議論することで、多角的な分析を行う。
4. それぞれの実装方法の違い
今回、複数エージェントによる議論が行われるという想定で、それぞれのフレームワークでの実装方法と結果を確認していきます。
問題設定
「目玉焼きには塩か醤油か」を決めるために、異なる視点を持つエージェントを対立させ、仲裁者に最終的な結論を導かせる
構図としては以下の形になります
実装内容
どのコードも冒頭に以下の環境変数にAPIキーの設定がされている想定です。
import os
os.environ["GOOGLE_API_KEY"] = API_KEY
以下のコードでそれぞれのライブラリはインストールできます
!pip install --quiet langgraph autogen crewai
LangGrapgh
コード
from typing import TypedDict, Annotated, List
import operator
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
from langgraph.graph import StateGraph, END
from langchain_google_genai import ChatGoogleGenerativeAI # Google Geminiを使用する場合
# 状態を定義
class DebateState(TypedDict):
messages: Annotated[List[BaseMessage], operator.add]
topic: str
conclusion: str
# LLMを設定
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash")
# エージェントのノード関数を定義
def agent_salt(state: DebateState):
prompt_template = f"""あなたは目玉焼きに塩をかけることの利点を主張する専門家です。
議論のテーマ: {state['topic']}
これまでの議論: {state['messages']}
あなたの意見を述べてください。"""
response = llm.invoke(prompt_template)
return {"messages": [AIMessage(content=f"塩派の意見:{response.content}")]}
def agent_soy_sauce(state: DebateState):
prompt_template = f"""あなたは目玉焼きに醤油をかけることの利点を主張する専門家です。
議論のテーマ: {state['topic']}
これまでの議論: {state['messages']}
あなたの意見を述べてください。"""
response = llm.invoke(prompt_template)
return {"messages": [AIMessage(content=f"醤油派の意見:{response.content}")]}
def mediator(state: DebateState):
prompt_template = f"""あなたは中立的な立場から議論をまとめ、結論を導く仲裁者です。
議論のテーマ: {state['topic']}
これまでの議論: {state['messages']}
議論を続けるか、結論を出すか判断し、応答してください。
もし結論を出す場合は「結論:」という接頭辞を付けてください。
"""
response = llm.invoke(prompt_template)
content = response.content
if "結論:" in content:
return {"messages": [AIMessage(content=content)], "conclusion": content.split("結論:")[1].strip()}
else:
return {"messages": [AIMessage(content=content)], "conclusion": ""}
# 遷移ロジックを定義
def decide_next_step(state: DebateState):
if state['conclusion'] != "":
return "end"
# 議論の進行状況を見て次のエージェントを決定
last_message = state['messages'][-1].content if state['messages'] else ""
if "塩派" in last_message:
return "soy_sauce"
else:
return "salt"
# グラフを構築
workflow = StateGraph(DebateState)
workflow.add_node("salt", agent_salt)
workflow.add_node("soy_sauce", agent_soy_sauce)
workflow.add_node("mediator", mediator)
workflow.add_edge("salt", "mediator")
workflow.add_edge("soy_sauce", "mediator")
workflow.add_conditional_edges("mediator", decide_next_step, {"salt": "salt", "soy_sauce": "soy_sauce", "end": END})
workflow.set_entry_point("salt")
app = workflow.compile()
# 実行
initial_state = {"messages": [HumanMessage(content="目玉焼きには塩か醤油か、議論してください。")], "topic": "目玉焼きには塩か醤油か", "conclusion": ""}
# streamメソッドで議論の経過を逐次表示
print("--- 議論の開始 ---")
for step in app.stream(initial_state):
node_name = list(step.keys())[0]
output = step[node_name]
# 状態の変更を抽出して表示
if "messages" in output:
# メッセージが追加された場合、その内容を表示
for msg in output["messages"]:
print(f"[{node_name}]: {msg.content}")
# 結論が出たかどうかをチェック
if "conclusion" in output and output["conclusion"]:
print(f"--- 結論が導き出されました ---")
print(f"結論: {output['conclusion']}")
break
実行結果
--- 議論の開始 ---
[salt]: 塩派の意見:皆様、ご清聴ありがとうございます。本日の議論のテーマは「目玉焼きには塩か醤油か」という、非常に重要な、そして古来より論じられてきた喫食上の問題です。私は、長年目玉焼きと向き合い、その奥深き味わいを研究してきた専門家として、断言します。**目玉焼きには断然、塩が最適です。**
醤油派の皆様、ご意見は承知しております。醤油の旨味と香りが、黄身の濃厚さを引き立てる、という主張です。しかし、それは表面的な魅力に過ぎません。醤油は、目玉焼き本来の繊細な風味を覆い隠してしまうのです。
塩の利点は多岐に渡ります。
まず第一に、**塩は黄身の甘みを引き立てます。** 醤油の強い風味に比べ、塩は控えめながらも、黄身の自然な甘みを最大限に際立たせます。まるで、熟練の職人によって丁寧に磨き上げられた宝石のように、黄身の奥深い味わいを堪能できるのです。
第二に、**塩は、目玉焼きの全体的なバランスを整えます。** 醤油は、塩分と旨味が強く、白身のあっさりとした風味とバランスが悪くなってしまう可能性があります。一方、塩は適量であれば、白身と黄身の調和を完璧に導き、一口ごとに幸せを感じられる、絶妙なハーモニーを生み出します。
第三に、**塩は、シンプルだからこそ、目玉焼きの質を見極めることができます。** 新鮮な卵であれば、塩一つでその美味しさが際立ちます。一方、質の低い卵は、醤油で誤魔化すことはできても、塩ではその欠点が露呈します。つまり、塩は目玉焼きの真価を見極める試金石となるのです。
第四に、**塩は、汎用性が高いです。** 色々な種類の塩を試すことで、目玉焼きの味わいを無限に広げることができます。粗塩、藻塩、ヒマラヤピンクソルト… それぞれの塩の個性が、目玉焼きに新たな魅力を与えてくれるでしょう。醤油では、このようなバリエーションは望めません。
最後に、シンプルイズベストです。目玉焼きは、素材の良さを楽しむ料理です。余計な味付けは不要です。塩は、その素材の良さを最大限に引き出す、最高のスパイスなのです。
以上のことから、私は目玉焼きには塩が最適であると結論付けます。醤油派の皆様、一度、塩で目玉焼きを召し上がってみてください。きっと、目玉焼きへの新たな境地が開けることでしょう。 ご静聴ありがとうございました。
[mediator]: 塩派の主張は非常に熱意があり、塩の利点を多角的に論じています。黄身の甘みを引き立て、全体的なバランスを整え、卵の質を見極める試金石となり、また様々な塩のバリエーションを楽しめると主張しています。 しかしながら、これはあくまで塩派の視点であり、醤油派の意見は全く考慮されていません。
醤油派の意見を聴取せずに結論を出すことは、公正な仲裁とは言えません。 醤油が持つ旨味や香りによる黄身の風味増強効果、あるいは個人の嗜好による醤油の好みに対する言及が欠けています。
よって、議論を継続し、醤油派の意見を詳細に聞き取る必要があります。 醤油派の主張を明確に提示してもらい、塩派の主張と比較検討することで、より客観的な結論を導き出すことが可能となります。
そのため、結論を出すことは現時点ではできません。 醤油派の皆様、ご自身の主張を具体的に説明してください。 例えば、どのような醤油が適しているか、どのような風味の相乗効果が期待できるかなど、詳細な説明をお願いします。
[soy_sauce]: 醤油派の意見:皆様、ご清聴ありがとうございます。先程の塩派の熱心なご主張、拝聴いたしました。しかしながら、目玉焼きに「塩」が最適という結論には、私は強く異議を唱えます。長年、世界中の卵料理を研究し、数千個の目玉焼きを食してきた専門家として、断言します。**目玉焼きには、醤油が最適です。**
塩派の皆様は、醤油が黄身の繊細な風味を覆い隠す、と主張されました。しかし、それは醤油の選び方、そしてかけ方を知らないが故の誤解です。塩が黄身の甘みを引き立てるように、**良質な醤油は、黄身の旨味とコクを何倍にも増幅させる力を持っています。**
醤油の利点は多岐に渡ります。
第一に、**醤油は、黄身の奥深さを引き出す魔法の調味料です。** 塩は黄身の甘みを引き出すと言いますが、醤油は甘みだけでなく、旨味、コク、そして奥行きのある風味を同時に引き出します。それは、単なる甘みだけでは決して味わえない、複雑で豊かな風味です。まるで、熟成されたワインのような、深みのある味わいを堪能できるのです。
第二に、**醤油は、白身との絶妙なバランスを生み出します。** 塩派は、醤油の塩分と旨味が白身とバランスが悪いと主張されましたが、それは濃い口醤油や、かけ過ぎた場合の話です。薄口醤油を使用したり、少量を垂らすことで、白身の淡白さを補い、全体を調和のとれた風味に仕上げることができるのです。
第三に、**醤油は、目玉焼きに奥行きのある香りを加えます。** 醤油は、塩にはない豊かな香りを持っています。その香りは、目玉焼き全体に広がり、食欲をそそるだけでなく、五感を満たす至福の体験をもたらします。
第四に、**醤油は、様々なバリエーションを楽しめます。** 塩のように様々な種類があるわけではありませんが、濃い口、薄口、甘口など、醤油の種類によって、目玉焼きの味わいは大きく変化します。さらに、だし醤油や、柑橘系の醤油を使用するなど、無限のバリエーションを楽しむことができるのです。
第五に、**醤油は、日本の伝統と文化を象徴する調味料です。** 目玉焼きに醤油をかける行為は、単なる味付けを超え、日本の食文化を体現する行為と言えるでしょう。
最後に、シンプルであることだけが、良いとは限りません。適切な調味料を用いることで、料理はより美味しく、より奥深いものとなるのです。醤油は、目玉焼きの潜在能力を最大限に引き出す、最高の調味料なのです。
以上のことから、私は目玉焼きには醤油が最適であると結論付けます。塩派の皆様、一度、良質な醤油で作った目玉焼きを召し上がってみてください。きっと、目玉焼きへの新たな境地が開けることでしょう。ご静聴ありがとうございました。
[mediator]: 両者の主張を精査した結果、結論を出すには、個人の嗜好や使用する材料の質、調理法など、考慮すべき要素が多すぎるため、一概に「塩」か「醤油」のどちらが最適と断言することはできません。
塩派は、塩が黄身の甘みを引き立て、全体的なバランスを整え、卵の質を見極める試金石となり、様々なバリエーションを楽しめると主張しました。醤油派は、醤油が黄身の旨味とコクを増幅させ、白身とのバランスを調整し、豊かな香りを加え、様々なバリエーションを楽しめると主張しました。 どちらもそれぞれの調味料の利点を強調し、熱意を持って主張しています。
重要な点は、両者とも「目玉焼きの美味しさを最大限に引き出す」という共通の目的を持っていることです。 塩が最適な場合もあれば、醤油が最適な場合もある、という結論に至ります。 最適な調味料の選択は、個人の好み、使用する卵の質、その他の調理条件に依存する、主観的な要素が強いと言えます。
結論:目玉焼きに塩か醤油かという問いに対しては、絶対的な正解はなく、個人の嗜好や状況によって最適な調味料は変化する、と結論付けます。 どちらの調味料も、適切に使用すれば、目玉焼きの美味しさを引き出すことができるでしょう。
--- 結論が導き出されました ---
結論: 目玉焼きに塩か醤油かという問いに対しては、絶対的な正解はなく、個人の嗜好や状況によって最適な調味料は変化する、と結論付けます。 どちらの調味料も、適切に使用すれば、目玉焼きの美味しさを引き出すことができるでしょう。
AutoGen
コード
import autogen
import os
# LLM設定リストを定義
# OpenAIのAPIキーは環境変数から自動で読み込まれます
#config_list_openai = autogen.config_list_openai_aoai()
# Google Geminiを使用する場合は以下のように定義
config_list_gemini = [
{
"model": "gemini-1.5-flash",
"api_type": "google",
"api_key": os.environ.get("GOOGLE_API_KEY"),
}
]
# エージェントの定義
salt_expert = autogen.AssistantAgent(
name="SaltExpert",
llm_config={"config_list": config_list_gemini}, # ここでLLMを設定
system_message="""あなたは、目玉焼きに塩をかけることの利点を主張する専門家です。
塩は卵の風味を引き立て、繊細な味わいを楽しめると主張してください。
他のエージェントの意見にも反論しながら、議論を進めてください。"""
)
soy_sauce_expert = autogen.AssistantAgent(
name="SoySauceExpert",
llm_config={"config_list": config_list_gemini}, # ここでLLMを設定
system_message="""あなたは、目玉焼きに醤油をかけることの利点を主張する専門家です。
醤油の香ばしさと旨味が、より深い味わいを生み出すと主張してください。
他のエージェントの意見にも反論しながら、議論を進めてください。"""
)
mediator = autogen.AssistantAgent(
name="Mediator",
llm_config={"config_list": config_list_gemini}, # ここでLLMを設定
system_message="""あなたは、中立的な立場から議論をまとめ、最終的な結論を導く仲裁者です。
両者の意見を尊重し、結論が出たら「結論:」という接頭辞を付けて結論を述べてください。"""
)
user_proxy = autogen.UserProxyAgent(
name="User_Proxy",
human_input_mode="NEVER",
max_consecutive_auto_reply=10,
is_termination_msg=lambda x: "結論:" in x.get("content", ""), # 終了条件に「結論:」を使用
code_execution_config={"work_dir": "coding", "use_docker": False},
)
# グループチャットを設定
groupchat = autogen.GroupChat(
agents=[salt_expert, soy_sauce_expert, mediator],
messages=[],
max_round=5,
# verbose=True にするとさらに詳細なログが出力される
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config={"config_list": config_list_gemini})
# 議論を開始
print("--- 議論の開始 ---")
user_proxy.initiate_chat(
manager,
message="目玉焼きには塩と醤油、どちらが良いか議論してください。"
)
details
--- 議論の開始 ---
User_Proxy (to chat_manager):
目玉焼きには塩と醤油、どちらが良いか議論してください。
--------------------------------------------------------------------------------
Next speaker: SaltExpert
SaltExpert (to chat_manager):
目玉焼きに塩と醤油、どちらが良いか?この問いに断言できる答えなどありません。好みは千差万別です。しかし、私が専門家として断言できるのは、**塩こそが、目玉焼きの繊細な風味を最大限に引き出す、唯一無二の調味料である**ということです。醤油は、あくまで「選択肢の一つ」でしかありません。
醤油派の方々は、醤油の旨味やコクが卵黄の濃厚さをさらに増幅させると主張されるでしょう。しかし、それは「醤油の風味」が前面に出ているに過ぎません。せっかくの新鮮な卵、そしてその白身と黄身の微妙なバランス、繊細な風味…これらを醤油の強い風味が覆い隠してしまう危険性があるのです。まるで、美しい絵画に、雑な落書きを重ねるようなものです。
塩は違います。塩は、卵本来の旨味を引き出す「引き立て役」として機能します。少量の塩が、卵黄の甘味、白身の優しい風味を際立たせ、それらの奥深さを引き出します。それは、料理に華を添える繊細なスパイスのようなものです。塩加減を調整することで、濃厚な味わいを求める方にも、あっさりとした味わいを好む方にも、それぞれに最適な塩梅を見つけることができるのです。
醤油は、すでに複雑な味付けがされています。そのため、卵本来の風味を損なう可能性が高いと言えるでしょう。一方、塩は純粋にミネラルの結晶。それは、何も足さない、何も引かない、卵本来の味を最大限に楽しむための最高のスパイスなのです。
「醤油の旨味が良い」という主張は、卵の個性よりも、醤油の個性を優先していると言えるでしょう。しかし、真の目玉焼きの美味しさを追求するなら、卵そのものの魅力を最大限に引き出す塩こそが、最適な選択であると、私は主張します。 繊細な味わいを求めるならば、ぜひ一度、塩だけで目玉焼きを味わってみてください。その奥深さに、あなたはきっと驚かれるでしょう。
--------------------------------------------------------------------------------
Next speaker: SoySauceExpert
SoySauceExpert (to chat_manager):
塩が優れているというご主張、大変興味深く拝聴いたしました。しかしながら、私は目玉焼きに醤油をかけることの利点を専門家として主張いたします。 塩が卵本来の風味を引き立てるという点については私も同意しますが、それは「塩が最適」という結論を導く論拠としては不十分です。
確かに塩は卵の風味を引き立てますが、それは「シンプルな美味しさ」に限定された話です。醤油は塩とは異なり、**複雑な旨味と香ばしさ**を提供します。 醤油の持つ大豆由来の濃厚な旨味、そしてローストされたような香ばしさは、卵黄の濃厚さを単に引き立てるだけでなく、**全く新しい次元へと高める**のです。 これは塩では決して実現できない、醤油ならではの付加価値です。
「醤油の強い風味が卵の風味を覆い隠してしまう」というご懸念は、醤油の量と質を無視した偏った意見と言わざるを得ません。適切な量の良質な醤油を使用すれば、卵本来の風味を損なうどころか、**その風味を深化させ、複雑さを増す**ことが可能です。それは、優れた画家が、ベースとなる絵画に繊細な筆致で彩りを加えるようなものです。
塩が「何も足さない、何も引かない」という主張も、私は疑問視します。塩もまた、明確な「味」を持っています。醤油は、より複雑な味のレイヤーを提供するだけであり、「雑な落書き」などではありません。むしろ、それは**熟練の技が織りなす、奥深い芸術**と言えるでしょう。
つまり、塩が「繊細な味わいを求める」方にとって最適な選択であると断言することはできません。 **醤油は、より複雑で、より奥深い、より豊かな味わいを求める方にとって最適な選択となる**のです。 「醤油の個性を優先している」と批判されるかもしれませんが、それは「卵の個性を高めるための、最適な個性の追加」と捉えるべきでしょう。ぜひ一度、良質な醤油を、適切な量で目玉焼きにかけてみてください。 その奥深さに、きっと驚かれるでしょう。
--------------------------------------------------------------------------------
Next speaker: Mediator
Mediator (to chat_manager):
両者の主張を精査すると、塩と醤油、どちらが優れているかという問いには、明確な正解はなく、個人の嗜好に大きく依存することがわかります。
塩を支持する側は、塩が卵本来の風味を際立たせ、繊細な味わいを引き出す点に焦点を当てています。シンプルながらも奥深い、卵本来の美味しさを最大限に楽しむためには、塩が最適であると主張しています。
一方、醤油を支持する側は、醤油が持つ複雑な旨味と香ばしさが、卵黄の濃厚さをさらに高め、新たな次元へと味を昇華させると主張しています。適切な量と質の醤油を使用することで、卵本来の風味を損なうどころか、深化させることができると反論しています。
結論として、どちらの調味料が「良い」かという問いには、客観的な基準による決定的な答えは存在しません。 塩はシンプルで繊細な味わい、醤油は複雑で奥深い味わいをそれぞれ提供し、どちらも目玉焼きの美味しさを引き出す有効な手段です。 最適な調味料の選択は、最終的には個人の好みに委ねられるべきです。
結論:目玉焼きに塩と醤油、どちらが優れているかは、個人の嗜好によって異なり、どちらを選んでも間違いではない。
--------------------------------------------------------------------------------
Next speaker: Mediator
Mediator (to chat_manager):
議論をさらに深めるために、それぞれの調味料が持つ特性と、それらが目玉焼きの様々な側面にどのように影響するかを整理してみましょう。
**塩の特性と目玉焼きへの影響:**
* **シンプルさ:** 塩は、卵本来の風味を邪魔することなく引き立てる、シンプルな調味料です。卵の甘み、白身の風味、黄身の濃厚さを際立たせます。
* **調整の容易さ:** 少量ずつ加えることで、好みに合わせた塩加減を簡単に調整できます。あっさりとした仕上がりから濃厚な仕上がりまで、幅広いバリエーションが可能です。
* **素材の質が重要:** 塩の質によって、仕上がりの味が大きく変わる可能性があります。良質な塩を使用することで、より繊細な味わいを引き出すことができます。
**醤油の特性と目玉焼きへの影響:**
* **複雑な旨味と香り:** 醤油は大豆、小麦、塩などを発酵・熟成させた複雑な調味料です。旨味、塩味、そして醤油の種類によっては甘味や酸味、香りも加わります。これらが卵黄の濃厚さと相まって、より奥深い味わいを生み出します。
* **色の変化:** 醤油を加えることで、目玉焼きの色合いにも変化が生まれます。醤油の濃淡によって、仕上がり具合を調整できます。
* **使用量の調整が重要:** 醤油は塩に比べて味が濃いので、使用量を適切に調整することが重要です。量が多すぎると、卵本来の味が消されてしまう可能性があります。 また、醤油の種類によっても味が大きく変わるため、使用する醤油の特性を理解することが必要です。
**結論として、再び:**
塩と醤油は、目玉焼きという料理に対して異なるアプローチを提供する調味料です。 どちらが優れているかではなく、どのような味わい、どのような食感、どのような見た目、そして最終的にどのような「体験」を求めるかによって、最適な調味料を選択することが重要です。 「塩派」と「醤油派」の対立は、どちらか一方の優劣ではなく、異なる好みや価値観の表れと言えるでしょう。 それぞれの調味料の特性を理解し、自分の好みに合わせて使い分けることで、より豊かな目玉焼き体験を得ることができるはずです。
結論:目玉焼きに最適な調味料は、塩と醤油のどちらか一方ではなく、個人の好みに応じて使い分けるべきである。 それぞれの調味料が持つ特性を理解した上で、最適な組み合わせや調整を行うことで、より満足度の高い目玉焼きを楽しむことができる。
--------------------------------------------------------------------------------
>>>>>>>> TERMINATING RUN (6c8f2731-2ac4-4a89-b6ab-8970c34af37a): Maximum rounds (5) reached
ChatResult(chat_id=None, chat_history=[{'content': '目玉焼きには塩と醤油、どちらが良いか議論してください。', 'role': 'assistant', 'name': 'User_Proxy'}], summary='目玉焼きには塩と醤油、どちらが良いか議論してください。', cost={'usage_including_cached_inference': {'total_cost': 0}, 'usage_excluding_cached_inference': {'total_cost': 0}}, human_input=[])
結果
結局、生成AIを駆使しても目玉焼きには醤油か塩かの議論に終止符を打つことはできませんでしたが、エージェント実装(特にマルチエージェント間で議論を行う場合)が比較的簡単に実装できることが確認できました。
5. 最後に
個人的には、LangGraphはできることの自由度が高いものの、StateやNodeといった概念の理解が難しく、理解して使えるまでに時間がかかりました。
一方、AutoGenは実装が簡単でプロトタイプなどをさっとつくる時には役立ちそうだな、という印象でした。とはいえ、公式ドキュメントを見るとAutoGenにもワークフローなどを実装する機能はあったので、ほかにも出来ることはありそうでした。
最近だと、GoogleやOpenAIも独自のSDKを発表していたりする()ので、それらのキャッチアップも急務になってくる印象です。