AIエージェントを使うとAIに判定させつつFunction Callingよりも柔軟に動作させることができます。
LangChainエージェントを使ったサンプルがこちら。
Sample
import os from typing import Literal, TypedDict from langchain_openai import OpenAI from langgraph.graph import END, StateGraph openai_api_key = os.environ.get("OPENAI_API_KEY") llm = OpenAI(openai_api_key=openai_api_key) class GreetState(TypedDict, total=False): clothing_description: str status: Literal["高い", "普通"] greeting: str def judge_status(state: GreetState) -> GreetState: description = state["clothing_description"] if "スーツ" in description or "礼服" in description: status = "高い" else: status = "普通" return {"status": status} def greet_by_status(state: GreetState) -> GreetState: status = state["status"] if status == "高い": greeting = "お世話になっております。どうぞよろしくお願いいたします。" else: greeting = "やあ、元気?" return {"greeting": greeting} # グラフ(状態機械)作成 graph = StateGraph(GreetState) # ノード登録 graph.add_node("judge_status", judge_status) graph.add_node("greet_by_status", greet_by_status) # 遷移定義 graph.set_entry_point("judge_status") graph.add_edge("judge_status", "greet_by_status") graph.add_edge("greet_by_status", END) # グラフ完成 executable_graph = graph.compile() # --- 実行部分 --- user_input = "Tシャツを着た相手に挨拶して" final_state = executable_graph.invoke({"clothing_description": user_input}) print("\n最終出力:", final_state["greeting"]) user_input = "豪華絢爛な礼服に身を包んだ相手に挨拶して" final_state = executable_graph.invoke({"clothing_description": user_input}) print("\n最終出力:", final_state["greeting"])
実行結果
> python .\test.py 最終出力: やあ、元気? 最終出力: お世話になっております。どうぞよろしくお願いいたします。
AIエージェントは通常のスクリプトと比べてなにがよい(or よくない)のか?
AIエージェントは状況に応じてフローを変えたり、追加の情報取得を自律的に行う柔軟性が強みです。一方でAPIのコストが高い(何度も実施するので)ほか、結果が安定しない悩みも抱えます。
スクリプトはこの逆です。
AIエージェントはスクリプトの上位互換ではありません。入力があいまいであったり柔軟性が必要である場合はAIエージェントが強いのですが、入力が定型でプロセスもきっちり決まっている用途だとスクリプトのほうが向きます。