0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LangChain Python v1.0(α)をDatabricks上で軽く試す

0
Posted at

導入

先日、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の結果は以下のようになります。

image.png

トレース結果としてはLangGraphのReActエージェントと同様ですね。

おわりに

個人的にLangChainは早いうちからキャッチアップを続けてきましたが、ようやくv1.0となりますね。
ここまで様々な設計変更を経てきたこともあり、今ではかなり実用的かつエージェント構築のフレームワークとして使いやすいものになったと思います。(LangGraphの貢献が大きかったのではないでしょうか)

まだ正式リリースまでは間があり、様々な変更もあると思いますが注視していきたいと思います。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?