langchain glm
v0.0.2
이 프로젝트는 langchain의 기본 구성 요소를 사용하여 완전한 지원 에이전트 및 관련 작업 아키텍처를 달성합니다. 하단 레이어는 Zhipu AI의 최신 GLM-4 All Tools
사용합니다. Zhipu AI의 API 인터페이스를 통해 사용자의 의도를 독립적으로 이해하고 복잡한 지침을 계획하며 하나 이상의 도구(예: 웹 브라우저, Python 해석 프로세서)를 호출할 수 있습니다. 및 텍스트-이미지 모델)을 사용하여 복잡한 작업을 수행합니다.
그림 | GLM-4 모든 도구 및 맞춤형 GLM(에이전트)의 전체 프로세스.
패키지 경로 | 설명하다 |
---|---|
에이전트_툴킷 | 플랫폼 도구 AdapterAllTool 어댑터는 다양한 플랫폼에서 원활한 통합 및 실행을 달성하기 위해 다양한 도구에 대한 통합 인터페이스를 제공하는 데 사용되는 플랫폼 어댑터 도구입니다. 이 도구는 특정 플랫폼 매개변수에 적응하여 호환성과 일관된 출력을 보장합니다. |
자치령 대표 | AgentExecutor의 입력, 출력, 에이전트 세션, 도구 매개변수 및 도구 실행 전략 캡슐화를 정의합니다. |
콜백 | AgentExecutor 프로세스에서 일부 대화형 이벤트를 추상화하고 이벤트를 통해 정보를 표시합니다. |
chat_models | zhipuai SDK의 캡슐화 계층은 langchain의 BaseChatModel 통합을 제공하고 입력 및 출력 형식을 메시지 본문으로 지정합니다. |
임베딩 | zhipuai SDK의 캡슐화 계층은 langchain의 Embeddings 통합을 제공합니다. |
유틸리티 | 몇 가지 대화 도구 |
공식 Python(3.8, 3.9, 3.10, 3.11, 3.12)
사용하기 전에 환경 변수
ZHIPUAI_API_KEY
설정하세요. 값은 ZHIPUAI AI의 API Key입니다.
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
전시하다