Skip to content

提示词优化

提示词(Prompt)是与大语言模型交互的关键,优化提示词可以显著提升输出质量、减少 token 消耗、获得更精准的结果。

基础原则

1. 清晰明确

模糊的提示:

帮我写点东西

清晰的提示:

请写一篇关于人工智能在医疗领域应用的文章,  
字数 800 字左右,面向普通读者,  
语言通俗易懂,包含 3 个具体应用案例。

2. 提供上下文

# 背景信息  
我是一名 Python 后端开发者,正在开发一个电商系统。  
  
# 当前问题  
用户下单后支付失败,但库存已经被扣减了。  
  
# 期望结果  
请提供解决方案,确保库存扣减和支付是原子操作。

3. 指定输出格式

请分析以下文本的情感倾向,返回 JSON 格式:  
{  
    "sentiment": "positive/negative/neutral",  
    "confidence": 0.0-1.0,  
    "keywords": ["关键词列表"]  
}

提示词结构

标准模板

## 角色  
你是一位 [角色描述]。  
  
## 任务  
[具体任务说明]  
  
## 输入  
[用户提供的内容]  
  
## 输出要求  
- [格式要求]  
- [长度要求]  
- [风格要求]  
  
## 示例(可选)  
输入:[示例输入]  
输出:[示例输出]  
  
## 注意事项  
- [约束条件]  
- [禁止事项]

实际示例

system_prompt = """  
## 角色  
你是一位资深的技术文档工程师,擅长将复杂技术概念解释清楚。  
  
## 任务  
根据用户提供的代码,生成清晰的 API 文档。  
  
## 输出要求  
- 使用 Markdown 格式  
- 包含:函数说明、参数列表、返回值、使用示例  
- 语言简洁专业  
  
## 注意事项  
- 不要遗漏任何参数  
- 示例代码必须可运行  
"""

高级技巧

1. Few-Shot Learning(少样本学习)

提供几个示例让模型学习模式:

请将产品描述转换为营销文案。  
  
示例 1:  
产品:蓝牙耳机,续航 30 小时,主动降噪  
文案:告别嘈杂,沉浸音乐世界。30 小时超长续航,让美妙音符时刻相伴。  
  
示例 2:  
产品:保温杯,500ml,12 小时保温  
文案:一杯温暖,从晨曦到星夜。500ml 大容量,12 小时锁住温度。  
  
现在请转换:  
产品:机械键盘,青轴,RGB 背光,全键无冲

2. Chain-of-Thought(思维链)

让模型展示推理过程:

请解决这个问题,展示你的思考步骤:  
  
问题:小明有 15 个苹果,他给了小红 1/3,又吃掉了剩余的 1/5,  
请问他还剩多少个苹果?  
  
请按以下格式回答:  
1. 分析问题  
2. 分步计算  
3. 得出答案

3. Role Prompting(角色提示)

赋予模型特定角色:

你是一位拥有 20 年经验的首席技术官,  
你正在评估一个技术方案的可行性。  
请从技术可行性、成本效益、风险控制三个角度进行分析。

4. 分解复杂任务

将大任务拆分为小步骤:

def complex_analysis(document):  
    # 步骤 1:提取关键信息  
    key_info = call_llm(f"从以下文档中提取关键信息:\n{document}")  
      
    # 步骤 2:分析主题  
    themes = call_llm(f"基于以下信息,分析主要主题:\n{key_info}")  
      
    # 步骤 3:生成摘要  
    summary = call_llm(f"基于以下主题,生成 200 字摘要:\n{themes}")  
      
    return summary

5. 自我验证

让模型检查自己的输出:

请完成以下任务,然后验证你的答案:  
  
任务:[任务描述]  
  
完成后,请:  
1. 检查是否满足所有要求  
2. 如果发现错误,修正后重新输出  
3. 确认最终答案

针对不同场景的优化

代码生成

使用 Python 3.10+ 编写一个函数,要求:  
  
功能:计算两个日期之间的工作日数量  
输入:start_date (date), end_date (date)  
输出:int (工作日天数)  
  
要求:  
- 排除周末(周六、周日)  
- 使用类型注解  
- 添加 docstring  
- 处理边界情况(开始日期晚于结束日期)

内容创作

撰写一篇产品介绍文章:  
  
产品信息:  
- 名称:智能手表 Pro  
- 核心功能:健康监测、运动记录、消息通知  
- 目标用户:25-40 岁的都市白领  
  
写作要求:  
- 标题吸引人  
- 开头引人入胜  
- 使用具体数据和场景  
- 结尾有行动号召  
- 字数 500-800 字

数据提取

从以下文本中提取结构化信息:  
  
文本:  
"张三,男,1990 年 3 月 15 日出生,现居北京市朝阳区,  
联系电话 138-1234-5678,邮箱 zhangsan@example.com"  
  
返回 JSON 格式:  
{  
    "name": "",  
    "gender": "",  
    "birthday": "YYYY-MM-DD",  
    "address": "",  
    "phone": "",  
    "email": ""  
}

避免常见问题

1. 避免歧义

# 不好  
告诉我关于苹果的信息  
  
# 好  
告诉我关于苹果公司(Apple Inc.)的信息  
# 或  
告诉我关于苹果这种水果的营养信息

2. 避免过于开放

# 不好  
写一个故事  
  
# 好  
写一个 500 字的科幻短篇故事,  
主角是一个机器人,  
主题是关于人类与 AI 的共存。

3. 避免否定指令

# 不好  
不要写太长  
  
# 好  
请控制在 300 字以内

提示词模板库

翻译

你是专业翻译,将 {source_lang} 翻译成 {target_lang}。  
保持原文风格和语气。只输出翻译结果。  
  
原文:{text}

摘要

请为以下内容生成摘要:  
- 长度:{length} 字  
- 风格:{style}  
- 重点:{focus}  
  
内容:{content}

代码解释

请解释以下代码的功能:  
- 目标读者:{audience}  
- 解释深度:{depth}  
  
代码:  
```{language}  
{code}
## 评估与迭代  
  
### A/B 测试  
  
```python  
def test_prompts(prompts, test_cases):  
    results = []  
    for prompt in prompts:  
        scores = []  
        for test in test_cases:  
            output = call_llm(prompt.format(**test["input"]))  
            score = evaluate(output, test["expected"])  
            scores.append(score)  
        results.append({  
            "prompt": prompt,  
            "avg_score": sum(scores) / len(scores)  
        })  
    return sorted(results, key=lambda x: x["avg_score"], reverse=True)

持续优化

  1. 收集失败案例
  2. 分析失败原因
  3. 调整提示词
  4. 重新测试
  5. 循环迭代

最佳实践总结

  1. 明确目标: 清楚地说明你想要什么
  2. 提供上下文: 给模型足够的背景信息
  3. 使用示例: Few-shot 可以大幅提升效果
  4. 指定格式: 明确输出格式避免后处理
  5. 分解任务: 复杂任务分步完成
  6. 迭代优化: 根据结果持续改进

本页内容来自文档知识库整理,已按 ArmNet 字元服务 服务命名统一更新。