基于MCP协议的多AGENT文章自动编写系统

文章目录

项目概述

开发一个使用MCP (Model Context Protocol) 的多代理系统,能够协作完成文章写作任务。系统包含四个专业化代理,按顺序协作完成从研究到最终成稿的完整流程。

核心功能要求

  • 输入:用户问题(如"帮我写一篇关于AI Agent的文章")
  • 输出:完成的文章文档和执行过程记录

系统架构

系统需要包含以下四个代理,按顺序协作:

  1. 研究代理 (Research Agent)

    • 使用搜索工具收集相关信息
    • 输出结构化的研究资料
  2. 撰写代理 (Writing Agent)

    • 基于研究结果生成文章初稿
    • 支持调整文章风格和长度
  3. 审核代理 (Review Agent)

    • 检查内容质量和逻辑一致性
    • 提供修改建议
  4. 润色代理 (Polishing Agent)

    • 优化语言表达和文章结构
    • 确保风格一致性

技术实现

  • 可以使用现有的MCP库
  • 代理间通过结构化消息进行通信
  • 终端实时展示协作过程
  • 生成: 示例输出文档(展示完整代理协作过程与最终成果)

MCP服务端(article_mcp_server.py)

六个工具,返回数据用模拟数据:

对指定主题进行研究,收集相关信息

python 复制代码
@mcp.tool()
def research_topic(topic: str) -> str:
    """对指定主题进行研究,收集相关信息"""
    # 模拟研究过程 - 实际应用中可接入搜索引擎API
    research_data = {
        "AI Agent": {
            "definition": "AI代理是能够感知环境、做出决策并执行行动的人工智能系统",
            "applications": ["自动化客服", "内容生成", "数据分析", "智能助手"],
            "trends": ["多智能体协作", "自主决策", "专业化发展"],
            "challenges": ["安全性", "伦理问题", "技术复杂度"]
        },
        "机器学习": {
            "definition": "让计算机通过数据学习并改进性能的技术",
            "types": ["监督学习", "无监督学习", "强化学习"],
            "applications": ["预测分析", "图像识别", "自然语言处理"]
        }
    }

    topic_data = research_data.get(topic, {
        "definition": f"{topic}是一个重要的技术领域,正在快速发展。",
        "key_points": ["技术革新", "应用广泛", "未来发展潜力大"],
        "status": "活跃研究领域"
    })

    return json.dumps(topic_data, ensure_ascii=False, indent=2)

根据研究数据撰写文章大纲

python 复制代码
@mcp.tool()
def write_article_outline(topic: str, research_data: str) -> str:
    """根据研究数据撰写文章大纲"""
    research = json.loads(research_data)

    outline = {
        "title": f"关于{topic}的深度分析文章",
        "sections": [
            {
                "title": "引言",
                "content": f"介绍{topic}的基本概念和重要性"
            },
            {
                "title": "核心概念",
                "content": research.get("definition", "核心概念阐述")
            },
            {
                "title": "应用领域",
                "content": ",".join(research.get("applications", ["各个领域"]))
            },
            {
                "title": "发展趋势",
                "content": ",".join(research.get("trends", ["持续发展"]))
            },
            {
                "title": "挑战与展望",
                "content": "总结当前面临的挑战和未来发展方向"
            }
        ]
    }

    return json.dumps(outline, ensure_ascii=False, indent=2)

根据大纲草拟文章章节内容

python 复制代码
@mcp.tool()
def draft_article_section(section_title: str, content_guidance: str) -> str:
    """根据大纲草拟文章章节内容"""
    # 模拟章节内容生成
    section_templates = {
        "引言": f"""
            随着人工智能技术的快速发展,{content_guidance}已经成为当今科技领域的热点话题。
            本文将从多个角度深入分析这一重要技术,探讨其应用前景和发展趋势。
            """,
        "核心概念": f"""
            从技术层面来看,{content_guidance}代表了人工智能发展的重要方向。
            这一概念的核心在于创建能够自主学习和决策的智能系统。
            """,
        "应用领域": f"""
            在实际应用中,{content_guidance}已经展现出巨大的价值。
            这些应用不仅提高了效率,还创造了新的商业模式和用户体验。
            """,
        "发展趋势": f"""
            展望未来,{content_guidance}将继续推动技术创新。
            行业专家预测,这一领域将在未来几年内保持高速增长。
            """,
        "挑战与展望": f"""
            尽管前景广阔,{content_guidance}仍面临诸多挑战。
            需要在技术创新与伦理规范之间找到平衡点。
            """
    }

    return section_templates.get(section_title, f"""
        # {section_title}
        
        {content_guidance}
        
        这一部分需要进一步展开和详细阐述,以提供全面的分析视角。
        """)

审核文章内容质量

python 复制代码
@mcp.tool()
def review_article_content(content: str, criteria: str = "专业性,逻辑性,可读性") -> str:
    """审核文章内容质量"""
    review_criteria = criteria.split(",")

    review_results = {}
    for criterion in review_criteria:
        if criterion == "专业性":
            review_results[criterion] = "内容专业,术语使用准确"
        elif criterion == "逻辑性":
            review_results[criterion] = "逻辑清晰,结构合理"
        elif criterion == "可读性":
            review_results[criterion] = "语言流畅,易于理解"
        else:
            review_results[criterion] = "符合基本要求"

    suggestions = [
        "建议增加具体案例说明",
        "可以补充最新数据支持",
        "考虑添加图表辅助说明"
    ]

    review_report = {
        "overall_score": 85,
        "criteria_evaluation": review_results,
        "suggestions": suggestions,
        "verdict": "内容质量良好,建议进行适度润色"
    }

    return json.dumps(review_report, ensure_ascii=False, indent=2)

对文章内容进行润色优化

python 复制代码
@mcp.tool()
def polish_article_content(content: str, polish_type: str = "全面润色") -> str:
    """对文章内容进行润色优化"""

    polish_strategies = {
        "全面润色": """
            优化语言表达,提升专业性
            调整句式结构,增强可读性
            统一术语使用,确保一致性
            """,
        "语言优化": """
            精简冗余表述
            增强逻辑连接
            提升文采表达
            """,
        "结构优化": """
            调整段落顺序
            优化过渡衔接
            强化重点突出
            """
    }

    strategy = polish_strategies.get(polish_type, "标准润色处理")

    polished_content = f"""
        【润色说明】
        执行了{polish_type}处理,主要改进方向:
        {strategy}
        
        【润色后内容】
        {content}
        
        【改进说明】
        - 优化了语言表达的准确性和流畅度
        - 增强了内容的逻辑性和连贯性  
        - 提升了文章的专业性和可读性
        """

    return polished_content

将各个章节组装成最终文章

python 复制代码
@mcp.tool()
def assemble_final_article(sections: list, title: str) -> str:
    """将各个章节组装成最终文章"""

    article = f"# {title}\n\n"
    article += "*本文由多智能体协作系统自动生成*\n\n"

    for i, section in enumerate(sections, 1):
        if isinstance(section, dict):
            section_content = section.get('content', '')
            section_title = section.get('title', f'第{i}部分')
        else:
            section_content = section
            section_title = f'第{i}部分'

        article += f"## {section_title}\n\n"
        article += f"{section_content}\n\n"

    article += "---\n"
    article += "*生成时间: {}*\n".format(time.strftime("%Y-%m-%d %H:%M:%S"))
    article += "*字数统计: 约{}字*".format(len(article) // 3)

    return article

完整代码

python 复制代码
# article_mcp_server.py
import json
import time

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("ArticleCreator")


@mcp.tool()
def research_topic(topic: str) -> str:
    """对指定主题进行研究,收集相关信息"""
    # 模拟研究过程 - 实际应用中可接入搜索引擎API
    research_data = {
        "AI Agent": {
            "definition": "AI代理是能够感知环境、做出决策并执行行动的人工智能系统",
            "applications": ["自动化客服", "内容生成", "数据分析", "智能助手"],
            "trends": ["多智能体协作", "自主决策", "专业化发展"],
            "challenges": ["安全性", "伦理问题", "技术复杂度"]
        },
        "机器学习": {
            "definition": "让计算机通过数据学习并改进性能的技术",
            "types": ["监督学习", "无监督学习", "强化学习"],
            "applications": ["预测分析", "图像识别", "自然语言处理"]
        }
    }

    topic_data = research_data.get(topic, {
        "definition": f"{topic}是一个重要的技术领域,正在快速发展。",
        "key_points": ["技术革新", "应用广泛", "未来发展潜力大"],
        "status": "活跃研究领域"
    })

    return json.dumps(topic_data, ensure_ascii=False, indent=2)


@mcp.tool()
def write_article_outline(topic: str, research_data: str) -> str:
    """根据研究数据撰写文章大纲"""
    research = json.loads(research_data)

    outline = {
        "title": f"关于{topic}的深度分析文章",
        "sections": [
            {
                "title": "引言",
                "content": f"介绍{topic}的基本概念和重要性"
            },
            {
                "title": "核心概念",
                "content": research.get("definition", "核心概念阐述")
            },
            {
                "title": "应用领域",
                "content": ",".join(research.get("applications", ["各个领域"]))
            },
            {
                "title": "发展趋势",
                "content": ",".join(research.get("trends", ["持续发展"]))
            },
            {
                "title": "挑战与展望",
                "content": "总结当前面临的挑战和未来发展方向"
            }
        ]
    }

    return json.dumps(outline, ensure_ascii=False, indent=2)


@mcp.tool()
def draft_article_section(section_title: str, content_guidance: str) -> str:
    """根据大纲草拟文章章节内容"""
    # 模拟章节内容生成
    section_templates = {
        "引言": f"""
            随着人工智能技术的快速发展,{content_guidance}已经成为当今科技领域的热点话题。
            本文将从多个角度深入分析这一重要技术,探讨其应用前景和发展趋势。
            """,
        "核心概念": f"""
            从技术层面来看,{content_guidance}代表了人工智能发展的重要方向。
            这一概念的核心在于创建能够自主学习和决策的智能系统。
            """,
        "应用领域": f"""
            在实际应用中,{content_guidance}已经展现出巨大的价值。
            这些应用不仅提高了效率,还创造了新的商业模式和用户体验。
            """,
        "发展趋势": f"""
            展望未来,{content_guidance}将继续推动技术创新。
            行业专家预测,这一领域将在未来几年内保持高速增长。
            """,
        "挑战与展望": f"""
            尽管前景广阔,{content_guidance}仍面临诸多挑战。
            需要在技术创新与伦理规范之间找到平衡点。
            """
    }

    return section_templates.get(section_title, f"""
        # {section_title}
        
        {content_guidance}
        
        这一部分需要进一步展开和详细阐述,以提供全面的分析视角。
        """)


@mcp.tool()
def review_article_content(content: str, criteria: str = "专业性,逻辑性,可读性") -> str:
    """审核文章内容质量"""
    review_criteria = criteria.split(",")

    review_results = {}
    for criterion in review_criteria:
        if criterion == "专业性":
            review_results[criterion] = "内容专业,术语使用准确"
        elif criterion == "逻辑性":
            review_results[criterion] = "逻辑清晰,结构合理"
        elif criterion == "可读性":
            review_results[criterion] = "语言流畅,易于理解"
        else:
            review_results[criterion] = "符合基本要求"

    suggestions = [
        "建议增加具体案例说明",
        "可以补充最新数据支持",
        "考虑添加图表辅助说明"
    ]

    review_report = {
        "overall_score": 85,
        "criteria_evaluation": review_results,
        "suggestions": suggestions,
        "verdict": "内容质量良好,建议进行适度润色"
    }

    return json.dumps(review_report, ensure_ascii=False, indent=2)


@mcp.tool()
def polish_article_content(content: str, polish_type: str = "全面润色") -> str:
    """对文章内容进行润色优化"""

    polish_strategies = {
        "全面润色": """
            优化语言表达,提升专业性
            调整句式结构,增强可读性
            统一术语使用,确保一致性
            """,
        "语言优化": """
            精简冗余表述
            增强逻辑连接
            提升文采表达
            """,
        "结构优化": """
            调整段落顺序
            优化过渡衔接
            强化重点突出
            """
    }

    strategy = polish_strategies.get(polish_type, "标准润色处理")

    polished_content = f"""
        【润色说明】
        执行了{polish_type}处理,主要改进方向:
        {strategy}
        
        【润色后内容】
        {content}
        
        【改进说明】
        - 优化了语言表达的准确性和流畅度
        - 增强了内容的逻辑性和连贯性  
        - 提升了文章的专业性和可读性
        """

    return polished_content


@mcp.tool()
def assemble_final_article(sections: list, title: str) -> str:
    """将各个章节组装成最终文章"""

    article = f"# {title}\n\n"
    article += "*本文由多智能体协作系统自动生成*\n\n"

    for i, section in enumerate(sections, 1):
        if isinstance(section, dict):
            section_content = section.get('content', '')
            section_title = section.get('title', f'第{i}部分')
        else:
            section_content = section
            section_title = f'第{i}部分'

        article += f"## {section_title}\n\n"
        article += f"{section_content}\n\n"

    article += "---\n"
    article += "*生成时间: {}*\n".format(time.strftime("%Y-%m-%d %H:%M:%S"))
    article += "*字数统计: 约{}字*".format(len(article) // 3)

    return article


if __name__ == "__main__":
    mcp.run(transport="streamable-http")

MCP客户端(multi_agent_article_system.py)

创建多个Agent

踩坑提示:

MCP 有三大核心概念,Resources(资源),Tools(工具),Prompts(提示)

当有Tools(工具)接收不到正确的数据时,比如服务端工具需要json格式的数据,但传输的是字符串,就会报错,这是要在Prompts(提示)做手脚,例如,在提示词上加上:"确保将 research_topic 工具返回的完整JSON数据传递给写作Agent。"这样的字样,这样传输时就不会出错。

研究Agent

python 复制代码
# 研究Agent
    researcher_agent = create_react_agent(
        model="openai:gpt-3.5-turbo",
        tools=[mcp_tools[0], transfer_to_writer],  # research_tool + 移交工具
        prompt="""你是一位专业的研究员,负责对用户指定的主题进行深入研究。
                你的任务:
                1. 使用 research_topic 工具收集主题相关信息
                2. 分析研究数据,整理关键信息
                3. 当研究完成后,使用 transfer_to_writer 工具移交给写作Agent
                
                重要:确保将 research_topic 工具返回的完整JSON数据传递给写作Agent。
                不要修改或重新格式化数据,直接传递原始JSON字符串。""",
        name="researcher_agent"
    )

写作Agent

python 复制代码
# 写作Agent
    writer_agent = create_react_agent(
        model="openai:gpt-3.5-turbo",
        tools=[mcp_tools[1], mcp_tools[2], transfer_to_reviewer],  # outline + draft工具 + 移交工具
        prompt="""你是一位专业的文章写手,负责根据研究数据撰写高质量文章。
                你的任务:
                1. 使用 write_article_outline 工具创建文章大纲
                2. 使用 draft_article_section 工具撰写各个章节内容
                3. 确保文章结构清晰、内容充实
                4. 完成初稿后,使用 transfer_to_reviewer 工具移交给审核Agent
                
                重要:调用 write_article_outline 时,research_data 参数必须是 research_topic 工具返回的完整JSON字符串。
                不要修改JSON数据的内容或格式,直接使用原始数据。""",
        name="writer_agent"

    )

审核Agent

python 复制代码
# 审核Agent
    reviewer_agent = create_react_agent(
        model="openai:gpt-3.5-turbo",
        tools=[mcp_tools[3], transfer_to_polisher, transfer_to_writer],  # review工具 + 两个移交工具
        prompt="""你是一位专业的文章审核员,负责评估文章质量并提出改进建议。
                你的任务:
                1. 使用 review_article_content 工具审核文章内容
                2. 根据审核结果决定下一步:
                   - 如果文章质量合格,使用 transfer_to_polisher 移交给润色Agent
                   - 如果文章需要重大修改,使用 transfer_to_writer 返回给写作Agent重新修改
                   
                请严格把关,确保文章质量达到出版标准。""",
        name="reviewer_agent"

    )

润色Agent

python 复制代码
# 润色Agent
    polisher_agent = create_react_agent(
        model="openai:gpt-3.5-turbo",
        tools=[mcp_tools[4], mcp_tools[5]],  # polish + assemble工具
        prompt="""你是一位专业的文字编辑,负责对文章进行最后的润色和优化。
                你的任务:
                1. 使用 polish_article_content 工具优化文章语言表达
                2. 使用 assemble_final_article 工具组装最终文章
                3. 确保文章语言优美、表达准确、格式规范
                4. 完成后直接结束流程,输出最终成果""",
        name="polisher_agent"

    )

创建工作流

python 复制代码
def build_article_workflow(agents):
    """构建文章创作工作流图"""
    researcher_agent, writer_agent, reviewer_agent, polisher_agent = agents

    # 创建状态图
    workflow = StateGraph(MessagesState)

    # 添加所有Agent节点
    workflow.add_node("researcher_agent", researcher_agent)
    workflow.add_node("writer_agent", writer_agent)
    workflow.add_node("reviewer_agent", reviewer_agent)
    workflow.add_node("polisher_agent", polisher_agent)

    # 设置初始边
    workflow.add_edge(START, "researcher_agent")

    return workflow.compile()

用户请求测试

python 复制代码
user_requests = [
                "帮我写一篇关于AI Agent的文章",
                "请创作一篇关于机器学习的科普文章",
                "写一篇关于人工智能未来发展的文章"
            ]

完整代码

python 复制代码
import os
import asyncio
from typing import Annotated, List, Dict, Any
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage, ToolMessage
from langchain_core.tools import tool, InjectedToolCallId
from langgraph.prebuilt import create_react_agent, InjectedState
from langgraph.graph import StateGraph, START, MessagesState
from langgraph.types import Command
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_mcp_adapters.tools import load_mcp_tools
from langchain_openai import ChatOpenAI
import json


# ------------------- 美化输出函数 -------------------
def pretty_print_message(message, indent=False):
    """美化单条消息的打印输出"""
    pretty_message = message.pretty_repr(html=True)
    if not indent:
        print(pretty_message)
        return
    indented = "\n".join("\t" + c for c in pretty_message.split("\n"))
    print(indented)

def pretty_print_messages(update, last_message=False):
    """美化并打印整个更新流中的消息"""
    is_subgraph = False
    if isinstance(update, tuple):
        ns, update = update
        if len(ns) == 0:
            return
        graph_id = ns[-1].split(":")[0]
        print(f"来自子图 {graph_id} 的更新:")
        print("\n")
        is_subgraph = True

    for node_name, node_update in update.items():
        update_label = f"来自节点 {node_name} 的更新:"
        if is_subgraph:
            update_label = "\t" + update_label
        print(update_label)
        print("\n")
        messages = node_update.get("messages", [])
        if last_message and messages:
            messages = messages[-1:]
        for m in messages:
            pretty_print_message(m, indent=is_subgraph)
        print("\n")

# ------------------- 移交工具创建 -------------------
def create_handoff_tool(*, agent_name: str, description: str | None = None):
    """创建移交工具"""
    name = f"transfer_to_{agent_name}"
    description = description or f"转移到 {agent_name}"

    @tool(name, description=description)
    def handoff_tool(
            state: Annotated[MessagesState, InjectedState],
            tool_call_id: Annotated[str, InjectedToolCallId],
    ) -> Command:
        tool_message = {
            "role": "tool",
            "content": f"成功转移到 {agent_name}",
            "name": name,
            "tool_call_id": tool_call_id,
        }
        return Command(
            goto=agent_name,
            update={"messages": state["messages"] + [tool_message]},
            graph=Command.PARENT,
        )
    return handoff_tool

# 创建各个Agent的移交工具
transfer_to_researcher = create_handoff_tool(
    agent_name="researcher_agent",
    description="将任务移交给研究Agent进行主题研究"
)

transfer_to_writer = create_handoff_tool(
    agent_name="writer_agent",
    description="将任务移交给写作Agent进行文章撰写"
)

transfer_to_reviewer = create_handoff_tool(
    agent_name="reviewer_agent",
    description="将任务移交给审核Agent进行内容审核"
)

transfer_to_polisher = create_handoff_tool(
    agent_name="polisher_agent",
    description="将任务移交给润色Agent进行文章优化"
)

# ------------------- 创建各个Agent -------------------
def create_agents(mcp_tools):
    """使用MCP工具创建各个专业Agent"""

    # 研究Agent
    researcher_agent = create_react_agent(
        model="openai:gpt-3.5-turbo",
        tools=[mcp_tools[0], transfer_to_writer],  # research_tool + 移交工具
        prompt="""你是一位专业的研究员,负责对用户指定的主题进行深入研究。
                你的任务:
                1. 使用 research_topic 工具收集主题相关信息
                2. 分析研究数据,整理关键信息
                3. 当研究完成后,使用 transfer_to_writer 工具移交给写作Agent
                
                重要:确保将 research_topic 工具返回的完整JSON数据传递给写作Agent。
                不要修改或重新格式化数据,直接传递原始JSON字符串。""",
        name="researcher_agent"
    )

    # 写作Agent
    writer_agent = create_react_agent(
        model="openai:gpt-3.5-turbo",
        tools=[mcp_tools[1], mcp_tools[2], transfer_to_reviewer],  # outline + draft工具 + 移交工具
        prompt="""你是一位专业的文章写手,负责根据研究数据撰写高质量文章。
                你的任务:
                1. 使用 write_article_outline 工具创建文章大纲
                2. 使用 draft_article_section 工具撰写各个章节内容
                3. 确保文章结构清晰、内容充实
                4. 完成初稿后,使用 transfer_to_reviewer 工具移交给审核Agent
                
                重要:调用 write_article_outline 时,research_data 参数必须是 research_topic 工具返回的完整JSON字符串。
                不要修改JSON数据的内容或格式,直接使用原始数据。""",
        name="writer_agent"

    )

    # 审核Agent
    reviewer_agent = create_react_agent(
        model="openai:gpt-3.5-turbo",
        tools=[mcp_tools[3], transfer_to_polisher, transfer_to_writer],  # review工具 + 两个移交工具
        prompt="""你是一位专业的文章审核员,负责评估文章质量并提出改进建议。
                你的任务:
                1. 使用 review_article_content 工具审核文章内容
                2. 根据审核结果决定下一步:
                   - 如果文章质量合格,使用 transfer_to_polisher 移交给润色Agent
                   - 如果文章需要重大修改,使用 transfer_to_writer 返回给写作Agent重新修改
                   
                请严格把关,确保文章质量达到出版标准。""",
        name="reviewer_agent"

    )

    # 润色Agent
    polisher_agent = create_react_agent(
        model="openai:gpt-3.5-turbo",
        tools=[mcp_tools[4], mcp_tools[5]],  # polish + assemble工具
        prompt="""你是一位专业的文字编辑,负责对文章进行最后的润色和优化。
                你的任务:
                1. 使用 polish_article_content 工具优化文章语言表达
                2. 使用 assemble_final_article 工具组装最终文章
                3. 确保文章语言优美、表达准确、格式规范
                4. 完成后直接结束流程,输出最终成果""",
        name="polisher_agent"

    )

    return researcher_agent, writer_agent, reviewer_agent, polisher_agent

# ------------------- 构建多Agent工作流图 -------------------
def build_article_workflow(agents):
    """构建文章创作工作流图"""
    researcher_agent, writer_agent, reviewer_agent, polisher_agent = agents

    # 创建状态图
    workflow = StateGraph(MessagesState)

    # 添加所有Agent节点
    workflow.add_node("researcher_agent", researcher_agent)
    workflow.add_node("writer_agent", writer_agent)
    workflow.add_node("reviewer_agent", reviewer_agent)
    workflow.add_node("polisher_agent", polisher_agent)

    # 设置初始边
    workflow.add_edge(START, "researcher_agent")

    return workflow.compile()

# ------------------- 主执行函数 -------------------
async def main():
    try:
        print("正在初始化多Agent文章创作系统...")

        # 初始化MCP客户端
        client = MultiServerMCPClient({
            "article_creator": {
                "url": "http://localhost:8000/mcp",
                "transport": "streamable_http",
            }
        })

        # 在整个工作流生命周期内保持会话开启
        async with client.session("article_creator") as session:
            tools = await load_mcp_tools(session)
            print(f"已加载 {len(tools)} 个MCP工具")

            # 创建各个Agent - 注意这里直接传递tools
            agents = create_agents(tools)
            print("已创建所有专业Agent")

            # 构建工作流
            workflow = build_article_workflow(agents)
            print("工作流构建完成,准备处理用户请求...")

            # 示例用户请求
            user_requests = [
                "帮我写一篇关于AI Agent的文章",
                "请创作一篇关于机器学习的科普文章",
                "写一篇关于人工智能未来发展的文章"
            ]

            for i, user_request in enumerate(user_requests, 1):
                print(f"\n{'='*50}")
                print(f"处理请求 {i}: {user_request}")
                print(f"{'='*50}")

                # 执行工作流
                async for chunk in workflow.astream(
                        {
                            "messages": [
                                {
                                    "role": "user",
                                    "content": user_request
                                }
                            ]
                        },
                        subgraphs=True
                ):
                    pretty_print_messages(chunk)

                print(f"\n请求 {i} 处理完成!")

                if i < len(user_requests):
                    input("\n按Enter键继续处理下一个请求...")

    except Exception as e:
        print(f"系统运行出错: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    # 运行示例
    asyncio.run(main())

运行项目

先运行article_mcp_server.py

再运行multi_agent_article_system.py

python 复制代码
正在初始化多Agent文章创作系统...
已加载 6 个MCP工具
已创建所有专业Agent
工作流构建完成,准备处理用户请求...

==================================================
处理请求 1: 帮我写一篇关于AI Agent的文章
==================================================
来自子图 researcher_agent 的更新:


	来自节点 agent 的更新:


	================================== Ai Message ==================================
	Name: researcher_agent
	Tool Calls:
	  research_topic (call_wBK96UlPUvJ1Y8tddajxA6Np)
	 Call ID: call_wBK96UlPUvJ1Y8tddajxA6Np
	  Args:
	    topic: AI Agent


来自子图 researcher_agent 的更新:


	来自节点 tools 的更新:


	================================= Tool Message =================================
	Name: research_topic
	
	{
	  "definition": "AI代理是能够感知环境、做出决策并执行行动的人工智能系统",
	  "applications": [
	    "自动化客服",
	    "内容生成",
	    "数据分析",
	    "智能助手"
	  ],
	  "trends": [
	    "多智能体协作",
	    "自主决策",
	    "专业化发展"
	  ],
	  "challenges": [
	    "安全性",
	    "伦理问题",
	    "技术复杂度"
	  ]
	}


来自子图 researcher_agent 的更新:


	来自节点 agent 的更新:


	================================== Ai Message ==================================
	Name: researcher_agent
	Tool Calls:
	  transfer_to_writer_agent (call_Q520NZvAQ5YdMeems22xUh21)
	 Call ID: call_Q520NZvAQ5YdMeems22xUh21
	  Args:


来自子图 writer_agent 的更新:


	来自节点 agent 的更新:


	================================== Ai Message ==================================
	Name: writer_agent
	Tool Calls:
	  write_article_outline (call_WE2QIRHbI9Snp8DRbV0zOBen)
	 Call ID: call_WE2QIRHbI9Snp8DRbV0zOBen
	  Args:
	    topic: AI Agent
	    research_data: {"definition":"AI代理是能够感知环境、做出决策并执行行动的人工智能系统","applications":["自动化客服","内容生成","数据分析","智能助手"],"trends":["多智能体协作","自主决策","专业化发展"],"challenges":["安全性","伦理问题","技术复杂度"]}


来自子图 writer_agent 的更新:


	来自节点 tools 的更新:


	================================= Tool Message =================================
	Name: write_article_outline
	
	{
	  "title": "关于AI Agent的深度分析文章",
	  "sections": [
	    {
	      "title": "引言",
	      "content": "介绍AI Agent的基本概念和重要性"
	    },
	    {
	      "title": "核心概念",
	      "content": "AI代理是能够感知环境、做出决策并执行行动的人工智能系统"
	    },
	    {
	      "title": "应用领域",
	      "content": "自动化客服,内容生成,数据分析,智能助手"
	    },
	    {
	      "title": "发展趋势",
	      "content": "多智能体协作,自主决策,专业化发展"
	    },
	    {
	      "title": "挑战与展望",
	      "content": "总结当前面临的挑战和未来发展方向"
	    }
	  ]
	}


来自子图 writer_agent 的更新:


	来自节点 agent 的更新:


	================================== Ai Message ==================================
	Name: writer_agent
	Tool Calls:
	  draft_article_section (call_O2K7BQlDaHUhgWHM92ohA7te)
	 Call ID: call_O2K7BQlDaHUhgWHM92ohA7te
	  Args:
	    section_title: 引言
	    content_guidance: 介绍AI Agent的基本概念和重要性
	  draft_article_section (call_CWpnYbedtdWkHNWL1JVvMI36)
	 Call ID: call_CWpnYbedtdWkHNWL1JVvMI36
	  Args:
	    section_title: 核心概念
	    content_guidance: AI代理是能够感知环境、做出决策并执行行动的人工智能系统
	  draft_article_section (call_l0KrxSJcLV2k9E5zvqEcj6xM)
	 Call ID: call_l0KrxSJcLV2k9E5zvqEcj6xM
	  Args:
	    section_title: 应用领域
	    content_guidance: 自动化客服,内容生成,数据分析,智能助手
	  draft_article_section (call_zKP4elLT7gbWMYuhhojzrly3)
	 Call ID: call_zKP4elLT7gbWMYuhhojzrly3
	  Args:
	    section_title: 发展趋势
	    content_guidance: 多智能体协作,自主决策,专业化发展
	  draft_article_section (call_TNCAsgilbzUVpwL9AtANEkac)
	 Call ID: call_TNCAsgilbzUVpwL9AtANEkac
	  Args:
	    section_title: 挑战与展望
	    content_guidance: 总结当前面临的挑战和未来发展方向


来自子图 writer_agent 的更新:


	来自节点 tools 的更新:


	================================= Tool Message =================================
	Name: draft_article_section
	
	
	            随着人工智能技术的快速发展,介绍AI Agent的基本概念和重要性已经成为当今科技领域的热点话题。
	            本文将从多个角度深入分析这一重要技术,探讨其应用前景和发展趋势。
	            


来自子图 writer_agent 的更新:


	来自节点 tools 的更新:


	================================= Tool Message =================================
	Name: draft_article_section
	
	
	            从技术层面来看,AI代理是能够感知环境、做出决策并执行行动的人工智能系统代表了人工智能发展的重要方向。
	            这一概念的核心在于创建能够自主学习和决策的智能系统。
	            


来自子图 writer_agent 的更新:


	来自节点 tools 的更新:


	================================= Tool Message =================================
	Name: draft_article_section
	
	
	            在实际应用中,自动化客服,内容生成,数据分析,智能助手已经展现出巨大的价值。
	            这些应用不仅提高了效率,还创造了新的商业模式和用户体验。
	            


来自子图 writer_agent 的更新:


	来自节点 tools 的更新:


	================================= Tool Message =================================
	Name: draft_article_section
	
	
	            展望未来,多智能体协作,自主决策,专业化发展将继续推动技术创新。
	            行业专家预测,这一领域将在未来几年内保持高速增长。
	            


来自子图 writer_agent 的更新:


	来自节点 tools 的更新:


	================================= Tool Message =================================
	Name: draft_article_section
	
	
	            尽管前景广阔,总结当前面临的挑战和未来发展方向仍面临诸多挑战。
	            需要在技术创新与伦理规范之间找到平衡点。
	            


来自子图 writer_agent 的更新:


	来自节点 agent 的更新:


	================================== Ai Message ==================================
	Name: writer_agent
	
	我已经帮你撰写了关于AI Agent的文章大纲,并完成了各个章节的草稿内容。章节包括:
	
	1. 引言:介绍AI Agent的基本概念和重要性。
	2. 核心概念:详细介绍AI代理是能够感知环境、做出决策并执行行动的人工智能系统。
	3. 应用领域:探讨AI Agent在自动化客服、内容生成、数据分析和智能助手领域的应用。
	4. 发展趋势:讨论AI Agent领域的多智能体协作、自主决策和专业化发展趋势。
	5. 挑战与展望:总结当前面临的挑战并展望未来发展方向。
	
	你可以继续优化这些内容或要求进一步修改。如果满意,请让我将任务移交给审核Agent进行内容审核。
相关推荐
FserSuN4 小时前
构建基于大语言模型的智能数据可视化分析工具的学习总结
学习·信息可视化·语言模型
玲小珑4 小时前
LangChain.js 完全开发手册(十六)实战综合项目二:AI 驱动的代码助手
前端·langchain·ai编程
viperrrrrrrrrr717 小时前
Agent向量存储中的记忆衰退与记忆过载解决方案
langchain·大模型·agent·rag
MasonYyp19 小时前
拖拽式构建智能体的框架
语言模型
后端小张1 天前
[AI 学习日记] 深入解析MCP —— 从基础配置到高级应用指南
人工智能·python·ai·开源协议·mcp·智能化转型·通用协议
测试开发技术1 天前
什么样的 prompt 是好的 prompt?
人工智能·ai·大模型·prompt
强哥之神1 天前
从零理解 KV Cache:大语言模型推理加速的核心机制
人工智能·深度学习·机器学习·语言模型·llm·kvcache