当前位置: 首页 > news >正文

ChatPromptTemplate创建方式比较

代码1:

prompt = ChatPromptTemplate.from_messages([SystemMessage(content="You are a helpful assistant."),MessagesPlaceholder(variable_name="history"),("human", "{input}")
])

代码2:

prompt = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant."),MessagesPlaceholder("history"),("human", "{question}")]
)

1. SystemMessage和 (“system”, “You are a helpful assistant.”)是一样的效果吗?这两种写法都可以吗?

  • SystemMessage(content="You are a helpful assistant."):

    • 这是直接使用了 SystemMessage 类来创建一个系统消息对象。
    • SystemMessageBaseMessage 的一个子类,专门用于表示系统级别的提示或指令。
  • ("system", "You are a helpful assistant."):

    • 这种形式使用了一个元组 (role, content) 来定义一条消息,其中 "system" 表示这条消息的角色是系统消息,第二个元素是内容。
    • 在内部,LangChain 会将这种格式的元组转换为相应的 BaseMessage 子类对象(例如 SystemMessage

这两种写法在功能上是等价的,但推荐根据具体情况和个人偏好选择合适的写法。

有什么区别?

  • 类型安全性:使用 SystemMessage 提供了更强的类型检查,因为它明确地指定了这是一个系统消息。
  • 灵活性:使用元组 (role, content) 更加灵活,适用于快速编写或当角色不固定时。
  • 一致性:如果你在整个项目中都使用 BaseMessage 类(如 SystemMessage, HumanMessage, AIMessage),那么保持一致的风格可能会使代码更清晰易读。

2. MessagesPlaceholder(variable_name="history") vs MessagesPlaceholder("history")

  • MessagesPlaceholder(variable_name="history"):

    • 明确指定了变量名为 "history",这种方式更加显式,有助于提高代码的可读性和维护性。
  • MessagesPlaceholder("history"):

    • 直接传入字符串 "history" 作为参数,这种方式更为简洁,但在复杂情况下可能不如前一种方法直观。
区别和选择:
  • 参数名明确性:使用 variable_name="history" 更加清晰地表明这个占位符的作用,特别是在处理多个占位符时。
  • 简洁性:对于简单的场景,直接传入字符串 "history" 足够了,并且减少了不必要的冗余。
  • API 设计意图:通常,如果 API 设计允许同时接受这两种形式,那么选择哪种取决于你的编码习惯和项目的具体需求。不过,为了保持代码的一致性和可读性,建议始终使用带有明确参数名的形式,除非有特别的理由不这样做。

总结

  • SystemMessage(content="...")("system", "...")

    • 功能相同,都可以用来指定系统消息。
    • 推荐根据项目的一致性和个人偏好选择。
  • MessagesPlaceholder(variable_name="history")MessagesPlaceholder("history")

    • 基本上可以互换使用,但在复杂或多占位符的情况下,使用 variable_name="..." 更加清晰。
    • 出于代码清晰度考虑,推荐使用带有明确参数名的形式。

相关文章:

  • Golang实践录:在go中使用curl实现https请求
  • 元宇宙赛道新势力:成都芯谷产业园创新业务如何重构产业格局
  • 量子计算实用化突破:从云端平台到国际竞合,开启算力革命新纪元
  • 查看字节真实二进制形式示例解析1
  • 【教程】Docker方式本地部署Overleaf
  • RHCE认证通过率
  • 建筑工程管理核心功能解析与2025年TOP5系统深度测评(附智能化转型必备工具对比)
  • WPF Datagrid 数据加载和性能
  • 内存虚拟盘(RAMDisk)是什么?
  • 构建优雅对象的艺术:Java 建造者模式的架构解析与工程实践
  • 【Linux Nano Vim快捷键大全】
  • [特殊字符] VMware虚拟机挂起后Docker容器MySQL无法连接的解决方案
  • BitMart合约交易体验 BitMart滑点全赔的底层逻辑
  • Soundness Gitpod 部署教程
  • MVCC:数据库并发控制的利器
  • 深度理解指针(2)
  • Redis的Pipeline和Lua脚本适用场景是什么?使用时需要注意什么?
  • 计算机组成与体系结构:缓存设计概述(Cache Design Overview)
  • Eslint和perrier的作用
  • contains方法的实现对比
  • 特朗普促卡塔尔说服伊朗放弃核计划,伊朗总统:你来吓唬我们?
  • 爱德华多·阿拉纳宣誓就任秘鲁新总理
  • GDP逼近五千亿,向海图强,对接京津,沧州剑指沿海经济强市
  • 美国明尼苏达州发生山火,过火面积超80平方公里
  • 郑培凯:汤显祖的“至情”与罗汝芳的“赤子之心”
  • 工人日报:“鼠标手”被纳入职业病,劳动保障网越织越密