Ce projet implémente un agent de support complet et une architecture de tâches associée à travers les composants de base de langchain. La couche inférieure utilise le dernier GLM-4 All Tools
de Zhipu AI. Grâce à l'interface API de Zhipu AI, elle peut comprendre indépendamment les intentions de l'utilisateur, planifier des instructions complexes et appeler un ou plusieurs outils (tels que des navigateurs Web, un processeur d'interprétation Python). et modèle texte-image) pour accomplir des tâches complexes.
Figure | Le processus global de GLM-4 Tous les outils et GLM personnalisés (agents).
chemin du paquet | illustrer |
---|---|
agents_toolkits | Outil de plate-forme L'adaptateur AdapterAllTool est un outil d'adaptateur de plate-forme utilisé pour fournir une interface unifiée pour divers outils, dans le but de réaliser une intégration et une exécution transparentes sur différentes plates-formes. L'outil garantit la compatibilité et une sortie cohérente en s'adaptant aux paramètres spécifiques de la plate-forme. |
agents | Définir l'encapsulation des entrées, sorties, sessions d'agent, paramètres de l'outil et stratégie d'exécution de l'outil d'AgentExecutor |
rappels | Résumez certains événements interactifs dans le processus AgentExecutor et affichez des informations via des événements |
chat_models | La couche d'encapsulation du SDK Zhipuai fournit l'intégration BaseChatModel de Langchain et formate l'entrée et la sortie en tant que corps de message. |
intégrations | La couche d'encapsulation du SDK Zhipuai fournit l'intégration des intégrations de Langchain. |
utilitaires | quelques outils conversationnels |
Python officiel (3.8, 3.9, 3.10, 3.11, 3.12)
Veuillez définir la variable d'environnement
ZHIPUAI_API_KEY
avant utilisation. La valeur est la clé 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 : utilisez sandbox
pour spécifier l'environnement sandbox du code. Par défaut = auto, ce qui signifie que l'environnement sandbox est automatiquement appelé pour exécuter le code. Définissez sandbox = none pour désactiver l'environnement sandbox.
web_browser : utilisez web_browser
pour spécifier l'outil de navigation. draw_tool : utilisez drawing_tool
pour spécifier l'outil de dessin.
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 )
Nous fournissons une démo intégrée qui peut être exécutée directement pour voir l'effet.
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
exposition