يستخدم هذا المشروع المكونات الأساسية لـ langchain لتحقيق وكيل دعم كامل وهندسة المهام ذات الصلة. تستخدم الطبقة السفلية أحدث GLM-4 All Tools
الخاصة بـ Zhipu AI من خلال واجهة API الخاصة بـ Zhipu AI، ويمكنها فهم نوايا المستخدم بشكل مستقل، وتخطيط التعليمات المعقدة، واستدعاء أداة واحدة أو أكثر (مثل متصفحات الويب، ومعالج تفسير Python). ونموذج النص إلى الصورة) لإنجاز المهام المعقدة.
الشكل |. العملية الشاملة لـ GLM-4 جميع الأدوات وGLMs المخصصة (الوكلاء).
مسار الحزمة | يوضح |
---|---|
Agent_toolkits | أداة النظام الأساسي محول محول AllTool عبارة عن أداة محول النظام الأساسي تستخدم لتوفير واجهة موحدة لمختلف الأدوات، بهدف تحقيق التكامل والتنفيذ السلس على منصات مختلفة. تضمن الأداة التوافق والإخراج المتسق من خلال التكيف مع معلمات النظام الأساسي المحددة. |
وكلاء | تحديد الإدخال والإخراج وجلسة الوكيل ومعلمات الأداة وتغليف استراتيجية تنفيذ الأداة لـ AgentExecutor |
الاسترجاعات | قم بتجريد بعض الأحداث التفاعلية في عملية AgentExecutor وعرض المعلومات من خلال الأحداث |
chat_models | توفر طبقة التغليف الخاصة بـ zhipuai sdk تكامل BaseChatModel الخاص بـ langchain وتنسيق الإدخال والإخراج كنصوص رسائل. |
التضمينات | توفر طبقة التغليف الخاصة بـ zhipuai sdk تكامل Embeddings الخاص بـ langchain. |
utils | بعض أدوات المحادثة |
بايثون الرسمية (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
لتحديد بيئة وضع الحماية للتعليمات الافتراضية = تلقائي، مما يعني أنه يتم استدعاء بيئة وضع الحماية تلقائيًا لتنفيذ التعليمات البرمجية. قم بتعيين وضع الحماية = لا شيء لتعطيل بيئة وضع الحماية.
web_browser: استخدم web_browser
لتحديد أداة المتصفح. draw_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
يعرض