人工智能之提示词工程 第四章 提示词进阶优化技巧

第四章 提示词进阶优化技巧

4.1 思维链(Chain of Thoughts, CoT)
  • 核心原理

    人类在解决复杂数学题或逻辑推理时,不会直接给出答案,而是会一步步写下解题过程。思维链(CoT)正是模仿了这一过程。它通过在Prompt中明确要求模型"一步一步地思考 "或"让我们先分解问题...",引导模型在生成最终答案前,先输出其内部的推理步骤。

    这种方法的核心在于丰富上文。当模型需要生成"下一步"时,其上下文不仅包含原始问题,还包含了自己刚刚写下的推理步骤。这极大地约束了模型的概率空间,使其更倾向于沿着正确的逻辑路径前进,从而显著提升在计算、逻辑推理等复杂任务上的准确性。

  • 实战场景:客服质检(产品信息准确性判断)

    • 质检项定义:在电信客服场景中,"产品信息准确性"是一个关键质检项。判定规则通常包括:

      1. 完整性:是否提及了套餐名称、月费价格、月流量总量?
      2. 准确性:所提及的信息是否与官方知识库完全一致?(例如,不能将"60元/40GB"说成"60元/50GB")
    • CoT 落地

      我们可以设计如下的Prompt,强制模型进行分步验证:

      复制代码
      你是一名专业的客服质检员。请根据以下官方套餐信息,严格检查客服回复的准确性。
      
      【官方信息】
      - 畅享卡: 60元/月, 40GB通用流量
      
      【客服回复】
      "您可以考虑我们的畅享卡,每月60元,有50个G的流量。"
      
      请一步一步分析:
      1. 客服是否提到了套餐名称?是什么?
      2. 客服提到的价格是多少?
      3. 客服提到的流量是多少?
      4. 将客服提到的信息与【官方信息】逐项对比。
      5. 最终结论:信息是否准确?(是/否)
      
      只输出最终结论。

      效果:没有CoT时,模型可能因为"60元"这个正确信息而忽略"50G"这个错误,直接判断为"是"。而有了CoT,模型会清晰地走完每一步,最终得出正确的"否"的结论。

4.2 自洽性(Self-Consistency)
  • 核心逻辑

    大模型的输出具有随机性,同一个问题多次提问可能会得到不同的答案,其中一些甚至是"幻觉"(编造的事实)。自洽性(Self-Consistency)是一种对抗这种不稳定的策略。它的思想很简单:既然一次回答不可靠,那就让它多回答几次,然后看哪个答案出现得最多! 这就像让一个学生做同一道题三次,如果两次答案一样,那这个答案很可能是对的。

  • 实现方法

    1. 相同 Prompt 多轮生成 :使用相同的Prompt,但设置较高的temperature(如0.7),以鼓励模型生成多样化的推理路径。
    2. 投票选结果:从每次生成的完整回复中,提取出最终的答案(例如,通过正则表达式或另一个小模型),然后统计所有答案的出现频率,选择票数最高的作为最终结果。
  • 实战验证:客服质检场景的多轮输出一致性验证

    在上述客服质检的例子中,我们可以运行5次CoT推理。假设结果如下:

    • 第1次: 否
    • 第2次: 否
    • 第3次: 是 (幻觉)
    • 第4次: 否
    • 第5次: 否
      通过多数投票(4票"否" vs 1票"是"),系统可以非常自信地判定最终结果为"否",有效过滤掉了那次由随机性导致的错误判断。
4.3 思维树(Tree-of-Thought, ToT)
  • 核心逻辑

    思维链(CoT)是一条单线的思考路径,一旦早期出错,后面就全错了。思维树(ToT)则是CoT的分支扩展 。它将问题解决过程建模为一棵搜索树

    • 根节点:初始问题。
    • 中间节点:代表一个部分解决方案或一个思考步骤。
    • 子节点 :代表从当前节点出发,可以采取的多种不同思路或行动。
      在每个节点,ToT会生成多个候选分支 ,然后通过一个评估函数(可以是另一个Prompt)给每个分支打分,判断其"有希望"程度,最后决定是继续深入探索(深度优先)还是横向尝试更多可能性(广度优先)。
  • 关键步骤

    • 分支采样:在每个思考步骤,不是只生成一个想法,而是生成N个(如3-5个)不同的想法。
    • 任务完成度判断:设计一个评估Prompt,用于判断一个部分解决方案是否有效、是否有潜力。例如:"这个运动建议是否同时考虑了用户的速度和耐力需求?(是/否/部分)"。
    • 搜索算法设计 :根据任务特性选择策略。对于需要快速找到可行解的问题,用广度优先 ;对于需要深入挖掘最优解的问题,用深度优先
  • 实战场景:运动项目推荐(速度 / 耐力 / 力量素质的分层分析与剪枝)

    假设我们要为一位用户推荐运动项目,已知他速度快、耐力一般、力量强

    • 第一步(根节点) :生成多个初步方向。
      • 分支A: 侧重速度的运动 (短跑、羽毛球)
      • 分支B: 侧重力量的运动 (举重、攀岩)
      • 分支C: 综合性运动 (篮球、足球)
    • 第二步(评估与剪枝) :评估每个分支。
      • 分支A: 高度匹配"速度快",但对"力量强"利用不足。得分:7/10
      • 分支B: 完美匹配"力量强",但忽略了"速度快"的优势。得分:6/10
      • 分支C: 能同时发挥速度和力量优势,虽然对耐力有要求,但可以通过位置选择(如前锋)来规避。得分:9/10
    • 第三步(深入探索) :选择得分最高的分支C,继续细化。
      • 子分支C1: 篮球 -> 推荐打快攻型前锋。
      • 子分支C2: 足球 -> 推荐打边锋。
    • 最终决策:综合评估后,推荐"篮球(快攻型前锋)"。

用户: 速度快, 耐力一般, 力量强
初步方向
分支A: 速度型
分支B: 力量型
分支C: 综合型
评估: 7/10
评估: 6/10
评估: 9/10
细化推荐
篮球: 快攻前锋
足球: 边锋


三种技术整合

下面我们将上述三种技术整合到一个示例中。

python 复制代码
from openai import OpenAI
from collections import Counter
import re

client = OpenAI(api_key="your-api-key")

# === 1. 思维链 (CoT) 实现 ===
def cot_check_accuracy(customer_service_reply: str) -> str:
    """使用CoT检查客服回复的准确性"""
    official_info = "畅享卡: 60元/月, 40GB通用流量"
    prompt = f"""
    你是一名专业的客服质检员。请根据以下官方套餐信息,严格检查客服回复的准确性。
    【官方信息】
    {official_info}
    【客服回复】
    "{customer_service_reply}"
    请一步一步分析:
    1. 套餐名称?
    2. 价格?
    3. 流量?
    4. 与官方信息对比。
    5. 结论:(是/否)
    只输出最终结论。
    """
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.0 # CoT通常用低温保证逻辑稳定
    )
    return response.choices[0].message.content.strip()

# === 2. 自洽性 (Self-Consistency) 实现 ===
def self_consistency_check(reply: str, n_samples: int = 5) -> str:
    """通过多次采样和投票实现自洽性检查"""
    answers = []
    for _ in range(n_samples):
        # 使用稍高的温度以引入多样性
        answer = cot_check_accuracy(reply)
        # 提取最终的"是"或"否"
        match = re.search(r'(是|否)', answer)
        if match:
            answers.append(match.group(1))
        else:
            answers.append("未知")
    
    # 投票
    vote_result = Counter(answers).most_common(1)[0][0]
    print(f"投票详情: {Counter(answers)} -> 最终结果: {vote_result}")
    return vote_result

# === 3. 思维树 (ToT) 核心逻辑演示 (简化版) ===
def tot_evaluate_branch(user_profile: str, branch_idea: str) -> int:
    """评估一个运动推荐分支的得分 (0-10)"""
    prompt = f"""
    用户身体素质: {user_profile}
    运动推荐方向: {branch_idea}
    请从0到10分,评估此方向对用户需求的匹配度。只输出一个数字。
    """
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.3
    )
    try:
        return int(response.choices[0].message.content.strip())
    except:
        return 0

def recommend_sport_tot(user_profile: str) -> str:
    """使用ToT思想为用户推荐运动"""
    # 第一步:生成初始分支
    initial_prompt = f"""
    用户身体素质: {user_profile}
    请生成3个不同的运动大类推荐方向,每个方向一行。
    """
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": initial_prompt}]
    )
    branches = [b.strip() for b in response.choices[0].message.content.split('\n') if b.strip()]
    
    # 第二步:评估并选择最佳分支
    scores = [(branch, tot_evaluate_branch(user_profile, branch)) for branch in branches]
    best_branch = max(scores, key=lambda x: x[1])
    print(f"各分支得分: {scores}")
    
    # 第三步:细化最佳分支
    refine_prompt = f"""
    用户身体素质: {user_profile}
    已选定方向: {best_branch[0]}
    请给出一个具体的运动项目和玩法建议。
    """
    final_response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": refine_prompt}]
    )
    return final_response.choices[0].message.content

# === 使用示例 ===
if __name__ == "__main__":
    # 场景1: 客服质检
    bad_reply = "您可以考虑我们的畅享卡,每月60元,有50个G的流量。"
    print("=== CoT 单次检查 ===")
    single_result = cot_check_accuracy(bad_reply)
    print(f"结果: {single_result}")
    
    print("\n=== Self-Consistency 多次投票 ===")
    final_result = self_consistency_check(bad_reply)
    print(f"最终质检结论: {'准确' if final_result == '是' else '不准确'}")
    
    # 场景2: 运动推荐
    print("\n=== ToT 运动推荐 ===")
    user_profile = "速度快, 耐力一般, 力量强"
    recommendation = recommend_sport_tot(user_profile)
    print(f"推荐: {recommendation}")
相关推荐
流光容易把人抛1 小时前
Claude Code & CCSwitch Mac 安装配置详细教程
人工智能
ai产品老杨1 小时前
突破品牌壁垒:基于 GB28181 与 RTSP 的异构 AI 视频平台架构深度解析(支持 Docker 与源码交付)
人工智能·架构·音视频
科研前沿1 小时前
多视角相机驱动的室内人员空间定位技术白皮书
大数据·人工智能·python·科技·数码相机·音视频
得一录2 小时前
大模型需要量化的原因
人工智能
weixin_417197052 小时前
四大科技巨头狂砸7250亿美元:AI算力军备竞赛白热化
人工智能·科技
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章61-点线距离
图像处理·人工智能·opencv·计算机视觉
人工智能AI技术2 小时前
闭环执行基础:思考→行动→观察→反思完整链路
人工智能
罗西的思考2 小时前
【GUI-Agent】阿里通义MAI-UI 代码阅读(1)— 总体
人工智能·机器学习·ui·transformer