news 2026/5/13 6:27:05

Prompt_Engineering高级技巧实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Prompt_Engineering高级技巧实战

Prompt Engineering高级技巧:思维链与少样本学习实战

从基础到进阶,掌握让LLM输出质变的核心技术


前言

很多人用ChatGPT/Claude,停留在"写个提示词让它回答问题"的层面。但真正的Prompt Engineering是一门系统性的技术——如何让LLM推理更准确?如何控制输出格式?如何减少幻觉?

本文将深入讲解Prompt Engineering的核心技巧,包括Chain-of-Thought、Few-Shot Learning、Self-Consistency、Tree-of-Thought等高级方法,配合LangChain实战代码,帮你从"会用"进阶到"精通"。


一、Prompt Engineering的核心原理

1.1 LLM如何理解提示词

LLM本质上是一个条件概率模型:

P(next_token | context) = softmax(W · h + b)

当你输入一个提示词,LLM会:

  1. Tokenize:将文本切分为token序列
  2. Encode:通过Transformer编码,每个token得到一个向量表示
  3. Attend:注意力机制计算token之间的关系
  4. Decode:逐个生成下一个token,直到遇到终止符
# 查看token化结果importtiktoken enc=tiktoken.encoding_for_model("gpt-4")tokens=enc.encode("Hello, how are you?")print(tokens)# [9906, 11, 1268, 527, 499, 30]print([enc.decode([t])fortintokens])# ['Hello', ',', ' how', ' are', ' you', '?']

1.2 提示词的四个要素

一个高质量的提示词通常包含四个要素:

prompt=""" [角色] 你是一位资深的Python后端工程师,擅长设计高性能API。 [指令] 请为以下需求设计一个RESTful API,包含完整的路由定义和错误处理。 [上下文] 我们正在开发一个电商平台,需要用户管理和商品管理功能。 [格式] 输出为Python FastAPI代码,包含类型注解和docstring。 [约束] - 不使用任何ORM - 错误处理使用标准HTTP状态码 - 每个接口添加请求/响应示例 """

1.3 提示词工程的三个层次

Level 1: 直接提问 "帮我写一个排序算法" Level 2: 结构化提示 "请用Python实现快速排序,要求: 1. 支持自定义比较函数 2. 原地排序,空间复杂度O(log n) 3. 包含完整的类型注解和单元测试" Level 3: 思维链引导 "我需要一个高效的排序算法。让我分析一下需求: - 数据规模:100万条记录 - 数据特征:大部分已排序,少量乱序 - 内存限制:不能使用额外O(n)空间 基于以上分析,快速排序可能不是最优选择,因为: 1. 已排序数据会导致快排退化为O(n²) 2. 需要选择合适的pivot策略 请给出你的分析和实现方案。"

二、Chain-of-Thought(思维链)

2.1 基本概念

Chain-of-Thought(CoT)是一种让LLM展示推理过程的技术。不是直接给答案,而是让模型"一步一步思考"。

Zero-shot CoT:在提示词中加入"Let’s think step by step"

# 普通提示prompt=""" Q: 一个商店有23个苹果,卖掉了一些后剩下8个。又进了6个。现在有多少个苹果? A: """# LLM可能直接输出:15# Zero-shot CoTprompt=""" Q: 一个商店有23个苹果,卖掉了一些后剩下8个。又进了6个。现在有多少个苹果? A: Let's think step by step. """# LLM会输出:# 1. 初始有23个苹果# 2. 卖掉了一些后剩下8个# 3. 又进了6个# 4. 现在有 8 + 6 = 14个苹果

2.2 Few-shot CoT

给模型几个带推理过程的示例,让它学会"展示推理过程":

prompt=""" Q: 一个商店有23个苹果,卖掉了一些后剩下8个。又进了6个。现在有多少个苹果? A: 让我一步步分析: 1. 初始苹果数:23个 2. 卖掉后剩余:8个 3. 又进货:+6个 4. 当前总数:8 + 6 = 14个 所以答案是14个苹果。 Q: 小明有15元,买了3支笔每支2元,又买了1本书5元。还剩多少钱? A: 让我一步步分析: 1. 小明初始有:15元 2. 买笔花费:3 × 2 = 6元 3. 买书花费:5元 4. 总花费:6 + 5 = 11元 5. 剩余:15 - 11 = 4元 所以小明还剩4元。 Q: 一个水池有100升水,每小时流出8升,同时流入3升。6小时后有多少水? A: 让我一步步分析: """# LLM会模仿示例的推理格式

2.3 Auto-CoT(自动思维链)

手动编写示例很麻烦,Auto-CoT让LLM自动生成推理示例:

fromlangchain.promptsimportPromptTemplatefromlangchain.chainsimportLLMChain# 步骤1:让LLM自动生成推理示例auto_cot_prompt=""" 请为以下问题生成一个详细的推理过程示例: 问题:{question} 要求: 1. 分解为3-5个步骤 2. 每一步都有明确的推理 3. 最后给出明确的答案 """# 步骤2:将生成的示例作为few-shot样本defgenerate_cot_examples(llm,questions):examples=[]forqinquestions:chain=LLMChain(llm=llm,prompt=PromptTemplate(template=auto_cot_prompt,input_variables=["question"]))example=chain.run(question=q)examples.append({"question":q,"reasoning":example})returnexamples

2.4 CoT的适用场景

CoT在以下场景效果最好:

场景效果原因
数学推理⭐⭐⭐需要多步计算
逻辑推理⭐⭐⭐需要演绎/归纳
代码调试⭐⭐需要追踪执行流程
文本分类通常不需要推理
创意写作限制了创造性

三、Few-Shot Learning高级技巧

3.1 示例选择策略

随机选择 vs 战略选择

# 错误:随机选择示例importrandom examples=random.sample(all_examples,k=3)# 正确:选择与目标问题相似的示例fromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.metrics.pairwiseimportcosine_similaritydefselect_similar_examples(target,candidates,k=3):"""选择与目标问题最相似的k个示例"""vectorizer=TfidfVectorizer()all_texts=[target]+[c["question"]forcincandidates]tfidf=vectorizer.fit_transform(all_texts)similarities=cosine_similarity(tfidf[0:1],tfidf[1:])[0]top_k_indices=similarities.argsort()[-k:][::-1]return[candidates[i]foriintop_k_indices]

3.2 示例排序的影响

示例的顺序会影响模型的输出质量:

# 策略1:从简单到复杂examples_sorted=sorted(examples,key=lambdax:x["difficulty"])# 策略2:最相似的放最后(recency bias)examples_reordered=examples[1:]+[examples[0]]# 策略3:多样性排序(避免示例过于相似)defdiverse_sort(examples):"""确保相邻示例不太相似"""result=[examples[0]]remaining=examples[1:]whileremaining:last=result[-1]# 选择与上一个最不相似的least_similar=min(remaining,key=lambdax:similarity(last,x))result.append(least_similar)remaining.remove(least_similar)returnresult

3.3 动态示例选择

根据输入动态选择最合适的示例:

fromlangchain.promptsimportFewShotPromptTemplate,PromptTemplatefromlangchain.vectorstoresimportFAISSfromlangchain.embeddingsimportOpenAIEmbeddingsclassDynamicFewShotSelector:def__init__(self,examples):self.examples=examples self.embeddings=OpenAIEmbeddings()self.vectorstore=FAISS.from_texts([e["question"]foreinexamples],self.embeddings,metadatas=examples)defselect(self,query,k=3):"""根据查询动态选择最相关的示例"""results=self.vectorstore.similarity_search
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 6:21:07

观察Taotoken用量看板如何帮助团队透明化管理API成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何帮助团队透明化管理API成本 作为团队的技术负责人,管理大模型API成本是一项持续且细致的工作…

作者头像 李华
网站建设 2026/5/13 6:20:05

电动航空动力系统解析:从电池电机电控到早期工程实践

1. 电动航空的黎明:从概念到突破的十五年“它只能飞15分钟,但这仍然是一个突破。” 这句话在2010年听起来,像是给一个宏伟梦想泼了盆冷水,但对我们这些当时就在关注航空动力变革的人来说,这15分钟不亚于莱特兄弟“飞行…

作者头像 李华
网站建设 2026/5/13 6:20:04

超不对称GEMM优化:PacQ微架构与量化技术解析

1. 超不对称GEMM的计算挑战与量化技术现状在大型语言模型(LLM)部署过程中,计算效率与内存占用始终是工程师面临的核心挑战。以Llama2-70B模型为例,当权重采用FP16格式存储时,仅模型参数就需占用131.6GB内存空间。这种资…

作者头像 李华
网站建设 2026/5/13 6:19:21

自托管知识库Librarium:基于Rails与Meilisearch的PKM系统实践

1. 项目概述:一个为知识工作者打造的私人数字图书馆如果你和我一样,常年被海量的数字资料淹没——浏览器里存着几百个标签页,电脑里散落着各种PDF、笔记和代码片段,手机里收藏的文章永远没时间看——那你一定在寻找一个终极解决方…

作者头像 李华
网站建设 2026/5/13 6:19:21

HNU2026-计算机系统-笔记 4 汇编初步

4 汇编初步 4.1 计算机系统的抽象层级与指令集架构 理解汇编语言,首要前提是建立计算机系统的抽象层次观。汇编语言作为高级语言与机器级二进制代码之间的桥梁,是理解程序底层行为、性能优化及系统安全不可或缺的基石。本讲重点剖析主流的 x86-64 体系结…

作者头像 李华
网站建设 2026/5/13 6:18:30

从0构建高并发Feed流推送平台——开篇:项目选题与整体设计

1. 为什么选这个项目想做高并发MQRedis的真实项目Feed流是社交/内容平台的核心场景拒绝烂大街的管理系统/秒杀项目2. 核心功能列表用户关注/取关作者发文章 MQ推送MQ推送粉丝 文章推送到粉丝收件箱粉丝拉取Feed流分布式ID接口限流3. 技术栈选型Spring Boot 2.7MySQL 8.0 MyBa…

作者头像 李华