仓库内编程助手的系统提示词设计:HelloAgents Code Agent CLI 的角色边界、安全准则与补丁协议全解析

发布时间:2026/9/12 2:44:37

仓库内编程助手的系统提示词设计:HelloAgents Code Agent CLI 的角色边界、安全准则与补丁协议全解析 仓库内编程助手的系统提示词设计HelloAgents Code Agent CLI 的角色边界、安全准则与补丁协议全解析【免费下载链接】hello-agents 《从零开始构建智能体》——从零开始的智能体原理与实践教程项目地址: https://gitcode.com/GitHub_Trending/he/hello-agents导读本文以 HelloAgents Code Agent CLI 的全局系统提示词 system.md 为主线逐条拆解这个类似 Claude Code/Codex 的仓库内编程助手如何通过提示词定义「角色定位、路径安全边界、按需探索策略、补丁写盘协议与对话历史隔离规则」并结合 code_agent.py、hello_code_cli.py 与 apply_patch_executor.py 的源码实现说明这些「纸面规则」如何在运行时被真正执行。读完本文你将理解如何为一个在真实代码仓库中自主工作的 Agent 设计系统提示词并掌握一套可复制的安全落盘patch-only write协议。一、system.md 在 Code Agent CLI 中的角色定位HelloAgents Code Agent CLI 是一个基于 HelloAgents 框架组件HelloAgentsLLM/ContextBuilder/ReActAgent/TerminalTool/NoteTool/MemoryTool搭建的命令行智能体目标体验对标 Claude Code/Codex支持多轮对话、按需探索代码库、生成补丁并在用户确认后落盘见 code_agent/README.md。提示词统一存放在 prompts 目录 下各文件分工明确文件职责system.md全局行为与安全边界按需探索 / 敏感操作确认 / 补丁格式react.mdReAct 回合格式Thought/Action与工具输入约定plan.md规划工具plan[...]专用提示词summarize_observation.md工具输出摘要提示词tools.md六个内置工具的详细使用指南其中system.md是「总纲」它定义了 Agent 是谁、能在哪里活动、能做什么、不能做什么、以什么格式产出修改。在源码中它由 code_agent.py 在初始化时读取并作为system_prompt注入上下文构建器base_system (self.paths.prompts_dir / system.md).read_text(encodingutf-8) self.tools_reference_path self.paths.prompts_dir / tools.md self.system_prompt base_system也就是说每次run_turn构建上下文时这份提示词都会与对话历史、上次工具摘要一起拼入最终 Promptcode_agent.py。因此它本质上是一份「持续生效的宪法」——不随单轮对话消失。二、角色定位仓库内工作的 CLI 编程助手而非闲聊机器人system.md 的第一句话就划定了身份你是一个在仓库内工作的 CLI 编程助手类似 Claude Code/Codex不是闲聊机器人。这一定位直接决定了后续所有行为约束的取向Agent 的所有动作都以「在指定仓库内完成任务」为唯一目标回复追求简短直接。提示词末尾进一步规定了输出风格非代码/非工具回复尽量 ≤4 行直接给结论避免 Here is... 等冗余开场除非用户要求不使用 emoji事实性问题直接给结果。这一「轻量输出」策略在源码层有配套的闲聊兜底CodeAgent._is_chitchat会识别hi/hello/你好/在吗等问候词直接返回固定引导语而不进入 ReAct 循环code_agent.py避免无谓的工具调用与解析失败。三、工作区与路径安全边界杜绝路径逃逸system.md 规定「工作区固定为仓库根目录.」并给出核心准则第一条边界所有路径必须在 repo_root 内resolve 后校验前缀拒绝逃逸。这条规则并非停留在提示词层面。在初始化时CodeAgent.__init__会对repo_root执行resolve()code_agent.py把所有状态目录notes / memory / sessions / logs都收敛到repo/.helloagents/之下由 CodeAgentPaths 统一管理。真正的硬校验在补丁执行器ApplyPatchExecutor._safe_path中apply_patch_executor.py拒绝绝对路径以/或~开头用(repo_root / rel_path).resolve()解析出最终路径校验解析结果必须以repo_root前缀开头否则抛出Path escapes repo_root拒绝修改符号链接symlink。这意味着即使模型在补丁中写出../../etc/passwd这类路径执行器也会在落盘前拦截形成「提示词约束 代码硬校验」的双保险。四、按需探索先证据后结论避免无端全库扫描system.md 第二条准则强调按需探索只有确实需要证据时才调用终端优先小范围命令ls/rg --files/rg pat path/sed -n rangep file/cat file避免无端全库扫描。这是 Code Agent 与「一次把整个仓库塞进上下文」的传统 RAG 方案的关键区别。配合源码中的lazy_fetchTrue模式code_agent.py上下文构建只注入保底内容系统提示 最近对话max_history_turns10 上次工具摘要最近 3 条上下文预算控制max_tokens8000、reserve_ratio0.15、enable_compressionTrue扩展上下文不再自动注入而是由模型通过context_fetch[...]工具按需获取。为了进一步控制上下文膨胀工具输出会经过 LLM 摘要_summarize_observation会先截断超过 8000 字符的输出再用summarize_observation.md提示词压缩成 120~200 字左右的摘要code_agent.py并在输出超过 1800 字符时触发摘要summarize_threshold_chars1800。这套「先推理 → 证据不足再取证 → 取证即摘要」的节奏正是 system.md 与 react.md 中反复强调的「避免过度收集」。五、写盘唯一通道补丁协议system.md 中最具实操价值的一条是写盘唯一通道补丁 apply_patch。严禁cat /tee/ Here-Doc / 重定向等终端写法。也就是说模型想要修改任何文件都不能借助 shell 的重定向技巧只能输出结构化的补丁文本由 CLI 侧解析并执行。这条规则从提示词到执行层形成了完整的闭环我们分三层来看。5.1 提示词层补丁格式规范system.md 原文产出补丁时必须严格遵守以下格式*** Begin Patch *** Add File: path/to/new_file.py 文件内容... 可以多行... *** Update File: path/to/existing_file.py 更新后的完整文件内容... *** Delete File: path/to/old_file.py *** End Patch关键规则六条第一行必须是*** Begin Patch前面不要有任何文字最后一行必须是*** End Patch操作行格式*** Add File: path/*** Update File: path/*** Delete File: pathAdd/Update 后面跟完整文件内容Delete 后面不需要内容不要在补丁外包裹 markdown 代码块不要用 路径相对于仓库根目录。提示词还专门给出了错误与正确示例防止模型把说明文字和补丁挤在同一行——例如*** Begin Patch前出现「这是一个补丁」即视为错误。在 react.md 中补丁必须放在Finish[...]内、与说明文字之间用空行分隔、*** Begin Patch独占一行否则会因解析失败而无法落盘。5.2 CLI 层补丁提取、规范化与人工确认hello_code_cli.py 负责从 LLM 回复中把补丁「抠」出来并决定是否需要人工确认提取_extract_patch先用正则优先匹配代码围栏patch/diff/text内的补丁再退回宽松的*** Begin Patch ... *** End Patch全局匹配hello_code_cli.py对模型偶尔用围栏包裹补丁的行为做了容错规范化_normalize_patch会把缺失***前缀的操作行如Update File: xxx自动补全为规范格式hello_code_cli.py确认策略_patch_requires_confirmation规定三类高风险补丁必须征求用户y/nhello_code_cli.py——包含*** Delete File:操作、涉及文件操作数 ≥ 6、变更行数/-开头行≥ 400。这与 system.md 中「高风险删除/覆盖大量/危险命令 rm/chmod/git reset --hard必须说明风险并征求确认最终执行由 CLI 裁决」的表述完全对应——「裁决权」在 CLI而不是模型。5.3 执行器层原子写、备份、冲突检测与规模限制最终落盘由ApplyPatchExecutor完成apply_patch_executor.py它实现了 system.md 规则背后的全部安全工程细节规模限制单个补丁最多修改max_files10个文件、max_total_changed_lines800行超出即拒绝后缀白名单默认只允许.py/.md/.toml/.json/.yml/.yaml/.txt/.html/.htm/.css/.js等文本文件防止误改二进制或敏感文件_enforce_suffixapply_patch_executor.py自动备份每次应用前把将被修改的文件备份到repo/.helloagents/backups/timestamp/_backup_fileapply_patch_executor.py原子写入先写临时文件并fsync再用os.replace原子替换目标避免写盘中断导致文件损坏_atomic_writeapply_patch_executor.py冲突检测Update 操作按 hunk 在原文中做精确子序列匹配找不到上下文时抛出PatchApplyError并给出path:search:关键字形式的复查提示同时提供「整文件替换」与「宽松匹配忽略行尾空白」两级容错_apply_update_payload/_find_subsequenceapply_patch_executor.py宽容解析_parse_patch会跳过前置/结尾的空行与代码围栏容忍模型常见的格式漂移apply_patch_executor.py。此外补丁应用成功或失败后CLI 都会通过NoteTool写入结构化笔记note_type分别为action与blocker把「发生过什么」沉淀下来供后续轮次检索hello_code_cli.py。六、对话历史边界系统规则不是对话内容system.md 专门用一段说明「对话历史的重要边界」[Role Policies]是系统角色定义和工作规则不是用户对话内容当用户询问「我们之前聊了什么/说了什么/总结对话」时只总结[Context]区块中的[user]/[assistant]交互记录不要把系统规则、工具定义、角色描述当作「对话内容」来总结总结对话时直接根据[Context]回答不需要调用 memory 或 note 工具。这条规则防止了两种典型事故一是模型把「系统提示词」当成用户说过的话复述出来造成信息泄漏二是为了回答「刚才聊了什么」这类元问题却去触发无谓的工具调用。源码层提供了双重保障_is_history_query识别「说了什么 / 之前说了什么 / what did i say / recap」等模式code_agent.py命中后直接由_reply_with_recent_history从内存中的history取出最近用户/助手消息生成回顾code_agent.py完全绕过 ReAct 循环与工具系统。七、工具体系context_fetch 优先其余按需system.md 列出了六种 ReAct Action 可用的工具并特别强调「优先使用聚合搜索工具」7.1 context_fetch[...]优先推荐按需获取扩展上下文单次可查多源自动控制预算约 800 tokens/源{sources: [files,notes,memory,tests], query: 关键词, paths: src/**/*.py}使用策略先用保底上下文对话历史 上次工具结果推理证据不足再调用。它优于单独调用 note/memory search——一次调用可搜索多个数据源避免多次工具调用导致上下文爆炸。在 prompts/tools.md 中context_fetch的使用场景被进一步明确搜索类名/函数名/错误栈、需要相关笔记/记忆时用已经拿到足够证据、或用户仅问对话历史时不用。7.2 其他工具工具用途关键约束terminal[...]只读检索ls/rg/cat/sed/head/tail/grep/git status/diff支持管道重定向/子命令替换/危险命令需确认写文件一律用补丁note[...]记录关键结论/阻塞/行动Markdown 持久化补丁成功/失败总结、阶段小结时使用memory[...]跨会话情景记忆SQLite需显式 add默认不自动写入plan[...]多步/模糊任务生成计划5~12 条步骤含 Risks 与 Validation 段落见 plan.mdtodo[...]多步骤任务跟踪状态 pending/in_progress/completed同时仅允许 1 个 in_progress这些工具在CodeAgent.__init__中被逐一注册到ToolRegistrycode_agent.py其中TerminalTool以confirm_dangerousTrue、default_shell_modeTrue初始化与提示词「默认允许 shell 语义、危险操作需确认」一致。tools.md 还给出了每个工具的 JSON 调用示例例如terminal[{command:rg -n \foo\ context/**/*.py,allow_dangerous:false}] note[{action:create,title:Patch applied,content:...,note_type:action,tags:[patch]}] memory[{action:add,memory_type:episodic,content:完成 hello.html 样式改造,importance:0.7}] todo[{action:add,title:设计简介页布局,desc:头部/简介/技能,status:pending}]八、复杂任务的执行节奏计划 → 取证 → 补丁 → 确认 → 落盘 → 验证system.md 将复杂任务总结为一条工作流复杂任务遵循计划 → 取证 → 补丁 → 确认 → 落盘 → 验证节奏最小改动满足需求。在 react.md 中这一节奏被细化为可执行规则每次回复必须同时包含Thought和Action缺一不可已有足够信息时必须用Finish[答案]结束不要为了「更全面」反复调用工具一旦证据足够rg 命中、关键文件片段、错误栈、配置项必须Finish如果发现自己准备重复执行相同工具调用说明没有新信息应立即Finish给出结论 最小化下一步建议多步骤任务≥2 个子步骤、需用户确认、跨回合先todo add再行动结尾todo list汇总。CodeAgent.run_turn还在用户输入命中「分步/步骤/计划/改造/完成后/多步」等词汇时向系统提示追加一行轻量提示引导模型先用 todo 跟踪code_agent.py。该提示不强制只提高倾向。九、实际运行环境配置与 CLI 命令要让上述全部规则生效需要按 code_agent/README.md 的快速开始配置并启动安装依赖根目录requirements-mvp.txt并在仓库根目录创建.env可参考.env.example至少包含DEEPSEEK_API_KEY...或其他 OpenAI 兼容 provider 的 key可选LLM_MODEL_IDdeepseek-chat、LLM_BASE_URLhttps://api.deepseek.com启动 CLI工作区默认.python3 -m code_agent.hello_code_cli --repo .内置命令:quit退出:plan 目标强制生成计划平时由模型按需调用plan[...]工具见 hello_code_cli.py。启动时 CLI 会打印 workspace、LLM provider/model/base_url 与 state 目录并做一次ping预检提前暴露 API key / base_url / model 配置问题hello_code_cli.py。可调环境变量变量默认值作用HELLOAGENTS_DIR.helloagents状态目录notes/memory/sessions/logs根路径CODE_AGENT_MAX_STEPS8ReAct 最大推理步数十、小结一份「提示词 代码」双闭环的 Agent 安全范式回顾 system.md它的设计价值可以归纳为四个层次身份层明确「仓库内编程助手」而非闲聊机器人输出风格极简边界层路径必须留在 repo_root 内写盘只能走补丁通道危险操作必须确认效率层按需探索、先保底上下文后取证、工具输出即时摘要控制上下文预算可审计层补丁应用有备份、有冲突检测、有成功/失败笔记每一次修改都可追溯。更重要的是这些提示词规则并非「纸上谈兵」——ApplyPatchExecutor的路径校验与原子写、hello_code_cli.py的补丁提取与确认策略、CodeAgent的闲聊/历史查询拦截共同保证了提示词约束在代码层的强制执行。对于任何想构建「在真实仓库里安全自主工作」的 Agent 的开发者这份 system.md 连同 react.md、tools.md 与执行器源码是一套可以直接对照复用的完整参考实现。【免费下载链接】hello-agents 《从零开始构建智能体》——从零开始的智能体原理与实践教程项目地址: https://gitcode.com/GitHub_Trending/he/hello-agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/12 2:44:36

CLIP+BLIP组合实战:从图像自动生成高质量Prompt

简介:面向机器学习开发者和多模态大模型研究人员的实战项目源码,基于CLIP与BLIP模型将图像转换为高质量提示词,解决图像理解与文本生成之间的衔接问题。项目模块化设计,包含核心推理脚本、CLIP Interrogator实现、Gradio可视化界面…

2026/9/12 2:44:36

K-Means面试攻略:用食堂抢座讲透聚类算法原理与工程实践

面试自我介绍快结束时,面试官突然抛出一句:“K-Means应该用过吧?说说它的原理。”我说:“用过,做用户分群时常用。原理就是把样本聚成K堆,让每一堆内部尽量紧凑。”面试官点了点头,又问&#xf…

2026/9/12 2:44:36

工业视觉中波峰波谷检测的鲁棒实现:Halcon轮廓驱动方案

1. 项目概述:为什么“波峰波谷检测”不是个简单问题,而是工业视觉里的硬骨头“波峰波谷检测算法”这六个字,听起来像高中物理课上画正弦曲线时随手标出的两个点——顶点是波峰,谷底是波谷。但当你真正站在产线旁,盯着高…

2026/9/12 3:24:40

Jetson平台glibc升级指南:手动dpkg解决GLIBC_2.28 not found

相信不少在 NVIDIA Jetson 平台(Nano、TX2、Xavier NX、AGX Xavier 都算)上折腾 Ubuntu 18.04 的朋友,都碰到过这种鬼事情:明明模型训练好了、代码写完了,一部署到板子上, GLIBC_2.28 not found 或者 GL…

2026/9/12 3:24:40

STM32嵌入式AI编程:开发流程断点与人工校验红线

1. 这不是“用AI写代码”,而是重构嵌入式开发的认知边界我第一次在Keil里把AI生成的UART初始化函数直接粘贴进工程时,编译器报了17个错误——不是语法错,是硬件抽象层(HAL)版本不匹配、时钟树配置冲突、GPIO复用功能未…

2026/9/12 3:24:40

信创环境下动易编辑器公式功能国产化适配解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 3:24:40

3 分钟切好 GenericAgent 界面语言,重启还记得你

3 分钟切好 GenericAgent 界面语言,重启还记得你 【免费下载链接】GenericAgent Self-evolving agent: grows skill tree from 3.3K-line seed, achieving full system control with 6x less token consumption 项目地址: https://gitcode.com/GitHub_Trending/pc…

2026/9/12 3:24:40

真空泵PLC控制系统设计与实现:从需求分析到触摸屏配方下发

1. 先把这个项目的真实需求捋清楚 我接到这个活儿的时候,现场已经“手工”跑了快两年:操作工每天盯着压力表指针去开泵、关泵,遇到夜班打盹,真空罐压力经常冲到下限,一批产品直接报废。所以这个项目不能简单理解成“做…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码