抽象指令会漂移、可检查的精确指令不会——通过BRD/PRD模板、版本化system prompt和验证循环让AI行为可预期。
过去一年如果你一直在用大语言模型构建应用,可能已经遇到了和我一样的墙:LLM Drift。Agent会重新发明你的代码库、重命名你的文件、用要点列表来道歉。AI模型或编码工具并没有变差。是你的上下文变了。
我不再用更聪明的提示词来对抗漂移。我用五个小文件和一个循环来对抗。这篇文章展示整个系统。
抽象指令会漂移。具体指令不会。比较一下:
元指令:"你是一位Python专家。写干净、Pythonic、健壮的代码。遵循PEP 8和最佳实践。优雅地处理错误。"
直接指令:"使用Python 3.12和uv。为所有公共函数提供类型提示。用src/schemas.py中的Pydantic模型验证输入。从src/db/user_repo.py复制仓库模式。测试命名为tests/test_*.py。每次提交前运行ruff check . && uv run pytest -q。"
每条直接指令都是可检查的。代码有类型提示或者没有。"干净"和"健壮"这些词没有任何可检查的内容。二十轮对话之后,AI对"干净"的理解已经和你的不一样了。这个差距就是漂移。

你从模板填写这些。是你,不是AI(或者让AI基于你的初稿使用模板)。它们强迫你搞清楚自己要什么。
一个提示词。它读取你的PRD并生成分层AGENTS.md文件:一个小型根文件、详细的子文件夹文件。它还生成TASKS.md:里程碑作为章节,任务作为复选框。
你写的输入,AI写的输出。每个产物都有固定的位置和固定的名称。
如果一个任务太大放不进一个PR,就拆分任务列表,不是拆分PR。
Ultrathink the requirement @content-in/req.md. Ask as many questions as you need.
Save the plan in content-out. Use the name YYYYMMDD-TOPIC-PLAN.md.
Ultracode the plan @content-out/YYYYMMDD-TOPIC-PLAN.md.
Create a branch and a PR for this task.
Write an implementation record of all the work you did. Save it in content-out.
Use the name YYYYMMDD-TOPIC-RECORD.md. Include the record in the PR.
Review the implementation in PR #XX. The requirement is @content-in/req.md.
The plan is @content-out/...-PLAN.md. The record is @content-out/...-RECORD.md.
Review the code as well.
打勾完成任务。继续下一个。带日期的计划和记录给你一条审计追踪:需求 → 计划 → 代码 → 记录 → 审查。当东西漂移时,你能看出在哪。
这些指导方针也可以添加到你的AGENTS.md或CLAUDE.md中。
禁用词:"delve"、"seamless"、"leverage"、"robust"、"comprehensive"、"crucial"。如果AI写出这些,说明AI在堆砌辞藻。
我把提示词写成飞机手册那样。ASD-STE100是航空领域的简化技术英语标准:句子20个词以内,主动语态,每句话一条指令。航空几十年前就解决了如何编写明确无误的指令。借用它。
不要保留向后兼容性。替换时删除旧路径。死代码是漂移的燃料。
永远不要让模型给自己的作业评分。审查步骤在不同的模型中运行。同模型审查只是确认;跨模型审查才能发现。
我在它自己身上运行了这个框架。最新的改进走过了需求 → 计划 → 实现 → 记录,记录放在了PR描述中:PR #1。
garyzava / avoid-llm-drift

我们与AI助手协作编码的方式随着agentic coding的兴起已经演变。直接指令优于元(抽象)指令,使用多个精简指令有助于避免LLM drift(这意味着当AI停止听从你时)。
元指令:"你是一位Python专家。写干净、Pythonic、健壮的代码。遵循PEP 8和最佳实践。优雅地处理错误。"
直接指令:"使用Python 3.12和uv。为所有公共函数提供类型提示。用src/schemas.py中的Pydantic模型验证输入。从src/db/user_repo.py复制仓库模式。测试命名为tests/test_*.py。每次提交前运行ruff check . && uv run pytest -q。"
然而,你仍然需要一个受控的方式来提供上下文并在会话之间维护共享状态。
当指令明确涵盖以下内容时,编码Agent表现更好:
复制模板。把文件夹结构弯曲以适应你的技术栈;Python仓库和JavaScript仓库需要不同的文件夹。如果有帮助,给它加星标。
你的规则是什么让Agent保持在轨道上?告诉我那件真正阻止漂移的事情。