1. 构建第一个多智能体系统

构建第一个多智能体系统:两个Agent协作完成文本摘要 学习卡片

任务目标

使用 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 兼容模型来适配不同后端。