You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编辑Langchain Agent对话并解决OpenAI token超限问题?

解决Langchain Agent查询MySQL时的4k Token限制问题

一、移除对话历史中的冗余表结构

  • 自定义内存过滤逻辑:重写BufferMemory或ConversationBufferMemory的save_context方法,在保存对话前检测消息内容,直接过滤掉schema_sql_db返回的全量表结构内容(比如包含大量CREATE TABLE语句或字段明细的消息),只保留用户查询、Agent的SQL执行结果和最终回答。
  • 使用过滤型内存组件:基于Langchain现有内存类扩展实现FilteredConversationMemory,添加规则剔除所有与表结构查询相关的冗余响应,避免无效内容占用token。

二、对话历史过长时自动总结

  • 直接启用ConversationSummaryMemory:替换原有内存组件,它会自动将早期对话压缩为关键摘要,大幅减少token占用。示例代码:
from langchain.memory import ConversationSummaryMemory
from langchain.llms import OpenAI

memory = ConversationSummaryMemory(llm=OpenAI(temperature=0))
  • 自定义阈值触发总结:用tiktoken库计算对话历史的token数,当接近4k阈值时,调用大模型对历史内容做精简总结,替换原有历史。示例代码:
import tiktoken

def count_tokens(text, model="gpt-3.5-turbo"):
    encoder = tiktoken.encoding_for_model(model)
    return len(encoder.encode(text))

# 内存保存前检查token量,超过阈值则执行总结
if count_tokens(memory.buffer) > 3000:
    summary = llm.predict("总结以下对话,保留关键查询和核心结果:" + memory.buffer)
    memory.clear()
    memory.save_context({"input": "对话历史总结"}, {"output": summary})

三、从根源减少表结构查询冗余

  • 预存精简表结构:提前获取MySQL表结构并做精简(只保留字段名、类型、核心注释),将其作为工具的固定参数,避免Agent每次都全量查询schema。
  • 约束Agent的schema查询行为:在system prompt中明确规则,比如:"仅当完全不清楚表结构时才查询schema,已获取过的结构无需重复调用",减少不必要的schema查询触发。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 19:07:36