Proyek ini menggunakan komponen dasar langchain untuk mencapai agen pendukung yang lengkap dan arsitektur tugas terkait. Lapisan bawah menggunakan GLM-4 All Tools
terbaru dari Zhipu AI. Melalui antarmuka API Zhipu AI, ia dapat secara mandiri memahami maksud pengguna, merencanakan instruksi yang rumit, dan memanggil satu atau lebih alat (seperti browser web, prosesor interpretasi Python dan model teks-ke-gambar) untuk menyelesaikan tugas-tugas kompleks.
Gambar |. Proses keseluruhan GLM-4 Semua Alat dan GLM (agen) yang disesuaikan.
jalur paket | menjelaskan |
---|---|
agen_toolkit | Alat platform AdaptorAdaptorAllTool adalah alat adaptor platform yang digunakan untuk menyediakan antarmuka terpadu untuk berbagai alat, dengan tujuan mencapai integrasi dan eksekusi yang lancar pada platform yang berbeda. Alat ini memastikan kompatibilitas dan keluaran yang konsisten dengan beradaptasi dengan parameter platform tertentu. |
agen | Tentukan input, output, sesi agen, parameter alat, dan enkapsulasi strategi eksekusi alat AgentExecutor |
panggilan balik | Abstrak beberapa peristiwa interaktif dalam proses AgentExecutor dan menampilkan informasi melalui peristiwa |
obrolan_model | Lapisan enkapsulasi zhipuai SDK menyediakan integrasi BaseChatModel langchain dan memformat input dan output sebagai isi pesan. |
penyematan | Lapisan enkapsulasi zhipuai SDK menyediakan integrasi Embeddings langchain. |
utilitas | beberapa alat percakapan |
Python Resmi (3.8, 3.9, 3.10, 3.11, 3.12)
Harap atur variabel lingkungan
ZHIPUAI_API_KEY
sebelum digunakan. Nilainya adalah Kunci 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: Gunakan sandbox
untuk menentukan lingkungan sandbox kode. Default = auto, yang berarti lingkungan sandbox secara otomatis dipanggil untuk mengeksekusi kode. Setel sandbox = none untuk menonaktifkan lingkungan sandbox.
web_browser: Gunakan web_browser
untuk menentukan alat browser. drawing_tool: Gunakan drawing_tool
untuk menentukan alat menggambar.
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 )
Kami menyediakan demo terintegrasi yang dapat dijalankan langsung untuk melihat efeknya.
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
pameran