写点什么

AI 编程实战|提示词工程 -COT&TOT 学习与实践

作者:Jxin
  • 2025-08-09
    福建
  • 本文字数:6169 字

    阅读完需:约 20 分钟

AI 编程实战|提示词工程-COT&TOT学习与实践

文 | 三七 (转载请注明出处)

公众号:三七-编程实战


不积跬步无以至千里,欢迎来到 AI 时代的编码实战

场景引入:三个专家的屋子难题

一个简单的问题:"如何把这个空屋子装满?"


数学家说:用无穷个点填满空间,理论上完美。物理学家说:用空气分子占据体积,科学上准确。


建筑师说:用家具填充功能,实用上合理。


三个答案都"正确",但如果我想要"布置办公室",只有建筑师的答案符合预期。

概念引出:从多重正确到精准收敛

AI 面临同样的挑战:它拥有无数种"正确"的思维模式,但我们需要的是符合预期的那一种。


想象一下,当你问 AI"请优化这个函数"时,它可能会:


  • 数学思维给出理论完美但团队难懂的函数式方案

  • 学术思维提供严谨复杂但过度设计的架构

  • 工程思维返回实用简洁但可能不够优雅的代码


每种答案都有其道理,但只有一种真正符合你的期望。这就像三个专家装屋子的情况——问题不在于 AI 不够聪明,而在于我们没有告诉它用哪种"专家身份"来思考。


这个发现让我们意识到一个关键问题:如何引导 AI 按照我们期望的方式思考?


答案就是我们今天要探讨的核心技术——Chain of Thought(思维链)


CoT 的本质很简单:通过设计特定的思维步骤,让 AI 按照我们指定的路径收敛到符合预期的答案。 就像给数学家、物理学家、建筑师分别下达"以你的专业角度解决这个问题"的指令一样。

概念阐释:CoT 的收敛本质

通过编程案例理解 CoT 的收敛机制:

案例:代码重构的思维收敛

发散问题:AI 的"多重正确"

// 用户需求:优化这个函数function getUserData(id) {    let user = users.find(u => u.id === id);    if (user) {        return {name: user.name, email: user.email, age: user.age};    } else {        return null;    }}
复制代码


不使用 CoT 时的 AI 响应:


// AI可能从"学术完美主义"角度回答:function getUserData(id) {    // 使用函数式编程范式,避免副作用    const userProjection = user => ({        name: user.name,        email: user.email,         age: user.age    });        return Maybe.of(users)        .map(users => users.find(u => u.id === id))        .map(userProjection)        .getOrElse(null);}
复制代码


这个答案在学术上是"正确"的,但对于大多数团队来说过于复杂,引入了不必要的函数式编程概念。


使用 CoT:指定工程思维模式


你是一个注重团队协作的工程师,从可维护性角度优化这个函数:
步骤1:识别工程问题(缺少验证、错误处理、文档)步骤2:确定优化原则(简单易懂、错误处理、可读性)步骤3:实现改进方案
复制代码


/** * 根据ID获取用户数据 * @param {string|number} id - 用户ID * @returns {Object|null} 用户数据对象或null */function getUserData(id) {    if (!id) {        console.warn('getUserData: 无效的用户ID');        return null;    }
const user = users.find(u => u.id === id); if (!user) { console.info(`getUserData: 未找到ID为${id}的用户`); return null; }
return {name: user.name, email: user.email, age: user.age};}
复制代码


CoT 收敛效果:从"学术完美"收敛到"工程实用",从"过度设计"收敛到"恰当优化"。

性能优化案例的 CoT 应用

发散问题:优化方向迷失

// 用户反馈:这个API响应很慢,经常超时
@RestControllerpublic class ProductController { @Autowired private ProductRepository productRepository; @GetMapping("/api/products") public List<ProductDTO> getProducts() { List<Product> products = productRepository.findAll(); return products.stream().map(p -> { ProductDTO dto = new ProductDTO(); dto.setId(p.getId()); dto.setName(p.getName()); dto.setPrice(p.getPrice()); dto.setCategoryName(p.getCategory().getName()); // 潜在的N+1查询问题 dto.setReviewsCount(p.getReviews().size()); // 又一个N+1查询 return dto; }).collect(Collectors.toList()); }}
// 实际测试:响应时间2000ms,用户体验很差
复制代码


不使用 CoT 时的 AI 响应:


AI 可能从"性能工程学"角度给出复杂的优化方案:


  • 数据库分片与读写分离

  • Redis 集群缓存架构

  • CDN 加速静态资源

  • 异步队列处理

  • 微服务拆分

  • Elasticsearch 搜索引擎

  • 负载均衡优化


这些都是"正确"的优化技术,但对于当前问题可能是过度设计,缺乏针对性。


使用 CoT:指定问题导向思维


你是一个注重实效的Java后端工程师,目标是将API响应时间从2秒优化到200ms以内:
步骤1:定位实际瓶颈(测量查询时间、分析N+1问题)步骤2:选择低成本方案(优化现有查询而非重构架构)步骤3:验证优化效果(测试性能提升)
复制代码


// 基于CoT分析的优化方案
@RestControllerpublic class ProductController { @Autowired private ProductRepository productRepository; @GetMapping("/api/products") @Cacheable(value = "products", cacheManager = "cacheManager") public ResponseEntity<List<ProductDTO>> getProducts() { // 优化1:使用fetch join避免N+1查询 List<Product> products = productRepository.findAllWithCategoryAndReviews(); // 优化2:减少数据传输量,优化序列化 List<ProductDTO> result = products.stream() .map(this::convertToDTO) .collect(Collectors.toList()); // 优化3:添加HTTP缓存头 return ResponseEntity.ok() .cacheControl(CacheControl.maxAge(5, TimeUnit.MINUTES)) .body(result); } private ProductDTO convertToDTO(Product product) { ProductDTO dto = new ProductDTO(); dto.setId(product.getId()); dto.setName(product.getName()); dto.setPrice(product.getPrice().doubleValue()); // 避免BigDecimal序列化开销 dto.setCategoryName(product.getCategory().getName()); dto.setReviewsCount(product.getReviews().size()); return dto; }}
// Repository层优化@Repositorypublic interface ProductRepository extends JpaRepository<Product, Long> { @Query("SELECT p FROM Product p " + "LEFT JOIN FETCH p.category " + "LEFT JOIN FETCH p.reviews") List<Product> findAllWithCategoryAndReviews();}
// 性能提升结果:// 优化前:2000ms (N+1查询问题)// 优化后:150ms (单次JOIN查询)// 提升效果:13倍性能提升
复制代码


CoT 收敛效果:从"所有优化技术"收敛到"针对性解决",从"重构架构"收敛到"仅代码优化"。


进阶:AI 自动化优化循环通过 MCP 协议封装压测工具,让 AI 自主执行"压测→分析→优化→验证"的闭环,直到达到性能目标。

深度理解:CoT 的四大收敛机制

CoT 通过四个维度实现思维收敛:

1. 身份收敛:角色即思维模式

"你是一个注重实用性的工程师" → 从"学术理论"收敛到"工程实践"
复制代码

2. 约束收敛:边界即可行域

无约束:设计系统 → AI可能过度设计有约束:4周内5人团队 → AI选择MVP方案
复制代码

3. 目标收敛:结果即方向

模糊:优化性能 → AI可能建议多个维度明确:从2秒优化到200ms → AI聚焦最有效路径
复制代码

4. 过程收敛:步骤即收敛节点

传统:请优化函数 → AI可能从性能、安全、可读性等多角度发散CoT:从团队维护性角度优化 → AI聚焦到维护性这个收敛点
复制代码

实践策略:四维 CoT 设计模板

基础模板

你是一个[身份角色](身份收敛),在[约束条件]下(约束收敛),为了[具体目标](目标收敛),请按照以下步骤分析:(过程收敛)
步骤1:[分析现状]步骤2:[评估方案] 步骤3:[实施解决]
复制代码

实际应用示例

你是一个注重实用性的Python后端工程师,在不引入新框架的约束下,为了将API响应时间优化到100ms以内,请按照以下步骤分析:
步骤1:测量当前性能瓶颈点步骤2:评估现有技术栈下的优化方案步骤3:选择并实施最佳方案
复制代码

动态过程收敛

对于复杂场景,使用两阶段动态收敛:


阶段1:基于具体需求制定个性化方案阶段2:严格按照方案执行,必要时回到阶段1调整
复制代码

进阶技术:Tree of Thoughts(ToT)思维树

在掌握了 CoT 的直接收敛技术后,我们来探索另一种强大的思维技术:Tree of Thoughts(思维树)

ToT 的核心理念:系统性探索收敛

ToT 是一种解决复杂问题的框架,它引导 AI 在需要多步骤推理的任务中,搜索一棵由连贯推理步骤组成的思维树,而不是简单地生成答案。


CoT模式:问题 → 步骤1 → 步骤2 → 步骤3 → 答案        (路径清晰,直接收敛)
ToT模式:问题 → 探索分支A → 评估 → 继续/回溯 ↘ 探索分支B → 评估 → 继续/回溯 ↘ 探索分支C → 评估 → 继续/回溯 (系统性探索,验证后收敛)
复制代码

ToT 的应用场景:复杂推理与战略探索

适用于以下情况:


  1. 需要多步骤推理,每步都有多种可能路径

  2. 需要探索或预判战略,路径选择影响最终结果

  3. 中间步骤需要评估,基于阶段性结果调整策略

  4. 系统性验证需求,确保探索的全面性

ToT 实战案例:AI 编程助手的智能路由系统

场景:构建智能编程助手

用户向 AI 提出各种编程需求,系统需要智能识别请求类型,并路由到专门化的处理节点,每个节点都需要验证和评估。


传统 CoT 的局限性:


步骤1:理解用户需求步骤2:生成解决方案步骤3:提供代码实现
问题:无法区分不同类型的编程需求,一刀切处理效果差
复制代码


ToT 方式:系统性路由处理


🌳 ToT处理流程:AI编程助手智能路由
用户输入 → 请求类型识别 → 分支决策 → 专门化处理 → 质量验证 → 反思记录┌─────────────────────────────────────────────────────────────────┐│ 请求类型识别节点 ││ 输入:用户原始请求 ││ 输出:classified_request_type, confidence_score, context ││ CoT:关键词分析 → 意图识别 → 类型分类 → 置信度评估 │└─────────────────────────────────────────────────────────────────┘ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 新需求开发节点 │ │ 代码修改节点 │ │ 单测补充节点 │ │ (NEW_FEATURE) │ │ (CODE_MODIFY) │ │ (TEST_ENHANCE) │ └─────────────────┘ └─────────────────┘ └─────────────────┘
复制代码

节点 1:请求类型识别(多步推理验证)

输入示例:用户说"我需要实现一个用户登录功能"
CoT推理链:步骤1:关键词提取- 识别核心词汇:["实现", "用户登录功能"]- 动词分析:实现 → 新建功能的信号- 名词分析:用户登录 → 具体功能模块
步骤2:上下文分析- 检查是否提及现有代码:否- 检查是否提及修改需求:否- 检查是否提及测试相关:否
步骤3:意图分类评估- NEW_FEATURE可能性:90%(关键词"实现"+"功能")- CODE_MODIFY可能性:15%(无修改关键词)- TEST_ENHANCE可能性:5%(无测试关键词)
步骤4:置信度验证- 语义一致性检查:通过 ✓- 关键词权重计算:高权重 ✓- 上下文完整性:充分 ✓
输出:{type: "NEW_FEATURE", confidence: 0.90, context: "用户登录功能开发"}
复制代码

节点 2A:新需求开发节点(专门化处理)

输入:{type: "NEW_FEATURE", confidence: 0.90, context: "用户登录功能开发"}
专门化CoT处理链:步骤1:需求细化- 分析技术栈需求- 确定功能边界和复杂度- 识别依赖组件
步骤2:架构设计- 设计数据模型(User, Session)- 设计API接口(/login, /logout, /verify)- 设计安全策略(密码加密、JWT令牌)
步骤3:代码实现- 后端认证逻辑- 前端登录表单- 数据库schema
步骤4:集成指导- 部署配置- 环境变量设置- 测试用例建议
输出:完整的登录功能实现方案
复制代码

节点 2B:代码修改节点(专门化处理)

输入示例:{type: "CODE_MODIFY", confidence: 0.85, context: "优化登录性能"}
专门化CoT处理链:步骤1:现状分析- 分析现有代码结构- 识别性能瓶颈点- 评估修改风险
步骤2:优化策略- 缓存机制优化- 数据库查询优化- 算法复杂度优化
步骤3:代码重构- 保持向后兼容- 最小化修改范围- 渐进式改进
步骤4:影响评估- 性能提升预期- 潜在风险点- 回滚方案
输出:优化后的代码和改进建议
复制代码

节点 3:质量验证(多维度评估)

验证维度1:代码质量- 语法正确性:✓ 通过- 最佳实践:✓ 符合- 安全性检查:✓ 通过- 性能评估:⚠ 需要优化
验证维度2:需求匹配度- 功能完整性:✓ 90%匹配- 用户意图符合:✓ 高度符合- 边界情况覆盖:⚠ 部分覆盖
验证维度3:可维护性- 代码可读性:✓ 良好- 文档完整性:✓ 充分- 测试覆盖率:⚠ 65%,建议提升
质量评分:85/100,建议改进安全测试覆盖
复制代码

ToT 智能路由的核心价值

1. 多步推理验证


  • 每个节点都有完整的 CoT 推理链

  • 中间步骤可评估、可验证、可回溯


2. 专门化处理


  • 不同类型的编程需求得到专门优化的处理

  • 避免"一刀切"导致的质量下降


3. 持续学习改进


  • 系统性记录成功和失败案例

  • 基于反馈持续优化路由策略

ToT 与 CoT 的对比与选择


ToT 提示模板

基础模板:请从以下维度并行分析[问题]:
🌳 方案A:[角度1]🌳 方案B:[角度2] 🌳 方案C:[角度3]
对每个方案分析优劣,最后提供决策矩阵和推荐。
应用示例:🌳 方案A:性能优先(分析各方案性能表现)🌳 方案B:开发效率(分析团队适配和维护成本)🌳 方案C:生态稳定(分析社区支持和风险)
复制代码

总结回顾:思维收敛的编程智慧

通过从"三个专家装屋子"到编程实践的探索,我们发现了 CoT 的核心价值

三大核心洞察

1. 解决 AI 发散性挑战


AI 具备多种思维模式,都能给出"正确"答案,但 CoT 让 AI 选择符合预期的那一种。


2. 四维精准收敛控制


  • 身份收敛:控制思维角度(工程师 vs 学者)

  • 约束收敛:限制方案边界(时间、技术栈)

  • 目标收敛:明确优化方向(性能、维护性)

  • 过程收敛:引导推理路径(分析→评估→实施)


3. 实现预期一致性从"模型认为正确"转向"人类认为有用",从"理论完备"转向"问题导向"。

🎯 如果今天你只记得一句话,请记住:

"CoT 和 ToT 的本质都是收敛,区别在于应对场景:CoT 用于路径清晰的问题(我们明确知道走哪条思维链),ToT 用于路径不明的问题(需要在执行过程中基于阶段性结果动态决策)。掌握何时直接收敛、何时探索收敛。"

选择策略

使用 CoT:思维路径清晰、明确知道解决步骤的问题使用 ToT:需要多步推理、每步都需要验证和评估的复杂问题


组合使用:ToT 系统性探索找到最佳路径 + CoT 沿确定路径高效执行




本文基于真实工程场景和理论分析编写,所有技术案例均已验证。愿你在 AI 时代的编程路上游刃有余,既能直接收敛解决明确问题,又能系统性探索解决复杂挑战!

发布于: 2025-08-09阅读数: 6
用户头像

Jxin

关注

极限编程小🐎农 2018-09-22 加入

你的每一行代码,都是你的名片。

评论

发布
暂无评论
AI 编程实战|提示词工程-COT&TOT学习与实践_编程_Jxin_InfoQ写作社区