AI大模型-Prompt工程参考学习
文章目录
- AI大模型-Prompt工程参考学习
-
- 前言
- 一、Prompt工程基础
-
- [1.1 什么是Prompt工程?](#1.1 什么是Prompt工程?)
- [1.2 核心三要素](#1.2 核心三要素)
- 二、Prompt设计原则
-
- [2.1 清晰具体](#2.1 清晰具体)
- [2.2 结构化输出](#2.2 结构化输出)
- [2.3 提供上下文](#2.3 提供上下文)
- 三、主流大模型API实战
-
- [3.1 OpenAI GPT](#3.1 OpenAI GPT)
- [3.2 国产大模型](#3.2 国产大模型)
- 四、高级Prompt技术
-
- [4.1 Chain of Thought(思维链)](#4.1 Chain of Thought(思维链))
- [4.2 Few-Shot Learning(少样本学习)](#4.2 Few-Shot Learning(少样本学习))
- [4.3 ReAct(推理+行动)](#4.3 ReAct(推理+行动))
- 五、RAG应用中的Prompt
-
- [5.1 RAG基础架构](#5.1 RAG基础架构)
- [5.2 RAG Prompt模板](#5.2 RAG Prompt模板)
- 六、Agent开发
-
- [6.1 简单Agent实现](#6.1 简单Agent实现)
- 七、生产环境最佳实践
-
- [7.1 Prompt版本管理](#7.1 Prompt版本管理)
- [7.2 性能优化](#7.2 性能优化)
- [7.3 安全防护](#7.3 安全防护)
- 八、主流框架
-
- [8.1 LangChain](#8.1 LangChain)
- [8.2 LlamaIndex](#8.2 LlamaIndex)
前言
在大模型应用开发中,Prompt工程是决定应用质量的核心技能。一个优秀的Prompt可以让模型输出准确率提升40%,Token消耗降低50%。
本文将讲解大模型应用开发中的Prompt设计、优化和最佳实践。

一、Prompt工程基础
1.1 什么是Prompt工程?
Prompt工程就是设计有效的输入指令,让大模型产生高质量输出的技术。
python
# 类比:Prompt就是API的参数
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是Python专家"}, # 角色定义
{"role": "user", "content": "优化这段代码:{code}"} # 具体任务
],
temperature=0.7 # 控制随机性
)
1.2 核心三要素
- System消息:定义AI的角色和行为规范
- User消息:具体的任务或问题
- 参数调优:temperature、max_tokens等
二、Prompt设计原则
2.1 清晰具体
python
# ❌ 模糊的Prompt
"帮我写个函数"
# ✅ 清晰的Prompt
"""
用Python实现快速排序函数:
- 函数签名:def quick_sort(arr: List[int]) -> List[int]
- 包含类型注解和docstring
- 时间复杂度O(nlogn)
- 提供测试用例
"""
2.2 结构化输出
python
prompt = """
分析以下代码的性能问题,返回JSON格式:
{
"issues": [
{"line": 行号, "type": "问题类型", "suggestion": "建议"}
],
"score": 0-100
}
代码:
{code}
"""
2.3 提供上下文
python
prompt = f"""
项目背景:电商系统,日活10万
技术栈:Python + FastAPI + MySQL
数据量:订单表500万行
需求:优化以下慢查询(当前3秒)
{sql_query}
请提供:
1. 索引优化方案
2. 查询重写建议
3. 预期性能提升
"""
三、主流大模型API实战
3.1 OpenAI GPT
python
import openai
def chat_with_gpt(prompt, model="gpt-4"):
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "system", "content": "你是AI助手"},
{"role": "user", "content": prompt}
],
temperature=0.7,
max_tokens=1000
)
return response.choices[0].message.content
# Function Calling示例
functions = [{
"name": "get_weather",
"description": "获取城市天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名"}
},
"required": ["city"]
}
}]
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "北京天气怎么样?"}],
functions=functions,
function_call="auto"
)
3.2 国产大模型
python
# 文心一言
import qianfan
chat = qianfan.ChatCompletion()
resp = chat.do(
model="ERNIE-Bot-4",
messages=[{"role": "user", "content": "解释Transformer"}]
)
# 通义千问
from dashscope import Generation
response = Generation.call(
model='qwen-max',
prompt='写一个Python装饰器'
)
四、高级Prompt技术
4.1 Chain of Thought(思维链)
python
prompt = """
问题:一个班40人,60%是女生,新增10名男生后女生占比?
请按步骤思考:
1. 计算原有女生和男生人数
2. 计算新增后总人数
3. 计算新的女生占比
4. 给出答案
让我们一步步分析:
"""
4.2 Few-Shot Learning(少样本学习)
python
prompt = """
任务:自然语言转SQL
示例1:
输入:查询年龄大于25的用户
输出:SELECT * FROM users WHERE age > 25;
示例2:
输入:统计每个部门平均工资
输出:SELECT dept, AVG(salary) FROM employees GROUP BY dept;
现在处理:
输入:查询北京地区最近一周注册的用户数
输出:
"""
4.3 ReAct(推理+行动)
python
prompt = """
你可以使用以下工具:
- search(query): 搜索信息
- calculator(expr): 计算表达式
问题:北京和上海的温差是多少?
Thought: 需要分别获取两地温度
Action: search("北京今天温度")
Observation: 15°C
Thought: 获取上海温度
Action: search("上海今天温度")
Observation: 20°C
Thought: 计算温差
Action: calculator("20 - 15")
Observation: 5
Answer: 温差是5度
"""
五、RAG应用中的Prompt
5.1 RAG基础架构
用户问题 → 向量检索 → 相关文档 → Prompt → 大模型 → 答案
5.2 RAG Prompt模板
python
RAG_PROMPT = """
你是专业问答助手,基于参考资料回答问题。
【规则】
1. 只使用参考资料中的信息
2. 无法回答时明确说明
3. 引用时注明来源
【参考资料】
{context}
【问题】
{question}
【回答】
"""
def rag_query(question, vector_db):
# 检索相关文档
docs = vector_db.similarity_search(question, k=3)
# 构建上下文
context = "\n\n".join([f"[文档{i+1}]\n{doc.page_content}"
for i, doc in enumerate(docs)])
# 调用大模型
prompt = RAG_PROMPT.format(context=context, question=question)
return openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
六、Agent开发
6.1 简单Agent实现
python
class SimpleAgent:
def __init__(self, tools):
self.tools = tools
self.memory = []
def run(self, task):
for _ in range(10): # 最多10步
# 规划下一步
action = self._plan(task)
if action["type"] == "answer":
return action["content"]
# 执行工具
result = self._execute_tool(action)
self.memory.append({"action": action, "result": result})
def _plan(self, task):
prompt = f"""
任务:{task}
可用工具:{self.tools}
历史:{self.memory}
决定下一步(JSON格式):
{{"type": "tool/answer", "tool": "工具名", "args": {{}}}}
"""
response = call_llm(prompt)
return json.loads(response)
七、生产环境最佳实践
7.1 Prompt版本管理
python
class PromptManager:
def __init__(self):
self.versions = {}
def register(self, name, version, template):
self.versions[f"{name}:v{version}"] = template
def get(self, name, version="latest"):
return self.versions.get(f"{name}:v{version}")
# 使用
pm = PromptManager()
pm.register("code_review", 1, PROMPT_V1)
pm.register("code_review", 2, PROMPT_V2)
7.2 性能优化
python
# 1. Token优化
def compress_prompt(prompt, max_tokens=2000):
# 移除冗余空白
prompt = re.sub(r'\s+', ' ', prompt)
# 截断到指定长度
return prompt[:max_tokens]
# 2. 缓存策略
class PromptCache:
def __init__(self, redis_client):
self.redis = redis_client
def get_or_call(self, prompt):
key = hashlib.md5(prompt.encode()).hexdigest()
cached = self.redis.get(key)
if cached:
return json.loads(cached)
result = call_llm(prompt)
self.redis.setex(key, 3600, json.dumps(result))
return result
# 3. 模型选择
def select_model(task_complexity):
if task_complexity == "simple":
return "gpt-3.5-turbo" # 快速便宜
else:
return "gpt-4" # 复杂任务
7.3 安全防护
python
class PromptGuard:
def sanitize(self, user_input):
# 检测Prompt注入
dangerous_patterns = [
"ignore previous instructions",
"disregard all",
"system:"
]
for pattern in dangerous_patterns:
if pattern in user_input.lower():
raise SecurityError("检测到Prompt注入")
return user_input[:5000] # 长度限制
八、主流框架
8.1 LangChain
python
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
# 定义Prompt模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是{role}"),
("human", "{input}")
])
# 创建Chain
llm = ChatOpenAI(model="gpt-4")
chain = LLMChain(llm=llm, prompt=prompt)
# 执行
result = chain.run(role="Python专家", input="如何优化代码?")
8.2 LlamaIndex
python
from llama_index import VectorStoreIndex, SimpleDirectoryReader
# 加载文档
documents = SimpleDirectoryReader('data').load_data()
# 创建索引
index = VectorStoreIndex.from_documents(documents)
# 查询
query_engine = index.as_query_engine()
response = query_engine.query("什么是Transformer?")
💡 最后建议:Prompt工程是实践性很强的技能,多动手尝试,建立自己的Prompt模板库,在实战中不断优化。