Skip to content

提示词 (Prompts)

提示词(Prompt)是用户传递给模型的指令。优秀的提示词工程(Prompt Engineering)是获得高质量输出的关键。LangChain 提供了强大的工具来管理和构建提示词。

提示词模板 (Prompt Templates)

硬编码提示词通常不够灵活。PromptTemplate 允许你定义带有变量的模板,并在运行时动态填充。

1. ChatPromptTemplate (推荐)

用于聊天模型,支持结构化的消息列表。

python
from langchain_core.prompts import ChatPromptTemplate

# 使用 from_messages 方法构建
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业的{role}。"),
    ("human", "请解释什么是 {topic}。")
])

# 填充变量
formatted_value = prompt.invoke({"role": "技术作家", "topic": "RAG"})

# 输出结果是一个 ChatPromptValue,包含消息列表,可以直接传给 Chat Model
print(formatted_value)

2. PromptTemplate (用于纯文本 LLM)

用于传统的文本补全模型。

python
from langchain_core.prompts import PromptTemplate

template = PromptTemplate.from_template("给我讲一个关于{subject}的笑话。")
formatted_string = template.format(subject="程序员")
print(formatted_string)

为什么使用模板?

  1. 复用性: 定义一次,多次调用。
  2. 清晰性: 将指令逻辑与数据分离。
  3. 安全性: 防止某些类型的提示词注入攻击。
  4. 部分填充 (Partial Formatting): 可以预先填充部分变量(例如绑定当前的日期或用户ID),稍后再填充剩余变量。

占位符 (MessagesPlaceholder)

在构建具有记忆(Memory)的对话系统时,我们需要一个占位符来动态插入历史聊天记录。

python
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个助手。"),
    MessagesPlaceholder(variable_name="history"), # 历史记录将插入此处
    ("human", "{input}")
])

**提示词准备好后,如何处理模型的回复呢?请前往下一章:输出解析器 (Output Parsers)

LangChain中文文档