大语言模型 Prompt 工程:从理论到实践
什么是 Prompt 工程
Prompt Engineering(提示词工程)是自然语言处理(NLP)和机器学习中的一个重要领域,关注如何设计有效的提示词来引导大语言模型生成高质量的文本。良好的提示词可以帮助模型准确理解任务需求,显著提高生成文本的相关性、准确性和可用性。
在聊天机器人、文本生成、问答系统以及自动化工作流中,提示词工程对于提升用户体验和系统性能至关重要。它不仅仅是简单的提问,而是通过结构化、约束和引导,让模型发挥最大潜力。
为什么要写好 Prompt
大语言模型虽然具备强大的泛化能力,但其输出质量高度依赖于输入的质量。遵循"Garbage In, Garbage Out"原则,模糊或错误的指令会导致模型产生幻觉、逻辑混乱或偏离目标。优化 Prompt 可以:
- 减少幻觉:通过明确约束和知识库引用,降低模型编造事实的概率。
- 提高一致性:确保多次调用返回格式统一,便于程序解析。
- 增强可控性:精确控制输出风格、长度和语气。
- 降低成本:更精准的 Prompt 往往能用更少的 Token 获得更好的结果,节省 API 费用。
基本写作方法
掌握通用的 Prompt 框架能显著提升编写效率。以下是几种主流框架:
ICIO 框架
- I (Instruction): 明确指令,告诉模型要做什么。
- C (Context): 提供背景信息,帮助模型理解场景。
- I (Input Data): 输入具体数据或待处理内容。
- O (Output Indicator): 指定输出格式或示例。
APE 框架
- A (Ask): 提出具体问题。
- P (Provide): 提供必要的上下文或资源。
- E (Example): 给出期望的输出示例(Few-Shot)。
BROKE 框架
- B (Background): 设定角色和背景。
- R (Request): 清晰表达请求。
- O (Objective): 定义目标。
- K (Key Constraints): 关键限制条件。
- E (Evaluation): 评估标准。
ROSES 与 SCOPE 框架
这些框架进一步细化了角色设定、任务拆解和输出规范。例如,ROSES 强调 Role(角色)、Objective(目标)、Style(风格)、Example(示例)、Step(步骤),适合复杂任务规划。
高级写作技巧
善用分隔符
使用 ###, ---, """ 等符号将不同部分的内容隔开,有助于模型区分指令、数据和参考内容,避免混淆。
结构化输出
要求模型以 JSON、Markdown 表格或特定 XML 标签格式输出,便于后续代码解析和处理。
迭代优化
Prompt 设计通常不是一次性的。通过测试 - 反馈 - 修改的循环,逐步逼近最佳效果。
自带知识库解决幻觉
在 Prompt 中提供相关文档片段或事实依据,并指示模型仅基于这些信息回答,可大幅减少虚构内容。
CoT(思维链)
引导模型"一步步分析"(Let's think step by step),在处理数学推理或逻辑问题时,能显著提升准确率。
自洽性
让模型对同一问题生成多个答案并进行投票或一致性检查,选择最合理的结果。
项目实战:机票助手
本部分演示如何基于大模型 API 实现一个机票查询助手。以下是一个基于 Python 的简单实现示例,展示了如何构建 Prompt 并处理响应。
import requests
import json
# 假设的 API 端点(实际使用时请替换为智谱清言或其他厂商的真实接口)
API_URL = "https://open.bigmodel.cn/api/paas/v4/chat/completions"
API_KEY = "YOUR_API_KEY"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
def get_flight_info(departure, destination, date):
prompt = f"""
你是一个专业的机票助手。请根据用户提供的信息查询航班。
出发地:{departure}
目的地:{destination}
日期:{date}
请严格按照以下 JSON 格式返回结果,不要包含其他解释:
{{
"flights": [
{{
"flight_number": "CA123",
"departure_time": "08:00",
"arrival_time": "10:30",
"price": 1200,
"airline": "Air China"
}}
]
}}
"""
payload = {
"model": "glm-4",
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.1
}
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
content = data['choices'][0]['message']['content']
# 清理可能存在的 Markdown 标记
content = content.replace("```json", "").replace("```", "")
return json.loads(content)
else:
return {"error": "API request failed"}
if __name__ == "__main__":
result = get_flight_info("北京", "上海", "2025-03-01")
print(json.dumps(result, ensure_ascii=False, indent=2))
总结
Prompt 工程是驾驭大语言模型的核心技能。通过理解基础框架、运用高级技巧并结合实际项目演练,开发者可以更高效地利用 AI 能力解决实际问题。随着模型能力的演进,Prompt 的设计模式也在不断迭代,保持学习和实践是关键。
在实际开发中,建议结合 RAG(检索增强生成)技术,将企业私有知识库融入 Prompt 流程,以进一步提升业务场景下的准确性和安全性。

