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 小时前
Android 架构七条铁律:架构师真正设计的不是代码,而是秩序
android
kyriewen3 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
海的透彻3 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
xiangxiongfly9153 小时前
Android GsonFactory总结
android·gson·gsonfactory
code2cat3 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
工控丫丫3 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
后台模板学习4 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one4 小时前
算法--构造
java·数据结构·算法
SL_staff4 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
WythePlus5 小时前
Android 14 SELinux策略深度解析
android·安全策略·selinux策略