自用 ChatGPT/Codex 防御性编程/说话修正/PowerShell调用问题修正提示词分享

自用 ChatGPT/Codex 防御性编程/说话修正/PowerShell调用问题修正提示词分享

💡 原文中文,约20700字,阅读约需50分钟。
📝

内容提要

作者分享自用的 ChatGPT 与 Codex 提示词,用于规范输出语言:避免“不是…而是…”等冗余对比句式,禁用不规范单字缩写与浮夸黑话,要求完整执行多步骤任务、测试后再交付、产物不留修改痕迹。Codex 版另加 PowerShell 7 命令规范、SSH 多层解析注意事项,以及子智能体分工策略:写作与代码开发由主模型负责,测试、检索等机械任务交给 Luna。

🔎

延伸解读

提示词约束的是最终产物,不限制内部思考

作者在提示词中反复强调,语言规范、禁止黑话、不留修改痕迹等规则只约束最终回答、文档、代码注释和提交说明,内部思考、草稿和工具调用不受限制。这种区分有实际意义:如果连推理过程也套用输出规范,模型可能为了措辞而牺牲分析效率。读者在借鉴时,应保留这一边界,把规范集中在用户可见的交付物上。

Codex 版提示词的核心是区分本地与远程两层 Shell

Codex 部分要求所有终端命令使用 PowerShell 7 语法,并专门用一节说明 SSH 远程执行。作者指出,通过 ssh.exe 执行远程命令时,命令会先经 PowerShell 解析,再由远程 Shell(通常是 Bash)解释,两层对引号、变量展开和转义的处理不同。提示词因此要求逐层推演命令如何被解析,复杂远程操作优先通过标准输入或临时脚本传递,避免嵌套转义出错。

子智能体分工以成本和质量为取舍依据

作者把写作和除测试外的代码开发保留给主模型,理由是主模型能力更强但成本高;测试、检索、收集日志、安装依赖等机械任务交给 Luna,并要求以 xhigh 推理强度调用。提示词还规定,一旦把监控任务交给 Luna,主模型就应等待其报告,不再自行轮询。这套分工适合愿意为质量保留主模型、同时用廉价模型处理重复工作的读者参考。

“不留修改痕迹”针对的是交付物而非对话

提示词用番茄炒蛋加葱花的例子说明一种被禁止的行为:用户指出问题后,模型在最终产物里保留“无葱花”之类的修正说明。作者要求文档和代码只体现当前正确设计,发现的错误只在对话中告知用户。同时,提示词要求模型在用户撤回或修改更改后重新读取文件,基于当前状态继续,而不是把被删内容加回去。这两条配合,才能让产物保持干净且与用户最新意图一致。

❓

Q&A

ChatGPT 网页版的自定义指令在哪里设置,怎么让提示词生效?

打开 ChatGPT 网页版,进入「设置 → 个性化 → 自定义指令」,启用自定义功能,把提示词内容粘贴进去并保存。设置会应用于后续回复,不需要重新开启会话。

Codex 的 AGENTS.override.md 应该放在哪个路径,怎么让它被读取?

把提示词保存到用户目录下的 .codex 文件夹,文件名为 AGENTS.override.md。Windows 默认位置是 C:\Users\你的用户名\.codex\AGENTS.override.md,确认扩展名为 .md 后退出并重新启动 Codex,让新会话读取该文件。若设置过 CODEX_HOME 环境变量,应改为在该目录下创建文件。Codex 会优先读取用户级的 AGENTS.override.md,同一目录中的 AGENTS.md 不会同时加载。

为什么提示词里要禁止“不是……而是……”这类句式?

这类句式在很多情况下并没有真正需要否定的对象,属于凭空制造对比。提示词要求:非必要、不需要特别说明比较时不要使用“不是……而是……”“要……而不是……”等句式,也不要在每句话后补一句“不是其他的某某”。但两个概念容易混淆、不同方案差异会影响结论、需要解释为什么选择某种做法时,仍然允许对比。

提示词里说的“不留修改痕迹”具体指什么?

指最终产物只体现当前正确设计,不保留任何错误或修正过程的记录。例如发现文档或代码有错误时,只在对话问答中告诉用户发现了什么,禁止把错误痕迹写进文档或代码输出。作者用番茄炒蛋的比喻警告一种行为模式:去掉葱花后,PR 标题写成「番茄炒蛋(无葱花)」并在注释里解释为什么不需要葱花,这类残留痕迹被严厉禁止。

Codex 版提示词对 PowerShell 命令有哪些要求?

环境为 Windows,主终端是 PowerShell 7(pwsh),所有终端命令必须使用 PowerShell 7 语法,不得使用 Bash、sh、zsh、cmd.exe 及 Unix 风格语法,除非用户明确要求。要求包括:使用 Get-ChildItem、Select-String、Where-Object 等原生命令;路径优先用 -LiteralPath;避免 VAR=value command、export、grep、sed、awk、heredoc、2>/dev/null、rm -rf 以及用 && 串联复杂命令;禁止提交或执行空命令;删除、移动、覆盖文件前确认目标路径明确无歧义,递归删除需额外校验绝对路径在工作区内;复杂或有状态的任务优先用 Python。

通过 SSH 在远程 Linux 服务器上执行命令时要注意什么?

本地是 PowerShell 7,远程通常是 Bash,命令要经过 PowerShell → ssh.exe → 远程 shell 多层解析。要求:区分本地与远程 shell,各层使用正确语法;防止本应远程求值的 $VAR、${VAR}、$(command)、反引号、通配符被本地提前展开,特别注意 PowerShell 双引号字符串的插值;正确处理引号和转义,不能假设 Bash 的转义在 PowerShell 中可用;保留命令与参数边界;避免不必要的嵌套转义,复杂远程操作可通过标准输入传 Bash 脚本或使用临时脚本文件;本地用 PowerShell 语法,远程用 Bash 语法;执行前推演解析过程,必要时先用无害测试命令验证;不要假设所有远程服务器都用 Bash,未知时应确认实际 shell 或显式调用 bash。

子智能体分工是怎么安排的,哪些任务必须由主模型做?

目标是尽量降低推理成本,同时不牺牲正确性、完整性、安全性和质量。主模型能力更强但更贵,Luna 更便宜但推理能力有限、独立判断不可靠。所有写作任务(文档、报告、解释、文章、面向用户的文字等)和除测试代码外的所有代码开发(生产代码、实现逻辑、缺陷修复、重构、配置即代码等)必须由主模型完成;架构、复杂调试、安全敏感决策和关键集成也归主模型。Luna 可运行或编写测试代码、跑测试与静态检查、检索仓库、收集日志与诊断、提取事实、安装依赖、部署、监控长时间任务等机械工作。每次调用子智能体都要显式配置模型为 luna、推理强度为 xhigh。

多步骤任务执行到一半时,模型可以停下来问“要不要继续”吗?

不可以。提示词要求多步骤任务必须逐个完成所有目标和步骤后再报告,禁止完成一半就停止,也禁止说“下一步我会继续采用分批方式完成”“如果你希望,我也可以继续帮你”然后直接停下。除非继续的必要性很小、缺乏必要信息、涉及严重安全问题需要明确审批,或已显著偏离用户需求,否则应直接完成再回答。对于需要操作的任务,流程是:分析需求、执行修改、验证结果、汇报最终状态。

🏷️

标签

➡️

继续阅读