ChatPromptTemplate创建方式比较

代码1:

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

代码2:

py 复制代码
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="..." 更加清晰。
    • 出于代码清晰度考虑,推荐使用带有明确参数名的形式。
相关推荐
云飞云共享云桌面6 小时前
广东精密机械设备工厂8-10人共享一台SolidWorks设计服务器
运维·服务器·3d·自动化·汽车·制造
jieyucx6 小时前
【高级利用】条件竞争与逻辑漏洞:与服务器赛跑的艺术
android·运维·服务器·web安全·文件上传
tianyuanwo6 小时前
服务器OS组件研发效能度量可视系统——顶层方案设计与阶段性规划
运维·服务器·度量系统
初级炼丹师(爱说实话版)6 小时前
Ubuntu服务器配置docker
服务器·ubuntu·docker
机建狂魔7 小时前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex
土星云SaturnCloud7 小时前
智慧温室精准环控:土星云边缘计算设备实现温光水肥本地闭环调节
服务器·人工智能·ai·边缘计算
孙启超8 小时前
【AI应用开发】LangChain 中 Chain 和 Agent 核心区别?
java·人工智能·langchain·llm·rag·ai应用开发·agent loop
深爱水瓶 血影S狂风8 小时前
函数调用过程探究
linux·运维·服务器
酷可达拉斯8 小时前
Linux操作系统-磁盘空间使用率100%如何处理?
linux·运维·服务器·云计算·bash
神秘的MT8 小时前
C# WinForm Socket 服务器 + 串口转发
服务器·网络·学习·c#