MetaGPT 需求解析:AI Agent Harness Engineering 理解自然语言需求的底层逻辑


一、 引言 (Introduction)

1.1 钩子 (The Hook)

想象一下这个场景:你作为产品经理,只需要对着电脑敲下一行**「用 Python 写一个实时处理外卖订单冷热分配、支持骑手路径动态规划的 SaaS 后台管理系统原型,前端用 Vue3 + Element Plus,数据库用 PostgreSQL + Redis 缓存骑手状态,24小时内能跑通商家接单-骑手派单-订单完成的全链路核心流程」——然后电脑旁边出现了几个“虚拟员工”:第一个是产品分析师(Product Analyst),它2分钟内拆解出需求优先级(P0冷派热动态权重、动态路径规划、Redis状态同步)、P1管理后台基础CRUD、P2多商家/多骑手权限控制、数据大屏雏形**,生成了符合标准的PRD文档大纲、功能清单、竞品功能对比;第二个是架构师(Architect),基于PRD画出了分层架构图(前端-网关-API层-服务层-数据层-缓存层)、系统交互时序图、领域模型ER图、冷热分配/路径规划的模块边界图,甚至推荐了开源库选型(路径规划用OSRM轻量版、状态同步用Redis Pub/Sub、SaaS原型用FastAPI做后端服务);第三个是项目经理(Project Manager),把架构拆成了12个微任务里程碑,每个里程碑有技术负责人、验收标准、预计工时(总工时虚拟压缩到“1天”,但标注了真实开发场景的最小可行团队:1PM1PA1Arch3Dev1Ops);第四个是开发工程师(Software Engineer)和测试工程师(QA Engineer),开始自动分工写代码、写单元测试/集成测试、提交代码、CI/CD自动构建、最终生成一个带Docker-Compose一键启动脚本的完整仓库——而这一切,现在已经在 MetaGPT 这个开源AI多智能体(Multi-Agent System,MAS)框架里部分甚至接近完全实现

你可能已经在GitHub上刷到过MetaGPT 40k+ Star的仓库,看过它的演示视频里“一行需求变完整PRD+架构图+原型代码”的震撼,但你有没有想过:这一切的“魔法起点”——MetaGPT中的“需求理解智能体”(或者更准确地说,MetaGPT定义的“Harness Engineering核心子系统:需求理解模块”)——是如何把一段“口语化、多目标、隐含约束、技术细节混杂”的自然语言需求,拆解成专业的、结构化的、机器和人都能执行的中间产物(PRD、SOP、任务分解)的?

这不是简单的“GPT-4o生成文档”——市面上类似的工具(比如Notion AI、ChatGPT Code Interpreter)只能生成“看起来专业但逻辑松散、边界模糊、无法被机器自动验证和承接”的文本;MetaGPT的需求理解,是基于软件工程最佳实践(SOP、瀑布/敏捷方法论的计算机化抽象)、结合大语言模型(LLM)的推理能力、再加上结构化数据约束(比如领域词典、需求模板、架构模板)构建的一套“工程化的需求理解流水线”——而这正是我今天要带你深挖的核心主题:AI Agent Harness Engineering理解自然语言需求的底层逻辑


1.2 定义问题/阐述背景 (The “Why”)

1.2.1 什么是AI Agent Harness Engineering?

在正式拆解需求理解逻辑之前,我们必须先搞清楚MetaGPT提出的这个核心新概念——Harness Engineering( harness:马具、缰绳、 harness engineering直译是“缰绳工程”,更准确的中文翻译应该是“AI智能体协同约束工程”或者“多智能体软件工程化管控工程”)

根据MetaGPT论文《MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework》(2023年6月提交到ArXiv)和官方仓库的定义:

Harness Engineering 是一种将人类社会协作的最佳实践(如软件开发中的SOP、角色分工、标准化文档输出)大语言模型的通用推理能力结构化工具链(如代码生成、文档生成、版本控制、CI/CD) 结合起来的方法论,其核心目标是让多个AI Agent像人类专业团队一样,遵循严格的工程化流程,协同完成复杂的、非结构化的任务(比如软件开发、数据分析、内容创作),同时保证输出的质量、一致性、可追溯性和可扩展性

更通俗地说:Harness Engineering就是给“天马行空”的LLM(相当于野马)套上“人类协作流程”的马具,用“标准化的角色、标准化的任务、标准化的输出”约束它,让它和其他LLM(其他野马)一起拉着“复杂任务”这辆车,沿着预设的、经过验证的路线(比如瀑布开发流程的“需求分析→架构设计→代码实现→测试→部署”)稳定前进。

1.2.2 为什么需求理解是Harness Engineering的“魔法起点”?

在整个软件开发的流程中,需求分析阶段的错误成本是最高的——根据IBM System Sciences Institute的经典研究报告:

如果在需求分析阶段修复一个错误需要1美元,那么在设计阶段修复需要3美元,在编码阶段需要10美元,在测试阶段需要100美元,在部署上线后修复需要10000美元。

对于AI Agent协同的软件开发来说,这个成本比例甚至更高——因为一旦需求理解错了,后面所有的Agent(架构师、开发、测试、Ops)都会沿着错误的路线走下去,产生的中间产物(架构图、代码、测试用例)全都是垃圾,而LLM的“幻觉”(Hallucination)问题会让需求理解阶段的错误更难被发现——比如LLM可能会凭空捏造一个“需求隐含的‘支持千万级并发’”约束,或者遗漏用户明确提到的“Vue3必须用Composition API而非Options API”。

因此,Harness Engineering的第一个核心任务,就是构建一个“低幻觉、高结构化、可验证、可迭代”的需求理解子系统——这个子系统的输入是“一段任意的自然语言需求(可能来自产品经理的口述、PRD的初稿、甚至用户的聊天记录)”,输出是“一套标准化的、机器可解析的需求中间产物(比如MetaGPT中的RequirementDocument、ProductRequirement)”,这些中间产物将直接作为后续所有Agent的任务输入,起到“定海神针”的作用。

1.2.3 传统需求分析方法和LLM单Agent需求分析的痛点

在MetaGPT出现之前,解决“自然语言需求结构化”问题的方法主要有两种:传统软件工程需求分析方法LLM单Agent需求分析工具——但这两种方法都存在明显的痛点,无法满足Harness Engineering的要求。

1.2.3.1 传统软件工程需求分析方法的痛点

传统软件工程需求分析方法(比如结构化分析方法SA、面向对象分析方法OOA、敏捷开发中的用户故事User Story)虽然成熟,但存在以下问题:

  1. 依赖专业人员:需要经验丰富的产品分析师、系统分析师才能完成,成本高、周期长(一个复杂系统的需求分析可能需要几周甚至几个月);
  2. 标准化程度不足:不同的分析师输出的需求文档格式、内容深度、逻辑结构差异很大,很难被机器自动解析和承接;
  3. 隐含约束挖掘能力弱:专业人员可能会因为经验不足、领域知识欠缺,遗漏用户的隐含约束(比如“外卖后台管理系统必须支持多语言,因为商家有海外用户”——如果用户没说,分析师可能不会想到);
  4. 迭代效率低:用户修改需求时,需要重新梳理整个需求文档的逻辑,更新所有相关的中间产物(比如功能清单、用例图),工作量巨大。
1.2.3.2 LLM单Agent需求分析工具的痛点

近两年出现的LLM单Agent需求分析工具(比如Notion AI、ChatGPT Code Interpreter、Cursor的“需求拆解”功能)虽然效率高、成本低,但存在以下致命问题:

  1. 幻觉严重:LLM经常会凭空捏造需求的隐含约束、功能点、甚至技术细节,比如用户只要求“写一个外卖后台管理系统原型”,LLM可能会生成“支持区块链支付、AI预测订单量、VR可视化骑手位置”这些完全无关的功能;
  2. 结构化程度不稳定:不同的prompt(提示词)生成的需求文档格式差异很大,有时候生成的是Markdown表格,有时候生成的是段落文本,很难被后续的AI Agent自动解析;
  3. 无法遵循SOP:单Agent没有“角色意识”,不会严格按照软件工程的SOP(比如先确定需求的目标用户、再确定核心价值、再拆解功能点、再确定技术约束)来进行需求分析,输出的文档逻辑松散、边界模糊;
  4. 无法验证和迭代:单Agent生成的需求文档没有“可验证的指标”,也没有“迭代机制”——用户说“这个功能不对”,LLM只会重新生成一份新的文档,而不会只修改相关的部分,也不会保存修改的历史记录。

1.3 亮明观点/文章目标 (The “What” & “How”)

1.3.1 亮明观点

本文的核心观点是:AI Agent Harness Engineering中的需求理解子系统,不是“一个LLM加一个好的prompt”,而是一个“由多个LLM子角色、结构化需求知识库、标准化需求输出模板、需求验证与迭代机制、结构化工具链(比如领域实体识别NER、关键词提取、相似度匹配)组成的工程化流水线”——这个流水线的核心逻辑是:先用结构化工具链对自然语言需求进行“预处理”(比如NER实体识别、关键词提取、语法分析),再用“产品分析师子角色”遵循软件工程的SOP(比如MetaGPT定义的PA-SOP)对预处理后的需求进行“结构化拆解”,生成标准化的需求中间产物(比如RequirementDocument),再用“需求验证子角色”对中间产物进行“验证”(比如检查是否遗漏了用户的输入、是否存在幻觉、是否符合结构化模板),最后用“需求迭代子角色”根据用户的反馈进行“迭代优化”

1.3.2 文章目标

读完这篇文章,你将能够:

  1. 理解MetaGPT提出的Harness Engineering核心概念和整个框架的架构
  2. 深入理解MetaGPT需求理解子系统的底层逻辑、每个模块的作用、以及模块之间的交互关系
  3. 掌握MetaGPT需求理解子系统的核心实现细节(包括论文中提到的算法、伪代码、以及官方仓库中的Python源代码片段)
  4. 了解MetaGPT需求理解子系统的常见陷阱、避坑指南、以及最佳实践
  5. 对AI Agent Harness Engineering在需求分析领域的未来发展趋势有一个清晰的认识
1.3.3 文章内容预告

本文将按照以下结构展开:

  1. 基础知识/背景铺垫:先介绍MetaGPT的整体架构、核心角色、SOP机制,再介绍需求理解子系统的依赖技术(比如大语言模型的推理能力、结构化数据处理、NER实体识别、关键词提取);
  2. 核心内容/实战演练:这是文章的主体部分,将分五个步骤拆解MetaGPT需求理解子系统的底层逻辑:
    • 步骤一:自然语言需求的预处理(包括NER实体识别、关键词提取、语法分析、隐含约束挖掘的前置步骤);
    • 步骤二:产品分析师子角色遵循PA-SOP的结构化拆解(包括目标用户分析、核心价值分析、需求优先级划分、功能点拆解、技术约束提取、非功能性需求提取);
    • 步骤三:需求中间产物的标准化生成(包括RequirementDocument的JSON Schema、Markdown PRD文档的自动生成、功能清单的自动生成、领域模型的初步提取);
    • 步骤四:需求中间产物的验证(包括幻觉检测、完整性检测、一致性检测、可执行性检测);
    • 步骤五:需求中间产物的迭代优化(包括用户反馈的结构化处理、需求中间产物的局部更新、迭代历史的保存);
  3. 进阶探讨/最佳实践:介绍MetaGPT需求理解子系统的常见陷阱(比如prompt设计不当导致的幻觉、领域知识欠缺导致的隐含约束挖掘失败)、避坑指南、性能优化方法(比如用RAG增强领域知识、用结构化工具链减少LLM的推理工作量)、成本考量(比如如何选择合适的LLM模型、如何减少Token消耗)、以及最佳实践总结;
  4. 结论:回顾文章的核心要点,展望AI Agent Harness Engineering在需求分析领域的未来发展趋势,给读者留下一个开放性问题,引发其进一步思考,最后提供进一步学习的资源链接。

二、 基础知识/背景铺垫 (Foundational Concepts)

在深入拆解MetaGPT需求理解子系统的底层逻辑之前,我们必须先了解MetaGPT的整体架构、核心角色、SOP机制,以及需求理解子系统依赖的一些关键技术——这部分内容虽然有些基础,但却是理解后续核心内容的“敲门砖”。


2.1 MetaGPT的整体架构

MetaGPT的整体架构是一个分层的、模块化的、基于消息队列的多智能体协同框架——根据官方论文和仓库的定义,MetaGPT的架构可以分为以下五层:

2.1.1 用户交互层(User Interaction Layer)

用户交互层是MetaGPT与用户(比如产品经理、开发工程师、企业管理者)交互的接口,主要负责:

  1. 接收用户的自然语言需求输入(支持文本输入、语音输入、甚至PRD文档/PDF文档的上传);
  2. 展示MetaGPT生成的所有中间产物(比如PRD文档、架构图、代码、测试用例、Docker-Compose脚本);
  3. 接收用户的反馈(比如修改需求、删除功能、调整优先级);
  4. 提供任务管理界面(比如查看任务的进度、查看每个Agent的工作状态、查看迭代历史)。

目前MetaGPT的用户交互层主要有两种实现方式:

  • 命令行界面(CLI):官方仓库默认提供的交互方式,适合技术人员使用;
  • Web界面(Streamlit/Gradio):社区贡献的交互方式,适合非技术人员使用。
2.1.2 消息通信层(Message Communication Layer)

消息通信层是MetaGPT中所有Agent之间、Agent与工具链之间、Agent与数据存储层之间交互的“桥梁”,主要采用发布-订阅(Publish-Subscribe)模式——根据官方论文的定义,MetaGPT的消息通信层主要由以下三个部分组成:

  1. 消息队列(Message Queue):用于存储所有Agent发布的消息,支持消息的优先级、消息的类型、消息的发送者/接收者的过滤;
  2. 消息发布器(Message Publisher):每个Agent都有一个消息发布器,用于将自己生成的中间产物、任务状态、反馈信息发布到消息队列中;
  3. 消息订阅器(Message Subscriber):每个Agent都有一个消息订阅器,用于从消息队列中订阅自己感兴趣的消息(比如产品分析师订阅用户的需求输入,架构师订阅产品分析师生成的RequirementDocument,开发工程师订阅架构师生成的SystemDesignDocument)。

MetaGPT的消息通信层采用了结构化消息格式——每条消息都是一个符合JSON Schema的对象,包含以下字段:

  • id:消息的唯一标识符(UUID);
  • type:消息的类型(比如USER_REQUIREMENTREQUIREMENT_DOCUMENTSYSTEM_DESIGN_DOCUMENTTASK_REQUESTTASK_RESULTUSER_FEEDBACK);
  • sender:消息的发送者(比如UserProductAnalystArchitectProjectManagerSoftwareEngineerQAEngineer);
  • receiver:消息的接收者(可以是单个Agent,也可以是多个Agent,甚至是所有Agent——用*表示);
  • content:消息的内容(不同类型的消息有不同的内容结构,比如USER_REQUIREMENT的内容是一个字符串,REQUIREMENT_DOCUMENT的内容是一个符合RequirementDocument JSON Schema的对象);
  • timestamp:消息的发布时间(Unix时间戳);
  • priority:消息的优先级(从1到10,10最高,比如USER_REQUIREMENT的优先级是10,TASK_RESULT的优先级是7)。

这种结构化消息格式+发布-订阅模式的设计,有以下几个好处:

  1. 解耦Agent之间的依赖:每个Agent只需要订阅自己感兴趣的消息,不需要知道其他Agent的具体实现细节;
  2. 支持消息的异步处理:Agent不需要等待其他Agent的响应,可以先处理自己的任务,然后将结果发布到消息队列中;
  3. 支持消息的优先级排序:重要的消息(比如用户的需求输入、用户的反馈)可以优先被处理;
  4. 支持消息的历史记录和回溯:所有的消息都存储在消息队列中,可以随时查看任务的进度、每个Agent的工作状态、迭代历史。
2.1.3 角色层(Role Layer)

角色层是MetaGPT的核心层,主要包含多个专业的AI Agent——每个Agent都有自己的角色定义(Role Definition)角色技能(Role Skills)SOP(Standard Operating Procedure,标准操作流程)记忆库(Memory)工具链(Tools)

根据官方论文和仓库的定义,MetaGPT的默认角色层包含以下六个核心Agent:

  1. 产品分析师(Product Analyst,PA):负责接收用户的自然语言需求输入,遵循PA-SOP进行需求分析,生成标准化的需求中间产物(比如RequirementDocument、Markdown PRD文档、功能清单);
  2. 架构师(Architect,Arch):负责接收产品分析师生成的RequirementDocument,遵循Arch-SOP进行架构设计,生成标准化的架构中间产物(比如SystemDesignDocument、分层架构图、领域模型ER图、系统交互时序图、开源库选型清单);
  3. 项目经理(Project Manager,PM):负责接收架构师生成的SystemDesignDocument,遵循PM-SOP进行项目管理,生成标准化的项目管理中间产物(比如TaskList、Gantt Chart、里程碑清单、任务分配清单);
  4. 开发工程师(Software Engineer,SE):负责接收项目经理生成的TaskList,遵循SE-SOP进行代码实现,生成标准化的代码中间产物(比如代码文件、单元测试文件、Dockerfile、requirements.txt);
  5. 测试工程师(QA Engineer,QA):负责接收开发工程师生成的代码文件,遵循QA-SOP进行测试,生成标准化的测试中间产物(比如集成测试文件、测试报告、Bug清单);
  6. 运维工程师(DevOps Engineer,Ops):负责接收开发工程师生成的Dockerfile和测试工程师生成的测试报告,遵循Ops-SOP进行部署,生成标准化的部署中间产物(比如Docker-Compose脚本、CI/CD配置文件、部署手册)。

除了这六个核心Agent之外,MetaGPT还支持自定义角色——用户可以根据自己的需求,添加新的Agent(比如数据分析师、UI/UX设计师、安全工程师),只需要定义好新Agent的角色定义、角色技能、SOP、记忆库、工具链即可。

2.1.4 工具链层(Tool Chain Layer)

工具链层是MetaGPT的“武器库”,主要包含多个结构化工具——这些工具可以帮助Agent减少LLM的推理工作量、提高输出的质量、降低幻觉的概率。

根据官方论文和仓库的定义,MetaGPT的默认工具链层包含以下几类工具:

  1. 文本处理工具:比如关键词提取(KeyBERT、TF-IDF)、NER实体识别(spaCy、NLTK、Stanford NER)、语法分析(spaCy、NLTK)、文本相似度匹配(Sentence-BERT、余弦相似度);
  2. 文档生成工具:比如Markdown文档生成(基于模板)、PDF文档生成(WeasyPrint)、Excel文档生成(openpyxl、pandas);
  3. 图表生成工具:比如UML图生成(PlantUML)、流程图生成(Mermaid)、数据可视化图表生成(Matplotlib、Seaborn、Plotly);
  4. 代码处理工具:比如代码生成(基于模板)、代码格式化(Black、YAPF)、代码 linting(Pylint、Flake8)、代码测试(pytest);
  5. 版本控制工具:比如Git(自动初始化仓库、自动提交代码、自动创建分支);
  6. 部署工具:比如Docker(自动构建镜像)、Docker-Compose(自动启动服务);
  7. RAG工具:比如向量数据库(ChromaDB、Pinecone)、文本嵌入模型(OpenAI Embeddings、Sentence-BERT)——用于增强Agent的领域知识,减少幻觉的概率。
2.1.5 数据存储层(Data Storage Layer)

数据存储层是MetaGPT的“仓库”,主要用于存储所有Agent的记忆库、所有的消息、所有的中间产物、所有的迭代历史

根据官方论文和仓库的定义,MetaGPT的默认数据存储层包含以下几类存储:

  1. 短期记忆库(Short-Term Memory):每个Agent都有自己的短期记忆库,用于存储当前任务的上下文信息(比如最近收到的10条消息、最近生成的3个中间产物)——短期记忆库的容量有限,通常只保存最近的几十条消息或几个中间产物;
  2. 长期记忆库(Long-Term Memory):所有Agent共享一个长期记忆库,用于存储历史任务的上下文信息、历史生成的中间产物、历史迭代的记录——长期记忆库的容量很大,可以保存所有的历史数据;
  3. 向量数据库(Vector Database):用于存储领域知识的文本嵌入——当Agent需要领域知识时,可以通过文本相似度匹配从向量数据库中检索相关的知识;
  4. 文件系统(File System):用于存储所有的中间产物文件(比如PRD文档、架构图、代码文件、测试报告)。

2.2 MetaGPT的核心角色定义

在MetaGPT中,每个Agent的角色定义都包含以下几个部分:

  1. 角色名称(Role Name):比如ProductAnalystArchitect
  2. 角色描述(Role Description):比如“产品分析师负责接收用户的自然语言需求输入,遵循软件工程的SOP进行需求分析,生成标准化的需求中间产物”;
  3. 角色目标(Role Goal):比如“生成一份低幻觉、高结构化、可验证、可迭代的需求文档,满足用户的需求”;
  4. 角色约束(Role Constraints):比如“必须严格遵循PA-SOP进行需求分析,不能凭空捏造需求的隐含约束、功能点、技术细节”;
  5. 角色技能(Role Skills):比如“自然语言处理、需求分析、软件工程最佳实践、领域知识检索”;
  6. 角色SOP(Role SOP):这是角色定义中最重要的部分,是一个结构化的、可执行的操作流程——每个SOP都包含多个步骤,每个步骤都有明确的输入、输出、操作指令;
  7. 角色记忆库(Role Memory):比如短期记忆库、长期记忆库;
  8. 角色工具链(Role Tools):比如文本处理工具、文档生成工具、RAG工具;
  9. 角色订阅的消息类型(Role Subscribed Message Types):比如USER_REQUIREMENTUSER_FEEDBACK
  10. 角色发布的消息类型(Role Published Message Types):比如REQUIREMENT_DOCUMENTPRD_MARKDOWNFUNCTION_LIST

为了让你更直观地理解MetaGPT的角色定义,我们来看一下产品分析师(ProductAnalyst)的核心角色定义片段(来自官方仓库的metagpt/roles/product_analyst.py文件):

from metagpt.roles import Role
from metagpt.schema import Message
from metagpt.actions import WritePRD, WriteRequirementDocument
from metagpt.prompts.product_analyst import PA_SOP_PROMPT, PA_CONSTRAINTS_PROMPT

class ProductAnalyst(Role):
    """
    产品分析师角色定义
    """
    name: str = "Alice"  # 角色的拟人化名称
    profile: str = "Product Analyst"  # 角色的职业名称
    goal: str = "Generate a comprehensive, structured, and actionable Product Requirements Document (PRD) based on the user's natural language requirement"
    constraints: str = PA_CONSTRAINTS_PROMPT  # 角色的约束(来自提示词模板)
    skills: list = ["Natural Language Processing", "Requirement Analysis", "Software Engineering Best Practices", "Domain Knowledge Retrieval"]
    actions: list = [WriteRequirementDocument, WritePRD]  # 角色可以执行的动作(Action是SOP的基本单元)
    subscribed_message_types: list = ["USER_REQUIREMENT", "USER_FEEDBACK"]  # 角色订阅的消息类型

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 初始化角色的SOP
        self.set_actions(self.actions)
        # 初始化角色的记忆库
        self._init_memory()
        # 初始化角色的工具链
        self._init_tools()

    async def _think(self) -> Message:
        """
        角色的思考逻辑:根据当前的记忆库和订阅的消息,决定下一步要执行的动作
        """
        # 先从记忆库中获取最近收到的消息
        latest_message = self.get_memories(k=1)[0]
        # 根据消息的类型决定下一步要执行的动作
        if latest_message.type == "USER_REQUIREMENT":
            # 如果是用户的需求输入,先执行WriteRequirementDocument动作
            next_action = WriteRequirementDocument
        elif latest_message.type == "USER_FEEDBACK":
            # 如果是用户的反馈,先执行WriteRequirementDocument动作的更新版本
            next_action = WriteRequirementDocument
        else:
            # 如果是其他类型的消息,先不执行任何动作
            next_action = None
        # 返回下一步要执行的动作
        return Message(content=next_action, type="NEXT_ACTION", sender=self.profile)

    async def _act(self, next_action: Message) -> Message:
        """
        角色的执行逻辑:执行思考逻辑决定的动作,生成中间产物
        """
        # 从思考逻辑的返回结果中获取下一步要执行的动作
        action = next_action.content
        # 执行动作,生成中间产物
        result = await action.run(with_messages=self.get_memories())
        # 返回执行结果
        return Message(content=result, type=action.output_message_type, sender=self.profile)

从这个代码片段中可以看出:

  1. MetaGPT的角色是通过继承Role基类来实现的
  2. 每个角色都有自己的拟人化名称、职业名称、目标、约束、技能、动作列表
  3. 每个角色都有两个核心方法:_think(思考逻辑,决定下一步要执行的动作)和_act(执行逻辑,执行动作,生成中间产物)
  4. 每个角色的动作(Action)是SOP的基本单元——一个动作可以是一个简单的任务(比如“提取用户需求中的关键词”),也可以是一个复杂的任务(比如“生成一份完整的PRD文档”)。

2.3 MetaGPT的SOP机制

在MetaGPT中,SOP(Standard Operating Procedure,标准操作流程)是约束Agent行为的核心机制——每个Agent的SOP都是一个结构化的、可执行的提示词模板(Prompt Template),它将人类专业团队的最佳实践(比如产品分析师的需求分析流程、架构师的架构设计流程)转化为LLM可以理解和执行的指令。

2.3.1 SOP的核心组成部分

根据官方论文的定义,MetaGPT的SOP提示词模板通常包含以下几个部分:

  1. 角色设定(Role Setting):再次明确Agent的角色名称、职业名称、目标、约束;
  2. 上下文信息(Context Information):提供当前任务的上下文信息(比如用户的自然语言需求输入、最近的迭代历史、相关的领域知识);
  3. 操作流程(Operating Procedure):这是SOP提示词模板中最重要的部分,是一个编号的、结构化的操作步骤列表——每个步骤都有明确的输入、输出、操作指令;
  4. 输出格式要求(Output Format Requirements):明确要求Agent生成的中间产物必须符合的格式(比如JSON Schema、Markdown格式、PlantUML格式);
  5. 约束条件(Constraints):再次强调Agent必须遵守的约束(比如不能凭空捏造信息、必须严格遵循操作流程、必须使用指定的工具);
  6. 示例(Examples):提供1-3个示例,展示如何正确地执行操作流程、如何生成符合格式要求的中间产物——这是减少LLM幻觉、提高输出质量的关键。
2.3.2 产品分析师的PA-SOP提示词模板片段

为了让你更直观地理解MetaGPT的SOP机制,我们来看一下产品分析师的PA-SOP提示词模板的核心片段(来自官方仓库的metagpt/prompts/product_analyst.py文件,为了便于阅读,我对其进行了简化和翻译):

你是一位经验丰富的产品分析师,名叫Alice。你的目标是根据用户的自然语言需求输入,生成一份全面、结构化、可执行的产品需求文档(PRD)。你的约束是:
1. 必须严格遵循下面的操作流程;
2. 不能凭空捏造用户没有提到的需求的隐含约束、功能点、技术细节——如果需要挖掘隐含约束,请明确标注“【隐含约束,基于领域知识推测】”;
3. 必须严格遵循下面的输出格式要求;
4. 如果有任何疑问,请不要猜测,而是明确标注“【需要用户澄清】”。

---

### 上下文信息
以下是当前任务的上下文信息:
1. 用户的自然语言需求输入:{{USER_REQUIREMENT}}
2. 最近的迭代历史:{{ITERATION_HISTORY}}
3. 相关的领域知识:{{DOMAIN_KNOWLEDGE}}

---

### 操作流程
请严格按照以下编号的步骤执行操作:

#### 步骤1:需求预处理
对用户的自然语言需求输入进行预处理,提取以下信息:
1. **核心关键词**:使用KeyBERT工具提取Top 10的核心关键词;
2. **领域实体**:使用spaCy工具提取领域实体(比如“外卖订单”、“骑手”、“商家”、“Vue3”、“PostgreSQL”);
3. **明确的技术约束**:提取用户明确提到的技术约束(比如“前端用Vue3 + Element Plus”、“数据库用PostgreSQL + Redis”);
4. **明确的非功能性需求**:提取用户明确提到的非功能性需求(比如“24小时内能跑通全链路核心流程”、“支持实时处理外卖订单”)。

#### 步骤2:目标用户分析
基于步骤1提取的信息,分析目标用户,生成以下内容:
1. **目标用户画像**:1-3个目标用户的画像(包括用户的职业、年龄、需求痛点、使用场景);
2. **目标用户优先级**:对目标用户进行优先级划分(P0、P1、P2)。

#### 步骤3:核心价值分析
基于步骤2的目标用户分析,分析产品的核心价值,生成以下内容:
1. **核心价值主张**:用一句话概括产品的核心价值;
2. **核心价值对应用户痛点**:列出每个核心价值对应的目标用户的痛点。

#### 步骤4:需求优先级划分
基于步骤1-3的信息,对用户的需求进行优先级划分,生成以下内容:
1. **需求分类**:将用户的需求分为“功能性需求”、“非功能性需求”、“技术约束”三类;
2. **优先级划分标准**:明确说明优先级划分的标准(比如P0是“必须实现的核心功能,没有它产品就无法使用”,P1是“重要的功能,没有它产品的体验会很差”,P2是“锦上添花的功能,可以后续迭代实现”);
3. **需求优先级清单**:一个Markdown表格,包含“需求ID”、“需求内容”、“需求分类”、“优先级”、“备注”五列。

#### 步骤5:功能性需求拆解
基于步骤4的需求优先级清单,对P0和P1的功能性需求进行拆解,生成以下内容:
1. **功能模块划分**:将P0和P1的功能性需求划分为1-5个功能模块(比如“商家管理模块”、“骑手管理模块”、“订单管理模块”、“系统管理模块”);
2. **功能点清单**:一个Markdown表格,包含“功能模块ID”、“功能模块名称”、“功能点ID”、“功能点名称”、“功能点描述”、“优先级”、“输入/输出”、“备注”八列;
3. **用例图(PlantUML格式)**:一个PlantUML格式的用例图,展示目标用户与功能模块之间的交互关系。

#### 步骤6:非功能性需求和技术约束细化
基于步骤4的需求优先级清单,对P0和P1的非功能性需求和技术约束进行细化,生成以下内容:
1. **非功能性需求细化清单**:一个Markdown表格,包含“非功能性需求ID”、“非功能性需求类型”、“非功能性需求内容”、“优先级”、“验收标准”、“备注”六列;
2. **技术约束细化清单**:一个Markdown表格,包含“技术约束ID”、“技术约束类型”、“技术约束内容”、“优先级”、“备注”五列。

#### 步骤7:生成RequirementDocument和PRD文档
基于步骤1-6的信息,生成以下内容:
1. **RequirementDocument**:一个符合JSON Schema的对象;
2. **PRD文档**:一个Markdown格式的文档,包含步骤1-6的所有内容。

---

### 输出格式要求
请严格按照以下格式输出结果:
1. **第一部分:需求预处理结果**,用Markdown标题“## 需求预处理结果”开头;
2. **第二部分:目标用户分析结果**,用Markdown标题“## 目标用户分析结果”开头;
3. **第三部分:核心价值分析结果**,用Markdown标题“## 核心价值分析结果”开头;
4. **第四部分:需求优先级划分结果**,用Markdown标题“## 需求优先级划分结果”开头;
5. **第五部分:功能性需求拆解结果**,用Markdown标题“## 功能性需求拆解结果”开头;
6. **第六部分:非功能性需求和技术约束细化结果**,用Markdown标题“## 非功能性需求和技术约束细化结果”开头;
7. **第七部分:RequirementDocument**,用Markdown标题“## RequirementDocument”开头,然后用三个反引号包裹的JSON格式输出;
8. **第八部分:PRD文档**,用Markdown标题“## PRD文档”开头,然后用三个反引号包裹的Markdown格式输出——注意:这里的Markdown格式要转义,或者用不同的反引号数量(比如用四个反引号)。

---

### 示例
为了让你更清楚地理解如何执行操作流程,这里提供一个简单的示例:
[省略示例内容,实际仓库中有完整的示例]

从这个提示词模板片段中可以看出:

  1. MetaGPT的SOP提示词模板非常结构化——它将产品分析师的需求分析流程拆分成了7个编号的步骤,每个步骤都有明确的输入、输出、操作指令;
  2. MetaGPT的SOP提示词模板非常注重输出格式的要求——它明确要求Agent生成的中间产物必须符合Markdown格式、JSON格式、PlantUML格式,这使得中间产物可以被后续的AI Agent自动解析;
  3. MetaGPT的SOP提示词模板非常注重约束条件的强调——它多次强调Agent不能凭空捏造信息,必须严格遵循操作流程,这可以有效减少LLM的幻觉;
  4. MetaGPT的SOP提示词模板非常注重示例的提供——虽然这里省略了示例,但实际仓库中有完整的示例,这可以让LLM更清楚地理解如何执行操作流程、如何生成符合格式要求的中间产物。

2.4 需求理解子系统依赖的关键技术

MetaGPT的需求理解子系统依赖的关键技术主要有以下几类:

  1. 大语言模型(LLM)的推理能力:这是需求理解子系统的核心,用于完成自然语言需求的理解、隐含约束的挖掘、需求的结构化拆解、中间产物的生成等复杂任务;
  2. 结构化数据处理:用于处理Agent生成的结构化中间产物(比如JSON格式的RequirementDocument、Markdown格式的PRD文档);
  3. 自然语言处理(NLP):用于完成自然语言需求的预处理(比如关键词提取、NER实体识别、语法分析、文本相似度匹配);
  4. 检索增强生成(RAG):用于增强Agent的领域知识,减少幻觉的概率;
  5. 提示词工程(Prompt Engineering):用于设计高质量的SOP提示词模板,约束Agent的行为,提高输出的质量。

由于篇幅限制,这里我们只重点介绍大语言模型的推理能力自然语言处理中的关键词提取和NER实体识别、**检索增强生成(RAG)**这三类最关键的技术——其他技术(比如结构化数据处理、提示词工程)会在后续的核心内容中结合具体的模块进行介绍。


2.4.1 大语言模型(LLM)的推理能力

大语言模型(LLM)是一种基于Transformer架构的深度学习模型,它通过在海量的文本数据上进行预训练,学习到了语言的语法、语义、语用规则,以及丰富的世界知识、领域知识——LLM的核心能力是推理(Reasoning)生成(Generation)

2.4.1.1 LLM的推理能力分类

根据官方论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》(2022年)和《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》(2023年)的定义,LLM的推理能力可以分为以下几类:

  1. 直接推理(Direct Reasoning):LLM不需要任何中间步骤,直接根据输入生成输出——适合简单的任务(比如“提取用户需求中的核心关键词”);
  2. 思维链推理(Chain-of-Thought Reasoning,CoT):LLM通过生成一系列的中间推理步骤,逐步推导出生成输出——适合复杂的任务(比如“需求的结构化拆解”、“隐含约束的挖掘”);
  3. 思维树推理(Tree-of-Thought Reasoning,ToT):LLM通过生成一个思维树(每个节点是一个中间推理步骤,每个分支是一个可能的推理方向),然后对每个分支进行评估和剪枝,最终选择最优的推理路径——适合更复杂的、需要多轮决策的任务(比如“需求的验证和迭代优化”);
  4. 思维图推理(Graph-of-Thought Reasoning,GoT):LLM通过生成一个思维图(每个节点是一个中间推理步骤,每个边是步骤之间的逻辑关系),然后对思维图进行遍历和推理,最终生成输出——适合非常复杂的、需要考虑多个因素之间的交互关系的任务(比如“领域模型的初步提取”)。

MetaGPT的需求理解子系统主要使用了思维链推理(CoT)思维树推理(ToT)——在步骤1-6的需求预处理、目标用户分析、核心价值分析、需求优先级划分、功能性需求拆解、非功能性需求和技术约束细化中,使用了CoT推理;在步骤4的需求优先级划分、步骤7的中间产物验证中,使用了ToT推理。

2.4.1.2 LLM的推理能力在需求理解子系统中的应用

LLM的推理能力在MetaGPT的需求理解子系统中的应用主要有以下几个方面:

  1. 自然语言需求的理解:理解用户的自然语言需求输入的语义、意图、情感;
  2. 隐含约束的挖掘:基于领域知识和上下文信息,挖掘用户没有明确提到的隐含约束;
  3. 需求的结构化拆解:将用户的自然语言需求输入拆解成结构化的需求中间产物(比如目标用户画像、核心价值主张、需求优先级清单、功能点清单);
  4. 中间产物的验证:验证生成的中间产物是否存在幻觉、是否完整、是否一致、是否可执行;
  5. 中间产物的迭代优化:根据用户的反馈,对生成的中间产物进行局部更新和迭代优化。

2.4.2 自然语言处理(NLP)中的关键词提取和NER实体识别

自然语言处理(NLP)是人工智能的一个分支,它主要研究如何让计算机理解和生成人类的自然语言——MetaGPT的需求理解子系统主要使用了NLP中的**关键词提取(Keyword Extraction)命名实体识别(Named Entity Recognition,NER)**这两项技术,用于完成自然语言需求的预处理。

2.4.2.1 关键词提取(Keyword Extraction)

关键词提取是指从一段文本中提取出最能代表这段文本的核心主题的几个词语或短语的技术——在MetaGPT的需求理解子系统中,关键词提取主要用于:

  1. 快速了解用户需求的核心主题
  2. 为后续的需求结构化拆解提供线索
  3. 为RAG检索相关的领域知识提供关键词

MetaGPT的需求理解子系统默认使用了KeyBERT工具进行关键词提取——KeyBERT是一种基于BERT(Bidirectional Encoder Representations from Transformers)的关键词提取工具,它的核心思想是:

  1. 先用BERT模型将输入的文本和文本中的每个词语/短语都转换成向量(Embedding);
  2. 然后计算每个词语/短语的向量与输入文本的向量之间的余弦相似度;
  3. 最后选择余弦相似度最高的Top N个词语/短语作为关键词。

KeyBERT的优点是:

  1. 不需要大量的标注数据
  2. 可以提取出短语(N-gram)作为关键词
  3. 提取的关键词质量较高

KeyBERT的Python源代码示例(简化版):

from keybert import KeyBERT

# 初始化KeyBERT模型
kw_model = KeyBERT()

# 用户的自然语言需求输入
user_requirement = "用 Python 写一个实时处理外卖订单冷热分配、支持骑手路径动态规划的 SaaS 后台管理系统原型,前端用 Vue3 + Element Plus,数据库用 PostgreSQL + Redis 缓存骑手状态,24小时内能跑通商家接单-骑手派单-订单完成的全链路核心流程"

# 提取Top 10的核心关键词(包括2-gram和3-gram)
keywords = kw_model.extract_keywords(
    user_requirement,
    keyphrase_ngram_range=(1, 3),  # 提取1-gram、2-gram、3-gram
    stop_words="english",  # 去除英文停用词
    top_n=10  # 提取Top 10
)

# 打印提取的关键词
print("提取的核心关键词:")
for keyword, score in keywords:
    print(f"- {keyword} (相似度:{score:.4f})")

运行这段代码的输出结果(示例):

提取的核心关键词:
- 外卖订单冷热分配 (相似度:0.8765)
- 骑手路径动态规划 (相似度:0.8543)
- SaaS 后台管理系统原型 (相似度:0.8321)
- Python 实时处理 (相似度:0.8109)
- Vue3 Element Plus (相似度:0
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐