🤖 AI编程

提示工程之上下文传递策略

深入探讨提示工程中上下文传递的核心策略与技巧

一、上下文传递的重要性

上下文传递是提示工程中至关重要的一环,它能够帮助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更好地理解问题背景,从而生成更准确的解决方案。