โปรเจ็กต์นี้ใช้ส่วนประกอบพื้นฐานของ langchain เพื่อให้ได้ตัวแทนสนับสนุนที่สมบูรณ์และสถาปัตยกรรมงานที่เกี่ยวข้อง เลเยอร์ด้านล่างใช้ GLM-4 All Tools
ล่าสุดของ Zhipu AI ผ่านอินเทอร์เฟซ API ของ Zhipu AI ซึ่งสามารถเข้าใจความตั้งใจของผู้ใช้ได้อย่างอิสระ วางแผนคำสั่งที่ซับซ้อน และเรียกใช้เครื่องมืออย่างน้อยหนึ่งรายการ (เช่น เว็บเบราว์เซอร์ ตัวประมวลผลการตีความ Python และโมเดลข้อความเป็นรูปภาพ) เพื่อทำงานที่ซับซ้อนให้สำเร็จ
รูป | กระบวนการโดยรวมของ GLM-4 All Tools และ GLM ที่ปรับแต่งเอง (ตัวแทน)
เส้นทางแพ็คเกจ | แสดงให้เห็น |
---|---|
agent_toolkits | เครื่องมือแพลตฟอร์ม อะแดปเตอร์ AdapterAllTool เป็นเครื่องมืออะแดปเตอร์แพลตฟอร์มที่ใช้เพื่อจัดเตรียมอินเทอร์เฟซแบบรวมสำหรับเครื่องมือต่างๆ โดยมีวัตถุประสงค์เพื่อให้เกิดการบูรณาการและการดำเนินการบนแพลตฟอร์มที่แตกต่างกันอย่างราบรื่น เครื่องมือนี้รับประกันความเข้ากันได้และผลลัพธ์ที่สม่ำเสมอโดยการปรับให้เข้ากับพารามิเตอร์แพลตฟอร์มเฉพาะ |
ตัวแทน | กำหนดอินพุต เอาต์พุต เซสชันเอเจนต์ พารามิเตอร์เครื่องมือ และการห่อหุ้มกลยุทธ์การดำเนินการเครื่องมือของ AgentExecutor |
โทรกลับ | สรุปเหตุการณ์เชิงโต้ตอบบางอย่างในกระบวนการ AgentExecutor และแสดงข้อมูลผ่านเหตุการณ์ |
chat_models | เลเยอร์การห่อหุ้มของ zhipuai sdk ช่วยให้สามารถบูรณาการ BaseChatModel ของ langchain และจัดรูปแบบอินพุตและเอาต์พุตเป็นเนื้อหาข้อความได้ |
การฝัง | เลเยอร์การห่อหุ้มของ zhipuai sdk ช่วยให้สามารถบูรณาการ Embeddings ของ langchain ได้ |
ยูทิลิตี้ | เครื่องมือการสนทนาบางอย่าง |
หลามอย่างเป็นทางการ (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_reapter: ใช้ sandbox
เพื่อระบุสภาพแวดล้อมแซนด์บ็อกซ์ของโค้ด Default = auto ซึ่งหมายความว่าสภาพแวดล้อมแซนด์บ็อกซ์จะถูกเรียกให้รันโค้ดโดยอัตโนมัติ ตั้งค่า Sandbox = none เพื่อปิดใช้งานสภาพแวดล้อม Sandbox
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
จัดแสดง