Prompt工程02:上下文组织

从背景资料、代码片段、日志、约束条件的优先级,理解如何组织有效的上下文给大模型。

字数 1113 阅读时长 ≈ 4 分钟 2026-7-24 2026-7-27
Prompt工程02:上下文组织

上下文是大模型理解任务的基础,好的上下文组织能让模型更准确地理解你的需求。理解如何组织上下文,是提升 Prompt 效果的关键。

上下文的重要性

模型的输出质量很大程度上取决于提供的上下文质量。

缺少上下文 vs 充足上下文

缺少上下文

帮我写一个登录接口。

充足上下文

背景:我们正在开发一个电商平台,需要实现用户登录功能
技术栈:Java 21 + Spring Boot 3.2 + MySQL
现有代码:
- 用户实体类:User.java
- 用户服务:UserService.java
- 数据库表:users (id, username, password_hash, email, created_at)
约束:
- 密码使用 BCrypt 加密
- 返回 JWT token
- 支持邮箱和用户名登录

上下文对输出的影响

维度缺少上下文充足上下文
相关性
准确性
一致性
修改次数

上下文的类型

根据任务类型,需要提供不同类型的上下文。

背景资料

提供任务的背景信息:

类型示例适用场景
业务背景”我们正在开发一个电商平台”所有任务
技术背景”使用 Java 21 和 Spring Boot”技术任务
历史背景”之前尝试过方案 A,但遇到了问题”复杂任务
目标背景”这个功能需要在下个月上线”项目任务

代码片段

提供相关的代码:

类型示例适用场景
实体类User.java代码生成
服务类UserService.java代码修改
配置文件application.yml配置相关
接口定义API 文档接口开发

日志信息

提供相关的日志:

类型示例适用场景
错误日志Stack Trace问题排查
运行日志应用日志性能分析
测试日志测试输出测试问题

约束条件

提供任务的约束:

类型示例适用场景
技术约束”使用 Java 21”技术任务
时间约束”代码需要在 1 秒内执行”性能任务
安全约束”不要暴露敏感信息”安全任务
业务约束”符合公司的编码规范”规范任务

参考资料

提供相关的参考资料:

类型示例适用场景
API 文档第三方 API 文档集成任务
技术文档技术方案文档方案设计
设计文档UI 设计文档前端任务

上下文组织的原则

1. 相关性原则

只提供与任务相关的上下文:

不好

这里有很多代码,帮我看看哪里有问题。
[粘贴了整个项目的代码]

我遇到了一个问题,下面是相关的代码:
- UserService.java(用户服务类)
- LoginController.java(登录控制器)
- 错误日志:[粘贴错误日志]

2. 结构化原则

使用结构化的方式组织上下文:

不好

用户实体类有 id、name、email,数据库表也是这些字段,密码需要加密,返回 JWT。

【用户实体类】
User.java:
- id (Long)
- name (String)
- email (String)
- passwordHash (String)

【数据库表】
users 表:
- id BIGINT PRIMARY KEY
- name VARCHAR(100)
- email VARCHAR(200) UNIQUE
- password_hash VARCHAR(255)

【安全要求】
- 密码使用 BCrypt 加密
- 返回 JWT token

3. 优先级原则

把重要的上下文放在前面:

【核心需求】(最重要)
实现用户登录接口,支持用户名和邮箱登录

【技术栈】
Java 21 + Spring Boot 3.2 + MySQL

【现有代码】
[相关代码]

【约束条件】
[约束条件]

4. 简洁性原则

避免提供过多的上下文:

不好

[粘贴了 1000 行代码]
帮我优化这段代码。

我需要优化以下代码的性能,请重点关注 getUserList 方法:
[粘贴 getUserList 方法的代码,约 50 行]

上下文组织的技巧

使用分隔符

使用分隔符区分不同类型的上下文:

=== 背景资料 ===
我们正在开发一个电商平台...

=== 现有代码 ===
[代码片段]

=== 约束条件 ===
- 使用 Java 21
- 返回 JWT token

使用标题

使用标题组织上下文:

# 任务背景
我们正在开发一个电商平台...

# 技术栈
- Java 21
- Spring Boot 3.2
- MySQL

# 现有代码
## 用户实体类
[代码]

## 用户服务类
[代码]

使用代码块

使用代码块包裹代码:

用户实体类:
```java
public class User {
    private Long id;
    private String username;
    private String passwordHash;
}

数据库表:

CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(100) UNIQUE,
    password_hash VARCHAR(255)
);

### 使用列表

使用列表组织信息:

需求:

  1. 实现用户登录接口
  2. 支持用户名和邮箱登录
  3. 密码使用 BCrypt 加密
  4. 返回 JWT token

约束:

  • 使用 Java 21
  • 使用 Spring Boot 3.2
  • 返回 JSON 格式

## 上下文组织的常见问题

### 问题1:上下文太多

**表现**:模型被大量无关信息淹没

**示例**:

[粘贴了整个项目的代码] 帮我写一个登录接口。


**解决**:

我需要实现一个登录接口,请参考以下相关代码: [只粘贴相关的代码片段]


### 问题2:上下文太少

**表现**:模型缺少必要的信息

**示例**:

帮我写一个登录接口。


**解决**:

背景:我们正在开发一个电商平台 技术栈:Java 21 + Spring Boot 3.2 现有代码:[相关代码] 约束:[约束条件]


### 问题3:上下文混乱

**表现**:上下文组织无序,模型难以理解

**示例**:

用户实体类有 id、name、email,密码需要加密,使用 Java 21,返回 JWT,数据库表有 id、username、password_hash…


**解决**:

【技术栈】 Java 21 + Spring Boot 3.2

【现有代码】 用户实体类:[代码] 数据库表:[SQL]

【约束条件】

  • 密码使用 BCrypt 加密
  • 返回 JWT token

### 问题4:上下文过时

**表现**:提供的上下文与当前情况不符

**示例**:

用户实体类: [旧版本代码] 帮我实现登录接口。


**解决**:

用户实体类(最新版本): [最新代码] 帮我实现登录接口。


## 上下文长度的管理

上下文长度受模型窗口限制,需要合理管理。

### 上下文长度策略

| 策略 | 描述 | 适用场景 |
|------|------|---------|
| 完整上下文 | 提供所有相关上下文 | 短任务 |
| 精简上下文 | 只提供核心上下文 | 中等任务 |
| 分层上下文 | 先提供高层上下文,需要时再补充 | 复杂任务 |
| 外部检索 | 使用 RAG 检索外部知识 | 需要大量知识 |

### 上下文压缩技巧

| 技巧 | 描述 | 效果 |
|------|------|------|
| 摘要压缩 | 对长文本进行摘要 | 减少长度 |
| 代码压缩 | 只保留关键代码 | 减少长度 |
| 分层提供 | 分多次提供上下文 | 避免超限 |
| 优先级排序 | 只提供最重要的上下文 | 减少长度 |

## 项目判断清单

- 模型输出不相关 → 检查上下文是否相关
- 模型输出不准确 → 检查上下文是否充足
- 模型输出混乱 → 检查上下文是否结构化
- 上下文过长 → 使用压缩技巧或分层提供
- 上下文过短 → 补充必要的上下文
- 上下文过时 → 更新上下文为最新版本