Este projeto usa os componentes básicos do langchain para obter um agente de suporte completo e uma arquitetura de tarefas relacionadas. A camada inferior usa as mais recentes GLM-4 All Tools
do Zhipu AI. Por meio da interface API do Zhipu AI, ele pode compreender de forma independente as intenções do usuário, planejar instruções complexas e chamar uma ou mais ferramentas (como navegadores da web, processador de interpretação Python). e modelo de texto para imagem) para realizar tarefas complexas.
Figura | O processo geral do GLM-4 Todas as Ferramentas e GLMs (agentes) customizados.
caminho do pacote | ilustrar |
---|---|
agentes_toolkits | Ferramenta de plataforma AdapterAllTool Adapter é uma ferramenta adaptadora de plataforma usada para fornecer uma interface unificada para diversas ferramentas, com o objetivo de obter integração e execução perfeitas em diferentes plataformas. A ferramenta garante compatibilidade e resultados consistentes, adaptando-se a parâmetros específicos da plataforma. |
agentes | Defina a entrada, a saída, a sessão do agente, os parâmetros da ferramenta e o encapsulamento da estratégia de execução da ferramenta do AgentExecutor |
retornos de chamada | Abstrair alguns eventos interativos no processo AgentExecutor e exibir informações por meio de eventos |
chat_models | A camada de encapsulamento do zhipuai sdk fornece integração BaseChatModel do langchain e formata entrada e saída como corpos de mensagens. |
incorporações | A camada de encapsulamento do zhipuai sdk fornece integração de Embeddings do langchain. |
utilitários | algumas ferramentas de conversação |
Python oficial (3.8, 3.9, 3.10, 3.11, 3.12)
Defina a variável de ambiente
ZHIPUAI_API_KEY
antes de usar. O valor é a chave API do 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 o ambiente sandbox do código. Padrão = auto, o que significa que o ambiente sandbox é chamado automaticamente para executar o código. Defina sandbox = none para desativar o ambiente sandbox.
web_browser: Use web_browser
para especificar a ferramenta do navegador. drawing_tool: Use drawing_tool
para especificar a ferramenta de desenho.
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 )
Fornecemos uma demonstração integrada que pode ser executada diretamente para ver o efeito.
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
exposição