# 简化聊天历史:高效使用Langchain的消息修剪技巧
## 引言
在处理复杂的聊天机器人开发时,经常需要管理不断增长的聊天历史,保证在有限的上下文窗口中进行有效的沟通。这篇文章将介绍如何使用Langchain库中的`trim_messages`工具来有效地修剪消息,从而优化模型的上下文管理。
## 主要内容
### 理解上下文窗口
大型语言模型(LLM)有一个有限的上下文窗口,这意味着输入的tokens数量有限。对于长消息或者积累了大量信息的链/代理,管理传递给模型的消息长度至关重要。
### 使用`trim_messages`工具
`trim_messages`提供了一些基础策略来修剪消息列表,使其符合一定的tokens长度需求。我们可以选择性地保留重要信息,并确保模型能够顺利处理这些信息。
#### 获取最后的`max_tokens`
要获取消息列表中的最后`max_tokens`个tokens,可以设置策略为`"last"`。在此过程中,您可以使用语言模型作为`token_counter`来确保修剪后的消息适合该模型的上下文窗口。
```python
from langchain_core.messages import (
AIMessage,
HumanMessage,
SystemMessage,
trim_messages,
)
from langchain_openai import ChatOpenAI
messages = [
SystemMessage("you're a good assistant, you always respond with a joke."),
HumanMessage("i wonder why it's called langchain"),
AIMessage(
'Well, I guess they thought "WordRope" and "SentenceString" just didn\'t have the same ring to it!'
),
HumanMessage("and who is harrison chasing anyways"),
AIMessage(
"Hmmm let me think.\n\nWhy, he's probably chasing after the last cup of coffee in the office!"
),
HumanMessage("what do you call a speechless parrot"),
]
trimmed_messages = trim_messages(
messages,
max_tokens=45,
strategy="last",
token_counter=ChatOpenAI(model="gpt-4o"), # 使用API代理服务提高访问稳定性
)
print(trimmed_messages)
自定义Token计数器
在某些情况下,您可能需要自定义token计数器以适应特定需求。例如,可以编写一个函数来处理自定义的消息类型或内容格式。
代码示例
以下是一个完整的示例,展示如何使用trim_messages来修剪消息并结合OpenAI的聊天模型:
from typing

最低0.47元/天 解锁文章
650

被折叠的 条评论
为什么被折叠?



