langchain glm
v0.0.2
このプロジェクトは、langchain の基本コンポーネントを使用して、完全なサポート エージェントと関連タスク アーキテクチャを実現します。最下層は、Zhipu AI の最新のGLM-4 All Tools
を使用し、Zhipu AI の API インターフェイスを通じて、ユーザーの意図を独立して理解し、複雑な命令を計画し、1 つ以上のツール (Web ブラウザー、Python 解釈プロセッサなど) を呼び出すことができます。およびテキストから画像へのモデル) を使用して、複雑なタスクを実行します。
図 | GLM-4 All Tools とカスタマイズされた GLM (エージェント) の全体的なプロセス。
パッケージパス | 説明する |
---|---|
エージェントツールキット | プラットフォーム ツール AdaptorAllTool アダプターは、さまざまなプラットフォーム上でシームレスな統合と実行を実現することを目的として、さまざまなツールに統一インターフェイスを提供するために使用されるプラットフォーム アダプター ツールです。このツールは、特定のプラットフォーム パラメーターに適応することで、互換性と一貫した出力を保証します。 |
エージェント | AgentExecutor の入力、出力、エージェント セッション、ツール パラメーター、およびツール実行戦略のカプセル化を定義します。 |
コールバック | AgentExecutor プロセス内のいくつかの対話型イベントを抽象化し、イベントを通じて情報を表示します。 |
チャットモデル | zhipuai SDK のカプセル化層は、langchain の BaseChatModel 統合を提供し、入力と出力をメッセージ本文としてフォーマットします。 |
埋め込み | zhipuai SDK のカプセル化層は、langchain の埋め込み統合を提供します。 |
ユーティリティ | いくつかの会話ツール |
公式Python (3.8、3.9、3.10、3.11、3.12)
使用前に環境変数
ZHIPUAI_API_KEY
を設定してください。値は ZHIPUAI AI の API キーです。
import getpass
import os
os . environ [ "ZHIPUAI_API_KEY" ] = getpass . getpass ()
from langchain_glm import ChatZhipuAI
llm = ChatZhipuAI ( model = "glm-4" )
from langchain_core . tools import tool
@ tool
def multiply ( first_int : int , second_int : int ) -> int :
"""Multiply two integers together."""
return first_int * second_int
@ tool
def add ( first_int : int , second_int : int ) -> int :
"Add two integers."
return first_int + second_int
@ tool
def exponentiate ( base : int , exponent : int ) -> int :
"Exponentiate the base to the exponent power."
return base ** exponent
from operator import itemgetter
from typing import Dict , List , Union
from langchain_core . messages import AIMessage
from langchain_core . runnables import (
Runnable ,
RunnableLambda ,
RunnableMap ,
RunnablePassthrough ,
)
tools = [ multiply , exponentiate , add ]
llm_with_tools = llm . bind_tools ( tools )
tool_map = { tool . name : tool for tool in tools }
def call_tools ( msg : AIMessage ) -> Runnable :
"""Simple sequential tool calling helper."""
tool_map = { tool . name : tool for tool in tools }
tool_calls = msg . tool_calls . copy ()
for tool_call in tool_calls :
tool_call [ "output" ] = tool_map [ tool_call [ "name" ]]. invoke ( tool_call [ "args" ])
return tool_calls
chain = llm_with_tools | call_tools
chain . invoke (
"What's 23 times 7, and what's five times 18 and add a million plus a billion and cube thirty-seven"
)
code_interpreter: sandbox
を使用してコード サンドボックス環境を指定します。デフォルト = auto。これは、コードを実行するためにサンドボックス環境が自動的に呼び出されるという意味です。 サンドボックス環境を無効にするには、sandbox = none を設定します。
web_browser: web_browser
を使用してブラウザ ツールを指定します。 drawing_tool: drawing_tool
使用して描画ツールを指定します。
from langchain_glm . agents . zhipuai_all_tools import ZhipuAIAllToolsRunnable
agent_executor = ZhipuAIAllToolsRunnable . create_agent_executor (
model_name = "glm-4-alltools" ,
tools = [
{ "type" : "code_interpreter" , "code_interpreter" : { "sandbox" : "none" }},
{ "type" : "web_browser" },
{ "type" : "drawing_tool" },
multiply , exponentiate , add
],
)
from langchain_glm . agents . zhipuai_all_tools . base import (
AllToolsAction ,
AllToolsActionToolEnd ,
AllToolsActionToolStart ,
AllToolsFinish ,
AllToolsLLMStatus
)
from langchain_glm . callbacks . agent_callback_handler import AgentStatus
chat_iterator = agent_executor . invoke (
chat_input = "看下本地文件有哪些,告诉我你用的是什么文件,查看当前目录"
)
async for item in chat_iterator :
if isinstance ( item , AllToolsAction ):
print ( "AllToolsAction:" + str ( item . to_json ()))
elif isinstance ( item , AllToolsFinish ):
print ( "AllToolsFinish:" + str ( item . to_json ()))
elif isinstance ( item , AllToolsActionToolStart ):
print ( "AllToolsActionToolStart:" + str ( item . to_json ()))
elif isinstance ( item , AllToolsActionToolEnd ):
print ( "AllToolsActionToolEnd:" + str ( item . to_json ()))
elif isinstance ( item , AllToolsLLMStatus ):
if item . status == AgentStatus . llm_end :
print ( "llm_end:" + item . text )
直接実行して効果を確認できる統合デモを提供します。
fastapi = " ~0.109.2 "
sse_starlette = " ~1.8.2 "
uvicorn = " >=0.27.0.post1 "
# webui
streamlit = " 1.34.0 "
streamlit-option-menu = " 0.3.12 "
streamlit-antd-components = " 0.3.1 "
streamlit-chatbox = " 1.1.12.post4 "
streamlit-modal = " 0.1.0 "
streamlit-aggrid = " 1.0.5 "
streamlit-extras = " 0.4.2 "
python tests/assistant/server/server.py
python tests/assistant/start_chat.py
展示する