
1. 项目概述与核心价值最近在AI应用开发圈里一个名为“Claude_on_Claude”的项目引起了我的注意。这个项目名本身就充满了趣味和想象力它直白地揭示了其核心玩法让一个Claude模型去调用、管理或与另一个Claude模型进行交互。这听起来像是AI领域的“俄罗斯套娃”但背后蕴含的却是对大型语言模型LLM应用架构、智能体Agent协作以及工作流自动化的一次深度探索。简单来说Gsunny45/Claude_on_Claude 项目构建了一个框架或系统在这个系统中一个扮演“管理者”或“协调者”角色的Claude实例可以根据任务需求动态地调度、提示Prompt甚至与多个扮演“执行者”或“专家”角色的Claude实例进行对话与合作。其核心价值在于它试图突破单一LLM在复杂任务处理上的局限性比如上下文长度限制、单一思维链的局限性以及专业领域知识的广度问题。通过让多个Claude实例分工协作理论上可以实现更复杂的逻辑推理、更长篇的内容生成以及更专业的任务处理例如将一个庞大的研究项目分解为文献综述、数据分析、报告撰写等子任务分别由不同的“专家Claude”处理再由一个“经理Claude”进行整合与润色。这个项目非常适合对AI应用开发、智能体系统、提示工程以及自动化工作流感兴趣的开发者、研究者和技术爱好者。无论你是想深入了解多智能体协作的机制还是希望构建一个能够处理复杂、多步骤任务的自动化助手这个项目都提供了一个极具启发性的起点和可操作的代码库。2. 核心架构与设计思路拆解2.1 核心设计理念分而治之的智能体协作Claude_on_Claude 项目的设计哲学根植于经典的“分而治之”算法思想并将其应用于LLM的协作场景。单一的大型语言模型虽然强大但在面对需要多步骤、多领域知识或超长上下文的任务时往往会显得力不从心。其设计思路可以概括为以下几点角色分离与专业化系统为不同的Claude实例赋予不同的“角色”和“系统提示词”。例如一个实例被设定为“策划者”负责拆解任务和制定计划另一个实例被设定为“写作者”专注于根据大纲生成流畅文本第三个实例可能被设定为“校对者”负责检查逻辑和语法。这种角色分离使得每个实例都能在其“专业领域”内发挥最佳性能。有序的工作流与状态管理项目核心是一个预定义的工作流或状态机。管理者Claude或称“主控Agent”负责推进整个流程。它根据当前任务状态决定下一步该调用哪个专家Claude并将上一个环节的输出作为下一个环节的输入进行传递。这需要一套清晰的任务描述、上下文传递机制和结果解析逻辑。降低单次交互的认知负荷通过将复杂任务分解每个Claude实例在单次交互中只需要处理相对明确、边界清晰的子任务。这有效避免了因提示词过于复杂而导致模型“迷失”或产生无关输出的情况也缓解了上下文窗口的压力因为传递的往往是经过提炼的中间结果而非原始的海量信息。2.2 关键技术栈与方案选型要实现上述设计项目通常会依赖以下几个关键技术组件这也是我们在复现或理解此类项目时需要关注的核心LLM API 客户端与封装项目的基础是能够稳定、高效地调用Claude的API例如Anthropic提供的API。这涉及到API密钥的管理、请求的封装、响应解析以及错误重试机制。一个健壮的客户端封装是项目稳定的基石。智能体Agent框架虽然可以完全从零开始构建但利用现有的智能体框架如LangChain、LlamaIndex的Agent模块或专为Claude设计的轻量级框架可以极大地加速开发。这些框架提供了Agent、Tool、Memory等基础抽象帮助开发者快速定义角色和行为。Claude_on_Claude 项目可能基于此类框架构建也可能是一个自研的轻量级调度系统。工作流/状态机引擎用于定义和执行“策划-写作-校对”这样的固定流程。简单的可以用Python代码硬编码控制流复杂的可以使用专门的工作流引擎。关键在于流程的每个节点都能对应一个特定的Claude调用并能处理节点的输入输出。上下文管理与记忆在多轮、多智能体的交互中如何管理上下文至关重要。需要决定哪些历史对话需要传递给下一个智能体哪些可以摘要或丢弃。项目可能采用了“短期记忆”当前会话和“长期记忆”向量数据库存储的关键信息相结合的策略确保协作的连贯性。注意在方案选型时需要权衡“灵活性”与“复杂性”。使用成熟框架如LangChain能快速搭建但可能引入不必要的抽象层和依赖自研框架更轻量、可控但需要自行处理更多底层细节如工具调用、流式响应等。3. 核心模块与实操要点解析3.1 智能体角色定义与提示词工程这是项目的灵魂所在。每个Claude实例的能力边界和协作行为几乎完全由赋予它的“系统提示词”决定。管理者/协调者智能体提示词核心要素身份与目标明确告知AI它是总指挥目标是高效、高质量地完成一个顶层任务。可用资源告诉它手下有哪些“专家”如写作专家、分析专家、代码专家并简要描述每个专家的能力。工作流程指示它应该遵循的步骤例如“首先你需要将用户需求分解为子任务然后根据子任务类型分派给对应的专家最后整合所有专家的输出形成最终答案”。输出格式规范要求其输出结构化的指令例如使用特定标记来指定下一个执行的专家和传递给它的具体任务描述。例如[NEXT: WRITER] 请根据以下大纲撰写引言部分...实操心得管理者的提示词需要极强的逻辑性和引导性。我发现在提示词中加入“逐步思考”的指令如“请一步步推理”并要求它在分派任务前先简要说明理由可以显著提高任务拆分的合理性和可执行性。专家/执行者智能体提示词核心要素专业领域极度聚焦。例如“你是一位专业的科技文章写手尤其擅长用通俗易懂的语言解释复杂概念。”输入输出格式明确说明它将从管理者那里接收到什么格式的指令以及需要以什么格式输出。例如“你将收到一个包含‘任务描述’和‘参考材料’的JSON对象请直接输出完成后的文本。”质量与风格要求定义具体的质量标准如“避免使用营销腔调”、“保持学术严谨性”、“输出Markdown格式”。实操心得专家的提示词越具体、越“窄”其表现通常越好。避免给专家智能体赋予它不需要的上下文或决策权。它的任务就是“听话”高质量地完成被指派的明确工作。3.2 任务调度与通信机制实现智能体之间如何“对话”是架构的关键。这里通常不会让它们直接通过API互相调用而是由一个中央调度器可能是管理者智能体本身也可能是一个独立的程序模块来中介。基于消息队列的异步调度实现方式将每个子任务封装成一个“消息”放入一个任务队列如Redis, RabbitMQ或简单的Pythonqueue.Queue。管理者生成任务消息消费者进程或线程从队列中取出消息调用对应的专家Claude API处理完成后将结果放入结果队列再由管理者或整合器处理。优势解耦性好易于扩展可以并行处理多个子任务提高效率。适用场景子任务间依赖性较弱可以独立执行的场景。同步链式调用实现方式在同一个线程或进程内按顺序执行“管理者决策 - 调用专家A - 处理结果 - 管理者决策 - 调用专家B - ...”的流程。所有状态保存在程序变量中。优势实现简单直观易于调试任务状态和上下文传递容易管理。适用场景任务流程严格线性、步骤不多或需要强一致中间状态的场景。这也是很多入门级多智能体demo采用的方式。通信协议设计结构化数据智能体间传递的信息强烈建议使用结构化格式如JSON。例如{task_id: 123, agent_role: writer, instruction: ..., context: {...}}。这便于程序解析也减少了AI误解的可能性。上下文摘要在将历史信息传递给下一个智能体时直接传递全部原始对话可能导致上下文爆炸。一个技巧是让管理者或一个专门的“摘要者”智能体对上一阶段的输出进行关键信息提取和摘要再将摘要传递给下一环节。提示在初期验证想法时强烈建议从同步链式调用开始。它的复杂度最低能让你快速跑通整个协作流程验证提示词设计的有效性。待核心逻辑稳定后再考虑引入消息队列进行异步化和性能优化。4. 完整实现流程与核心代码剖析下面我将以一个简化的“文章撰写协作系统”为例勾勒出Claude_on_Claude风格项目的实现流程。假设我们有三个角色Planner策划者、Writer写作者、Editor校对者。4.1 环境准备与依赖安装首先我们需要一个Python环境并安装必要的库。核心是Anthropic的官方SDK。# 创建虚拟环境可选但推荐 python -m venv claude_venv source claude_venv/bin/activate # Linux/Mac # claude_venv\Scripts\activate # Windows # 安装核心依赖 pip install anthropic # Claude官方SDK pip install python-dotenv # 用于管理环境变量如API密钥 pip install tenacity # 用于API调用重试增强鲁棒性接下来创建一个.env文件来安全地存储你的API密钥# .env ANTHROPIC_API_KEYyour_actual_api_key_here4.2 核心类与智能体定义我们创建一个claude_agent.py文件定义基础智能体类。import os from anthropic import Anthropic from tenacity import retry, stop_after_attempt, wait_exponential from dotenv import load_dotenv load_dotenv() # 加载环境变量 class ClaudeAgent: 基础的Claude智能体类 def __init__(self, name, system_prompt, modelclaude-3-haiku-20240307): 初始化智能体 :param name: 智能体名称用于日志标识 :param system_prompt: 系统提示词定义角色和能力 :param model: 使用的Claude模型Haiku速度快成本低适合实验 self.name name self.system_prompt system_prompt self.model model self.client Anthropic(api_keyos.getenv(ANTHROPIC_API_KEY)) retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def invoke(self, user_message, max_tokens1024): 调用Claude API包含重试机制 try: response self.client.messages.create( modelself.model, max_tokensmax_tokens, systemself.system_prompt, messages[{role: user, content: user_message}] ) return response.content[0].text except Exception as e: print(f智能体 {self.name} 调用失败: {e}) raise # 重试装饰器会捕获异常并重试4.3 具体智能体实例化与工作流执行然后在main.py中我们定义具体的智能体并执行工作流。from claude_agent import ClaudeAgent # 1. 定义三个角色的系统提示词 PLANNER_SYSTEM 你是一位经验丰富的项目策划者。你的任务是将用户提出的复杂文章撰写需求分解为具体、可执行的大纲和子任务指令。 请遵循以下步骤思考 1. 理解用户的核心主题和要求。 2. 规划文章的整体结构如引言、主体、结论。 3. 将主体部分进一步分解为几个核心论点或章节。 4. 为每个章节生成清晰的写作指令包括需要涵盖的要点、风格和字数建议。 你的输出应该是一个结构清晰的大纲和给写作者的具体指令。以JSON格式输出包含title, outline, instructions_for_writer字段。 WRITER_SYSTEM 你是一位专业的科技文章写手。你将收到策划者提供的文章大纲和具体章节的写作指令。 你的任务是严格按照指令撰写流畅、易懂、专业的文章段落。 请专注于你被分配到的章节确保内容紧扣要点逻辑连贯语言生动。 直接输出撰写好的文本内容无需额外解释。 EDITOR_SYSTEM 你是一位严谨的文本编辑。你将收到写作者完成的文章草稿。 你的任务是 1. 检查并修正语法、拼写和标点错误。 2. 优化句子结构提升文本流畅度。 3. 确保逻辑严谨段落间过渡自然。 4. 保持原文核心内容和风格不变。 请直接输出修改后的完整文本并用comment标签简要标注最重要的几处修改及原因。 # 2. 实例化智能体 planner ClaudeAgent(Planner, PLANNER_SYSTEM, modelclaude-3-sonnet-20240229) # 策划用稍强模型 writer ClaudeAgent(Writer, WRITER_SYSTEM) editor ClaudeAgent(Editor, EDITOR_SYSTEM) def write_article_with_claude(user_request): 同步链式工作流策划 - 写作 - 校对 print(f用户需求: {user_request}) print(- * 50) # 阶段1: 策划 print(阶段1: Planner 正在分解任务...) planner_output planner.invoke(user_request, max_tokens1500) print(fPlanner 输出:\n{planner_output}\n) # 这里理论上需要解析JSON为简化我们假设planner_output就是给writer的指令 writer_instruction planner_output # 实际项目中需解析出具体章节指令 # 阶段2: 写作 print(阶段2: Writer 正在撰写内容...) # 模拟将大纲拆分为第一章来写 chapter_task 请根据以上大纲撰写引言部分。 draft writer.invoke(f写作指令{writer_instruction}\n\n具体任务{chapter_task}, max_tokens1000) print(fWriter 输出 (草稿):\n{draft}\n) # 阶段3: 校对 print(阶段3: Editor 正在校对...) edited editor.invoke(f请校对以下文章草稿\n{draft}, max_tokens1200) print(fEditor 输出 (终稿):\n{edited}) return edited # 3. 运行示例 if __name__ __main__: user_request 请撰写一篇面向初学者的技术博文介绍‘多智能体AI系统’的基本概念、核心价值和一个简单的实现示例。要求文章生动有趣避免过于学术化。 final_article write_article_with_claude(user_request) # 可以将final_article保存到文件或进一步处理这个简化的例子展示了一个最基础的同步链式工作流。在实际的Gsunny45/Claude_on_Claude项目中代码结构会更加复杂可能包含对planner_output的JSON解析以动态决定调用哪个专家。更复杂的错误处理和回退机制。并行执行多个写作任务的能力。持久化存储中间结果和对话历史。5. 常见问题、调试技巧与优化策略在实际构建和运行此类多智能体系统时你会遇到一系列颇具挑战性的问题。以下是我在类似项目中踩过的一些坑和总结的应对策略。5.1 智能体“失控”与指令遵循问题问题表现专家智能体没有严格按照指令执行例如写作者擅自改变了文章结构或者编辑过度修改了原意。排查与解决强化系统提示词在专家提示词的开头使用非常强硬、清晰的指令如“你必须严格只做以下事情...”、“禁止你做以下事情...”。使用大写、符号如### 指令 ###来强调。输出格式约束要求智能体以特定格式JSON、XML、带标记的文本输出。程序化的格式检查比自然语言判断更可靠。例如要求写作者以{content: ...}格式输出程序解析失败则要求重试。设置更低的“温度”temperature参数虽然Claude API可能不直接暴露此参数但可以通过提示词要求其“保持严谨和确定性”。在模型选型上对于执行类任务使用claude-3-haiku这类更“听话”的模型有时比使用更富创造力的claude-3-opus效果更稳定。引入验证步骤在关键环节后增加一个“验证者”智能体检查输出是否符合指令要求。如果不符合则重新提交任务或进行修正。5.2 上下文管理与信息丢失问题表现在多个智能体间传递信息时关键细节丢失导致后续环节跑偏。或者上下文累积过长触达模型token限制。排查与解决结构化摘要不要简单地将上一个智能体的全部原始输出扔给下一个。让管理者或一个专门的“摘要器”智能体提取关键决策、事实和状态以结构化的方式传递给下一环节。例如“根据策划者的大纲我们已确定文章包含三部分。当前已完成引言撰写以下是引言核心观点... 接下来需要撰写第一部分重点是...”。使用外部记忆体对于需要贯穿全程的信息如项目核心目标、关键术语定义可以将其存储在程序的一个全局变量或简单的数据库中每次调用时选择性注入到系统提示词或用户消息中而不是依赖对话历史传递。分片处理超长内容如果单个子任务如校对长文就可能超上下文需要实现内容分片机制。例如将长文章按段落切分分批提交给编辑智能体并注意维护段落间的衔接提示。5.3 错误处理与系统鲁棒性问题表现某个智能体调用API失败或返回了无法解析的内容导致整个工作流中断。排查与解决实现健壮的重试机制正如我们在ClaudeAgent类中使用tenacity库所做的那样对网络超时、API限流等临时性错误进行指数退避重试。设置熔断与降级如果某个专家智能体连续失败可以暂时将其“熔断”并尝试让管理者将任务分配给其他备选智能体或者用一个更通用的智能体进行降级处理。结果验证与重生成对智能体的输出进行基础验证如非空、符合格式。如果验证失败可以自动重新生成提示词例如加上“请确保输出为有效JSON”并重试该步骤最多N次。完善的日志记录记录每个智能体的输入、输出、耗时和状态。这是调试复杂工作流的生命线。建议为每个任务生成唯一ID并贯穿所有日志。5.4 成本与性能优化问题表现使用多个Claude实例尤其是高性能模型成本增长很快。串行工作流导致总耗时过长。优化策略模型分级使用并非所有环节都需要最强模型。将模型分为三档决策/策划用Sonnet/Opus、执行/生成用Haiku/Sonnet、简单校验/格式化用Haiku。在ClaudeAgent初始化时传入不同模型参数即可。并行化执行当子任务间没有依赖时使用异步或线程池并行调用。例如策划者生成的大纲中多个章节可以同时分发给多个写作者实例注意API的速率限制。缓存与复用对于常见、重复性的子任务结果例如将“检查语法”这种通用任务的结果缓存起来如果输入相同或相似可以考虑复用之前的输出避免重复调用API。精简提示词持续优化提示词在保证效果的前提下移除冗余描述使用更简洁的表达。更短的提示词意味着更少的token消耗。构建一个稳定高效的Claude_on_Claude系统更像是在设计一个精密协作的“数字团队”。它考验的不仅是编程能力更是对LLM行为特性的深入理解、对复杂流程的抽象能力以及解决各种边界情况的工程思维。从这个小而美的项目出发你可以探索的方向还有很多比如让智能体学会使用外部工具搜索、计算、读写文件或者实现更动态的、基于目标的智能体协商机制。这个过程的乐趣就在于亲眼见证这些“AI同事”如何从最初的混乱无序逐渐变得训练有素、配合默契。