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):通过给出少量高质量示例,引导模型理解任务格式和规则,适合复杂、专业任务(如法律文档解析、医疗术语抽取)。
  • 区别:零样本输出可控性较低,少样本通过示例提升输出可控性和准确率。
相关推荐
小马92610 小时前
Meta MuseCode:从 Prompt 到持久化 Agent,编码智能体迈入“断点续传“时代
ai·meta·prompt·codingagent·musecode
追风201911 小时前
Prompt、Skill、MCP、Agent 的职责边界:如何判断 AI 能力该放在哪一层
prompt
不瘦80斤不改名1 天前
05-vibe-coding-向agentic-engineering演进
人工智能·笔记·python·prompt
IT小盘2 天前
17-构建Prompt测试集-提示词优化不再凭感觉
服务器·windows·prompt
如此这般英俊2 天前
手搓Claude Code-第十章 system_prompt
数据结构·人工智能·python·语言模型·自然语言处理·prompt
Java成神之路-2 天前
Spring AI 核心探秘:四大 Prompt 角色底层设计与完整闭环实战
人工智能·spring·prompt
'pi%'2 天前
“咒语”质量如何量化?大模型Prompt效果评估与自动化验证方案
运维·自动化·prompt
LayZhangStrive2 天前
claude code使用命令技巧(四)(开发沉淀的提示词模板)
ai·单元测试·prompt·ai编程·提示词·claude code
qq_454245032 天前
SystemPrompt 智能体系统提示词
人工智能·prompt
zzz_23683 天前
AI Coding 的稳定性,不能只靠 Prompt:一次 Harness 工程化拆解
人工智能·prompt