C#对话摘要降低Token消耗

在 C# 中实现对话摘要以减少 Token 消耗

在 C# 中调用大模型(如千问、DS、智谱等)时,对话摘要 是一种有效的 Token 消耗优化策略。通过将长对话压缩为摘要,可以显著减少 Token 使用量,同时保留关键信息。


🧠 一、实现方式:使用 ConversationSummaryMemory

ConversationSummaryMemory 是 LangChain 提供的一种记忆机制,它会自动对对话历史进行摘要,从而减少 Token 消耗。

1. 安装依赖

bash 复制代码
dotnet add package LangChain --version 0.1.17

2. 初始化模型与记忆

csharp 复制代码
using LangChain.ChatModels;
using LangChain.Memory;

// 初始化千问模型
var llm = new ChatTongyi(
    model: "qwen-turbo",
    temperature: 0.7,
    maxTokens: 1024
);

// 初始化摘要记忆
var summaryMemory = new ConversationSummaryMemory(
    llm: llm,
    maxTokenLimit: 2000 // 设置最大 Token 限制
);

3. 保存上下文

csharp 复制代码
// 保存用户输入和模型输出
summaryMemory.SaveContext(
    new Dictionary<string, object> { { "input", "你好" } },
    new Dictionary<string, object> { { "output", "您好!有什么需要帮助的?" } }
);

4. 加载记忆

csharp 复制代码
// 加载记忆并获取摘要
var history = summaryMemory.LoadMemoryVariables(new Dictionary<string, object>());
Console.WriteLine(history["summary"]);

💡 二、优化策略:减少 Token 消耗

1. 设置 maxTokenLimit

通过设置 maxTokenLimit,可以控制每次调用 LLM 时的 Token 数量,避免超出模型限制。

csharp 复制代码
var summaryMemory = new ConversationSummaryMemory(
    llm: llm,
    maxTokenLimit: 2000 // 控制 Token 数量
);

2. 使用轻量级模型生成摘要

对于摘要生成,可以使用轻量级模型(如 qwen-turbo)来降低 Token 消耗。

csharp 复制代码
var summaryModel = new ChatTongyi(
    model: "qwen-turbo",
    temperature: 0.7,
    maxTokens: 512
);

3. 避免全量上下文传递

在调用 LLM 时,只传递摘要内容,而不是完整的对话历史。

csharp 复制代码
var response = await llm.InvokeAsync(
    prompt: "根据以下摘要回答问题:" + history["summary"],
    temperature: 0.7
);

📦 三、完整示例代码

csharp 复制代码
using System.Collections.Generic;
using LangChain.ChatModels;
using LangChain.Memory;

class Program
{
    static async Task Main(string[] args)
    {
        // 初始化千问模型
        var llm = new ChatTongyi(
            model: "qwen-turbo",
            temperature: 0.7,
            maxTokens: 1024
        );

        // 初始化摘要记忆
        var summaryMemory = new ConversationSummaryMemory(
            llm: llm,
            maxTokenLimit: 2000
        );

        // 保存上下文
        summaryMemory.SaveContext(
            new Dictionary<string, object> { { "input", "你好" } },
            new Dictionary<string, object> { { "output", "您好!有什么需要帮助的?" } }
        );

        // 加载记忆
        var history = summaryMemory.LoadMemoryVariables(new Dictionary<string, object>());
        Console.WriteLine("摘要内容: " + history["summary"]);

        // 使用摘要内容调用 LLM
        var response = await llm.InvokeAsync(
            prompt: "根据以下摘要回答问题:" + history["summary"],
            temperature: 0.7
        );

        Console.WriteLine("LLM 响应: " + response);
    }
}

🚀 四、总结

在 C# 中实现对话摘要以减少 Token 消耗,可以通过以下方式:

  • 使用 ConversationSummaryMemory 实现对话摘要。
  • 设置 maxTokenLimit 控制 Token 数量。
  • 使用轻量级模型生成摘要,降低 Token 消耗。
  • 避免全量上下文传递,只传递摘要内容。

这些方法不仅能够显著降低 Token 消耗,还能提升系统的效率和稳定性。

互动话题:你在 C# 中调用 AI 时,遇到过哪些 Token 消耗过高的问题?欢迎在评论区分享你的经验!


参考来源

相关推荐
段一凡-华北理工大学1 小时前
大模型与智能体在工业的应用~系列文章12:大模型 × 数字孪生 × 智能体的融合图景
大数据·人工智能·python·深度学习·大语言模型·python开发
程序员无隅1 小时前
AI 辅助编程:怎样把完成的功能变成自己的开发经验
人工智能
胡家伟++1 小时前
AI为《一片叶子的赋役与风流》配插图
人工智能·aigc
做系统的大强1 小时前
脚本说 PASS、OS 读全零 —— 到底是谁在撒谎?
后端·操作系统
weixin_307779131 小时前
从“人操作仪器”到“Agent 自主发现”:OPL 金属材料自驱动实验室 MVP 技术论述
开发语言·人工智能·算法·架构
xx_xxxxx_1 小时前
论文阅读-PASLE
人工智能·深度学习·机器学习
释厄6231 小时前
01AB 基本元理——任何智能体的三元法理·0=1→0≠1法理跃迁为天理
人工智能·windows·算法·microsoft·机器学习
szxinmai主板定制专家1 小时前
工业视觉新思路:FPGA图像预处理+RK NPU推理,实现高速缺陷检测
人工智能·嵌入式硬件·fpga开发·rk3576+codesys
能源革命1 小时前
AI 日报 · 2026-10-02
人工智能