跳到主要内容

如何过滤消息

在更复杂的链和代理中,我们可能会使用消息列表来跟踪状态。此列表可能会开始累积来自多个不同模型、说话者、子链等的消息,并且我们可能只想将此完整消息列表的子集传递给链/代理中的每个模型调用。

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

filter_messages(messages, include_types="human")
[HumanMessage(content='example input', name='example_user', id='2'),
HumanMessage(content='real input', name='bob', id='4')]
filter_messages(messages, exclude_names=["example_user", "example_assistant"])
[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')]
filter_messages(messages, include_types=[HumanMessage, AIMessage], exclude_ids=["3"])
[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 可以命令式地(如上所述)或声明式地使用,从而可以轻松地与链中的其他组件组合

%pip install -qU langchain-anthropic
from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-3-sonnet-20240229", temperature=0)
# Notice we don't pass in messages. This creates
# a RunnableLambda that takes messages as input
filter_ = filter_messages(exclude_names=["example_user", "example_assistant"])
chain = filter_ | llm
chain.invoke(messages)
API 参考:ChatAnthropic
AIMessage(content=[], response_metadata={'id': 'msg_01Wz7gBHahAwkZ1KCBNtXmwA', 'model': 'claude-3-sonnet-20240229', 'stop_reason': 'end_turn', 'stop_sequence': None, 'usage': {'input_tokens': 16, 'output_tokens': 3}}, id='run-b5d8a3fe-004f-4502-a071-a6c025031827-0', usage_metadata={'input_tokens': 16, 'output_tokens': 3, 'total_tokens': 19})

查看 LangSmith 的追踪记录,我们可以看到在消息传递给模型之前,它们会被过滤:https://smith.langchain.com/public/f808a724-e072-438e-9991-657cc9e7e253/r

只看 filter_,我们可以看到它是一个 Runnable 对象,可以像所有 Runnable 对象一样被调用。

filter_.invoke(messages)
[HumanMessage(content='real input', name='bob', id='4'),
AIMessage(content='real output', name='alice', id='5')]

API 参考

有关所有参数的完整描述,请参阅 API 参考:https://python.langchain.ac.cn/api_reference/core/messages/langchain_core.messages.utils.filter_messages.html


此页面是否对您有帮助?