87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
|
|
"""
|
|||
|
|
Step 1: 最简单的 LangGraph Agent + GLM-4.5-air + 工具调用
|
|||
|
|
只验证核心能力:Function Call
|
|||
|
|
"""
|
|||
|
|
import os
|
|||
|
|
from langchain_openai import ChatOpenAI
|
|||
|
|
from langchain_core.tools import tool
|
|||
|
|
from langgraph.prebuilt import create_react_agent
|
|||
|
|
|
|||
|
|
# ── 模型配置 ──
|
|||
|
|
llm = ChatOpenAI(
|
|||
|
|
base_url="https://open.bigmodel.cn/api/paas/v4",
|
|||
|
|
api_key="2259e33a1357460abe17919aaf81e73d.K44a8LPQTmFM5PKm",
|
|||
|
|
model="glm-4.5-air",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# ── 定义工具 ──
|
|||
|
|
@tool
|
|||
|
|
def get_weather(city: str) -> str:
|
|||
|
|
"""查询指定城市的天气信息"""
|
|||
|
|
# 模拟天气数据
|
|||
|
|
weather_data = {
|
|||
|
|
"北京": "晴天,气温22°C,北风3级",
|
|||
|
|
"上海": "多云,气温25°C,东风2级",
|
|||
|
|
"深圳": "阵雨,气温28°C,南风4级",
|
|||
|
|
"黄庄": "晴转多云,气温23°C,微风",
|
|||
|
|
}
|
|||
|
|
return weather_data.get(city, f"暂无{city}的天气数据")
|
|||
|
|
|
|||
|
|
@tool
|
|||
|
|
def calculate(expression: str) -> str:
|
|||
|
|
"""计算数学表达式,输入如 '2+3*4'"""
|
|||
|
|
try:
|
|||
|
|
result = eval(expression, {"__builtins__": {}}, {})
|
|||
|
|
return f"计算结果: {expression} = {result}"
|
|||
|
|
except Exception as e:
|
|||
|
|
return f"计算错误: {e}"
|
|||
|
|
|
|||
|
|
@tool
|
|||
|
|
def search_knowledge(query: str) -> str:
|
|||
|
|
"""搜索知识库(模拟)"""
|
|||
|
|
kb = {
|
|||
|
|
"黄庄三号": "黄庄三号是AI助手,定位为严肃、认真、听话、聪明的AI助手",
|
|||
|
|
"LangGraph": "LangGraph是LangChain团队推出的Agent框架,支持状态图、循环、持久化",
|
|||
|
|
"MCP": "MCP是Model Context Protocol,AI工具互操作标准协议",
|
|||
|
|
}
|
|||
|
|
for key, val in kb.items():
|
|||
|
|
if key in query:
|
|||
|
|
return val
|
|||
|
|
return f"知识库中未找到关于'{query}'的信息"
|
|||
|
|
|
|||
|
|
# ── 创建 Agent ──
|
|||
|
|
tools = [get_weather, calculate, search_knowledge]
|
|||
|
|
agent = create_react_agent(llm, tools)
|
|||
|
|
|
|||
|
|
# ── 运行测试 ──
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
import asyncio
|
|||
|
|
|
|||
|
|
async def test():
|
|||
|
|
print("=" * 50)
|
|||
|
|
print("Step 1: LangGraph + GLM-4.5-air + FC 工具调用")
|
|||
|
|
print("=" * 50)
|
|||
|
|
|
|||
|
|
# 测试1: 天气查询
|
|||
|
|
print("\n[测试1] 天气查询")
|
|||
|
|
result = await agent.ainvoke({"messages": [("user", "黄庄今天天气怎么样?")]})
|
|||
|
|
last_msg = result["messages"][-1]
|
|||
|
|
print(f"回复: {last_msg.content}")
|
|||
|
|
|
|||
|
|
# 测试2: 数学计算
|
|||
|
|
print("\n[测试2] 数学计算")
|
|||
|
|
result = await agent.ainvoke({"messages": [("user", "帮我算一下 123 * 456 + 789")]})
|
|||
|
|
last_msg = result["messages"][-1]
|
|||
|
|
print(f"回复: {last_msg.content}")
|
|||
|
|
|
|||
|
|
# 测试3: 知识搜索
|
|||
|
|
print("\n[测试3] 知识搜索")
|
|||
|
|
result = await agent.ainvoke({"messages": [("user", "LangGraph是什么?")]})
|
|||
|
|
last_msg = result["messages"][-1]
|
|||
|
|
print(f"回复: {last_msg.content}")
|
|||
|
|
|
|||
|
|
print("\n" + "=" * 50)
|
|||
|
|
print("Step 1 完成!FC 工具调用正常工作")
|
|||
|
|
|
|||
|
|
asyncio.run(test())
|