1. 提示工程:AI时代的沟通艺术
上周和一位AI产品经理的对话让我印象深刻。他抱怨说:"我写的prompt要么输出不对,要么模型答非所问——比如让它'生成旅游计划',它直接列了景点,完全不管天气;让它'画一只猫',出来的却是'外星猫'..."
这样的困扰在AI使用者中非常普遍。提示工程不是"猜谜语",也不是"堆砌关键词"——它是"与AI的沟通艺术",核心在于「用模型能理解的方式,传递你真正的需求」。
更关键的是:提示工程已经成为AI新兴技术的"枢纽"——大模型Agent需要它规划任务,AIGC需要它生成高质量内容,多模态AI需要它连接文本与图像,甚至代码生成也需要它精准控制输出。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 提示工程基础:四大核心原则
2.1 清晰具体原则
避免模糊词汇,明确"需求边界"。比如:
- 反例:"写个短文"
- 正例:"写一篇500字的温馨故事,主角是一只橘猫,讲它和主人的第一次相遇"
2.2 结构化原则
用列表、分点、格式要求,降低模型"理解成本"。比如:
- 反例:"帮我做旅游计划"
- 正例:"1. 查北京未来3天天气;2. 根据天气安排每天活动;3. 输出格式:day1-活动+时间+注意事项"
2.3 对齐能力原则
不要让模型做它不擅长的事。比如:
- 反例:"用ChatGPT画一只猫"
- 正例:"用DALL·E生成'橘猫在沙发上打盹'的图片,风格是水彩画"
2.4 反馈迭代原则
根据输出调整prompt。比如:
- 初始prompt:"写个旅游计划"→输出太长
- 优化prompt:"写个3天旅游计划,每段不超过50字"
3. 大模型Agent中的提示工程应用
3.1 什么是大模型Agent?
Agent是「能自主完成复杂任务的AI系统」——比如"帮我订机票+查酒店+做旅游计划",它会像人一样:
- 规划(先做什么?)
- 执行(调用工具查天气)
- 反思(计划符合天气吗?)
- 调整(雨天换室内活动)
3.2 旅游计划Agent实战
3.2.1 工具函数定义
python复制# 模拟查天气工具
def get_weather(city: str) -> str:
"""查询指定城市未来3天天气"""
return f"{city}未来3天天气:Day1晴(25-30℃)、Day2多云(23-28℃)、Day3小雨(20-25℃)"
# 模拟生成旅游计划工具
def generate_tour_plan(city: str, weather: str) -> str:
"""根据天气生成3天旅游计划"""
plan = f"[{city}3天计划]\n"
plan += f"Day1(晴):故宫+天坛(穿舒服的鞋)\n"
plan += f"Day2(多云):颐和园+圆明园(带防晒)\n"
plan += f"Day3(小雨):国家博物馆+南锣鼓巷(带伞)\n"
return plan
3.2.2 Agent Prompt设计
python复制from langchain.prompts import PromptTemplate
agent_prompt = PromptTemplate(
input_variables=["input", "agent_scratchpad", "tools"],
template="""你是专业的旅游计划助手,请严格按以下步骤工作:
1. 首先用【WeatherTool】查询用户指定城市的未来3天天气(必填步骤!);
2. 把天气结果传入【TourPlanTool】,生成旅游计划;
3. 检查计划是否符合天气(比如雨天不能安排户外活动),不符合就调整;
4. 最终输出:先写天气,再写计划,格式清晰。
可用工具:{tools} (工具说明要认真看!)
你之前的思考过程:{agent_scratchpad}
用户需求:{input}
现在开始执行任务,先想"第一步该调用什么工具"?"""
)
3.2.3 Agent初始化与测试
python复制from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
llm = OpenAI(temperature=0.1, openai_api_key=os.getenv("OPENAI_API_KEY"))
tools = [
Tool(
name="WeatherTool",
func=get_weather,
description="查询城市未来3天天气,输入参数:city(城市名)"
),
Tool(
name="TourPlanTool",
func=lambda city, weather: generate_tour_plan(city, weather),
description="生成旅游计划,输入参数:city(城市名)、weather(天气信息)"
)
]
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True,
prompt=agent_prompt
)
result = agent.run("帮我做北京的3天旅游计划")
print("最终结果:\n", result)
3.3 Agent Prompt设计要点
- 任务流程:明确步骤顺序
- 工具约束:说明工具用途和参数
- 结果要求:指定输出格式和检查规则
4. AIGC中的提示工程应用
4.1 图像生成:结构化Prompt
高质量图像prompt的结构是:「主体+属性+环境+风格+细节」
| 要素 | 解释 | 例子 |
|---|---|---|
| 主体 | 核心对象 | "一只橘猫" |
| 属性 | 主体特征 | "胖嘟嘟的、正趴在沙发上打盹" |
| 环境 | 场景 | "阳光透过窗户洒进来的客厅" |
| 风格 | 艺术风格 | "莫兰迪色系的水彩画风格" |
| 细节 | 小元素 | "猫的爪子搭在一个毛线球上" |
4.1.1 DALL·E 3图像生成示例
python复制from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def generate_image(prompt: str) -> str:
"""用DALL·E 3生成图像,返回图片URL"""
response = client.images.generate(
model="dall-e-3",
prompt=prompt,
size="1024x1024",
quality="standard",
n=1,
)
return response.data[0].url
good_prompt = "一只胖嘟嘟的橘猫,正趴在阳光洒进来的客厅沙发上打盹,莫兰迪色系水彩画风格,猫的胡须清晰,沙发上有条纹针织毯,背景模糊突出主体"
image_url = generate_image(good_prompt)
print("生成的图像URL:", image_url)
4.2 文本生成:指令+约束
4.2.1 武侠小说生成示例
text复制请写一段武侠小说片段,要求:
1. 类型:传统武侠(不是玄幻);
2. 场景:江南水乡的深夜,雨巷里;
3. 人物:主角是穿青衫的少年(叫"叶轻尘"),反派是戴面具的黑衣人;
4. 风格:像金庸的文字——简洁有力,有画面感;
5. 约束:片段结尾要留悬念(比如黑衣人扔出一个令牌,上面刻着"青龙门")。
5. 多模态AI中的提示工程应用
5.1 图片转儿歌示例
python复制import base64
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def multi_modal_prompt(image_path: str, text_instruction: str) -> str:
with open(image_path, "rb") as image_file:
image_base64 = base64.b64encode(image_file.read()).decode("utf-8")
response = client.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": text_instruction},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_base64}"}}
]
}
],
max_tokens=300
)
return response.choices[0].message.content
text_instruction = """请做两件事:
1. 描述这张图片的内容(要具体,比如猫的颜色、动作、环境);
2. 根据内容生成一首儿歌,要求:适合3-5岁小孩,每句5个字,押韵,易唱。"""
image_path = "orange_cat.jpg"
result = multi_modal_prompt(image_path, text_instruction)
print(result)
6. 代码生成中的提示工程应用
6.1 CSV处理函数生成示例
text复制请写一个Python函数,满足以下要求:
1. 功能:处理CSV文件中的缺失值和异常值;
2. 输入:CSV文件的本地路径(str类型);
3. 输出:处理后的pandas DataFrame(返回值),并打印"缺失值数量"和"异常值数量";
4. 处理逻辑:
a. 用pandas读取CSV文件;
b. 数值型列:缺失值用"均值"填充,异常值用"中位数"替换(异常值定义:超过均值±3σ);
c. Categorical列(非数值):缺失值用"众数"填充;
5. 注意:要处理可能的编码问题(比如用encoding='utf-8'),并且注释清晰。
7. 提示工程的进阶思考
7.1 自动化提示工程
可以用LLM本身来优化prompt。比如输入:
text复制请帮我优化这个prompt:"写一个处理CSV缺失值的Python函数"
模型会返回更具体的prompt:
text复制请写一个Python函数,接收CSV文件路径,返回处理后的DataFrame。要求:1. 用pandas读取;2. 数值型列缺失值用均值填充,异常值(3σ)用中位数替换;3. Categorical列缺失值用众数填充;4. 打印缺失值和异常值数量。
7.2 提示工程与微调的区别
| 维度 | 提示工程 | 微调 |
|---|---|---|
| 目标 | 教AI"怎么做事" | 让AI"学会做事" |
| 灵活性 | 高 | 低 |
| 成本 | 低 | 高 |
| 适用场景 | 临时/多变任务 | 长期/固定风格任务 |
8. 提示工程的实践建议
- 从简单任务开始:先掌握基础prompt写法,再尝试复杂场景
- 注重反馈迭代:根据模型输出不断优化prompt
- 建立prompt库:积累不同场景下的有效prompt
- 理解模型能力边界:不要期望模型完成超出其能力范围的任务
在实际工作中,我发现最有效的prompt往往具备以下特点:
- 明确的任务描述
- 具体的输出要求
- 合理的约束条件
- 清晰的格式指示
记住:最好的prompt,永远是用模型的语言,讲你的需求。
