展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 第4周 Day 3:多 Agent 协作——让 Agent 们"组队干活"

第4周 Day 3:多 Agent 协作——让 Agent 们"组队干活"

第4周 Day 3:多 Agent 协作——让 Agent 们"组队干活" 断更了十来天,今天重新支棱起来,把节奏续上。 前面几讲里,我们接触的 Agent 其实都是"单兵作战"模式——一个 Agent 从头干到尾,包揽所有活儿。 但在实际工作流里,复杂任务很少是靠一个人单打独斗完成的。随便举两个例

本文目录

    第4周 Day 3:多 Agent 协作——让 Agent 们"组队干活"

    断更了十来天,今天重新支棱起来,把节奏续上。

    前面几讲里,我们接触的 Agent 其实都是"单兵作战"模式——一个 Agent 从头干到尾,包揽所有活儿。

    但在实际工作流里,复杂任务很少是靠一个人单打独斗完成的。随便举两个例子:

    • 写一篇公众号文章:你得先查资料 → 再动笔写稿 → 排版美化 → 最后审校把关
    • 跑一个项目:同样要经历设计 → 开发 → 测试 → 上线这几个环节

    各司其职,效率才会高。 今天就来看看怎么让多个 Agent 像一支小团队那样协同作战。


    一、什么是多 Agent 协作?

    说白了,就是把多个 Agent 像拼乐高一样组合起来,各干各的专长活儿,一起完成一个更复杂的任务。

    单 Agent多 Agent 团队
    能力什么都会一点,谈不上精通每个 Agent 专精一项,效果更优
    复杂度任务稍微绕一点就容易跑偏复杂任务也能拆解消化
    可维护性改一处功能可能牵连整个逻辑每个 Agent 独立修改,互不干扰
    扩展性加功能越加越臃肿加个新 Agent 就完事,清晰干净
    容错一出错整个流程崩盘一个出问题,其他人还能临时补位

    二、流水线协作

    A 干完给 B,B 干完给 C。 上一个角色的输出,就是下一个角色的输入。看起来就像一条真实的工厂流水线。

    研究员(查资料) → 写手(写稿) → 编辑(审校)
    

    这种模式最适合那些步骤明确、前后有清晰依赖关系的任务。

    真实运行效果

    核心代码

    class Agent:
        def __init__(self, name, role, system_prompt):
            self.system_prompt = system_prompt  # 角色的专属提示词
        def process(self, task):
            return call_llm(self.system_prompt, task)
    
    class Researcher(Agent):
        def __init__(self):
            super().__init__(
                name="研究员",
                system_prompt="你是资料研究员,搜集信息并整理成要点列表"
            )
    
    class Writer(Agent):
        def __init__(self):
            super().__init__(
                name="写手",
                system_prompt="你是内容写手,根据资料写200字短文"
            )
    
    class PipelineTeam:
        def collaborate(self, task):
            current_input = task
            for agent in self.members:
                output = agent.process(current_input)  # 调用 LLM
                current_input = output  # 传递给下一个
            return current_input
    

    三、代码详解(逐部分拆解)

    3.1 API 配置

    API_URL = "https://coding.dashscope.aliyuncs.com/v1/chat/completions"
    API_HEADERS = {
        "Content-Type": "application/json",
        "Authorization": "Bearer sk-sp-xxxxx"
    }
    API_MODEL = "glm-5"
    
    变量是什么比喻
    API_URLLLM 的地址打电话给谁
    API_HEADERS身份证明你是谁,有没有权限
    API_MODEL用哪个模型打给哪个人

    3.2 call_llm 函数

    def call_llm(system_prompt, user_prompt):
        payload = {
            "messages": [
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": user_prompt}
            ]
        }
        response = requests.post(API_URL, headers=API_HEADERS, json=payload)
        return response.json()["choices"][0]["message"]["content"]
    

    作用:给 LLM 打个电话,把问题说清楚,然后等它回复答案。

    字段是什么比喻
    system_prompt角色/身份"你现在是研究员"
    user_prompt具体问题"帮我查一下仓鼠的资料"

    举个例子:

    • System:"你是一位资深医生"
    • User:"我最近经常头疼,可能是什么原因?"

    3.3 Agent 基类

    class Agent:
        def __init__(self, name, role, system_prompt):
            self.name = name
            self.system_prompt = system_prompt  # 专属指令
            self.work_log = []    
        def process(self, task):
            result = call_llm(self.system_prompt, task)
            self.work_log.append({"task": task, "result": result})
            return result
    

    Agent 就是一个团队成员,它的三个基本属性:名字、专长(system_prompt)、工作记录(work_log)。

    process 方法的工作流也非常清晰:

    接到任务 → 调 LLM(说"我是【角色】,要做【任务】") → 返回结果
    

    3.4 三个具体 Agent

    class Researcher(Agent):
        system_prompt = "你是资料研究员,搜集信息并整理成要点列表"
    
    class Writer(Agent):
        system_prompt = "你是内容写手,根据资料写200字短文"
    
    class Editor(Agent):
        system_prompt = "你是编辑,检查文章质量"
    
    Agentsystem_prompt干什么
    Researcher"你是研究员"查资料、列要点
    Writer"你是写手"根据资料写出文章
    Editor"你是编辑"审核内容、把关质量

    3.5 PipelineTeam 流水线

    class PipelineTeam:
        def collaborate(self, task):
            current_input = task
            for agent in self.members:
                output = agent.process(current_input)
                current_input = output  # 关键:传递给下一个
            return current_input
    

    核心逻辑其实就是一个循环接力:

    研究员.process("写仓鼠介绍") → 返回资料
             ↓ current_input = output(传递)
    写手.process(资料) → 返回文章
             ↓ current_input = output(传递)
    编辑.process(文章) → 返回审核结果
    

    整条流水线的关键就是这一行:current_input = output。上一步的输出,变成下一步的输入,环环相扣。

    3.6 Orchestrator 协调者

    class Orchestrator:
        AGENT_MAP = {
            "研究员": Researcher,  # 名字 → 类
            "写手": Writer,
            "编辑": Editor,
        }    
        WORKFLOWS = {
            "写文章": ["研究员", "写手", "编辑"],
        }    
        def solve(self, user_request):
            task_type = self._classify_task(user_request)  # 分析任务
            workflow = WORKFLOWS[task_type]  # 选择流程
            team = PipelineTeam()
            for name in workflow:
                team.add(AGENT_MAP[name]())  # 根据名字创建 Agent
            return team.collaborate(user_request)
    

    Orchestrator 就是团队的队长,它做的事可以拆成四步:

    1. 先分析用户任务属于什么类型
    2. 查预定义的工作流表,看该用哪些角色、按什么顺序执行
    3. 根据 AGENT_MAP 创建对应的 Agent 实例
    4. 让团队按流水线开始干活

    四、如何分配 Agent?如何闭环?

    4.1 任务分解与 Agent 分配

    方案一:硬编码工作流模板——适合固定场景

    WORKFLOWS = {
        "写文章": ["研究员", "写手", "编辑"],
        "写介绍": ["研究员", "写手", "编辑"],
    }
    

    根据任务里的关键词去匹配一个预定义的工作流,简单粗暴,胜在稳定。

    方案二:Orchestrator(协调者)模式——灵活得多

    通过一个主控 Agent 调用 LLM 来动态生成执行计划:

    用户请求 → Orchestrator(LLM 生成计划)
                  ↓
             Plan: [研究员, 写手, 编辑]
                  ↓
             按计划依次调用
    

    4.2 Agent 是预定义的

    提前写好各个 Agent 类,程序根据工作流决定调用谁:

    AGENTS = {
        "研究员": Researcher(),
        "写手": Writer(),
        "编辑": Editor(),
    }
    
    # 根据工作流选择
    for agent_name in workflow:
        agent = AGENTS[agent_name]
        agent.process(task)
    

    4.3 如何避免无限循环(闭环控制)

    机制做法
    最大步数MAX_STEPS = 10,超出就强制退出
    完成条件LLM 输出 COMPLETE 标识时停止
    进度检查连续几轮没有实质进展 → 强制退出
    MAX_STEPS = 10
    
    for i in range(MAX_STEPS):
        result = agent.process(task)
        if is_complete(result):
            break
    
    if i == MAX_STEPS - 1:
        return "任务超时"
    

    五、协作架构图

    用户请求
        │
        ▼
    ┌────────────────┐
    │   Orchestrator │  ← 分析任务,选择工作流
    └────────┬───────┘
             │
        ┌────┼────┐
        ▼    ▼    ▼
    研究员  写手  编辑   ← 各干各的,依次传递
        │    │    │
        └────┼────┘
             ▼
        汇总输出

    六、多 Agent 协作的价值

    价值说明
    专业化每个 Agent 只聚焦一件事,可以做得非常深入
    可扩展想加新能力,直接加个新 Agent 就行
    容错性一个 Agent 出错不影响整体流程
    可观测每个 Agent 都留有工作日志,方便回溯排查

    七、今日总结

    • 多 Agent 协作:多个 Agent 分工,依次传递结果
    • 流水线模式:上一个输出 → 下一个输入
    • 每个 Agent 调用一次 LLM,system_prompt 定义角色
    • 闭环控制:MAX_STEPS 防止无限循环

    核心公式:

    多个 Agent 各司其职 = 1+1 > 2 的协作效果
    流水线:上一个输出 → 下一个输入
    每个 Agent 调用一次 LLM
    

    八、附源码

    # -*- coding: utf-8 -*-
    """
    Week 4 Day 3: 多 Agent 协作 - 真实可用版真正调用 LLM API 的多 Agent 协作示例。
    演示:研究员 → 写手 → 编辑 流水线协作运行:python app_real.py
    """
    
    import requests
    import json
    
    # =============================================
    # API 配置(用户已配置)
    # =============================================
    
    API_URL = "https://coding.dashscope.aliyuncs.com/v1/chat/completions"
    API_HEADERS = {
        "Content-Type": "application/json",
        "Authorization": "Bearer sk-sp-xxx"
    }
    API_MODEL = "glm-5"
    
    # =============================================
    # LLM 调用
    # =============================================
    
    def call_llm(system_prompt: str, user_prompt: str) -> str:
        """调用 LLM API"""    
        payload = {
            "model": API_MODEL,
            "messages": [
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": user_prompt}
            ],
            "max_tokens": 1024,
            "temperature": 0.7
        }    
        try:
            response = requests.post(API_URL, headers=API_HEADERS, json=payload, timeout=30)        
            if response.status_code != 200:
                raise Exception(f"API 调用失败: {response.status_code} - {response.text}")        
            result = response.json()        
            # 根据返回格式解析
            if "choices" in result:
                return result["choices"][0]["message"]["content"]
            elif "output" in result:
                return result["output"]["text"]
            else:
                return str(result)    
        except requests.exceptions.Timeout:
            raise Exception("API 调用超时")
        except Exception as e:
            raise Exception(f"API 调用出错: {str(e)}")
    
    # =============================================
    # Agent 定义
    # =============================================
    
    class Agent:
        """Agent 基类"""    
        def __init__(self, name: str, role: str, system_prompt: str):
            self.name = name
            self.role = role
            self.system_prompt = system_prompt
            self.work_log = []    
        def process(self, task: str) -> str:
            """执行任务,调用真实 LLM"""
            print(f"  [{self.name}] 正在调用 LLM...")        
            result = call_llm(self.system_prompt, task)        
            self.work_log.append({"task": task[:50], "result": result[:100]})
            print(f"  [{self.name}] 完成!")
            return result
    
    class Researcher(Agent):
        """研究员:搜集整理资料"""    
        def __init__(self):
            super().__init__(
                name="研究员",
                role="资料搜集",
                system_prompt="你是资料研究员。任务:搜集用户需要的信息,整理成清晰的要点列表(每条不超过20字)。输出格式:1. xxx  2. xxx  3. xxx,不要开头结尾废话。"
            )
    
    class Writer(Agent):
        """写手:根据资料写内容"""    
        def __init__(self):
            super().__init__(
                name="写手",
                role="内容创作",
                system_prompt="你是内容写手。任务:根据提供的资料写一篇200字左右的短文,语言流畅自然。直接输出文章,不要标题和废话。"
            )
    
    class Editor(Agent):
        """编辑:审核润色"""    
        def __init__(self):
            super().__init__(
                name="编辑",
                role="审核润色",
                system_prompt="你是编辑。任务:检查文章是否有明显错误。如果通过输出「【通过】文章质量良好」;如果有问题输出「【修改】xxx问题已修正」。"
            )
    
    # =============================================
    # 协作模式:流水线
    # =============================================
    
    class PipelineTeam:
        """流水线协作:A → B → C"""    
        def __init__(self, name: str):
            self.name = name
            self.members = []    
        def add(self, agent: Agent):
            self.members.append(agent)    
        def collaborate(self, task: str) -> str:
            """执行流水线"""
            print(f"n{'='*50}")
            print(f"[团队] {self.name}")
            print(f"[模式] 流水线协作")
            print(f"[流程] {' → '.join([m.name for m in self.members])}")
            print(f"{'='*50}")        
            current_input = task        
            for i, agent in enumerate(self.members, 1):
                print(f"n  Step {i}: {agent.name}({agent.role})")
                print(f"  输入: {current_input[:50]}...")            
                output = agent.process(current_input)            
                print(f"  输出: {output[:80]}...")            
                current_input = output        
            print(f"n{'='*50}")
            print(f"[完成] 流水线协作结束")
            print(f"{'='*50}")        
            return current_input
    
    # =============================================
    # Orchestrator:协调者
    # =============================================
    
    class Orchestrator:
        """协调者:规划任务,分配 Agent"""    
        AGENT_MAP = {
            "研究员": Researcher,
            "写手": Writer,
            "编辑": Editor,
        }    
        WORKFLOWS = {
            "写文章": ["研究员", "写手", "编辑"],
            "写介绍": ["研究员", "写手", "编辑"],
        }    
        MAX_STEPS = 10  # 最大步数限制(闭环控制)    
        def solve(self, user_request: str) -> str:
            """解决用户请求"""        
            # 1. 分析任务类型
            task_type = self._classify_task(user_request)
            print(f"n[分析] 任务类型:{task_type}")        
            # 2. 选择工作流
            workflow = self._select_workflow(task_type)
            print(f"[规划] 工作流:{' → '.join(workflow)}")        
            # 3. 组建团队
            team = PipelineTeam("写作工坊")
            for agent_name in workflow:
                agent_class = self.AGENT_MAP[agent_name]
                team.add(agent_class())        
            # 4. 执行协作(有步数限制)
            if len(team.members) > self.MAX_STEPS:
                print(f"[警告] 工作流超过 {self.MAX_STEPS} 步,强制截断")
                team.members = team.members[:self.MAX_STEPS]        
            result = team.collaborate(user_request)        
            return result    
        def _classify_task(self, request: str) -> str:
            """关键词分类"""
            if "写" in request or "介绍" in request:
                return "写文章"
            return "写文章"    
        def _select_workflow(self, task_type: str) -> list:
            return self.WORKFLOWS.get(task_type, ["研究员", "写手", "编辑"])
    
    # =============================================
    # 主程序
    # =============================================
    
    def main():
        print("n" + "="*50)
        print("  多 Agent 协作系统 - 真实可用版")
        print("="*50)
        print(f"n  API: {API_URL}")
        print(f"  模型: {API_MODEL}")
        print("="*50)    
        # 测试任务
        task = "写一篇关于仓鼠的介绍"    
        print(f"n[用户请求] {task}")    
        # 执行协作
        orchestrator = Orchestrator()
        final_result = orchestrator.solve(task)    
        # 显示最终结果
        print("n" + "="*50)
        print("  最终结果")
        print("="*50)
        print(final_result)
    
    if __name__ == "__main__":
        main()
    
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    Beamer 4 macOS版
    Beamer 4 macOS版

    Beamer 4是面向macOS的本地视频投屏工具,可将Mac中的影片投放到Apple TV、Chromecast及兼容设备,支持常见格式、多类字幕、环绕声、播放列表和电视遥控操作。

    Boom 3D macOS版
    Boom 3D macOS版

    Boom 3D macOS版是一款系统级音效增强工具,可为音乐、电影、游戏和流媒体提供3D虚拟环绕声、31段均衡器、音量增强及应用独立音量控制,并支持本地播放器与多种音频输出设备。

    Boris FX macOS版
    Boris FX macOS版

    Boris FX macOS版是一套面向剪辑、合成、调色及动态图形工作的专业后期工具,涵盖视觉特效、平面与三维跟踪、转描、画面修复、粒子动画和音频清理,可配合多种主流宿主软件使用。

    Capto macOS版
    Capto macOS版

    Capto 是面向 macOS 的屏幕截图、高清录屏与媒体编辑工具,支持区域及整屏捕获、网页长截图、双音轨处理、图片和视频标注、素材分类与多渠道分享,适合教师、学生、内容创作者及需要制作演示教程的用户。

    ChemDraw macOS版
    ChemDraw macOS版

    ChemDraw macOS版是一款面向化学学习、科研和制药工作的专业结构绘图工具,可创建分子、反应及生物聚合物图形,并提供结构整理、格式转换和科研成果展示能力。

    Cursor Crane macOS版
    Cursor Crane macOS版

    Cursor Crane 是一款仅面向 macOS 的键盘操控效率工具,可通过提示标签、网格、文字查找和窗口模式完成点击、滚动、定位与切换,并支持屏幕内容提取、脚本及工作流扩展。

    Deep Freeze 冰点还原 macOS版
    Deep Freeze 冰点还原 macOS版

    Deep Freeze 冰点还原 macOS版通过冻结系统配置,让受保护的Mac在重新启动后回到预设状态,并提供解冻空间、维护计划、密码保护及Apple Remote Desktop管理能力。

    Focusky macOS版
    Focusky macOS版

    Focusky macOS版是一款面向教学课件、商务汇报、产品展示和动画宣传内容的演示制作工具。它通过无限画布、路径编排、缩放旋转转场及多媒体编辑,将传统逐页幻灯片转化为更具空间感的动态演示。

    Folder Colorizer 2 macOS版
    Folder Colorizer 2 macOS版

    Folder Colorizer 2 macOS版是一款直观的文件夹外观定制工具,可更换颜色,添加表情、贴纸及图片背景,并支持批量处理、智能推荐和恢复默认样式,帮助用户更快辨认工作、学习与生活资料。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。

    AlwaysUp Windows版
    AlwaysUp Windows版

    AlwaysUp是一款面向Windows的系统服务注册与程序托管工具,可让普通应用、脚本及批处理在无人登录时随系统启动,并通过状态检测、异常重启、资源监控和邮件通知保障关键任务持续运行。

    AnyDesk Windows版
    AnyDesk Windows版

    AnyDesk Windows版是一款轻量化远程桌面与技术支持工具,可用于控制异地电脑、传输文件、远程打印及无人值守访问。它兼顾连接响应、安全权限和部署灵活性,适合个人远程办公、企业设备维护与客服支持。

    Boom 3D Windows版
    Boom 3D Windows版

    Boom 3D Windows版是一款面向音乐、电影和游戏场景的系统级音效增强工具,支持虚拟3D环绕声、31段均衡器、预设音效、应用音量控制及本地音乐播放,可配合耳机、扬声器和蓝牙耳机使用。

    Boris FX Windows版
    Boris FX Windows版

    Boris FX Windows版是一套服务于影视剪辑、视觉特效、运动跟踪、转描、图像修饰及音频修复的专业创作工具集合,可作为插件接入多种主流后期宿主,也包含可独立运行的应用,适合剪辑师、特效师与内容创作者使用。

    ChemDraw Windows版
    ChemDraw Windows版

    ChemDraw Windows版是一款面向化学研究、药物研发、材料科学和教学工作的专业结构绘图工具,可快速绘制分子、反应式及生物聚合物,并提供结构整理、格式转换、性质计算和科研文档协作能力。

    CODESOFT Windows版
    CODESOFT Windows版

    CODESOFT Windows版是一套企业级条码与RFID标签设计打印工具,可连接Excel、Access、SQL及云端数据源,支持变量、表单、GS1条码、数据库记录和多种工业打印机,适合制造、仓储、物流及合规标识场景。

    Deep Freeze 冰点还原 Windows版
    Deep Freeze 冰点还原 Windows版

    Deep Freeze 冰点还原 Windows版通过重启恢复技术保护系统盘及指定分区,自动撤销恶意程序、误操作和配置漂移造成的改动,并支持密码保护、解冻空间与多硬盘管理,适合学校机房、公共电脑、办公终端及家庭电脑使用。

    EDIUS Windows版
    EDIUS Windows版

    EDIUS 11 Windows版是一款面向影视制作、广播电视、纪录片、短视频及教育机构的专业非线性编辑工具,支持4K/8K、多格式混编、HDR调色、字幕、音频处理和后台渲染,并提供素材管理及丰富的导出预设。

    FastStone Capture Windows版
    FastStone Capture Windows版

    FastStone Capture Windows版是一款轻量级屏幕捕捉、录屏与图像编辑工具,可截取窗口、区域、菜单和滚动页面,并提供标注、模糊、取色、OCR、录音录像及多格式导出能力,适合办公说明、教程制作和问题反馈。

    Focusky Windows版
    Focusky Windows版

    Focusky Windows版是一款动画演示与交互课件制作工具,通过无限画布、缩放旋转镜头、模板素材和对象动画组织内容,可导入PPTX,并输出视频、EXE、PDF、网页等格式,适用于课堂教学、微课、商务汇报及产品展示。