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):通过给出少量高质量示例,引导模型理解任务格式和规则,适合复杂、专业任务(如法律文档解析、医疗术语抽取)。
  • 区别:零样本输出可控性较低,少样本通过示例提升输出可控性和准确率。
相关推荐
飞Link7 小时前
大模型时代的“语言编程”:Prompt Engineering (提示词工程) 深度解析与实战指南
开发语言·python·prompt
zzb158014 小时前
系统提示词-System Prompt 动态组装
人工智能·后端·python·prompt
小橙子学AI16 小时前
AI 编程的 Prompt 工程:如何写出高质量指令
人工智能·prompt
小林学编程16 小时前
模型上下文协议(MCP)的理解
java·后端·llm·prompt·resource·tool·mcp协议
chQHk57BN1 天前
解密Prompt系列69. 从上下文管理到Runtime操作系统
prompt
北邮刘老师1 天前
暗数据:智能体探索世界的下一步
人工智能·大模型·prompt·智能体·智能体互联网
Flying pigs~~1 天前
从“踩坑”到“可控”:大模型 Prompt 工程实战总结与进阶方法论
大数据·人工智能·大模型·prompt·提示词工程
前端达人2 天前
第09课:10个高频场景 Prompt 模板库,复制、改几个词、直接用
prompt
最初的↘那颗心2 天前
结构化Prompt与Meta Prompt实战——让AI输出你想要的格式
大模型·prompt·spring ai·结构化输出·meta prompt
最初的↘那颗心2 天前
Prompt基础功:角色分工与样本策略——System Prompt与Few-Shot实战
大模型·llm·prompt·few-shot·spring ai