《Peeking Under the Hood of Claude Code》一窥 Claude Code 的内部机制Anthropic 的工程师们设计了 Claude Code —— 这个工具能高效完成编程任务:专注于目标、遵守约束,并且安全地执行你本不想手动输入的操作。然而,对它的内部原理,Anthropic 一直讷言寡语。为此,OutSight AI 搭建了一个 LiteLLM 代理来监视 Claude Code 与其 API 之间的“对话”,揭示了它到底在做什么。★ TL;DR (精要总结)1 前置上下文:Claude Code 在真正动手之前,会提前注入简短而有针对性的提示,比如标题概括、主题确认、任务摘要之类。2 遍布的“系统提醒”(system-reminder):在系统提示、用户提示、工具调用乃至工具结果中,都频繁出现这种“系统提醒”,用来让代理保持专注、不偏离轨道。3 风控机制:在执行 shell(Bash)命令前,会进行命令前缀提取和插入检查,以防命令注入。4 子代理机制:当任务复杂且包含多个步骤时,会生成带有更精确指令的子代理(“Task” 工具),并根据任务难度动态调整上下文。★ 监测设置:使用 LiteLLM 观察 Claude Code为了观察 Claude Code 的行为,OutSight AI 将 LiteLLM 设置为一个透明代理,置于 Claude Code 和 Anthropic API 服务器之间:pip install 'litellm[proxy]'export ANTHROPIC_BASE_URL= 网页链接litellm --config monitoring_config.yaml --detailed_debug如此便能捕获真实编码会话中的数百次 API 调用,从而解读其“凭空出现的奇效”。★ “惊叹时刻”的秘密源头不少开发者曾称,Claude Code 经常“直接就成功了,让人惊讶”。而我们发现,真正的“魔法”其实在会话一开始便已经启动:当你在已有项目中启动 Claude Code,它会先总结之前的对话内容,提炼标题。随后判断当前消息是否属于新话题,并提取 2–3 词的新标题。这只是上下文前置策略的一个例子,实际上这种“预处理”在多个环节都在发生。例如,它自动插入如下系统和用户提示:"system": [ { "text": "Summarize this coding conversation in under 50 characters. Capture the main task, key files, problems addressed, and current status.", "type": "text", "cache_control": {"type": "ephemeral"} }],"messages": [ {"role": "user", "content": "…", "type": "text"}]..."system": [ { "text": "Analyze if this message indicates a new conversation topic. If it does, extract a 2-3 word title… Format your response as a JSON object …", "type": "text" }],这些示例说明 Claude Code 不仅在动手前建立清晰上下文,也持续监控会话行为。★ “系统提醒”标签:Claude Code 的关键秘密最令人印象深刻的,是遍布整个流程的 <system-reminder> 标签。这些标签并非偶尔一现,而是广泛用于系统提示、用户消息、工具调用结果等各处,有时还用于检测恶意文件并避免处理它们。例如:"text": "\nAs you answer the user's questions, you can use the following context:… Do what has been asked; nothing more, nothing less.… NEVER create files unless they're absolutely necessary.…"Claude Code 在多次调用 TodoWrite 工具后,也在提示中嵌入新的系统提醒,提示是否需要使用 todo 工具,但不必显式告知用户。★ Bash 执行前的命令注入检测与权限请求机制Claude Code 在运行 Bash 命令前,并非直接执行,而是通过生成式提示来判断是否有命令注入风险,并提取命令前缀:Your task is to process Bash commands that an AI coding agent wants to run...This policy spec defines how to determine the prefix of a Bash command:…If the command seems to contain command injection, you must return "command_injection_detected".系统根据允许的命令前缀决定是否继续执行,否则要求用户确认。★ 子代理架构设计Claude Code 使用“任务工具”(Task 工具),为多步复杂任务生成专门的子代理。它们与主代理相似,但少了 system-reminder 标签,不使用 todo 列表工具,而是专注完成特定子任务并以完整报告形式回复用户。此外,根据任务复杂度,系统会有条件地注入 system-reminder 标签,以调整子代理行为。★ 真实的“秘密武器”本文认为,Claude Code 的“严谨表现”并非因模型基础特别,而是得益于:- 明晰的 prompt 架构- 精心设计的工具说明- 连续的上下文管理与正确标签注入策略这些工程设计让 Claude Code 在面对长上下文时避免偏离。★ 给构建 AI 代理的开发者的启示用一句话总结全文:“在恰当时机注入简短提醒,就能显著改变代理行为。”无论 <system-reminder> 有无特殊意义,它的反复使用让模型保持专注的策略是行之有效的。建议其他代理构建者也采用类似设计:1. 上下文前置:会话前先摘要、判断主题、设定上下文;2. 分层提醒:贯穿过程的提醒标签防止行为漂移;3. 内嵌安全机制:命令验证、注入检测等安全提示直接插入交互流程;4. 多代理协作:不同子代理负责不同任务,主循环协调它们,并用条件上下文动态控制。★ 总结:Claude Code 的成功在于工程精细设计——上下文管理、多重提醒、安全提示和子代理架构共同发挥作用,让其表现出“仿佛有魔法”的流畅体验。原文:medium.com/@outsightai/peeking-under-the-hood-of-claude-code-70f5a94a9a62#人工智能##程序员#