跳到主要內容
Open In ColabOpen on GitHub

如何篩選訊息

在更複雜的鏈和代理程式中,我們可能會使用 訊息列表來追蹤狀態。此列表可能會開始累積來自多個不同模型、發言者、子鏈等的訊息,而我們可能只想將此完整訊息列表的子集傳遞給鏈/代理程式中的每個模型調用。

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 物件,可以像所有 Runnables 一樣調用

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

API 參考

有關所有參數的完整描述,請前往 API 參考:https://langchain-python.dev.org.tw/api_reference/core/messages/langchain_core.messages.utils.filter_messages.html


此頁面是否有幫助?