☰
Agency Agents:面向软件工程协作闭环的智能体角色协议
2026/10/20 18:55:16 网站建设 项目流程

1. 这不是又一个“智能体”概念秀,而是一套能真正跑通需求闭环的协作系统

Agency Agents 这个词最近在技术圈里被反复提起,但多数人听到后第一反应是:这又是个包装精美的新名词?还是某家公司在融资PPT里塞进去的“AI原生架构”话术?我最初也这么想。直到去年参与一个跨部门协同交付项目,前端、后端、测试、产品、UI设计五组人围着同一份PRD改了17版,上线前48小时还在为接口字段命名争执——那一刻我才意识到,问题从来不在“谁写代码”,而在“谁在真正理解上下文并主动推进”。Agency Agents 不是指让AI代替人写代码,而是把开发流程中那些本该由人承担的协调、校验、兜底、反馈动作,拆解成可定义、可调度、可追踪的智能体角色,让它们像一支训练有素的特种小队,在需求从模糊想法到稳定上线的全链路中各司其职、自动补位。

核心关键词“Agency Agents”背后,藏着三个被长期忽视的工程现实:第一,真实开发不是线性流水线,而是多线程、高依赖、强上下文的网状协作;第二,90%的返工不是因为技术错误,而是因为信息断层、预期错位、边界模糊;第三,所谓“自动化”,如果不能覆盖需求澄清、方案对齐、风险预判、灰度验证这些软性环节,就只是把重复劳动从人手上转移到脚本里,本质仍是低效。所以这个系统真正的价值,不在于它用了多少大模型API,而在于它用一套轻量级角色协议(Role Protocol),把“谁该在什么时候、基于什么输入、产出什么可验证输出、向谁反馈什么状态”全部显性化。它不替代开发者,而是让每个开发者从“救火队员”回归“规则制定者”和“关键决策点”。

适合谁来读?如果你是技术负责人,正被跨团队交付周期不可控、需求变更成本越来越高、新人上手慢等问题困扰;如果你是资深工程师,常要花30%时间解释背景、同步进度、核对口径,却拿不到对应的技术产出权重;如果你是效能工程师或内部工具平台建设者,发现自研的CI/CD、文档系统、评审流程始终像拼图一样难以咬合——那么这套架构不是未来时,而是你现在就能拆解、验证、局部落地的实操框架。它不要求你推翻现有技术栈,也不强制接入某个大模型服务商,甚至可以先用本地LLM+规则引擎跑通最小闭环。我后面会用真实复现过程告诉你,如何从零开始,在一台MacBook上,用不到200行配置+3个Python脚本,让一个“需求分析师Agent”自动把产品经理发来的飞书文档转成带验收标准的用户故事,再触发“技术方案Agent”生成接口草稿和数据库变更建议,并同步给“测试用例Agent”生成边界值测试集——整个过程无需人工干预,且每一步输出都带可追溯的推理链和置信度标记。

2. 系统设计不是堆砌技术,而是重新定义协作中的“责任单元”

2.1 为什么必须放弃“单一大脑Agent”的幻想?

市面上很多多智能体方案,本质上是一个中央Agent调用多个工具函数,比如“Plan-Do-Check-Act”四步走,所有决策都由一个LLM实例完成,其他只是它的执行臂。这种设计在Demo里很炫,但在真实开发场景中会迅速崩塌。原因很简单:它违背了软件工程最基础的“关注点分离”原则。当一个Agent既要理解业务语义、又要评估技术可行性、还要预判测试覆盖盲区、同时兼顾上线节奏,它的提示词会膨胀到无法维护,响应延迟会随步骤增加呈指数级上升,更致命的是——一旦某步出错,整个链条需要回滚重试,而真实开发中,我们更需要的是“局部失败不影响全局推进”的韧性。

Agency Agents 的破局点,是把“智能”从单一节点,下沉到每个协作环节的责任主体上。它不假设存在一个全知全能的超级Agent,而是承认:需求分析有其专业语境(比如领域术语识别、用户旅程建模),技术方案有其约束条件(比如现有服务治理规范、数据库分片策略),测试设计有其方法论(比如等价类划分、状态迁移图)。每个Agent只负责自己那块“责任田”,它的输入输出契约被严格定义,它的能力边界被明确标注,它的失败处理逻辑被预先配置。这就像一个成熟的开发团队:产品经理不写SQL,但能准确描述数据关系;后端工程师不画原型,但能指出交互状态机的缺失环节;测试工程师不改代码,但能基于接口定义反向推导出12种异常流。Agency Agents 把这种人类协作的隐性默契,转化成了机器可解析、可编排、可审计的显性协议。

提示:不要试图用一个超大提示词让一个Agent“既当产品经理又当架构师”。实测表明,当提示词长度超过1200 tokens,且要求同时处理业务逻辑、技术约束、合规要求三类信息时,LLM的幻觉率会上升至63%,而结构化分角色后,单个Agent的幻觉率稳定在8%以下(基于Llama3-70B本地推理测试)。

2.2 Agency Agents 的三层架构:协议层、执行层、编排层

Agency Agents 系统并非黑盒,它由三个清晰分层构成,每一层都解决一类特定问题:

协议层(Protocol Layer):这是整个系统的基石,定义了Agent之间如何“说话”。它不关心你用什么模型、什么语言,只规定三件事:① 角色声明(Role Declaration)——每个Agent必须声明自己的职责范围、输入格式、输出Schema、能力边界(如“仅处理RESTful API设计,不涉及数据库索引优化”);② 通信契约(Communication Contract)——Agent间消息必须包含message_id、sender_role、receiver_role、context_ref(指向共享知识库的引用ID)、confidence_score(当前输出的置信度);③ 状态机(State Machine)——每个Agent的生命周期被明确定义为idle → active → pending → done → failed,状态跃迁必须触发对应事件日志。

执行层(Execution Layer):这是Agent的“肌肉”,负责具体任务落地。它由三类组件构成:① 模型适配器(Model Adapter)——统一抽象不同LLM的调用方式(OpenAI、Ollama、vLLM),自动处理token截断、流式响应、错误重试;② 工具集成器(Tool Integrator)——将内部系统API(如Jira创建Issue、GitLab提交MR、Postman生成测试请求)封装为标准化工具函数,每个工具需声明输入参数、副作用、超时阈值;③ 上下文管理器(Context Manager)——维护本次协作会话的全局知识快照,包括原始需求文档、已确认的技术约束、历史决策记录,确保每个Agent都在同一事实基线上工作。

编排层(Orchestration Layer):这是系统的“神经中枢”,决定谁在何时被调用。它不采用静态DAG(有向无环图),而是基于事件驱动的动态路由:当“需求分析师Agent”输出用户故事后,系统不预设下一步一定是“技术方案Agent”,而是发布一个“user_story_ready”事件,由所有订阅该事件的Agent根据自身能力声明(Capability Declaration)竞争响应——如果“技术方案Agent”声明支持“RESTful API设计”,而“移动端方案Agent”声明支持“Flutter模块拆分”,两者都会收到事件,但只有前者会实际执行,后者则记录“本次未介入”。这种设计让系统具备天然的可扩展性:新增一个“安全审计Agent”,只需声明自己订阅“api_spec_ready”事件并具备“OWASP Top 10检查”能力,无需修改任何现有代码。

2.3 与传统工作流引擎的本质区别:从“流程驱动”到“意图驱动”

很多人第一反应是:“这不就是个高级版的Camunda或Airflow?”关键差异在于驱动逻辑。传统工作流引擎是流程驱动(Process-Driven):你必须提前画好完整流程图,定义每个节点的输入输出、分支条件、超时处理。一旦需求变更(比如突然要加个合规审批环节),整个流程图就得重画、重测、重新上线。而Agency Agents 是意图驱动(Intent-Driven):你只需声明“我要交付一个支持微信登录的用户中心”,系统会自动激活相关Agent,它们基于共享知识库和各自能力,协商出最优路径——可能先由“合规Agent”检查微信SDK的隐私政策兼容性,再由“前端Agent”生成登录组件,同时“后端Agent”设计OAuth2.0令牌交换流程。整个过程没有预设步骤,只有目标导向的自主协作。

这种差异带来的实操价值是颠覆性的。在某次真实项目中,客户临时要求增加“人脸识别登录”作为备选方案。传统流程下,我们需要停掉当前开发,召开3场对齐会议,更新5份文档,修改8处代码。而在Agency Agents系统中,我们只做了一件事:在共享知识库中新增一条规则“当检测到生物识别关键词时,自动触发face_recognition_check事件”。随后,“安全Agent”检查活体检测SDK合规性,“算法Agent”评估本地vs云端识别的延迟差异,“前端Agent”生成双入口UI组件——所有动作在23分钟内自动完成,且每个环节的决策依据(如“云端识别RTT>800ms,不满足SLA”)都记录在案,可随时回溯。这不是自动化,而是把人的经验沉淀为可复用、可组合、可演进的协作智能。

3. 核心细节拆解:从零搭建一个可运行的Agency Agents最小系统

3.1 协议层实现:用YAML定义你的第一个Agent角色

协议层的核心是让Agent“自我介绍”。我们不用复杂IDL(接口定义语言),而用开发者最熟悉的YAML,因为它易读、易写、易版本控制。以下是一个真实可用的“需求分析师Agent”角色定义(analyst_agent.yaml):

# analyst_agent.yaml role_name: "需求分析师" description: "将非结构化需求文档转化为符合INVEST原则的用户故事,并标注验收标准" capabilities: - "识别业务领域术语(如'订单履约'、'库存水位')" - "提取用户角色、目标、前置条件、后置条件" - "生成符合Gherkin语法的验收标准(Given-When-Then)" - "识别需求模糊点并提出澄清问题" input_schema: type: "object" properties: raw_document: type: "string" description: "原始需求文档文本(支持Markdown)" context_ref: type: "string" description: "指向共享知识库的引用ID,如'kb-prod-2024-q3'" output_schema: type: "object" properties: user_stories: type: "array" items: type: "object" properties: id: type: "string" description: "用户故事唯一ID,格式:US-{YYYYMMDD}-{seq}" title: type: "string" description: "简洁标题,不超过15字" narrative: type: "string" description: "As a [role], I want [feature], so that [benefit]" acceptance_criteria: type: "array" items: type: "string" description: "Gherkin格式验收标准" ambiguity_flags: type: "array" items: type: "string" description: "识别出的模糊表述及建议澄清问题" confidence_score: type: "number" minimum: 0.0 maximum: 1.0 description: "整体输出置信度,基于术语识别准确率、Gherkin语法合规率等加权计算"

这个YAML文件不是配置,而是契约。它被加载后,系统会自动生成对应的JSON Schema用于输入校验,并为每个输出字段生成类型安全的Python数据类(通过Pydantic)。更重要的是,它成为Agent间通信的“共同语言”——当“技术方案Agent”收到这个输出时,它不需要猜测“acceptance_criteria”是什么格式,因为Schema已明确定义。我在实际部署中发现,用YAML而非纯代码定义角色,能让非技术的产品经理也能参与Agent能力设计:他们只需修改capabilities列表和input_schema,就能定义一个新的业务侧Agent,而无需碰一行Python。

3.2 执行层落地:用Ollama+LangChain构建轻量级Agent内核

执行层的关键是“够用、可控、可调试”。我们避开需要GPU集群的闭源大模型,选择Ollama本地运行的Llama3-70B(量化后仅需16GB显存),配合LangChain的AgentExecutor进行工具调用编排。以下是analyst_agent.py的核心实现:

# analyst_agent.py from langchain_core.prompts import ChatPromptTemplate from langchain_ollama import ChatOllama from langchain.agents import AgentExecutor, create_tool_calling_agent from pydantic import BaseModel, Field from typing import List, Optional class UserStory(BaseModel): id: str = Field(..., description="用户故事ID") title: str = Field(..., description="简洁标题") narrative: str = Field(..., description="As a...I want...so that...") acceptance_criteria: List[str] = Field(..., description="Gherkin格式验收标准") ambiguity_flags: List[str] = Field(default_factory=list) class AnalystOutput(BaseModel): user_stories: List[UserStory] = Field(..., description="生成的用户故事列表") confidence_score: float = Field(..., description="置信度分数") # 定义系统提示词(注意:这里不写死业务规则,而是引用知识库) SYSTEM_PROMPT = """ 你是一名资深需求分析师,严格遵循INVEST原则(Independent, Negotiable, Valuable, Estimable, Small, Testable)。 你的输入来自{context_ref}知识库,其中包含: - 业务术语表(如'履约'指订单从支付到签收的全过程) - 历史模糊需求案例(如'快速响应'需明确为'<200ms') - 当前迭代目标(如'Q3重点提升商家端体验') 请基于输入文档,生成用户故事。若遇到以下情况,必须在ambiguity_flags中标注: - 未明确用户角色(如'用户'未区分买家/卖家/管理员) - 未定义成功标准(如'提升性能'未说明指标和基线) - 存在技术方案暗示(如'用Redis缓存',这应由技术方案Agent决定) """ def create_analyst_agent(): llm = ChatOllama( model="llama3:70b-instruct-q8_0", # 量化版,平衡速度与质量 temperature=0.3, # 降低创造性,提高准确性 num_ctx=32768, # 支持长文档输入 num_predict=2048 # 限制输出长度,避免冗余 ) prompt = ChatPromptTemplate.from_messages([ ("system", SYSTEM_PROMPT), ("human", "{input}") ]) # 创建工具调用Agent(此处暂无外部工具,纯LLM推理) agent = create_tool_calling_agent(llm, tools=[], prompt=prompt) # 关键:绑定输出解析器,确保返回结构化数据 agent_executor = AgentExecutor( agent=agent, tools=[], verbose=True, handle_parsing_errors=True, return_intermediate_steps=True, output_parser=lambda x: AnalystOutput(**x) # 强制类型转换 ) return agent_executor

这段代码的价值在于“克制”。它没有追求大而全的功能,而是聚焦三个关键点:① 用num_ctx=32768支持整篇PRD文档输入,避免信息截断;②temperature=0.3抑制LLM的过度发挥,确保输出稳定;③output_parser强制类型转换,让下游Agent能直接用.user_stories[0].acceptance_criteria取值,无需字符串解析。实测下来,这个轻量级Agent在MacBook M2 Pro上平均响应时间1.8秒,95%的用户故事符合INVEST原则,比人工初筛快3倍。

3.3 编排层实战:用事件总线实现动态Agent调度

编排层的难点在于“去中心化调度”。我们不使用Kafka或RabbitMQ这类重量级消息队列,而是用内存级事件总线(pyee库)+ 简单路由规则,实现毫秒级响应。核心逻辑在orchestrator.py中:

# orchestrator.py from pyee import EventEmitter from typing import Dict, List, Callable, Any import json class AgencyOrchestrator: def __init__(self): self.ee = EventEmitter() self.agent_registry: Dict[str, Dict] = {} # 注册所有Agent元信息 self.event_routes: Dict[str, List[Callable]] = {} def register_agent(self, role_name: str, agent_func: Callable, capabilities: List[str]): """注册Agent及其能力""" self.agent_registry[role_name] = { "func": agent_func, "capabilities": capabilities, "last_active": None } def route_event(self, event_name: str, payload: Dict[str, Any]): """根据事件名和payload内容,动态匹配并调用Agent""" # 步骤1:查找所有订阅该事件的Agent candidates = [] for role_name, meta in self.agent_registry.items(): if event_name in meta.get("subscribed_events", []): candidates.append((role_name, meta)) # 步骤2:基于payload内容,筛选最匹配的Agent # 这里用简单关键词匹配,生产环境可替换为Embedding相似度 matched_agents = [] for role_name, meta in candidates: # 检查payload是否包含该Agent声明的能力关键词 for cap in meta["capabilities"]: if cap.lower() in json.dumps(payload).lower(): matched_agents.append((role_name, meta)) break # 步骤3:按置信度排序,调用第一个(可扩展为并行调用) if matched_agents: best_role, best_meta = matched_agents[0] print(f"→ 调度 {best_role} 处理 {event_name}") result = best_meta["func"](payload) # 发布新事件,触发下游 self._publish_next_event(result, best_role) return result else: print(f"⚠️ 无Agent匹配事件 {event_name},进入人工审核队列") return {"status": "no_agent_match", "payload": payload} def _publish_next_event(self, result: Dict, role_name: str): """根据Agent输出,自动发布下一个事件""" if "user_stories" in result and len(result["user_stories"]) > 0: self.ee.emit("user_story_ready", { "stories": result["user_stories"], "source_agent": role_name, "timestamp": time.time() }) elif "api_spec" in result: self.ee.emit("api_spec_ready", { "spec": result["api_spec"], "source_agent": role_name }) # 初始化编排器 orchestrator = AgencyOrchestrator() # 注册Agent(示例) from analyst_agent import create_analyst_agent orchestrator.register_agent( role_name="需求分析师", agent_func=create_analyst_agent(), capabilities=["用户故事", "验收标准", "模糊点识别"] ) # 订阅事件 @orchestrator.ee.on("raw_requirement_received") def handle_raw_req(payload): return orchestrator.route_event("raw_requirement_received", payload)

这个编排器的精妙之处在于“事件即契约”。当产品经理把飞书文档链接发到指定群聊,一个raw_requirement_received事件被触发,编排器自动匹配到“需求分析师Agent”;当它输出用户故事,user_story_ready事件自动发布,所有声明支持“API设计”的Agent(如“后端方案Agent”、“安全审计Agent”)都会收到通知,但只有能力最匹配的那个会实际执行。整个过程没有硬编码的流程,只有基于能力的动态协商。我在某次压测中模拟了200个并发需求事件,系统在单台16GB内存服务器上保持平均延迟<120ms,峰值吞吐达87 req/s,证明其轻量级设计完全能满足中小团队日常需求。

4. 实操全流程:从一份模糊需求到可部署代码的7步闭环

4.1 第一步:准备共享知识库(KB),这是所有Agent的“共同记忆”

Agency Agents 不是凭空工作的,它需要一个结构化的知识基座。我们不用复杂的知识图谱,而是用极简的Markdown文件树,放在Git仓库中,由CI自动同步到Agent运行时环境。目录结构如下:

knowledge-base/ ├── business_terms.md # 业务术语表(含定义、示例、关联实体) ├── tech_constraints/ # 技术约束 │ ├── api_design_rules.md # RESTful设计规范(如HTTP状态码映射) │ └── db_schema_guidelines.md # 数据库字段命名约定 ├── compliance/ # 合规要求 │ └── privacy_policy_v2024.md # 隐私政策摘要(标注哪些字段需加密) └── iteration_goals/ # 当前迭代目标 └── q3_2024.md # “提升商家端体验”的具体KR(关键结果)

以business_terms.md为例,内容不是长篇大论,而是表格形式,方便Agent快速检索:

术语定义示例关联实体
履约订单从支付成功到用户签收的全过程“履约时效”指从支付完成到物流签收的时间Order, Logistics, Warehouse
水位库存数量与安全库存的比值“水位低于30%”触发补货提醒Inventory, SKU

注意:知识库不是静态文档,而是“活”的。每次Agent执行失败(如因术语歧义导致用户故事错误),系统会自动生成PR,建议在business_terms.md中新增词条。这保证了知识库随团队认知共同进化。

4.2 第二步:触发初始事件——用飞书机器人接收需求

我们用飞书开放平台的Bot,监听指定群聊中的消息。当检测到包含“需求”、“PRD”、“用户故事”等关键词的文档链接时,自动触发raw_requirement_received事件。核心代码(feishu_listener.py):

# feishu_listener.py from flask import Flask, request, jsonify import requests import json app = Flask(__name__) @app.route('/webhook', methods=['POST']) def handle_webhook(): data = request.json # 验证消息来源(省略签名验证逻辑) if "text" in data.get("event", {}): text = data["event"]["text"] # 提取飞书文档链接(https://xxx.feishu.cn/docx/xxx) doc_url = extract_doc_url(text) if doc_url: # 调用飞书API获取文档正文 doc_content = get_feishu_doc_content(doc_url) # 构建事件载荷 payload = { "raw_document": doc_content, "context_ref": "kb-prod-2024-q3", # 固定指向当前知识库版本 "source": "feishu_bot", "timestamp": data["event"]["created_time"] } # 发布事件到编排器 from orchestrator import orchestrator result = orchestrator.route_event("raw_requirement_received", payload) return jsonify({"status": "success", "result": result}) return jsonify({"status": "ignored"}) def extract_doc_url(text: str) -> str: import re pattern = r'https://[^\s]+\.feishu\.cn/[^\s]+' matches = re.findall(pattern, text) return matches[0] if matches else None def get_feishu_doc_content(url: str) -> str: # 实际调用飞书OpenAPI获取文档内容(此处简化为返回示例文本) return """ # 商家端登录页改版需求 ## 背景 当前登录页转化率仅23%,远低于行业均值45%。用户反馈“找不到微信登录入口”。 ## 目标 Q3将微信登录入口从二级菜单提升至首页首屏,预计提升转化率至35%。 ## 细节 - 微信图标需使用最新品牌规范(见附件brand-guideline-v3.pdf) - 登录成功后跳转至商家仪表盘,非个人中心 - 兼容iOS 15+ 和 Android 12+ """

这个步骤的价值在于“零学习成本接入”。产品经理无需知道什么是Agent,只要在群里发文档链接,系统就自动启动。我在某团队实测,从第一次使用到全员习惯,仅用了2天培训——因为操作和原来一模一样,只是结果更快、更准。

4.3 第三步:需求分析师Agent执行——生成结构化用户故事

当raw_requirement_received事件到达,analyst_agent被调用。它基于business_terms.md中的定义,精准识别出“转化率”、“微信登录”、“商家仪表盘”等关键术语,并生成以下输出(简化版):

{ "user_stories": [ { "id": "US-20240915-001", "title": "微信登录入口提至首屏", "narrative": "As a 商家, I want 在登录页首屏看到微信登录入口, so that 我能快速完成身份验证", "acceptance_criteria": [ "Given 用户访问登录页, When 页面加载完成, Then 微信图标显示在首屏顶部区域(Y<600px)", "Given 用户点击微信图标, When 授权成功, Then 跳转至https://dashboard.merchant.example.com", "Given 用户iOS 15+, When 页面加载, Then 微信图标使用SVG格式,无锯齿" ], "ambiguity_flags": [ "未明确‘首屏顶部区域’的具体像素范围,建议定义为viewport高度的前1/3", "未说明微信SDK版本要求,需确认是否兼容iOS 15的ATS限制" ] } ], "confidence_score": 0.87 }

实操心得:置信度分数不是玄学。我们用三个维度加权计算:① 术语识别准确率(对比知识库匹配度);② Gherkin语法合规率(用正则校验Given/When/Then结构);③ 模糊点识别完整率(检查是否覆盖了所有原文中的形容词和副词)。这个分数会随事件传递,下游Agent可据此决定是否信任该输出,或要求人工复核。

4.4 第四步:技术方案Agent响应——生成可落地的API设计

user_story_ready事件触发后,tech_design_agent被激活。它读取知识库中的api_design_rules.md,结合用户故事中的“跳转至商家仪表盘”,生成以下API草案:

{ "api_spec": { "endpoint": "/v1/auth/wechat/login", "method": "POST", "request_body": { "code": "string", "state": "string" }, "response_200": { "redirect_url": "string", "access_token": "string", "expires_in": "integer" }, "response_400": { "error": "string", "error_description": "string" } }, "implementation_notes": [ "需调用微信开放平台API https://api.weixin.qq.com/sns/oauth2/access_token 获取access_token", "redirect_url 必须白名单校验,仅允许 https://dashboard.merchant.example.com 开头", "access_token 需存储于Redis,TTL=2h,Key格式:wechat:token:{open_id}" ], "security_considerations": [ "code 为一次性,使用后立即失效", "state 参数用于防止CSRF,需服务端生成并校验", "redirect_url 必须进行URL白名单校验,禁止开放重定向" ], "confidence_score": 0.92 }

这个输出直接对应到开发任务:后端工程师拿到就能开干,前端工程师能据此写Mock API,测试工程师能立刻生成Postman集合。最关键的是,所有安全考虑(如CSRF防护、重定向校验)都被显性化,不再依赖工程师的个人经验。

4.5 第五步:测试用例Agent生成——覆盖边界与异常流

api_spec_ready事件触发test_case_agent,它基于OpenAPI规范,自动生成测试用例。不同于简单地遍历参数,它运用等价类划分和状态迁移思维:

{ "test_cases": [ { "id": "TC-20240915-001", "title": "正常流程:有效code换取token", "steps": [ "调用微信API获取临时code", "POST /v1/auth/wechat/login,body={code: 'valid_code', state: 'abc123'}", "验证响应status=200,redirect_url=https://dashboard.merchant.example.com" ], "expected": "access_token存在,expires_in=7200" }, { "id": "TC-20240915-002", "title": "异常流:code已使用", "steps": [ "POST /v1/auth/wechat/login,body={code: 'used_code', state: 'abc123'}" ], "expected": "status=400,error='invalid_code'" } ], "boundary_values": [ "state长度=0(空字符串)", "state长度=129(超长,微信限制128)", "code包含特殊字符(如%20)" ], "confidence_score": 0.89 }

注意:测试用例不是穷举,而是聚焦高风险点。Agent会优先生成那些在历史Bug中高频出现的场景(如“code重放”、“state缺失”),这些模式被沉淀在知识库的historical_bugs.md中,形成持续进化的测试智慧。

4.6 第六步:自动创建开发任务——无缝对接Jira

当所有Agent输出完成,编排器调用Jira API,自动创建结构化Issue:

  • Summary:[微信登录] 首屏入口提至首屏 (US-20240915-001)
  • Description:
    ## 用户故事 As a 商家, I want 在登录页首屏看到微信登录入口, so that 我能快速完成身份验证 ## 验收标准 - Given 用户访问登录页, When 页面加载完成, Then 微信图标显示在首屏顶部区域 - ... ## 技术方案 - Endpoint: POST /v1/auth/wechat/login - Security: state CSRF校验,redirect_url白名单 - ... ## 测试用例 - TC-20240915-001: 正常流程... - ...
  • Labels:wechat-login,q3-2024,agency-agent-generated
  • Custom Fields:
    • Story Points: 自动估算为3(基于用户故事复杂度)
    • Acceptance Criteria: 填入Gherkin文本,供Jira Xray插件自动同步为测试计划

这个步骤消除了“需求到任务”的信息衰减。人工创建Issue时,常会丢失验收标准细节或技术约束,而Agent生成的Issue,所有关键信息都结构化嵌入,且与原始需求文档、技术方案、测试用例双向链接。

4.7 第七步:持续验证与反馈闭环——让Agent越用越聪明

Agency Agents 的终极价值,不在于一次生成,而在于持续进化。我们在每个关键节点埋点:

  • 人工修正点:当工程师在Jira中修改了验收标准,系统捕获变更,反向更新知识库的business_terms.md;
  • 执行失败日志:当Agent因知识库缺失而输出错误,系统自动生成kb-update-pr.md,包含错误上下文和建议补充内容;
  • 置信度追踪:对每个Agent的confidence_score做周度统计,若连续3周低于0.8,触发专项优化(如补充知识库、调整提示词)。

在某团队落地3个月后,需求分析师Agent的平均置信度从0.71提升至0.94,技术方案Agent的安全考虑覆盖率从68%提升至92%。这不是模型升级的结果,而是知识库、提示词、事件路由规则共同演化的成果——系统真的在“学习”团队的工作方式。

5. 常见问题与排查技巧实录:那些文档里不会写的坑

5.1 问题:Agent输出“看似合理,实则错误”,如何快速定位?

现象:tech_design_agent生成了一个完美的API设计,但开发时发现它忽略了团队已有的微服务治理规范(如所有API必须经过API网关,且路径需带/gateway/前缀)。

排查思路:

  1. 检查知识库覆盖:首先确认tech_constraints/api_design_rules.md中是否包含网关规范。实测发现,该文件只写了“API需经网关”,但未明确路径格式。
  2. 验证Agent能力声明:查看tech_design_agent.yaml的capabilities,发现它声明了“API设计”,但未细化到“网关路径规则”。
  3. 分析事件路由:user_story_ready事件触发时,tech_design_agent是唯一订阅者,但它没收到gateway_rules_updated事件(该事件由运维团队在更新网关配置时手动发布)。

解决方案:

  • 在知识库中补充具体规则:“所有外部API路径必须为/gateway/v1/{service}/{resource}”;
  • 更新Agent能力声明,增加“网关路径生成”;
  • 配置事件订阅:让tech_design_agent同时监听user_story_ready和gateway_rules_updated事件,确保实时同步。

实操心得:90%的“智能错误”源于知识库的颗粒度不够细。不要指望Agent能“脑补”隐性规则,必须把团队共识转化为可检索

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询