AI大模型-Prompt工程参考学习

AI大模型-Prompt工程参考学习

文章目录


前言

在大模型应用开发中,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 核心三要素

  1. System消息:定义AI的角色和行为规范
  2. User消息:具体的任务或问题
  3. 参数调优: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模板库,在实战中不断优化。


相关推荐
狮子雨恋2 小时前
Python 多维数组学习示例
python·学习·numpy
LiFileHub2 小时前
Foreword(前言)
人工智能
许泽宇的技术分享2 小时前
当AI遇见UI:用.NET Blazor实现Google A2UI协议的完整之旅
人工智能·ui·.net·blazor·a2ui
源代码杀手2 小时前
Fun-Audio-Chat-8B 大型音频语言模型(Large Audio Language Model)
人工智能·语言模型·音视频
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 36--二次封装MySQL数据库连接操作
python·学习·测试工具·pytest
典孝赢麻崩乐急2 小时前
Redis复习----------Redis超高性能的原因
数据库·redis·学习·缓存
Pyeako2 小时前
深度学习--CUDA安装配置、pytorch库、torchvision库、torchaudio库安装
人工智能·pytorch·python·深度学习·gpu·cuda
无人装备硬件开发爱好者2 小时前
AI 辅助程序设计的趋势与范式转移:编码、审核、测试全流程深度解析
大数据·人工智能·架构·核心竞争力重构
iconball2 小时前
个人用云计算学习笔记 --30 华为云存储云服务
运维·笔记·学习·华为云·云计算