一、上下文传递的重要性
上下文传递是提示工程中至关重要的一环,它能够帮助AI更好地理解问题背景、代码结构和业务逻辑。适当的上下文传递能够显著提升AI输出的准确性和相关性。
二、上下文类型
2.1 代码上下文
提供相关的代码片段:
"我在开发一个ASP.NET Core Web API项目,遇到了以下问题:
相关代码:
public class UserController : ControllerBase
{
private readonly IUserRepository _userRepository;
public UserController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
[HttpGet("{id}")]
public async Task GetUser(int id)
{
var user = await _userRepository.GetById(id);
return Ok(user);
}
}
IUserRepository接口定义:
public interface IUserRepository
{
Task GetById(int id);
Task> GetAll();
}
请帮我分析这段代码的问题。"
2.2 错误上下文
提供完整的错误信息:
"我遇到了以下错误:
错误信息:
System.NullReferenceException: Object reference not set to an instance of an object.
at MyApp.Controllers.UserController.GetUser(Int32 id) in D:\\Projects\\MyApp\\Controllers\\UserController.cs:line 25
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
相关代码(第20-30行):
[HttpGet("{id}")]
public async Task GetUser(int id)
{
var user = await _userRepository.GetById(id);
return Ok(user.Name); // 第25行
}
请帮我分析并修复这个问题。"
2.3 业务上下文
提供业务背景和需求:
graph TD
A[上下文类型] --> B[代码上下文]
A --> C[错误上下文]
A --> D[业务上下文]
A --> E[技术上下文]
B --> B1[相关代码片段]
B1 --> B2[接口定义]
B2 --> B3[数据模型]
C --> C1[错误堆栈]
C1 --> C2[异常信息]
C2 --> C3[日志输出]
D --> D1[业务需求]
D1 --> D2[业务流程]
D2 --> D3[业务规则]
E --> E1[技术栈]
E1 --> E2[框架版本]
E2 --> E3[环境配置]
B --> F[AI理解]
C --> F
D --> F
E --> F
三、上下文传递策略
3.1 最小上下文原则
只传递必要的上下文信息:
| 原则 | 说明 | 示例 |
|---|---|---|
| 简洁性 | 只包含必要信息 | 相关代码片段 |
| 相关性 | 与问题直接相关 | 错误堆栈 |
| 完整性 | 信息完整无缺 | 完整的接口定义 |
3.2 分层传递策略
按照层次传递上下文:
// 第一层:问题概述
"请帮我实现一个用户认证功能"
// 第二层:技术约束
"使用ASP.NET Core + JWT实现"
// 第三层:代码结构
"项目已有的User模型和数据库上下文"
// 第四层:详细要求
"包含注册、登录、刷新令牌功能"
3.3 增量传递策略
逐步增加上下文信息:
// 第一步:基础问题
"我遇到了一个数据库查询性能问题"
// 第二步:添加上下文
"查询语句是:SELECT * FROM Orders WHERE UserId = @userId"
// 第三步:添加更多上下文
"Orders表有100万行数据,UserId列有索引"
// 第四步:添加性能数据
"查询时间超过2秒,数据库CPU使用率达到80%"
四、上下文传递技巧
4.1 代码片段传递技巧
正确传递代码片段:
// 不好的传递方式
"这是我的代码:[粘贴整个文件]"
// 好的传递方式
"相关代码(UserController.cs第20-30行):
[HttpGet("{id}")]
public async Task GetUser(int id)
{
var user = await _userRepository.GetById(id);
return Ok(user);
}"
4.2 错误信息传递技巧
完整传递错误信息:
// 不好的传递方式
"代码报错了"
// 好的传递方式
"错误类型:NullReferenceException
错误位置:UserController.cs第25行
错误消息:Object reference not set to an instance of an object
相关代码:[粘贴相关代码]"
五、上下文传递最佳实践
5.1 最佳实践清单
- 精准定位:只传递与问题相关的代码
- 保持完整:传递完整的错误信息和堆栈
- 分层传递:按照层次逐步增加上下文
- 清晰标注:标注代码来源和行号
- 格式规范:使用代码块和列表组织内容
5.2 上下文传递流程图
flowchart TD
A[开始] --> B[确定问题类型]
B --> C[收集相关上下文]
C --> D[筛选必要信息]
D --> E[组织信息结构]
E --> F[添加代码片段]
F --> G[添加错误信息]
G --> H[添加业务背景]
H --> I[检查完整性]
I --> J{信息完整}
J --> K[是]
J --> L[否]
K --> M[提交给AI]
L --> N[补充信息]
N --> D
六、总结
上下文传递是提示工程的核心策略之一,掌握上下文传递技巧能够显著提升AI编程的效果。通过精准定位、分层传递和清晰标注,能够让AI更好地理解问题背景,从而生成更准确的解决方案。