В этом проекте используются базовые компоненты langchain для создания полноценной архитектуры поддерживающего агента и связанных задач. Нижний уровень использует новейшие GLM-4 All Tools
. Через интерфейс API Zhipu AI он может независимо понимать намерения пользователя, планировать сложные инструкции и вызывать один или несколько инструментов (например, веб-браузеры, процессор интерпретации Python). и модель преобразования текста в изображение) для выполнения сложных задач.
Рисунок | Общий процесс GLM-4 All Tools и настроенных GLM (агентов).
путь к пакету | иллюстрировать |
---|---|
Agent_toolkits | Инструмент платформы AdaptorAllTool — это инструмент адаптера платформы, используемый для обеспечения унифицированного интерфейса для различных инструментов с целью обеспечения плавной интеграции и выполнения на разных платформах. Инструмент обеспечивает совместимость и стабильный результат за счет адаптации к конкретным параметрам платформы. |
агенты | Определите ввод, вывод, сеанс агента, параметры инструмента и инкапсуляцию стратегии выполнения инструмента AgentExecutor. |
обратные вызовы | Абстрагируйте некоторые интерактивные события в процессе AgentExecutor и отображайте информацию через события. |
чат_модели | Уровень инкапсуляции zhipuai sdk обеспечивает интеграцию BaseChatModel langchain и форматирует ввод и вывод как тела сообщений. |
вложения | Уровень инкапсуляции zhipuai sdk обеспечивает интеграцию langchain Embeddings. |
утилиты | некоторые разговорные инструменты |
Официальный Python (3.8, 3.9, 3.10, 3.11, 3.12)
Перед использованием установите переменную среды
ZHIPUAI_API_KEY
. Это значение представляет собой ключ API 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: используйте 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
выставка