[简化聊天历史:高效使用Langchain的消息修剪技巧]

# 简化聊天历史:高效使用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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值