Prompt Engineer 使用、设计、优化

文章目录

    • [1. LangChain 中的 Prompt 模块怎么使用](#1. LangChain 中的 Prompt 模块怎么使用)
      • [1.1 最简单的模板](#1.1 最简单的模板)
      • [1.2 聊天模板](#1.2 聊天模板)
      • [1.3 示例模板(Few-Shot)](#1.3 示例模板(Few-Shot))
      • [1.4 动态日期模板](#1.4 动态日期模板)
    • [2. 如何在实际项目中设计 Prompt](#2. 如何在实际项目中设计 Prompt)
      • [2.1 Prompt 设计的四大要素](#2.1 Prompt 设计的四大要素)
      • [2.2 如何进行 Prompt 优化](#2.2 如何进行 Prompt 优化)
        • [Prompt 优化的方法论](#Prompt 优化的方法论)
        • 性能评估
    • [3. 零样本与少样本学习](#3. 零样本与少样本学习)

1. LangChain 中的 Prompt 模块怎么使用

提示词模板就是把"问问题"这件事标准化,不用每次都手写完整的提示词。


1.1 最简单的模板

定义模板,用 {} 占位。

python 复制代码
from langchain_core.prompts import PromptTemplate

# 定义模板,用 {} 占位
template = PromptTemplate.from_template(
    "请用{language}语言介绍一下{topic},不超过100字。"
)

# 填充变量
prompt = template.format(language="中文", topic="人工智能")
print(prompt)
# 输出: 请用中文语言介绍一下人工智能,不超过100字。

1.2 聊天模板

可定义多轮对话模板。

python 复制代码
from langchain_core.prompts import ChatPromptTemplate
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI

load_dotenv()

# 定义多轮对话模板
chat_template = ChatPromptTemplate.from_messages([
    ("system", "你是一位{role},擅长用简洁易懂的方式解释复杂概念。"),
    ("human", "请解释一下:{concept}"),
])

# 生成消息列表
messages = chat_template.format_messages(
    role="物理学教授",
    concept="量子纠缠"
)

# 创建模型
llm = ChatOpenAI(
    model="deepseek-chat",
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url="https://api.deepseek.com"
)

# 调用模型
response = llm.invoke(messages)
print(response.content)

1.3 示例模板(Few-Shot)

通过给几个例子,教 AI 按你想要的格式输出。

python 复制代码
from langchain_core.prompts import ChatPromptTemplate
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI

load_dotenv()

# 创建模型
llm = ChatOpenAI(
    model="deepseek-chat",
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url="https://api.deepseek.com"
)

# 创建包含示例的模板
few_shot_template = ChatPromptTemplate.from_messages([
    ("system", "你是一个情绪表达助手。"),
    ("human", "示例:\n情绪: 开心\n表达: 我今天非常开心!\n\n情绪: 难过\n表达: 我感到有些难过..."),
    ("human", "现在请表达这个情绪: {emotion}")
])

messages = few_shot_template.format_messages(emotion="兴奋")
response = llm.invoke(messages)
print(response.content)
# 情绪: 兴奋
# 表达: 我兴奋得快要跳起来了!

1.4 动态日期模板

除了可以设置一些输入变量,也可以定义一些自动填充的变量。

python 复制代码
from langchain_core.prompts import PromptTemplate
from dotenv import load_dotenv
import os
from langchain_openai import ChatOpenAI
from datetime import datetime

load_dotenv()

# 创建模型
llm = ChatOpenAI(
    model="deepseek-chat",
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url="https://api.deepseek.com"
)

template = PromptTemplate(
    template="今天是{date},请告诉我关于{topic}的最新消息。",
    input_variables=["topic"],
    partial_variables={
        "date": datetime.now().strftime("%Y年%m月%d日")  # 自动填充
    }
)

# 只需要传 topic
prompt = template.format(topic="AI发展")

response = llm.invoke(prompt)
print(response.content)

2. 如何在实际项目中设计 Prompt

2.1 Prompt 设计的四大要素

  • 角色设定:限定模型回答视角
  • 任务描述:使用 STAR 原则(场景、任务、行动、结果)
  • 格式规范:如分点列表、表格呈现、代码格式等
  • 约束条件:包括长度、风格、内容、要求引用来源等限制

2.2 如何进行 Prompt 优化

Prompt 优化的方法论
  • 迭代优化:从简单到复杂,逐步完善
  • A/B 测试:比较不同版本的效果
  • 用户反馈:收集实际使用情况
  • 性能指标:准确率、相关性、一致性等
性能评估
  • 定量指标:响应时间、成功率
  • 定性指标:输出质量、相关性
  • 用户体验:易用性、满意度
  • 成本效益:API 调用成本、资源使用

3. 零样本与少样本学习

  • 零样本学习(Zero-Shot):无需示例,直接通过指令让大模型完成任务,依赖模型预训练知识,适合通用、简单任务(如翻译、分类、通用问答)。
  • 少样本学习(Few-Shot):通过给出少量高质量示例,引导模型理解任务格式和规则,适合复杂、专业任务(如法律文档解析、医疗术语抽取)。
  • 区别:零样本输出可控性较低,少样本通过示例提升输出可控性和准确率。
相关推荐
hrrrrxeeeee10 小时前
文件读取→比对→风险标记,拆解采购 AI 完整工作链路
大数据·人工智能·机器学习·prompt
技灵AI1 天前
Wan 3.0 API怎么做多参考商品视频?从图片、视频、音频分工到30秒交付
人工智能·prompt·aigc·音视频·wan 3.0
“AI国潮设计-小江”2 天前
【SDXL实战】Python自动化生成3D潮汕美食IP,附ComfyUI工作流与商用变现思路
开发语言·人工智能·python·prompt·aigc
TK泰妞2 天前
2026TikTok带货视频怎么做?
人工智能·prompt·音视频
XLYcmy2 天前
Prompt 设计相关问题
网络安全·llm·prompt·agent·cot·漏洞检测·harness
七夜zippoe3 天前
Prompt 工程进阶:角色设定、任务分解、输出约束与示例引导
ai·prompt·openai·agent·工程进阶
小叶肥辉3 天前
LangChain链和LangGraph图的学习笔记【六】——提示语模板(3)——Few-Shot Prompting(少样本提示) 模板类
笔记·python·学习·langchain·prompt·aigc
znnnk3 天前
【AI应用】Agent:AI 为什么需要“自主决策”?
ai·prompt·agent·workflow·ai应用·skill·mcp
学习日记5253 天前
AI PPT生成系统实践:从自由生成到可控生成的工程演进复盘
人工智能·ai·prompt
这就是佬们吗4 天前
Function Calling 还是 MCP?先分清它们根本不是同一层的东西
人工智能·prompt·ai编程