Dieses Projekt nutzt die Grundkomponenten von Langchain, um einen vollständigen unterstützenden Agenten und eine zugehörige Aufgabenarchitektur zu erreichen. Die unterste Ebene verwendet die neuesten GLM-4 All Tools
von Zhipu AI. Über die API-Schnittstelle von Zhipu AI kann sie die Absichten des Benutzers unabhängig verstehen, komplexe Anweisungen planen und ein oder mehrere Tools (z. B. Webbrowser, Python-Interpretationsprozessor) aufrufen und Text-zu-Bild-Modell), um komplexe Aufgaben zu bewältigen.
Abbildung |. Der Gesamtprozess von GLM-4 Alle Tools und angepassten GLMs (Agenten).
Paketpfad | veranschaulichen |
---|---|
agent_toolkits | Der AdapterAllTool-Adapter des Plattformtools ist ein Plattformadaptertool, mit dem eine einheitliche Schnittstelle für verschiedene Tools bereitgestellt wird, um eine nahtlose Integration und Ausführung auf verschiedenen Plattformen zu erreichen. Das Tool stellt Kompatibilität und konsistente Ausgabe sicher, indem es sich an spezifische Plattformparameter anpasst. |
Agenten | Definieren Sie die Eingabe, Ausgabe, Agentensitzung, Tool-Parameter und Tool-Ausführungsstrategie-Kapselung von AgentExecutor |
Rückrufe | Abstrahieren Sie einige interaktive Ereignisse im AgentExecutor-Prozess und zeigen Sie Informationen über Ereignisse an |
chat_models | Die Kapselungsschicht von zhipuai sdk stellt die BaseChatModel-Integration von Langchain bereit und formatiert Eingabe und Ausgabe als Nachrichtentexte. |
Einbettungen | Die Kapselungsschicht von zhipuai sdk bietet die Einbettungsintegration von Langchain. |
Dienstprogramme | einige Konversationstools |
Offizielles Python (3.8, 3.9, 3.10, 3.11, 3.12)
Bitte legen Sie vor der Verwendung die Umgebungsvariable
ZHIPUAI_API_KEY
fest. Der Wert ist der API-Schlüssel von ZHIPUAI AI.
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: Verwenden Sie sandbox
um die Code-Sandbox-Umgebung anzugeben. Standard = auto, was bedeutet, dass die Sandbox-Umgebung automatisch aufgerufen wird, um den Code auszuführen. Legen Sie „sandbox = none“ fest, um die Sandbox-Umgebung zu deaktivieren.
web_browser: Verwenden Sie web_browser
, um das Browser-Tool anzugeben. Drawing_tool: Verwenden Sie drawing_tool
, um das Zeichenwerkzeug anzugeben.
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 )
Wir stellen eine integrierte Demo zur Verfügung, die direkt ausgeführt werden kann, um den Effekt zu sehen.
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
ausstellen