1. 构建第一个多智能体系统
任务目标
使用 LangGraph 构建一个包含两个 Agent 的多智能体系统:第一个 Agent 负责从输入文本中提取关键信息,第二个 Agent 基于提取结果生成最终摘要。通过图结构串联两个节点,实现基本的协作流程。
环境依赖
需要安装 langgraph 和 langchain-(或你选择的 LLM 提供商 SDK)。本案例使用 兼容接口,需配置 _ 环境变量。
pip install langgraph langchain-
完整实现
from typing import TypedDict
from langgraph.graph import StateGraph, END
from langchain_ import ChatOpenAI
# 初始化 LLM(可替换为其他模型)
llm = ChatOpenAI(model="-mini", temperature=0)
# 定义 Agent 节点函数
def extract_agent(state):
"""Agent 1:提取关键信息(人物、事件、时间、数据)"""
text = state["text"]
prompt = f"""从以下文本中提取关键信息,按类别列出:
- 人物/组织
- 核心事件
- 时间/地点
- 关键数据
文本:
{text}
只输出提取结果,不要额外解释。"""
result = llm.invoke(prompt)
return {"key_info": result.content}
def summarize_agent(state):
"""Agent 2:基于关键信息生成摘要"""
key_info = state["key_info"]
prompt = f"""根据以下提取的关键信息,生成一段连贯、简洁的摘要(不超过100字)。
关键信息:
{key_info}
摘要:"""
result = llm.invoke(prompt)
return {"summary": result.content}
# 定义状态结构
class AgentState(TypedDict):
text: str
key_info: str
summary: str
# 构建图
def build_graph():
graph = StateGraph(AgentState)
graph.add_node("extract", extract_agent)
graph.add_node("summarize", summarize_agent)
graph.set_entry_point("extract")
graph.add_edge("extract", "summarize")
graph.add_edge("summarize", END)
return graph.compile()
# 运行入口
if __name__ == "__main__":
app = build_graph()
sample_text = """
于2024年5月发布了模型,支持实时语音交互。
该模型在多项基准测试中超越前代,API价格降低50%。
微软随即宣布将其集成到Copilot产品线。
"""
result = app.invoke({"text": sample_text})
print("=== 提取的关键信息 ===")
print(result["key_info"])
print("\n=== 生成的摘要 ===")
print(result["summary"])
运行方式
export _="your-key-here"
python agent_collab.py
验证方法
程序正常执行后,控制台会依次输出两个 Agent 的结果。通过以下条件判断是否成功:
- 流程正确性:先输出“提取的关键信息”,再输出“生成的摘要”,顺序与图结构一致。
- 内容关联性:摘要内容应覆盖提取结果中的核心要素(如 、2024年5月、价格降低50%等),而非直接复述原文。
- 状态传递:
key_info被正确传递到第二个节点,若摘要为空或与提取信息无关,说明节点间数据流异常。
关键说明
本案例使用 StateGraph 实现线性流水线:extract 节点将输出写入状态字段 key_info,summarize 节点读取该字段并生成最终结果。若需扩展为更复杂的协作模式(如条件分支、循环),可在 add_edge 中增加条件判断或使用 add_conditional_edges。当前实现聚焦于最小可运行的协作闭环,LLM 调用可通过替换 ChatOpenAI 为其他 LangChain 兼容模型来适配不同后端。