AI 提示词工程指南

AI 提示词工程指南

一、提示词(Prompt)技巧

1. 使用最新的模型

始终使用最新发布的模型版本,新模型通常具有更好的理解能力和更准确的输出。

模型 推荐版本
OpenAI GPT-4o / GPT-4-turbo
Claude Claude 3.5 Sonnet
国产 文心一言 4.0 / 通义千问

2. 把指令放到提示的开头,用分隔符分隔上下文

使用 ###""" 来分隔指令和上下文,让模型更清晰地理解结构。

❌ 不推荐:

这是一篇关于人工智能的文章,人工智能正在改变世界...
请帮我总结这篇文章的要点。

✅ 推荐:

请总结以下文章的要点,用 3 个要点概括。

###
这是一篇关于人工智能的文章,人工智能正在改变世界...
###

或使用 """

请将以下内容翻译成英文:

"""
今天天气很好,适合出去散步。
"""

3. 对输出给出具体的描述和详细的需求

明确指定:长度、格式、风格、语言

❌ 模糊:

写一篇关于 Go 语言的介绍

✅ 具体:

请写一篇关于 Go 语言的介绍文章。

要求:
- 长度:500-800 字
- 格式:Markdown,包含标题和代码示例
- 风格:技术博客风格,通俗易懂
- 受众:有一定编程基础的初学者
- 结构:简介 → 特点 → 代码示例 → 总结

4. 通过例子阐明想要的输出格式

提供示例让模型理解你期望的格式(Few-shot Learning)。

示例:

请将产品信息提取为 JSON 格式。

示例输入:苹果 iPhone 15 Pro,售价 8999 元,256GB 存储
示例输出:
{
  "name": "iPhone 15 Pro",
  "brand": "苹果",
  "price": 8999,
  "storage": "256GB"
}

现在请处理:华为 Mate 60 Pro,售价 6999 元,512GB 存储

5. 先零样本,后小样本

策略:

  1. 首先尝试 零样本提示(Zero-shot):直接提问,不给例子
  2. 如果效果不好,再使用 小样本提示(Few-shot):提供 2-3 个例子
【零样本 Zero-shot】
请判断以下评论的情感倾向(正面/负面):
"这个产品太棒了,强烈推荐!"

【小样本 Few-shot】
请判断以下评论的情感倾向。

评论:这个产品质量很差 → 负面
评论:物流很快,满意 → 正面
评论:包装破损,但产品还行 → 中性

评论:这个产品太棒了,强烈推荐!→

6. 减少空洞和不严谨的描述

❌ 空洞:

写一段比较好的代码

✅ 严谨:

用 Go 语言编写一个 HTTP 服务器:
- 监听 8080 端口
- 提供 /api/users 接口,返回 JSON 格式的用户列表
- 包含错误处理
- 添加必要的注释

7. 告知应该做什么,而非不应该做什么

❌ 负面指令:

不要写太长
不要使用复杂的词汇
不要偏离主题

✅ 正面指令:

- 控制在 200 字以内
- 使用简单易懂的词汇
- 紧扣"分库分表"这一主题

8. 思维链(Chain of Thought)

使用 "让我们分步骤思考" 引导模型进行逻辑推理。

示例:

问题:一个商店有 23 个苹果,卖掉了 15 个,又进货了 12 个,现在有多少个苹果?

让我们分步骤思考:

模型输出:

让我们分步骤思考:
1. 初始苹果数量:23 个
2. 卖掉后剩余:23 - 15 = 8 个
3. 进货后总数:8 + 12 = 20 个

答案:现在有 20 个苹果。

提示词模板汇总

# 角色设定
你是一位 [专业角色],擅长 [专业领域]。

# 任务描述
请完成以下任务:[具体任务]

# 输入内容
###
[上下文内容]
###

# 输出要求
- 格式:[Markdown/JSON/纯文本]
- 长度:[字数限制]
- 风格:[正式/口语化/技术文档]
- 语言:[中文/英文]

# 示例(可选)
输入:xxx
输出:xxx

# 特别说明
- [注意事项1]
- [注意事项2]

二、LangChain

什么是 LangChain

LangChain 是一个用于开发 大语言模型(LLM)应用 的框架,简化了与 LLM 交互的复杂性。

核心概念

概念 说明
Prompt Templates 提示词模板,动态生成提示词
Chains 链式调用,组合多个步骤
Agents 智能体,让 LLM 自主决策使用工具
Memory 记忆,保存对话历史
Retrieval 检索,结合向量数据库实现 RAG

基本示例(Python)

from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain

# 1. 创建模型
llm = ChatOpenAI(model="gpt-4", temperature=0.7)

# 2. 创建提示词模板
prompt = ChatPromptTemplate.from_template(
    "你是一位{role}专家,请回答以下问题:{question}"
)

# 3. 创建链
chain = LLMChain(llm=llm, prompt=prompt)

# 4. 运行
result = chain.run(role="Go语言", question="什么是 goroutine?")
print(result)

链式调用示例

from langchain.chains import SimpleSequentialChain

# 链1:生成标题
chain1 = LLMChain(llm=llm, prompt=prompt_title)

# 链2:根据标题生成内容
chain2 = LLMChain(llm=llm, prompt=prompt_content)

# 组合成顺序链
overall_chain = SimpleSequentialChain(
    chains=[chain1, chain2],
    verbose=True
)

result = overall_chain.run("人工智能")

LangChain 应用场景

场景 实现方式
智能问答 LLM + Retrieval (RAG)
文档总结 LLM + Document Loader
代码生成 LLM + Code Agent
数据分析 LLM + SQL Agent
多轮对话 LLM + Memory

三、智能体(Agent)

什么是智能体

智能体 = 大模型 + 工具使用能力

让 LLM 能够:

  1. 理解 用户意图
  2. 决策 使用哪些工具
  3. 执行 工具调用
  4. 整合 结果返回用户

智能体架构

┌─────────────────────────────────────────────────────────┐
│                      用户输入                            │
└─────────────────────────┬───────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────┐
│                     智能体 Agent                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │                   大语言模型                      │   │
│  │          (理解意图 + 规划步骤 + 决策)             │   │
│  └─────────────────────────────────────────────────┘   │
│                          │                              │
│              ┌───────────┼───────────┐                  │
│              ▼           ▼           ▼                  │
│         ┌────────┐  ┌────────┐  ┌────────┐             │
│         │ 工具1  │  │ 工具2  │  │ 工具3  │             │
│         │ 搜索   │  │ 计算器 │  │ 数据库 │             │
│         └────────┘  └────────┘  └────────┘             │
└─────────────────────────┬───────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────┐
│                      最终结果                            │
└─────────────────────────────────────────────────────────┘

常用工具类型

工具类型 功能 示例
搜索工具 联网搜索信息 Google Search, Bing
计算工具 数学计算 Calculator, Wolfram
代码工具 执行代码 Python REPL
数据库工具 查询数据库 SQL Database
API 工具 调用外部 API Weather API, Stock API
文件工具 读写文件 File Reader/Writer

LangChain Agent 示例

from langchain.agents import initialize_agent, Tool, AgentType
from langchain.chat_models import ChatOpenAI
from langchain.tools import DuckDuckGoSearchRun

# 创建模型
llm = ChatOpenAI(model="gpt-4", temperature=0)

# 定义工具
search = DuckDuckGoSearchRun()

tools = [
    Tool(
        name="Search",
        func=search.run,
        description="用于搜索网络上的实时信息"
    ),
    Tool(
        name="Calculator",
        func=lambda x: eval(x),
        description="用于数学计算,输入数学表达式"
    )
]

# 创建智能体
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 运行
result = agent.run("今天上海的天气怎么样?气温换算成华氏度是多少?")

Agent 执行流程

用户:今天北京天气怎么样?

Agent 思考过程:
┌────────────────────────────────────────────────────────┐
│ Thought: 我需要查询北京今天的天气,应该使用搜索工具      │
│ Action: Search                                         │
│ Action Input: 北京今天天气                              │
│ Observation: 北京今天晴,气温 15-25℃,空气质量良好      │
│ Thought: 我已经获得了天气信息,可以回答用户了            │
│ Final Answer: 北京今天天气晴朗,气温 15-25℃...         │
└────────────────────────────────────────────────────────┘

ReAct 模式

ReAct = Reasoning + Acting

循环执行:
1. Thought(思考):分析当前状态,决定下一步
2. Action(行动):选择并使用工具
3. Observation(观察):获取工具返回结果
4. ... 重复直到得出最终答案
5. Final Answer(最终答案):返回给用户

自定义工具示例

from langchain.tools import tool

@tool
def get_user_info(user_id: str) -> str:
    """根据用户ID查询用户信息。输入用户ID,返回用户详细信息。"""
    # 模拟数据库查询
    users = {
        "001": {"name": "张三", "age": 25, "city": "北京"},
        "002": {"name": "李四", "age": 30, "city": "上海"},
    }
    user = users.get(user_id)
    if user:
        return f"用户信息:姓名={user['name']}, 年龄={user['age']}, 城市={user['city']}"
    return "未找到该用户"

# 将自定义工具加入 Agent
tools = [get_user_info, search, calculator]

四、RAG vs 微调:如何选择

什么是 RAG 和微调

方案 说明 原理
RAG 检索增强生成 从外部知识库检索相关内容,注入 Prompt
微调 Fine-tuning 用特定数据重新训练模型参数
┌─────────────────────────────────────────────────────────┐
│                        RAG                               │
│                                                          │
│  用户问题 → 向量检索 → 获取相关文档 → 注入Prompt → LLM   │
│                 ↓                                        │
│            向量数据库                                     │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│                       微调                               │
│                                                          │
│  训练数据 → 模型训练 → 新模型 → 用户问题 → 直接回答      │
│                                                          │
└─────────────────────────────────────────────────────────┘

选择对比表

维度 RAG 微调 说明
动态数据 ✅ 推荐 数据频繁更新时,RAG 只需更新知识库
模型能力定制 ✅ 推荐 需要改变模型行为/风格时用微调
减少幻觉 ✅ 更好 ⚠️ 一般 RAG 有真实数据支撑,幻觉更少
可解释性 ✅ 推荐 RAG 可追溯答案来源
成本 ✅ 更低 ❌ 更高 微调需要 GPU 训练,成本高
依赖通用能力 ✅ 推荐 保持模型原有能力用 RAG
延迟 ❌ 较高 ✅ 更低 微调无需检索,响应更快
智能设备/边缘 ✅ 推荐 离线场景用微调后的小模型

详细分析

1️⃣ 动态数据 → RAG

场景:公司产品文档、新闻资讯、实时数据

RAG:更新向量数据库即可,无需重新训练
微调:每次数据变化都要重新训练,成本高

2️⃣ 模型能力定制 → 微调

场景:让模型学会特定风格、专业术语、特殊格式

微调:改变模型内在能力
RAG:只能提供参考,不能改变模型行为

3️⃣ 减少幻觉 → RAG > 微调

RAG:答案基于检索到的真实文档,可验证
微调:模型仍可能编造不存在的内容

4️⃣ 可解释性 → RAG

RAG:可以返回引用来源,用户知道答案从哪来
微调:黑盒,无法解释答案来源

5️⃣ 成本 → RAG

RAG:
  - 向量数据库托管费用
  - API 调用费用(Token 略多)
  
微调:
  - GPU 训练费用(昂贵)
  - 模型托管费用
  - 数据标注费用

6️⃣ 依赖通用能力 → RAG

RAG:使用原始模型,保留全部通用能力
微调:可能导致"灾难性遗忘",丢失部分能力

7️⃣ 延迟 → 微调

RAG:问题 → 向量检索 → LLM 生成(多一步检索)
微调:问题 → LLM 直接生成(更快)

8️⃣ 智能设备/边缘部署 → 微调

场景:手机、IoT 设备、离线环境

微调:可训练小模型,本地部署
RAG:需要联网访问向量数据库

决策流程图

                    开始
                      │
                      ▼
            ┌─────────────────┐
            │ 数据是否频繁更新?│
            └────────┬────────┘
                     │
           ┌────Yes──┴──No────┐
           ▼                   ▼
         RAG           ┌─────────────────┐
                       │ 需要改变模型行为?│
                       └────────┬────────┘
                                │
                      ┌───Yes───┴───No───┐
                      ▼                   ▼
                    微调          ┌─────────────────┐
                                  │ 需要可解释性?   │
                                  └────────┬────────┘
                                           │
                                 ┌───Yes───┴───No───┐
                                 ▼                   ▼
                               RAG           ┌─────────────────┐
                                             │ 是边缘/离线设备?│
                                             └────────┬────────┘
                                                      │
                                            ┌───Yes───┴───No───┐
                                            ▼                   ▼
                                          微调                 RAG

混合方案(推荐)

RAG + 微调 结合使用:

1. 先用 RAG 快速上线
2. 收集用户反馈数据
3. 用反馈数据微调模型
4. 微调后的模型 + RAG 一起使用
阶段 方案 目的
MVP 阶段 RAG 快速验证,低成本
优化阶段 RAG + 微调 提升效果和速度
生产阶段 微调模型 + RAG 最佳效果

五、总结

提示词工程核心原则

原则 要点
清晰 使用分隔符,结构化指令
具体 明确格式、长度、风格
示例 提供输入输出样例
正向 说明要做什么,而非不做什么
分步 使用思维链引导推理

技术栈选择

需求 推荐方案
简单问答 直接调用 LLM API
复杂流程 LangChain Chains
需要外部数据 LangChain + RAG
自主决策 LangChain Agent
生产部署 LangServe / FastAPI

参考资源

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容