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):通过给出少量高质量示例,引导模型理解任务格式和规则,适合复杂、专业任务(如法律文档解析、医疗术语抽取)。
  • 区别:零样本输出可控性较低,少样本通过示例提升输出可控性和准确率。
相关推荐
猫头虎5 小时前
如何解决openclaw安装skills报错command not foud:clawhub问题怎么解决?
langchain·开源·prompt·github·aigc·ai编程·内容运营
xier_ran6 小时前
【第二周】RAG与Agent实战07:提示词优化案例_金融信息抽取
自然语言处理·prompt·agent·rag
-大头.6 小时前
从Prompt到MCP:AI应用开发核心概念完全指南
人工智能·prompt
轩脉刃17 小时前
prompt 越短,说明智能体越智能
prompt
Java后端的Ai之路21 小时前
LangSmith与Prompt Ops:从概念到实践的全面指南
人工智能·langchain·prompt·aigc·langsmith
岁岁种桃花儿1 天前
AI超级智能开发系列从入门到上天第一篇:Prompt工程
ai·prompt
啦啦啦_99991 天前
4. AI面试题之 Prompt
java·prompt
芥子沫1 天前
提示词管理工具推荐prompt-manage,Docker一键部署和使用指南
docker·容器·prompt·提示词
1941s2 天前
02-LangChain 框架入门:模型抽象与 Prompt 模板
人工智能·langchain·prompt