ChatPromptTemplate的高级特性

1、部分变量预填充:partial()

预填充某些固定不变的变量,创建模板的变体

使用场景:

  1. 某些变量在所有调用中都相同
  2. 需要为不同用户/场景创建定制模板

举例1:

改进

举例2:

bash 复制代码
# 场景:为不同部门创建专用模板
base_template = ChatPromptTemplate.from_messages([
    ("system", "你是{department}的{role}"),
    ("user", "{task}")
])
# IT 部门
it_template = base_template.partial(
    department="IT 部门",
    role="技术支持"
)
# 销售部门
sales_template = base_template.partial(
    department="销售部门",
    role="销售顾问"
)
sales_template.invoke({"task":"为什么每年年底汽车会促销"})

2、消息占位符

当你不确定消息提示模板使用什么角色,或者希望在格式化过程中插入消息列表时,该怎么办?这就需要使用消息占位符,负责在特定位置添加消息列表。

使用场景:多轮对话系统存储历史消息以及Agent的中间步骤处理此功能非常有用

使用placeholder

使用MessagesPlaceHolder

3、可复用模板库

在实际项目中,建议创建模板库

举例1:

templates.py文件声明如下:

bash 复制代码
from langchain_core.prompts import ChatPromptTemplate
class PromptLibrary:
    """可复用的提示词模板库"""

    TRANSLATOR = ChatPromptTemplate.from_messages([
        ("system", "你是专业翻译,精通{source_lang}和{target_lang}"),
        ("user", "翻译以下文本:\n{text}")
    ])
    CODE_REVIEWER = ChatPromptTemplate.from_messages([
        ("system", "你是{language}代码审查专家,重点关注{focus}"),
        ("user", "审查代码:\n```{language}\n{code}\n```")
    ])
    SUMMARIZER = ChatPromptTemplate.from_messages([
        ("system", "你是内容摘要专家"),
        ("user", "将以下内容总结为{num}个要点:\n{content}")
    ])
    TUTOR = ChatPromptTemplate.from_messages([
        ("system", "你是{subject}导师,学生水平:{level}"),
        ("user", "{question}")
    ])

其他文件中使用:

bash 复制代码
from templates import PromptLibrary

messages = PromptLibrary.TRANSLATOR.format_messages(
    source_lang="英语",
    target_lang="中文",
    text="Hello World"
)

4、模板组合

将多个模板片段组合成复杂的提示词

方法1:字符串组合

bash 复制代码
# 定义可复用的部分
role_part = "你是一个{domain}专家。"
style_part = "回答风格:{style}。"
constraint_part = "限制:{constraint}。"
# 组合
full_system = role_part + style_part + constraint_part
template = ChatPromptTemplate.from_messages([
    ("system", full_system),
    ("user", "{question}")
])

方法2:使用+运算符

bash 复制代码
template1 = ChatPromptTemplate.from_messages([
	("system", "你是助手")
])
template2 = ChatPromptTemplate.from_messages([
	("user", "{input}")
])
# 组合(LangChain 1.0 支持)
combined = template1 + template2
相关推荐
夜晚回家1 小时前
Python 变量入门详解 | 用 BMI 案例串起赋值、乘方与取整
android·python
用户6259411859491 小时前
vibe coding怎么入门:从自然语言到可运行代码的完整指南
javascript
程序猿追1 小时前
立方体转到九十度:用 kotlin-math 核对鸿蒙上的两种旋转
android·开发语言·kotlin
要开心吖ZSH1 小时前
定时任务是用外部调度(xxl-job)还是本地化( @Scheduled)更香?以号源刷新任务为例?
java·xxl-job·定时任务·scheduled
℘团子এ1 小时前
vue3中自定义指令的使用
前端·javascript·vue.js
nagualky1231 小时前
GPT-4 系列退役在即:一套可回滚的模型迁移验收法
java·开发语言·ai·架构
今天的砖头有点烫手啊1 小时前
Java 8 Stream 原理拆解:惰性求值与并行流陷阱
java·jvm
Ai-_Man1 小时前
DeepSeek生成的内容能否下载吗?
开发语言·javascript·人工智能·小程序·ecmascript
半调子的社畜1 小时前
记账 App 我装了删、删了装,最后自己写了一个:本地语音识别 + R8 踩坑复盘
android·ai编程