Este proyecto utiliza los componentes básicos de langchain para lograr un agente de soporte completo y una arquitectura de tareas relacionadas. La capa inferior utiliza las últimas GLM-4 All Tools
de Zhipu AI. A través de la interfaz API de Zhipu AI, puede comprender de forma independiente las intenciones del usuario, planificar instrucciones complejas y llamar a una o más herramientas (como navegadores web y procesadores de interpretación Python). y modelo de texto a imagen) para realizar tareas complejas.
Figura | El proceso general de GLM-4 Todas las herramientas y GLM (agentes) personalizados.
ruta del paquete | ilustrar |
---|---|
kits de herramientas_agente | La herramienta de plataforma AdapterAllTool es una herramienta de adaptador de plataforma que se utiliza para proporcionar una interfaz unificada para varias herramientas, con el propósito de lograr una integración y ejecución perfecta en diferentes plataformas. La herramienta garantiza compatibilidad y resultados consistentes al adaptarse a parámetros específicos de la plataforma. |
agentes | Defina la entrada, la salida, la sesión del agente, los parámetros de la herramienta y la encapsulación de la estrategia de ejecución de la herramienta de AgentExecutor. |
devoluciones de llamada | Resuma algunos eventos interactivos en el proceso AgentExecutor y muestre información a través de eventos |
modelos_chat | La capa de encapsulación de zhipuai SDK proporciona la integración BaseChatModel de langchain y formatea la entrada y salida como cuerpos de mensajes. |
incrustaciones | La capa de encapsulación de zhipuai sdk proporciona la integración de incrustaciones de langchain. |
utiles | algunas herramientas conversacionales |
Python oficial (3.8, 3.9, 3.10, 3.11, 3.12)
Configure la variable de entorno
ZHIPUAI_API_KEY
antes de usarla. El valor es la clave API de 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: use sandbox
para especificar el entorno sandbox del código. Predeterminado = auto, lo que significa que el entorno sandbox se llama automáticamente para ejecutar el código. Establezca sandbox = none para deshabilitar el entorno sandbox.
web_browser: utilice web_browser
para especificar la herramienta del navegador. herramienta_dibujo: utilice drawing_tool
para especificar la herramienta de dibujo.
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 )
Proporcionamos una demostración integrada que se puede ejecutar directamente para ver el efecto.
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
anexo