多Agent协作实战:用qm搭建AI Agent工作流的完整教程

· 小白基础技术分享

HN热榜上出现了一个有意思的项目——`qm`(Multiplayer agent harness for work),由yc-software开源。它解决了一个越来越紧迫的问题:当你有多个AI Agent需要协调工作时,怎么避免它们互相踩脚、重复劳动、甚至产生冲突输出?

本文带你从安装到搭建第一个多Agent协作流水线,完整实操。

qm的设计哲学

qm把自己定位为”Agent的工头”——它不做推理,不调用LLM,只做一件事:管理Agent之间的任务分配、状态同步和结果汇总

和LangGraph、CrewAI这类”帮你编排Agent”的框架不同,qm更轻量——它假设你的Agent已经是独立的进程或API,qm只是给它们一个共享的”任务看板”。

Step 1:安装

pip install qm-harness

验证安装:

qm --version
# 输出: qm 0.1.0

Step 2:定义一个简单的工作流

创建 `my_workflow.py`:

from qm import Harness, Task, Agent

# 初始化Harness
harness = Harness(name="code-review-pipeline")

# 定义三个Agent角色
@harness.agent("code-writer")
class CodeWriter(Agent):
    async def execute(self, task: Task):
        spec = task.input.get("spec")
        # 这里调用你的LLM生成代码
        result = await self.call_llm(
            f"Write code for: {spec}"
        )
        return {"code": result}

@harness.agent("code-reviewer")
class CodeReviewer(Agent):
    async def execute(self, task: Task):
        code = task.context.get("code")
        # 调用LLM审查代码
        review = await self.call_llm(
            f"Review this code: {code}"
        )
        return {"review": review, "approved": "BUG" not in review}

@harness.agent("test-runner")
class TestRunner(Agent):
    async def execute(self, task: Task):
        code = task.context.get("code")
        # 执行测试
        return {"passed": True, "output": "All tests green"}

# 定义工作流
harness.chain(
    Task("write", agent="code-writer", input={"spec": "$input"}),
    Task("review", agent="code-reviewer", context={"code": "$write.code"}),
    Task("test", agent="test-runner", context={"code": "$write.code"}),
    condition="review.approved == True"
)

harness.run(input="Create a REST API for user authentication")

Step 3:理解核心概念

Task(任务): 工作流的原子单元。包含输入参数(`input`)、上下文引用(`context`)、执行条件(`condition`)。

Agent(代理): 执行任务的实体。可以是LLM调用、API请求、本地脚本——qm不关心Agent内部怎么实现。

Context传递: `$write.code` 语法让后续Task直接引用前面Agent的输出。这避免了Agent之间手动传递数据的麻烦。

条件执行: `condition=”review.approved == True”` 让测试阶段只在代码审查通过后才执行。

Step 4:进阶——并行Agent

qm支持让多个Agent并行处理同一个任务,然后汇总结果:

harness.parallel(
    Task("analyze_security", agent="security-scanner", 
         input={"code": "$write.code"}),
    Task("analyze_performance", agent="perf-analyzer", 
         input={"code": "$write.code"}),
    Task("analyze_style", agent="style-checker", 
         input={"code": "$write.code"}),
)

三个分析Agent同时运行,qm自动等待全部完成后再汇总。

生产环境注意事项

超时处理。 每个Task可以设置 `timeout` 参数。Agent卡住时qm不会无限等待。

重试机制。 用 `retry=3` 让失败的Task自动重试——适合处理LLM API的偶发超时。

状态持久化。 qm默认把工作流状态存在内存中。生产环境建议配置SQLite或Redis后端:

qm run my_workflow.py --backend sqlite:///workflow.db

监控与告警。 qm内置了简单的metrics接口(默认端口9090),可以集成到Prometheus:

harness = Harness(
    name="code-review-pipeline",
    metrics_port=9090,
    alert_on_failure=True
)

与主流框架的对比

qm的定位很清晰——它是Agent团队的”任务看板”,不是”编排引擎”。具体对比:

LangGraph:强大的图状态管理,但学习曲线陡峭,适合复杂工作流

CrewAI:开箱即用的多Agent框架,但灵活性有限

qm:极简主义——只做任务分配和状态传递,适合已有Agent基础架构的团队

如果你已经在用LangChain或CrewAI,qm可以作为”胶水层”嵌入——在现有Agent之上加一层任务编排,而不是替换整个框架。

适用场景与限制

适合: 代码审查流水线、多Agent研究协作、文档生成管道、CI/CD中的AI辅助步骤。特别是那些”Agent角色已经定义好、但需要标准化协作流程”的团队。

不适合: 需要复杂条件分支的工作流(不如用n8n或Temporal)、实时性要求极高的场景(qm有调度延迟)、Agent之间需要大量数据交换的场景(qm的上下文传递机制比较朴素)。

一个真实的场景举例: 假设你要写一篇技术博客——Agent A负责调研和收集素材,Agent B负责撰写初稿,Agent C负责事实核查和技术审核,Agent D负责润色和排版。qm可以让这四个Agent像编辑部的同事一样,按顺序交接工作,自动传递上下文。整个过程你只需要在最后确认一遍即可。

**判断:** qm填补了”让多个Agent像团队一样工作”的工具空白。它的价值不在于功能多强,而在于足够简单——你不需要学一个新框架,只需要告诉qm”谁做什么、按什么顺序做”。如果你的团队已经在用AI Agent做具体任务,qm就是那个让它们学会”团队协作”的最后一块拼图。

🔥 关注LC智趣厅,让AI工具为你所用。

👇 你的多Agent工作流遇到了什么坑?


— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn

Scroll to Top
微信公众号:LC智趣厅

扫码关注微信公众号
LC智趣厅