0
1

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のマニュアルにこのようなページが。

ノートブックはこちら。

翻訳しながらウォークスルーします。

Databricks Unity Catalog (UC)

このノートブックは、LangChainおよびLangGraphエージェントAPIを使用してUC関数をLangChainツールとして使用する方法を示しています。

SQLまたはPython関数をUCで作成する方法については、Databricksのドキュメント(AWS|Azure|GCP)を参照してください。関数とパラメータのコメントは、LLMが関数を正しく呼び出すために重要なので、必ず確認してください。

この例のノートブックでは、任意のコードを実行するシンプルなPython関数を作成し、それをLangChainツールとして使用します:

CREATE FUNCTION main.tools.python_exec (
  code STRING COMMENT '実行するPythonコード。最終結果をstdoutに出力することを忘れないでください。'
)
RETURNS STRING
LANGUAGE PYTHON
COMMENT 'Pythonコードを実行し、そのstdoutを返します。'
AS $$
  import sys
  from io import StringIO
  stdout = StringIO()
  sys.stdout = stdout
  exec(code)
  return stdout.getvalue()
$$

以下のようにUnity Catalog配下に関数を作成します(若干コードとコメントが違いますが動作は変わりません)。

Screenshot 2025-01-09 at 13.31.43.png

%pip install --upgrade --quiet databricks-sdk langchain-community databricks-langchain langgraph mlflow

LLMを定義します。

from databricks_langchain import ChatDatabricks

llm = ChatDatabricks(endpoint="databricks-meta-llama-3-70b-instruct")

こちらにあるように、UC関数の実行にはSQLウェアハウスが必要となります。アクセスできるウェアハウスのIDを以下で指定します。

from databricks.sdk import WorkspaceClient
from langchain_community.tools.databricks import UCFunctionToolkit

tools = (
    UCFunctionToolkit(
        # 作成後のUIでSQLウェアハウスIDを見つけることができます。
        warehouse_id="<SQLウェアハウスID>"
    )
    .include(
        # 修飾名を使用して関数をツールとして含めます。
        # "{catalog_name}.{schema_name}.*" を使用してスキーマ内のすべての関数を取得できます。
        "users.takaaki_yayoi.python_exec",
    )
    .get_tools()
)

(オプション)関数実行応答を取得するための再試行時間を延長するには、環境変数 UC_TOOL_CLIENT_EXECUTION_TIMEOUT を設定します。デフォルトの再試行時間は120秒です。

import os

os.environ["UC_TOOL_CLIENT_EXECUTION_TIMEOUT"] = "200"

LangGraphエージェントの例

LangGraphも勉強しないと。

from langgraph.prebuilt import create_react_agent

agent = create_react_agent(
    llm,
    tools,
    state_modifier="あなたは役に立つアシスタントです。情報を得るためにツールを使用してください。",
)
agent.invoke({"messages": [{"role": "user", "content": "36939 * 8922.4"}]})
{'messages': [HumanMessage(content='36939 * 8922.4', additional_kwargs={}, response_metadata={}, id='a5b1f530-02f6-487f-b92d-03edd72e6c15'),
  AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_197309d2-d735-4022-97ad-33677ba3a009', 'type': 'function', 'function': {'name': 'users__takaaki_yayoi__python_exec', 'arguments': '{ "code": "print(36939 * 8922.4)" }'}}]}, response_metadata={'prompt_tokens': 1242, 'completion_tokens': 34, 'total_tokens': 1276}, id='run-4d595ccb-bef2-4983-9355-55b79041d264-0', tool_calls=[{'name': 'users__takaaki_yayoi__python_exec', 'args': {'code': 'print(36939 * 8922.4)'}, 'id': 'call_197309d2-d735-4022-97ad-33677ba3a009', 'type': 'tool_call'}]),
  ToolMessage(content='{"format": "SCALAR", "value": "329584533.59999996\\n", "truncated": false}', name='users__takaaki_yayoi__python_exec', id='5479fd94-7dd3-4de1-8958-61c44cc52c8a', tool_call_id='call_197309d2-d735-4022-97ad-33677ba3a009'),
  AIMessage(content='The result of the multiplication is 329,584,533.6.', additional_kwargs={}, response_metadata={'prompt_tokens': 1316, 'completion_tokens': 16, 'total_tokens': 1332}, id='run-01a97acd-d8f2-4bf1-a2bb-d982973aea1f-0')]}

関数が呼び出され、計算結果の329584533.59999996を得ることができました。

LangChainエージェントの例

from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "あなたは役に立つアシスタントです。情報を得るためにツールを使用してください。",
        ),
        ("placeholder", "{chat_history}"),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}"),
    ]
)

agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke({"input": "36939 * 8922.4"})


> Entering new AgentExecutor chain...

Invoking: `users__takaaki_yayoi__python_exec` with `{'code': 'print(36939 * 8922.4)'}`


{"format": "SCALAR", "value": "329584533.59999996\n", "truncated": false}The result of the multiplication is 329,584,533.6.

> Finished chain.

こちらも同じ結果を得ることができました。

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?