導入
先日、LangChain/LangGraph v1.0のアルファ版がリリースされました。
詳しくは以下の公式Blogを参照ください。
上記Blogを見るに、10月下旬に正式版がリリース予定のようです。
ようやく1.0リリースなのかと感慨深く思ったため、一足先に少しだけDatabricks上で試してみたいと思います。
検証はDatabricks on AWSで行いました。おそらくFee Editionでも問題なく動くと思います。
LangChain/LangGraph v1.0とは
LangGraphは特に大きな変更無しにv1.0になる模様ですが、LangChainはエージェントパターンを容易に使うためのインターフェースが含まれるようになりました。
例えば、これまでLangGraph側のlanggraph.prebuiltsモジュールに含まれていたcreate_react_agentが、LangChainのlangchain.agentsモジュール内create_agentへ統合されています。(裏側ではLangGraphが使われています)
また、単純な移植というわけではなく、構造化出力の強化やコスト削減の工夫もされています。
また、各種LLM APIとの統合など、いわゆる部品となるコア部分はlangchain-coreに集約されています(これも大きな変更なし)
現時点での変化点を邦訳したものを以下に掲載しましたので、併せて参考にしてください。
今回は、LangChainに統合されたlangchain.agentsモジュールを簡単に利用してみます。
動かしてみる
Databricks上でノートブックを作成し、まずはパッケージをインストール。
MLflowも併せてインストールしておきます。
%pip install --pre -U langchain langchain_openai mlflow
%restart_python
Databricksの基盤モデルをLLMとして使う準備をします。
from langchain_openai import ChatOpenAI
import mlflow
mlflow.langchain.autolog()
creds = mlflow.utils.databricks_utils.get_databricks_host_creds()
llm = ChatOpenAI(
model="databricks-gpt-oss-20b",
api_key=creds.token,
base_url=creds.host + "/serving-endpoints",
)
今回の変化点である、langchain.agentsモジュールから、create_agent関数を利用してエージェントを作成、実行します。
このあたりはLangChainのドキュメントに含まれるサンプルほぼそのままです。
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from pprint import pprint
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
agent = create_agent(
model=llm,
tools=[get_weather],
prompt="You are a helpful assistant",
)
# Run the agent
response = agent.invoke(
{"messages": [{"role": "user", "content": "what is the weather in sf"}]}
)
pprint(response)
以下のような出力となります。
{'messages': [HumanMessage(content='what is the weather in sf', additional_kwargs={}, response_metadata={}, id='7e6d90f3-bf5b-4d3e-bb72-c3e2caac4c6c'),
AIMessage(content='', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 229, 'prompt_tokens': 144, 'total_tokens': 373, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_provider': 'openai', 'model_name': 'gpt-oss-20b-080525', 'system_fingerprint': None, 'id': 'chatcmpl_bb591bdc-3b77-424a-8883-e70f7f675f5a', 'service_tier': None, 'finish_reason': 'tool_calls', 'logprobs': None}, id='lc_run--79194af1-c325-4e5d-8721-04c589b8de2e-0', tool_calls=[{'name': 'get_weather', 'args': {'city': 'San Francisco'}, 'id': 'call_27a3288c-695c-4856-a378-7d7a81d98dda', 'type': 'tool_call'}], usage_metadata={'input_tokens': 144, 'output_tokens': 229, 'total_tokens': 373, 'input_token_details': {}, 'output_token_details': {}}),
ToolMessage(content="It's always sunny in San Francisco!", name='get_weather', id='168861ed-d64f-4f3c-8650-e8eefbaf7dca', tool_call_id='call_27a3288c-695c-4856-a378-7d7a81d98dda'),
AIMessage(content='Here’s the weather for San\u202fFrancisco: **It’s always sunny in San\u202fFrancisco!**', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 114, 'prompt_tokens': 183, 'total_tokens': 297, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_provider': 'openai', 'model_name': 'gpt-oss-20b-080525', 'system_fingerprint': None, 'id': 'chatcmpl_e8f000a7-d1dd-4610-9593-ea28e73d6e1d', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None}, id='lc_run--5b43b552-74bb-42fa-bfee-1e4459672019-0', usage_metadata={'input_tokens': 183, 'output_tokens': 114, 'total_tokens': 297, 'input_token_details': {}, 'output_token_details': {}})]}
MLflow Tracingの結果は以下のようになります。
トレース結果としてはLangGraphのReActエージェントと同様ですね。
おわりに
個人的にLangChainは早いうちからキャッチアップを続けてきましたが、ようやくv1.0となりますね。
ここまで様々な設計変更を経てきたこともあり、今ではかなり実用的かつエージェント構築のフレームワークとして使いやすいものになったと思います。(LangGraphの貢献が大きかったのではないでしょうか)
まだ正式リリースまでは間があり、様々な変更もあると思いますが注視していきたいと思います。
