跳到主内容
创建时间:最后更新:作者:白川

上下文越多,AI 能力越差

1、概述

这是一 个在当前大语言模型(LLM)研究和应用中被广泛确认的现象。

Agent 开发文档

在学术界和工程界,这种现象通常被称为注意力稀释(Attention Dilution)或“长上下文性能下降”。

简单来说:当你给出的指令(Prompt)越长、越复杂,模型需要兼顾的约束条件就越多,它的“脑力”(算力/注意力机制)就会被分散,导致代码质量下降、逻辑混乱,甚至产生幻觉。

以下是导致这种情况的具体原因,以及如何避免它的建议:

为什么提示词越多,写代码越差?

1. 注意力机制的“稀释”

大模型的底层原理是“注意力机制”(Attention Mechanism)。你可以把它想象成模型在阅读你的提示词时,手头只有有限的荧光笔。

  • **短提示词:**模型可以把重点词汇(如“Python”“递归”“排序”)涂得非常亮,它非常清楚自己要做什么。
  • **长提示词:**如果你写了 3000 字,既要求性能,又要求变量命名风格,还要求兼容性,还要特定的注释格式……模型的“荧光笔”墨水就不够用了。它必须把关注度分散到每一个要求上,导致它在核心逻辑(即写出正确的代码)上的关注度反而降低了。

2. “中间迷失”现象(Lost in the Middle)

斯坦福大学等机构的研究表明,大模型通常对提示词的开头和结尾记得很清楚,但容易忽略中间的信息。

如果你把关键的代码逻辑要求写在一大段背景介绍的中间,模型很有可能会“漏看”或者记混,导致写出来的代码不符合要求。

3. 逻辑冲突与约束过载

提示词越多,包含相互冲突的指令的可能性就越大。

  • 例如:你前面说“代码要尽可能简洁”,后面又要求“添加详细的错误处理和日志记录”。
  • 这两个要求在一定程度上是矛盾的。模型在权衡这两个指令时,可能会产生逻辑混乱,最终写出一段既不简洁、错误处理也做得一般的代码。

4. 干扰信息(噪音)增加

很多时候,为了“把事情说清楚”,我们会粘贴大量的背景代码或业务文档。然而,这些内容中可能包含大量与当前代码任务无关的“噪音”。模型需要消耗算力去理解这些无关信息,这会挤占它用来推理代码逻辑的资源。

如何解决?(高质量代码生成技巧)

如果你发现我(或任何 AI)开始“变笨”了,建议尝试以下策略:

1. 拆解任务(Chain of Thought)

不要试图用一个巨长的提示词完成整个复杂的系统。

**错误做法:**把整个项目的需求文档扔进去,说“帮我写出这个 App 的后端”。

正确做法:

  1. “请帮我设计数据库 Schema。”
  2. “基于这个 Schema,帮我写用户登录接口。”
  3. “现在帮我给登录接口加上 JWT 验证。”

分步交互能让模型每次只专注于一个核心任务,代码质量会显著提高。

2. 清理上下文(Reset Context)

如果你在一个对话框里聊了很久,上下文已经积累了几万字,此时模型的性能通常会下降。

建议:当你开启一个新的功能模块开发时,新建一个对话窗口。只粘贴最必要的上下文(如表结构、关键类定义),让模型轻装上阵。

3. 结构化提示词(Structured Prompts)

与其写小作文,不如用清晰的结构。模型对 Markdown、XML 标签或列表的理解能力更强。

部分写什么不写什么示例
角色
一句话说明身份
履历、性格和长篇人设履历、性格和长篇人设履历、性格和长篇人设
资深 Python 工程师履历、性格和长篇人设
任务
这一次要交付的结果
整份需求履历、性格和长篇人设履历、性格和长篇人设履历、性格和长篇人设文履历、性格和长篇人设履历、性格和长篇人设履历、性格和长篇人设档和履历、性格和长篇人设履历、性格和长篇人设履历、性格和长篇人设无关背景
编写解析 CSV 的函数
约束
必须遵守的边界
互相冲突的要求
使用 Pandas,空值填 0

推荐格式:

tsx
console.log(2)
javascript
333
structured-prompts.md
# 角色

你是一名资深的 Python 工程师。

# 任务

编写一个解析 CSV 文件的函数。

# 约束条件

1. 使用 Pandas 库。
2. 必须处理空值,用 0 填充。
3. 不要使用多线程。

# 输入示例

你是一名资深的 Python 工程师。

# 任务

编写一个解析 CSV 文件的函数。

# 约束条件

1. 使用 Pandas 库。
2. 必须处理空值,用 0 填充。
3. 不要使用多线程。

# 输入示例

你是一名资深的 Python 工程师。

# 任务

编写一个解析 CSV 文件的函数。

# 约束条件

1. 使用 Pandas 库。
2. 必须处理空值,用 0 填充。
3. 不要使用多线程。

# 输入示例

...

4. “伪代码”引导

如果你对逻辑要求很复杂,先不要让它写代码,先让它写伪代码或设计思路。

  • “请先告诉我你的实现思路,不要写代码。”
  • 确认思路无误后,再说:“好,请按照这个思路生成 Python 代码。”

总结

提示词不是越多越好,而是越“精准”越好。对 AI 来说,Less is More(少即是多),只要那个“Less”包含了核心的意图和约束。

在后续的分析中,我们所有的提示词方案,都是围绕如何在精准表达需求的情况下,减少提示词的内容来展开的。