見出し画像

LangChain v0.2 で エージェントを構築

「LangChain v0.2」で エージェントを構築してみます。

Build an Agent

・LangChain v0.2.0


前回

1. LangChainのセットアップ

(1) パッケージのインストール。

# パッケージのインストール
!pip install langchain
!pip install langchain-openai
!pip install langchain_community
!pip install langgraph
!pip install faiss_cpu

(2) 環境変数の準備。
左端の鍵アイコンで「OPENAI_API_KEY」を設定してからセルを実行してください。

import os
from google.colab import userdata

# 環境変数の準備 (左端の鍵アイコンでOPENAI_API_KEYを設定)
os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")

2. ツールの準備

今回は、「Tavily」 (オンライン検索用) と「Retriever」(ローカルインデックス)の2つのツールを使います。

2-1. Tavilyツールの準備

LangChain には、検索エンジン「Tavily」の組み込みツールが提供されています。APIキーが必要ですが、無料利用枠があります。

(1) 環境変数の準備。
左端の鍵アイコンで「TAVILY_API_KEY」を設定してからセルを実行してください。

import os
from google.colab import userdata

# 環境変数の準備 (左端の鍵アイコンでTAVILY_API_KEYを設定)
os.environ["TAVILY_API_KEY"] = userdata.get("TAVILY_API_KEY")

(2) Tavilyツールの準備と実行。

from langchain_community.tools.tavily_search import TavilySearchResults

# Tavilyツールの準備
search = TavilySearchResults(max_results=2)

# Tavilyツールの実行
search.invoke("東京の天気は?")
[{'url': 'https://tenki.jp/forecast/3/16/',
  'content': '東京都の天気予報です。市区町村別の今日の天気、気温、降水確率が地図上に表示されているので、ひと目でわかります。タブ切り替えで10日間 ...'},
 {'url': 'https://weathernews.jp/onebox/35.691667/139.750000/q=東京&v=7568ec9017b1ee619b719b2e27bb2222ff3533c3d047419f40d2980258c0a799&temp=Temp.c&lang=ja',
  'content': '{{item.cityname}}\n天気予報を検索\n天気\n防災・減災\n自然・季節・健康\n便利なメニュー\nほか全メニュー\n60時間先までの雪雲の動きを確認|東京\n東京の天気予報\n5分ごと\n1時間ごと\n今日明日\n週間天気\n日\n天気\n気温\n降水\n確率\n今日\n2月6日 (火)\n最高4℃\n最低0℃\n午前70%\n午後40%\n明日\n2月7日 (水)\n最高8℃\n最低1℃\n午前10%\n午後0%\n路面状況に注意\u3000厳しい寒さ\n今日は雲が多く、雨や雪の降りやすい天気です。昼間は極寒で、万全な防寒が必須。路面凍結や積雪で交通機関が乱れている可能性があるため、早めの行動を。\n5分ごと\n1時間ごと\n時\n分\n天気\n11時\n・\nポツポツ\n20\nポツポツ\n・\nパラパラ\n30\nパラパラ\n・\nパラパラ\n40\nパラパラ\n・\nパラパラ\n50\nパラパラ\n・\nパラパラ\n12時\n00\nポツポツ\n・\nポツポツ\n10\nポツポツ\n日\n時\n天気\n降水\n気温\n風\n6日(火)\n12\n0\n2℃\n3m\n13\n0\n3℃\n2m\n14\n0\n3℃\n2m\n15\n0\n4℃\n2m\n16\n0\n4℃\n2m\n17\n0\n3℃\n2m\n18\n0\n4℃\n2m\n19\n0\n3℃\n2m\n20\n0\n3℃\n2m\n21\n0\n3℃\n2m\n22\n0\n3℃\n2m\n23\n0\n3℃\n2m\n7日(水)\n0\n0\n3℃\n2m\n1\n0\n3℃\n2m\n2\n0\n2℃\n2m\n3\n0\n2℃\n2m\n4\n0\n2℃\n2m\n5\n0\n1℃\n2m\n6\n0\n1℃\n2m\n7\n0\n1℃\n2m\n8\n0\n2℃\n2m\n9\n0\n3℃\n2m\n10\n0\n4℃\n2m\n11\n0\n6℃\n2m\n12\n0\n7℃\n2m\n13\n0\n7℃\n2m\n14\n0\n8℃\n2m\n15\n0\n8℃\n2m\n16\n0\n7℃\n2m\n17\n0\n5℃\n2m\n18\n0\n5℃\n2m\n19\n0\n4℃\n2m\n20\n0\n4℃\n2m\n21\n0\n4℃\n2m\n22\n0\n3℃\n2m\n23\n0\n3℃\n2m\n8日(木)\n0\n0\n3℃\n2m\n1\n0\n2℃\n2m\n2\n0\n2℃\n2m\n3\n0\n2℃\n2m\n4\n0\n2℃\n2m\n5\n0\n1℃\n2m\n6\n0\n1℃\n2m\n7\n0\n2℃\n2m\n8\n0\n3℃\n2m\n9\n0\n4℃\n2m\n10\n0\n6℃\n2m\n11\n0\n8℃\n2m\n12\n0\n9℃\n2m\n13\n0\n10℃\n2m\n14\n0\n10℃\n2m\n15\n0\n10℃\n2m\n16\n0\n9℃\n2m\n17\n0\n8℃\n2m\n18\n0\n7℃\n2m\n19\n0\n6℃\n3m\n20\n0\n6℃\n3m\n21\n0\n5℃\n4m\n22\n0\n5℃\n3m\n23\n0\n4℃\n3m\n9日(金)\n0\n0\n4℃\n2m\n1\n0\n3℃\n2m\n2\n0\n3℃\n2m\n3\n0\n3℃\n2m\n4\n0\n2℃\n2m\n5\n0\n2℃\n2m\n6\n0\n2℃\n2m\n7\n0\n2℃\n2m\n8\n0\n3℃\n2m\n9\n0\n4℃\n2m\n10\n0\n5℃\n2m\n11\n0\n7℃\n2m\n路面状況に注意\u3000厳しい寒さ\n今日は雲が多く、雨や雪の降りやすい天気です。昼間は極寒で、万全な防寒が必須。路面凍結や積雪で交通機関が乱れている可能性があるため、早めの行動を。\n週間(10日間)\n日\n天気\n最高\n最低\n降水\n7(水)\n8℃\n1℃\n20%\n8(木)\n10℃\n1℃\n20%\n9(金)\n10℃\n2℃\n30%\n10(土)\n11℃\n3℃\n30%\n11(日)\n13℃\n2℃\n20%\n12(月)\n12℃\n3℃\n20%\n13(火)\n14℃\n2℃\n20%\n14(水)\n16℃\n5℃\n20%\n15(木)\n17℃\n6℃\n40%\n16(金)\n16℃\n8℃\n40%\n落ち着いた天気と寒さが続く\n日差しが届き、落ち着いた天気の日が多くなります。この時期らしい寒さが続きそうです。体調を崩さないように、引き続き防寒を万全に行ってください。\nお天気ニュース\n東京都心周辺でも積雪残る\u3000滑りやすいシャーベット状の雪 足元注意\n2024.02.06 07:59\n東京など関東南部はこの冬一番の寒さに\u3000雲優勢で気温が上がらず\n2024.02.06 09:11\n関東は冷たい雨\u3000段々と止むもすっきり回復はせず\n2024.02.06 09:52\nお天気ニュースをもっと読む →\nお天気ニュース\n東京都心周辺でも積雪残る\u3000滑りやすいシャーベット状の雪 足元注意\n2024.02.06 07:59\n東京など関東南部はこの冬一番の寒さに\u3000雲優勢で気温が上がらず\n2024.02.06 09:11\n関東は冷たい雨\u3000段々と止むもすっきり回復はせず\n2024.02.06 09:52\nお天気ニュースをもっと読む →\n東京付近の天気\n雨雲レーダー\n地図を拡大\n今の天気\nグラフ\n10:50\n空の写真\n空の写真をもっと見る\nライブ動画番組\n【ライブ放送中】最新地震・気象情報\u3000ウェザーニュースLiVE\n東京付近の観測値\n(℃)\n(m/s)\n(mm/h)\n(分)\n続きを見る\n東京都の都市の天気予報\n周辺の都道府県\nお天気ニュース\n今日2月6日(火)の天気予報\u3000関東は雪や雨残る\u3000滑りやすい足元に注意\n2024.02.06 05:38\nお天気キャスター解説\u30002月6日(火)の天気\n2024.02.06 05:58\n2月6日(火)の洗濯天気予報\u3000愛知周辺や九州南部は外干しOK\n2024.02.06 06:08\nひと目でわかる傘マップ\u30002月6日(火)\n2024.02.06 06:03\n週間天気\u3000関東など太平洋側は晴れる日多い\u3000この時期らしい寒さ続く\n2024.02.06 05:41\nお天気ニュースをもっと読む →\nいまおすすめのメニュー\n雨雲レーダー\n雨雲の動きと予想を確認\nウェザーリポート\n全国から届くお天気リポート\n防災・減災メニュー\n天気メニュー\n自然・季節・レジャー情報\n予報精度向上の取り組みについて\n東京付近の空の写真\nウェザーニュース'}]

2-2. Retrieverツールの準備

(3) ドキュメントとVectorStoreとRetrieverの準備。
ドキュメントは、「WebBaseLoader」を使ってLangChainのドキュメントのトップページ(https://python.langchain.com/)の情報を使っています。

from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

# ドキュメントの準備
loader = WebBaseLoader("https://python.langchain.com/")
docs = loader.load()
documents = RecursiveCharacterTextSplitter(
    chunk_size=1000, chunk_overlap=200
).split_documents(docs)

# VectorStoreの準備
vector = FAISS.from_documents(documents, OpenAIEmbeddings())

# Retrieverの準備
retriever = vector.as_retriever()

(4) クエリ。

# 質問応答
retriever.invoke("LangSmithとは?")[0]
Document(page_content="for toolsHow to create and query vector storesConceptual guideEcosystem\uf8ffü¶ú\uf8ffüõ†Ô∏è LangSmith\uf8ffü¶ú\uf8ffüï∏Ô∏èLangGraph\uf8ffü¶úÔ∏è\uf8ffüèì LangServeVersionsOverviewRelease PolicyPackagesv0.2LangChain v0.2astream_events v2ChangesSecurityIntroductionOn this pageIntroductionLangChain is a framework for developing applications powered by large language models (LLMs).LangChain simplifies every stage of the LLM application lifecycle:Development: Build your applications using LangChain's open-source building blocks and components. Hit the ground running using third-party integrations and Templates.Productionization: Use LangSmith to inspect, monitor and evaluate your chains, so that you can continuously optimize and deploy with confidence.Deployment: Turn any chain into an API with LangServe.Concretely, the framework consists of the following open-source libraries:langchain-core: Base abstractions and LangChain Expression Language.langchain-community: Third party integrations.Partner packages (e.g.", metadata={'source': 'https://python.langchain.com/', 'title': 'Introduction | \uf8ffü¶úÔ∏è\uf8ffüîó LangChain', 'description': 'LangChain is a framework for developing applications powered by large language models (LLMs).', 'language': 'en'})

LangSmithの情報を引き出しています。

(5) Retrieverツールの準備

from langchain.tools.retriever import create_retriever_tool

# Retrieverツールの準備
retriever_tool = create_retriever_tool(
    retriever,
    "langchain_search",
    "LangChainに関する情報を検索します。LangChainに関する質問がある場合は、このツールを使用する必要があります。",
)

2-3. ツールの準備

(1) ツールの準備。

# Toolsの準備
tools = [search, retriever_tool]

4. ツール付きLLMの準備

(1) LLMの準備。

from langchain_openai import ChatOpenAI

# LLMの準備
llm = ChatOpenAI(model="gpt-4o")

(2) ツール付きLLMの準備。

# ツール付きLLMの準備
llm_with_tools = llm.bind_tools(tools)

(3) ツールは使わない質問応答。

from langchain_core.messages import HumanMessage

# ツールは使わない質問応答
response = llm_with_tools.invoke([HumanMessage(content="こんにちは")])
print("ContentString:", response.content)
print("ToolCalls:", response.tool_calls)
ContentString: こんにちは!今日はどんなお手伝いをしましょうか?
ToolCalls: []

(4) Tavilyツールを使う質問応答。

# Tavilyツールを使う質問応答
response = llm_with_tools.invoke([HumanMessage(content="東京の天気はどうですか?")])
print("ContentString:", response.content)
print("ToolCalls:", response.tool_calls)
ContentString: 
ToolCalls: [{'name': 'tavily_search_results_json', 'args': {'query': '東京の天気'}, 'id': 'call_6BviuuHoy0WJYO5tPhOBYURP'}]

(5) Retrieverツールを使う質問応答。

# Retrieverツールを使う質問応答
response = llm_with_tools.invoke([HumanMessage(content="LangSmithとは?")])
print("ContentString:", response.content)
print("ToolCalls:", response.tool_calls)
ContentString: 
ToolCalls: [{'name': 'langchain_search', 'args': {'query': 'LangSmith'}, 'id': 'call_cuGk2YjH7JASHEGlZaHT2SJw'}]

5. エージェント

ツールと LLM を定義したので、エージェントを作成します。「LangGraph」を使用してエージェントを構築します。

(1) エージェントの準備。

from langgraph.prebuilt import chat_agent_executor

# エージェントの準備
agent_executor = chat_agent_executor.create_tool_calling_executor(llm, tools)

(2) ツールは使わない質問応答。

# ツールを使わない質問応答
response = agent_executor.invoke(
    {"messages": [HumanMessage(content="こんにちは")]}
)
response["messages"][-1].content
こんにちは!今日はどのようなご用件でしょうか?

(4) Tavilyツールを使う質問応答。

# Tavilyツールを使う質問応答
response = agent_executor.invoke(
    {"messages": [HumanMessage(content="東京の天気は?")]}
)
response["messages"][-1].content
東京の現在の天気は晴れ時々曇りです。気温は約8°Cで、夜はさらに冷え込む予報です。また、明日も曇りのち晴れで、気温は最高13°C、最低5°Cの予報です。

(5) Retrieverツールを使う質問応答。

# Retrieverツールを使う質問応答
response = agent_executor.invoke(
    {"messages": [HumanMessage(content="LangSmithとは?")]}
)
response["messages"][-1].content
LangSmithは、LangChainフレームワークの一部であり、以下の機能を提供する開発者向けプラットフォームです。

- **デバッグ**:LLM(大規模言語モデル)アプリケーションのデバッグを行うことができます。
- **テスト**:アプリケーションの動作をテストする機能を提供します。
- **評価**:アプリケーションのパフォーマンスや結果を評価するためのツールを備えています。
- **モニタリング**:アプリケーションの動作を継続的に監視し、最適化するための機能が含まれています。

LangSmithを使用することで、LLMアプリケーションをより効率的に開発、最適化、デプロイすることが可能になります。

6. メッセージのストリーミング

エージェントが複数のステップを実行している場合は、時間がかかることがあります。 中間の進行状況を示すために、メッセージが発生したときにメッセージをストリームバックできます。

(1) メッセージのストリーミング。

for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="東京の天気は?")]}
):
    print(chunk)
    print("--")
{'agent': {'messages': [AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_v5M35XTInpuvJ5K6kCSm3ezW', 'function': {'arguments': '{"query":"東京の天気"}', 'name': 'tavily_search_results_json'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 21, 'prompt_tokens': 138, 'total_tokens': 159}, 'model_name': 'gpt-4o', 'system_fingerprint': 'fp_729ea513f7', 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-8d236ab3-b892-4990-a448-c97f1e5f5c6e-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '東京の天気'}, 'id': 'call_v5M35XTInpuvJ5K6kCSm3ezW'}])]}}
----
{'tools': {'messages': [ToolMessage(content='[{"url": "https://weathernews.jp/onebox/35.691667/139.750000/q=\\u6771\\u4eac&v=7568ec9017b1ee619b719b2e27bb2222ff3533c3d047419f40d2980258c0a799&temp=Temp.c&lang=ja", "content": "{{item.cityname}}\\n\\u5929\\u6c17\\u4e88\\u5831\\u3092\\u691c\\u7d22\\n\\u5929\\u6c17\\n\\u9632\\u707d\\u30fb\\u6e1b\\u707d\\n\\u81ea\\u7136\\u30fb\\u5b63\\u7bc0\\u30fb\\u5065\\u5eb7\\n\\u4fbf\\u5229\\u306a\\u30e1\\u30cb\\u30e5\\u30fc\\n\\u307b\\u304b\\u5168\\u30e1\\u30cb\\u30e5\\u30fc\\n60\\u6642\\u9593\\u5148\\u307e\\u3067\\u306e\\u96ea\\u96f2\\u306e\\u52d5\\u304d\\u3092\\u78ba\\u8a8d\\uff5c\\u6771\\u4eac\\n\\u6771\\u4eac\\u306e\\u5929\\u6c17\\u4e88\\u5831\\n5\\u5206\\u3054\\u3068\\n1\\u6642\\u9593\\u3054\\u3068\\n\\u4eca\\u65e5\\u660e\\u65e5\\n\\u9031\\u9593\\u5929\\u6c17\\n\\u65e5\\n\\u5929\\u6c17\\n\\u6c17\\u6e29\\n\\u964d\\u6c34\\n\\u78ba\\u7387\\n\\u4eca\\u65e5\\n2\\u67086\\u65e5 (\\u706b)\\n\\u6700\\u9ad84\\u2103\\n\\u6700\\u4f4e0\\u2103\\n\\u5348\\u524d70%\\n\\u5348\\u5f8c40%\\n\\u660e\\u65e5\\n2\\u67087\\u65e5 (\\u6c34)\\n\\u6700\\u9ad88\\u2103\\n\\u6700\\u4f4e1\\u2103\\n\\u5348\\u524d10%\\n\\u5348\\u5f8c0%\\n\\u8def\\u9762\\u72b6\\u6cc1\\u306b\\u6ce8\\u610f\\u3000\\u53b3\\u3057\\u3044\\u5bd2\\u3055\\n\\u4eca\\u65e5\\u306f\\u96f2\\u304c\\u591a\\u304f\\u3001\\u96e8\\u3084\\u96ea\\u306e\\u964d\\u308a\\u3084\\u3059\\u3044\\u5929\\u6c17\\u3067\\u3059\\u3002\\u663c\\u9593\\u306f\\u6975\\u5bd2\\u3067\\u3001\\u4e07\\u5168\\u306a\\u9632\\u5bd2\\u304c\\u5fc5\\u9808\\u3002\\u8def\\u9762\\u51cd\\u7d50\\u3084\\u7a4d\\u96ea\\u3067\\u4ea4\\u901a\\u6a5f\\u95a2\\u304c\\u4e71\\u308c\\u3066\\u3044\\u308b\\u53ef\\u80fd\\u6027\\u304c\\u3042\\u308b\\u305f\\u3081\\u3001\\u65e9\\u3081\\u306e\\u884c\\u52d5\\u3092\\u3002\\n5\\u5206\\u3054\\u3068\\n1\\u6642\\u9593\\u3054\\u3068\\n\\u6642\\n\\u5206\\n\\u5929\\u6c17\\n11\\u6642\\n\\u30fb\\n\\u30dd\\u30c4\\u30dd\\u30c4\\n20\\n\\u30dd\\u30c4\\u30dd\\u30c4\\n\\u30fb\\n\\u30d1\\u30e9\\u30d1\\u30e9\\n30\\n\\u30d1\\u30e9\\u30d1\\u30e9\\n\\u30fb\\n\\u30d1\\u30e9\\u30d1\\u30e9\\n40\\n\\u30d1\\u30e9\\u30d1\\u30e9\\n\\u30fb\\n\\u30d1\\u30e9\\u30d1\\u30e9\\n50\\n\\u30d1\\u30e9\\u30d1\\u30e9\\n\\u30fb\\n\\u30d1\\u30e9\\u30d1\\u30e9\\n12\\u6642\\n00\\n\\u30dd\\u30c4\\u30dd\\u30c4\\n\\u30fb\\n\\u30dd\\u30c4\\u30dd\\u30c4\\n10\\n\\u30dd\\u30c4\\u30dd\\u30c4\\n\\u65e5\\n\\u6642\\n\\u5929\\u6c17\\n\\u964d\\u6c34\\n\\u6c17\\u6e29\\n\\u98a8\\n6\\u65e5(\\u706b)\\n12\\n0\\n2\\u2103\\n3m\\n13\\n0\\n3\\u2103\\n2m\\n14\\n0\\n3\\u2103\\n2m\\n15\\n0\\n4\\u2103\\n2m\\n16\\n0\\n4\\u2103\\n2m\\n17\\n0\\n3\\u2103\\n2m\\n18\\n0\\n4\\u2103\\n2m\\n19\\n0\\n3\\u2103\\n2m\\n20\\n0\\n3\\u2103\\n2m\\n21\\n0\\n3\\u2103\\n2m\\n22\\n0\\n3\\u2103\\n2m\\n23\\n0\\n3\\u2103\\n2m\\n7\\u65e5(\\u6c34)\\n0\\n0\\n3\\u2103\\n2m\\n1\\n0\\n3\\u2103\\n2m\\n2\\n0\\n2\\u2103\\n2m\\n3\\n0\\n2\\u2103\\n2m\\n4\\n0\\n2\\u2103\\n2m\\n5\\n0\\n1\\u2103\\n2m\\n6\\n0\\n1\\u2103\\n2m\\n7\\n0\\n1\\u2103\\n2m\\n8\\n0\\n2\\u2103\\n2m\\n9\\n0\\n3\\u2103\\n2m\\n10\\n0\\n4\\u2103\\n2m\\n11\\n0\\n6\\u2103\\n2m\\n12\\n0\\n7\\u2103\\n2m\\n13\\n0\\n7\\u2103\\n2m\\n14\\n0\\n8\\u2103\\n2m\\n15\\n0\\n8\\u2103\\n2m\\n16\\n0\\n7\\u2103\\n2m\\n17\\n0\\n5\\u2103\\n2m\\n18\\n0\\n5\\u2103\\n2m\\n19\\n0\\n4\\u2103\\n2m\\n20\\n0\\n4\\u2103\\n2m\\n21\\n0\\n4\\u2103\\n2m\\n22\\n0\\n3\\u2103\\n2m\\n23\\n0\\n3\\u2103\\n2m\\n8\\u65e5(\\u6728)\\n0\\n0\\n3\\u2103\\n2m\\n1\\n0\\n2\\u2103\\n2m\\n2\\n0\\n2\\u2103\\n2m\\n3\\n0\\n2\\u2103\\n2m\\n4\\n0\\n2\\u2103\\n2m\\n5\\n0\\n1\\u2103\\n2m\\n6\\n0\\n1\\u2103\\n2m\\n7\\n0\\n2\\u2103\\n2m\\n8\\n0\\n3\\u2103\\n2m\\n9\\n0\\n4\\u2103\\n2m\\n10\\n0\\n6\\u2103\\n2m\\n11\\n0\\n8\\u2103\\n2m\\n12\\n0\\n9\\u2103\\n2m\\n13\\n0\\n10\\u2103\\n2m\\n14\\n0\\n10\\u2103\\n2m\\n15\\n0\\n10\\u2103\\n2m\\n16\\n0\\n9\\u2103\\n2m\\n17\\n0\\n8\\u2103\\n2m\\n18\\n0\\n7\\u2103\\n2m\\n19\\n0\\n6\\u2103\\n3m\\n20\\n0\\n6\\u2103\\n3m\\n21\\n0\\n5\\u2103\\n4m\\n22\\n0\\n5\\u2103\\n3m\\n23\\n0\\n4\\u2103\\n3m\\n9\\u65e5(\\u91d1)\\n0\\n0\\n4\\u2103\\n2m\\n1\\n0\\n3\\u2103\\n2m\\n2\\n0\\n3\\u2103\\n2m\\n3\\n0\\n3\\u2103\\n2m\\n4\\n0\\n2\\u2103\\n2m\\n5\\n0\\n2\\u2103\\n2m\\n6\\n0\\n2\\u2103\\n2m\\n7\\n0\\n2\\u2103\\n2m\\n8\\n0\\n3\\u2103\\n2m\\n9\\n0\\n4\\u2103\\n2m\\n10\\n0\\n5\\u2103\\n2m\\n11\\n0\\n7\\u2103\\n2m\\n\\u8def\\u9762\\u72b6\\u6cc1\\u306b\\u6ce8\\u610f\\u3000\\u53b3\\u3057\\u3044\\u5bd2\\u3055\\n\\u4eca\\u65e5\\u306f\\u96f2\\u304c\\u591a\\u304f\\u3001\\u96e8\\u3084\\u96ea\\u306e\\u964d\\u308a\\u3084\\u3059\\u3044\\u5929\\u6c17\\u3067\\u3059\\u3002\\u663c\\u9593\\u306f\\u6975\\u5bd2\\u3067\\u3001\\u4e07\\u5168\\u306a\\u9632\\u5bd2\\u304c\\u5fc5\\u9808\\u3002\\u8def\\u9762\\u51cd\\u7d50\\u3084\\u7a4d\\u96ea\\u3067\\u4ea4\\u901a\\u6a5f\\u95a2\\u304c\\u4e71\\u308c\\u3066\\u3044\\u308b\\u53ef\\u80fd\\u6027\\u304c\\u3042\\u308b\\u305f\\u3081\\u3001\\u65e9\\u3081\\u306e\\u884c\\u52d5\\u3092\\u3002\\n\\u9031\\u9593(10\\u65e5\\u9593)\\n\\u65e5\\n\\u5929\\u6c17\\n\\u6700\\u9ad8\\n\\u6700\\u4f4e\\n\\u964d\\u6c34\\n7(\\u6c34)\\n8\\u2103\\n1\\u2103\\n20%\\n8(\\u6728)\\n10\\u2103\\n1\\u2103\\n20%\\n9(\\u91d1)\\n10\\u2103\\n2\\u2103\\n30%\\n10(\\u571f)\\n11\\u2103\\n3\\u2103\\n30%\\n11(\\u65e5)\\n13\\u2103\\n2\\u2103\\n20%\\n12(\\u6708)\\n12\\u2103\\n3\\u2103\\n20%\\n13(\\u706b)\\n14\\u2103\\n2\\u2103\\n20%\\n14(\\u6c34)\\n16\\u2103\\n5\\u2103\\n20%\\n15(\\u6728)\\n17\\u2103\\n6\\u2103\\n40%\\n16(\\u91d1)\\n16\\u2103\\n8\\u2103\\n40%\\n\\u843d\\u3061\\u7740\\u3044\\u305f\\u5929\\u6c17\\u3068\\u5bd2\\u3055\\u304c\\u7d9a\\u304f\\n\\u65e5\\u5dee\\u3057\\u304c\\u5c4a\\u304d\\u3001\\u843d\\u3061\\u7740\\u3044\\u305f\\u5929\\u6c17\\u306e\\u65e5\\u304c\\u591a\\u304f\\u306a\\u308a\\u307e\\u3059\\u3002\\u3053\\u306e\\u6642\\u671f\\u3089\\u3057\\u3044\\u5bd2\\u3055\\u304c\\u7d9a\\u304d\\u305d\\u3046\\u3067\\u3059\\u3002\\u4f53\\u8abf\\u3092\\u5d29\\u3055\\u306a\\u3044\\u3088\\u3046\\u306b\\u3001\\u5f15\\u304d\\u7d9a\\u304d\\u9632\\u5bd2\\u3092\\u4e07\\u5168\\u306b\\u884c\\u3063\\u3066\\u304f\\u3060\\u3055\\u3044\\u3002\\n\\u304a\\u5929\\u6c17\\u30cb\\u30e5\\u30fc\\u30b9\\n\\u6771\\u4eac\\u90fd\\u5fc3\\u5468\\u8fba\\u3067\\u3082\\u7a4d\\u96ea\\u6b8b\\u308b\\u3000\\u6ed1\\u308a\\u3084\\u3059\\u3044\\u30b7\\u30e3\\u30fc\\u30d9\\u30c3\\u30c8\\u72b6\\u306e\\u96ea \\u8db3\\u5143\\u6ce8\\u610f\\n2024.02.06 07:59\\n\\u6771\\u4eac\\u306a\\u3069\\u95a2\\u6771\\u5357\\u90e8\\u306f\\u3053\\u306e\\u51ac\\u4e00\\u756a\\u306e\\u5bd2\\u3055\\u306b\\u3000\\u96f2\\u512a\\u52e2\\u3067\\u6c17\\u6e29\\u304c\\u4e0a\\u304c\\u3089\\u305a\\n2024.02.06 09:11\\n\\u95a2\\u6771\\u306f\\u51b7\\u305f\\u3044\\u96e8\\u3000\\u6bb5\\u3005\\u3068\\u6b62\\u3080\\u3082\\u3059\\u3063\\u304d\\u308a\\u56de\\u5fa9\\u306f\\u305b\\u305a\\n2024.02.06 09:52\\n\\u304a\\u5929\\u6c17\\u30cb\\u30e5\\u30fc\\u30b9\\u3092\\u3082\\u3063\\u3068\\u8aad\\u3080 \\u2192\\n\\u304a\\u5929\\u6c17\\u30cb\\u30e5\\u30fc\\u30b9\\n\\u6771\\u4eac\\u90fd\\u5fc3\\u5468\\u8fba\\u3067\\u3082\\u7a4d\\u96ea\\u6b8b\\u308b\\u3000\\u6ed1\\u308a\\u3084\\u3059\\u3044\\u30b7\\u30e3\\u30fc\\u30d9\\u30c3\\u30c8\\u72b6\\u306e\\u96ea \\u8db3\\u5143\\u6ce8\\u610f\\n2024.02.06 07:59\\n\\u6771\\u4eac\\u306a\\u3069\\u95a2\\u6771\\u5357\\u90e8\\u306f\\u3053\\u306e\\u51ac\\u4e00\\u756a\\u306e\\u5bd2\\u3055\\u306b\\u3000\\u96f2\\u512a\\u52e2\\u3067\\u6c17\\u6e29\\u304c\\u4e0a\\u304c\\u3089\\u305a\\n2024.02.06 09:11\\n\\u95a2\\u6771\\u306f\\u51b7\\u305f\\u3044\\u96e8\\u3000\\u6bb5\\u3005\\u3068\\u6b62\\u3080\\u3082\\u3059\\u3063\\u304d\\u308a\\u56de\\u5fa9\\u306f\\u305b\\u305a\\n2024.02.06 09:52\\n\\u304a\\u5929\\u6c17\\u30cb\\u30e5\\u30fc\\u30b9\\u3092\\u3082\\u3063\\u3068\\u8aad\\u3080 \\u2192\\n\\u6771\\u4eac\\u4ed8\\u8fd1\\u306e\\u5929\\u6c17\\n\\u96e8\\u96f2\\u30ec\\u30fc\\u30c0\\u30fc\\n\\u5730\\u56f3\\u3092\\u62e1\\u5927\\n\\u4eca\\u306e\\u5929\\u6c17\\n\\u30b0\\u30e9\\u30d5\\n10:50\\n\\u7a7a\\u306e\\u5199\\u771f\\n\\u7a7a\\u306e\\u5199\\u771f\\u3092\\u3082\\u3063\\u3068\\u898b\\u308b\\n\\u30e9\\u30a4\\u30d6\\u52d5\\u753b\\u756a\\u7d44\\n\\u3010\\u30e9\\u30a4\\u30d6\\u653e\\u9001\\u4e2d\\u3011\\u6700\\u65b0\\u5730\\u9707\\u30fb\\u6c17\\u8c61\\u60c5\\u5831\\u3000\\u30a6\\u30a7\\u30b6\\u30fc\\u30cb\\u30e5\\u30fc\\u30b9LiVE\\n\\u6771\\u4eac\\u4ed8\\u8fd1\\u306e\\u89b3\\u6e2c\\u5024\\n(\\u2103)\\n(m/s)\\n(mm/h)\\n(\\u5206)\\n\\u7d9a\\u304d\\u3092\\u898b\\u308b\\n\\u6771\\u4eac\\u90fd\\u306e\\u90fd\\u5e02\\u306e\\u5929\\u6c17\\u4e88\\u5831\\n\\u5468\\u8fba\\u306e\\u90fd\\u9053\\u5e9c\\u770c\\n\\u304a\\u5929\\u6c17\\u30cb\\u30e5\\u30fc\\u30b9\\n\\u4eca\\u65e52\\u67086\\u65e5(\\u706b)\\u306e\\u5929\\u6c17\\u4e88\\u5831\\u3000\\u95a2\\u6771\\u306f\\u96ea\\u3084\\u96e8\\u6b8b\\u308b\\u3000\\u6ed1\\u308a\\u3084\\u3059\\u3044\\u8db3\\u5143\\u306b\\u6ce8\\u610f\\n2024.02.06 05:38\\n\\u304a\\u5929\\u6c17\\u30ad\\u30e3\\u30b9\\u30bf\\u30fc\\u89e3\\u8aac\\u30002\\u67086\\u65e5(\\u706b)\\u306e\\u5929\\u6c17\\n2024.02.06 05:58\\n2\\u67086\\u65e5(\\u706b)\\u306e\\u6d17\\u6fef\\u5929\\u6c17\\u4e88\\u5831\\u3000\\u611b\\u77e5\\u5468\\u8fba\\u3084\\u4e5d\\u5dde\\u5357\\u90e8\\u306f\\u5916\\u5e72\\u3057OK\\n2024.02.06 06:08\\n\\u3072\\u3068\\u76ee\\u3067\\u308f\\u304b\\u308b\\u5098\\u30de\\u30c3\\u30d7\\u30002\\u67086\\u65e5(\\u706b)\\n2024.02.06 06:03\\n\\u9031\\u9593\\u5929\\u6c17\\u3000\\u95a2\\u6771\\u306a\\u3069\\u592a\\u5e73\\u6d0b\\u5074\\u306f\\u6674\\u308c\\u308b\\u65e5\\u591a\\u3044\\u3000\\u3053\\u306e\\u6642\\u671f\\u3089\\u3057\\u3044\\u5bd2\\u3055\\u7d9a\\u304f\\n2024.02.06 05:41\\n\\u304a\\u5929\\u6c17\\u30cb\\u30e5\\u30fc\\u30b9\\u3092\\u3082\\u3063\\u3068\\u8aad\\u3080 \\u2192\\n\\u3044\\u307e\\u304a\\u3059\\u3059\\u3081\\u306e\\u30e1\\u30cb\\u30e5\\u30fc\\n\\u96e8\\u96f2\\u30ec\\u30fc\\u30c0\\u30fc\\n\\u96e8\\u96f2\\u306e\\u52d5\\u304d\\u3068\\u4e88\\u60f3\\u3092\\u78ba\\u8a8d\\n\\u30a6\\u30a7\\u30b6\\u30fc\\u30ea\\u30dd\\u30fc\\u30c8\\n\\u5168\\u56fd\\u304b\\u3089\\u5c4a\\u304f\\u304a\\u5929\\u6c17\\u30ea\\u30dd\\u30fc\\u30c8\\n\\u9632\\u707d\\u30fb\\u6e1b\\u707d\\u30e1\\u30cb\\u30e5\\u30fc\\n\\u5929\\u6c17\\u30e1\\u30cb\\u30e5\\u30fc\\n\\u81ea\\u7136\\u30fb\\u5b63\\u7bc0\\u30fb\\u30ec\\u30b8\\u30e3\\u30fc\\u60c5\\u5831\\n\\u4e88\\u5831\\u7cbe\\u5ea6\\u5411\\u4e0a\\u306e\\u53d6\\u308a\\u7d44\\u307f\\u306b\\u3064\\u3044\\u3066\\n\\u6771\\u4eac\\u4ed8\\u8fd1\\u306e\\u7a7a\\u306e\\u5199\\u771f\\n\\u30a6\\u30a7\\u30b6\\u30fc\\u30cb\\u30e5\\u30fc\\u30b9"}, {"url": "https://tenki.jp/forecast/3/16/", "content": "\\u6771\\u4eac\\u90fd\\u306e\\u4eca\\u65e5\\u306e\\u5929\\u6c17\\u3001\\u6c17\\u6e29\\u3001\\u964d\\u6c34\\u78ba\\u7387\\u3092\\u5e02\\u533a\\u753a\\u6751\\u5225\\u306b\\u5730\\u56f3\\u3067\\u898b\\u308b\\u3053\\u3068\\u304c\\u3067\\u304d\\u307e\\u3059\\u3002\\u30b4\\u30fc\\u30eb\\u30c7\\u30f3\\u30a6\\u30a3\\u30fc\\u30af\\u524d\\u534a\\u306f\\u6691\\u3055\\u306b\\u6ce8\\u610f\\u3001\\u5f8c\\u534a\\u306f\\u5929\\u6c17\\u3050\\u305a\\u3064\\u304f\\u3068\\u3044\\u3046\\u4e88\\u5831\\u58eb\\u306e\\u89e3\\u8aac\\u3082\\u3042\\u308a\\u307e\\u3059\\u3002"}]', name='tavily_search_results_json', id='8e59dc62-516f-41f4-9872-9e4e5f4a8d1f', tool_call_id='call_v5M35XTInpuvJ5K6kCSm3ezW')]}}
----
{'agent': {'messages': [AIMessage(content='今日の東京の天気は、曇りがちで雨や雪が降りやすい予報です。最高気温は2℃、最低気温は0℃です。降水確率は午前中が70%、午後が40%となっています。厳しい寒さが続くため、万全な防寒対策が必要です。また、路面の凍結や積雪による交通機関の乱れに注意が必要です。早めの行動を心がけてください。', response_metadata={'token_usage': {'completion_tokens': 118, 'prompt_tokens': 5402, 'total_tokens': 5520}, 'model_name': 'gpt-4o', 'system_fingerprint': 'fp_729ea513f7', 'finish_reason': 'stop', 'logprobs': None}, id='run-f478de60-b556-4e7e-aa74-ea383d335b4c-0')]}}
----

7. 会話履歴付きエージェント

(1) メモリーの準備。

from langgraph.checkpoint.sqlite import SqliteSaver

# メモリーの準備
memory = SqliteSaver.from_conn_string(":memory:")

(2) エージェントとコンフィグの準備。

# エージェントの準備
agent_executor = chat_agent_executor.create_tool_calling_executor(
    llm, tools, checkpointer=memory
)

# コンフィグの準備
config = {"configurable": {"thread_id": "abc123"}}

(3) 会話。

# 会話
for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="こんにちは! 私の名前はケンです。")]}, config
):
    print(chunk)
    print("--")
{'agent': {'messages': [AIMessage(content='こんにちは、ケンさん!何かお手伝いできることがありますか?', response_metadata={'token_usage': {'completion_tokens': 19, 'prompt_tokens': 142, 'total_tokens': 161}, 'model_name': 'gpt-4o', 'system_fingerprint': 'fp_927397958d', 'finish_reason': 'stop', 'logprobs': None}, id='run-20141b43-c211-4016-ab72-025cda1e3374-0')]}}
----

(4) 過去の会話内容の質問応答

# 過去の会話内容の質問応答
for chunk in agent_executor.stream(
    {"messages": [HumanMessage(content="私の名前は?")]}, config
):
    print(chunk)
    print("----")
{'agent': {'messages': [AIMessage(content='あなたの名前はケンさんです。', response_metadata={'token_usage': {'completion_tokens': 10, 'prompt_tokens': 173, 'total_tokens': 183}, 'model_name': 'gpt-4o', 'system_fingerprint': 'fp_729ea513f7', 'finish_reason': 'stop', 'logprobs': None}, id='run-cceb254d-9614-4275-967d-268c02c4d96d-0')]}}
----



この記事が気に入ったらサポートをしてみませんか?