基于LangGraph的Agent
LangGraph的Agent
1.什么是LangGraph
LangGraph 专为希望构建强大、适应性强的 AI 智能体的开发者而设计。开发者选择 LangGraph 的原因是:
•可靠性和可控性。通过审核检查和人工干预审批来指导智能体行为。LangGraph 可为长时间运行的工作流持久化上下文,使您的智能体保持正常运行。
•低层级和可扩展性。使用完全描述性的低层级原语构建自定义智能体,不受限制自定义的僵化抽象约束。设计可扩展的多智能体系统,其中每个智能体都为您的用例量身定制特定角色。
•一流的流式传输支持。通过逐令牌流式传输和中间步骤流式传输,LangGraph 让用户实时清晰地了解智能体的推理和行动过程。
LangGraph支持两种对于构建对话代理至关重要的内存类型:
•短期内存:通过在会话中维护消息历史来跟踪正在进行的对话。 当次会话内跟踪
•长期内存:在不同会话之间存储用户特定或应用程序级别的数据。 长期存储数据
2.与Langchain有什么区别

专门处理复杂任务,简单任务使用dify coze
3.什么是智能体 Agent
人类在复杂的模式识别任务中表现卓越,但通常需要借助工具(如书籍、搜索引擎或计算器)来补充先验知识以得出结论。同理,生成式AI模型可通过训练使用工具获取实时信息或建议的实际动作。例如:
•模型可利用数据库检索工具获取客户购买历史以生成个性化购物推荐
•基于用户查询,模型可通过API调用发送邮件或完成金融交易
为实现此能力,模型需具备:
1.外部工具集访问权限
2.自主规划与执行任务的推理能力
这种结合推理逻辑与外部信息访问的系统,即构成智能体(Agent)
注解:说白了 智能体就是借助外部工具,外部api等,调用获取数据,结合自身逻辑推理以及调用工具结果,给出用户的建议。
智能体的认知架构中有三个基本组件:模型(Model)、工具(Tools)和以及一个提供指令的提示。
LLM 在一个循环中运行。在每次迭代中,它会选择一个要调用的工具,提供输入,接收结果(一个观察),并利用该观察来指导下一个动作。循环会一直持续,直到满足停止条件——通常是Agent已经收集到足够的信息来响应用户时。

Agent vs. Workflow(图)
Anthropic将Agent系统划分为两类:
1.第一类是workflow。遵循预定义的工作流,编排LLM和工具,固定代码路径。
2.Agent:此类Agent被定义为完全自主的系统,这些系统在较长时间内独立运行,可以动态地指导自身流程和工具使用的系统。通过自身的推理、规划能力,自主控制,完成任务。
注意:在LangGraph中,一切都是图,Agent是图中的一个节点。使用 create_react_agent 创建一个Agent,并且也得到了一个图。
正常来说,我们使用智能体,大模型是自助决策用什么,但是在这个过程中,很有可能会出现幻觉,因此我们需要人工将其编排,这就被称为工作流。两者是相辅相成的。
4 部署LangGraph本地服务
LangGraph CLI 是一个多平台命令行工具,用于在本地构建和运行 LangGraph API 服务器。生成的服务器包含您的图的所有运行、线程、助手等的 API 端点,以及运行您的代理所需的其他服务,包括用于检查点和存储的托管数据库。

一、创建Python虚拟环境
虚拟环境的安装步骤 Macosi系统
1.安装好python解释器: Python >= 3.11 is required.
2.安装虚拟环境库,在cmd中输入:
pip install virtualenv 安装虚拟环境包
virtualenv env_name 创建虚拟环境
source env_name/bin/activate 激活虚拟环境
deactivate 退出虚拟环境
操作 Windows macOS/Linux
创建虚拟环境 virtualenv env_name virtualenv env_name
激活虚拟环境 env_name\Scripts\activate source env_name/bin/activate
退出虚拟环境 deactivate deactivate
二、安装LangGraph CLI
pip install --upgrade "langgraph-cli[inmem]"
langgraph new path/to/your/app
三、一个简单的代码案例
Python
# 本地私有化部署的大模型
llm = ChatOpenAI(
model='qwen3-8b',
temperature=0.8,
api_key='xx',
base_url="http://localhost:6006/v1",
extra_body={'chat_template_kwargs': {'enable_thinking': False}},
)
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
graph = create_react_agent(
llm,
tools=[get_weather],
prompt="You are a helpful assistant"
)
四、启动第一个langgraph服务
langgraph dev

五、测试和访问agent的API
pip install langgraph-sdk
异步调用
from langgraph_sdk import get_client
import asyncio
client = get_client(url="http://localhost:2024")
async def main():
async for chunk in client.runs.stream(
None, # Threadless run
"agent", # Name of assistant. Defined in langgraph.json.
input={
"messages": [{
"role": "human",
"content": "What is LangGraph?",
}],
},
):
print(f"Receiving new event of type: {chunk.event}...")
print(chunk.data)
print("\n\n")
asyncio.run(main())
同步调用
from langgraph_sdk import get_sync_client
client = get_sync_client(url="http://localhost:2024")
for chunk in client.runs.stream(
None, # Threadless run
"agent", # Name of assistant. Defined in langgraph.json.
input={
"messages": [{
"role": "human",
"content": "What is LangGraph?",
}],
},
stream_mode="messages-tuple",
):
print(f"Receiving new event of type: {chunk.event}...")
print(chunk.data)
print("\n\n")
stream_mode="messages-tuple", 输出模式的区别
特点:
返回 (消息对象, 元数据字典) 的元组
消息对象包含完整的消息信息(类型、内容、ID等)
元数据包含:
langgraph_node: 哪个节点产生的消息
langgraph_step: 执行步骤编号
其他上下文信息
比 messages 模式提供更多上下文
(
AIMessage(content='让我查一下天气...', id='msg_1'),
{'langgraph_node': 'agent', 'langgraph_step': 1}
)
(
ToolMessage(content='今天天气晴朗,在北京中', tool_call_id='call_1'),
{'langgraph_node': 'tools', 'langgraph_step': 2}
)
(
AIMessage(content='今天北京天气晴朗!', id='msg_2'),
{'langgraph_node': 'agent', 'langgraph_step': 3}
)
5 工具Tools

在构建Agent 时,您需要为其提供一个它可以使用的 工具 列表。除了实际调用的函数之外,工具还包括几个组件:


浙公网安备 33010602011771号