LangChain —— Message —— how to filter messages
文章目录
- 一、概述
- 二、基本使用
- 三、连成链
一、概述
在更复杂的链和代理中,我们可能会使用消息列表跟踪状态。此列表可以开始累积来自多个不同模型、说话者、子链等的消息,我们可能只想将此完整消息列表的子集传递给链/代理中的每个模型调用。
filter_message 使按 type、id、name 过滤消息变得容易。
二、基本使用
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_message 可以命令式 (如上所述) 或声明式使用,这样可以很容易地与链中的其他组件组合:
# pip install -U langchain-anthropic
from langchain_anthropic import ChatAnthropicllm = 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)