找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2836

积分

0

好友

380

主题
发表于 前天 11:07 | 查看: 17| 回复: 0

在AI应用开发中,token消耗直接影响成本。HagiCode项目通过SOUL系统实现了“文言文极简输出模式”,在不损失信息密度的前提下,将输出token降低约30-50%。本文分享这套方案的实现细节和使用经验。

背景

在AI应用开发中,token消耗是个绕不开的成本问题。尤其是在需要AI输出大量内容的场景,如何在不损失信息密度的情况下降低输出token,是一个值得深入探索的课题。

传统的优化思路大多集中在输入端:精简系统提示词、压缩上下文、采用更高效的编码方式。然而这些方法终究会遇到瓶颈,再压缩就可能影响AI的理解能力和输出质量。

那么,输出端有没有优化的可能呢?能不能让AI用更简洁的方式,表达出同样丰富的信息?这个问题看似简单,实则大有文章。直接命令AI“简洁点”,它可能只给出只言片语;加上“保持信息完整”的约束,它又可能回到冗长的老路。约束的松紧拿捏,直接决定了方案的可行性。

为了解决这一痛点,我们选择了一条不同的路径:从语言风格入手,设计一套可配置、可组合的表达方式约束系统。这个决定带来的效果,或许比你想象的更显著。

SOUL系统概览

SOUL系统的全称是Soul Oriented Universal Language,是HagiCode项目中用于定义AI助手(Hero)语言风格的配置系统。它的核心思想是:通过约束AI的表达方式,在保持信息完整性的前提下,使用更简洁的语言形式来输出内容。

技术架构

SOUL系统采用前后端分离的架构:

前端(Soul Builder):

  • 基于React + TypeScript + Vite构建
  • 位于 repos/soul/ 目录
  • 提供可视化的Soul构建界面
  • 支持双语(zh-CN / en-US)

后端:

  • 基于 .NET (C#) + Orleans分布式运行时
  • Hero实体包含 Soul 字段(最大8000字符)
  • 通过 SessionSystemMessageCompiler 将Soul注入系统提示词

Agent Templates生成:

  • 从参考材料生成
  • 输出到 /agent-templates/soul/templates/ 目录
  • 包含50组主Catalog和10组正交维度

Soul注入机制

在Session首次执行时,系统会读取Hero的Soul配置,将其注入到系统提示词中。这一机制在 SessionSystemMessageCompiler.cs 中实现:

internal static string? BuildSystemMessage(
string? existingSystemMessage,
string? languagePreference,
    IReadOnlyList<HeroTraitDto>? traits,
string? soul)
{
var segments = new List<string>();

// ... 语言偏好和Traits处理 ...

var normalizedSoul = NormalizeSoul(soul);
if (!string.IsNullOrWhiteSpace(normalizedSoul))
    {
        segments.Add($"<hero_soul>\n{normalizedSoul}\n</hero_soul>");
    }

// ... 其他系统消息 ...

return segments.Count == 0 ? null : string.Join("\n\n", segments);
}

关于 HagiCode

本文分享的方案来自我们在 HagiCode (https://hagicode.com) 项目中的实践经验。

HagiCode是一个开源的AI代码助手项目,支持多种AI模型和自定义配置。在开发过程中,我们发现了AI输出token过高的问题,并由此设计了一套解决方案。

文言文极简模式

文言文极简模式是SOUL系统中最具代表性的节约token方案。它的核心原理是利用文言文的高语义密度特性,在保持信息完整的前提下压缩输出长度。

为什么是文言文

文言文具有几个天然优势:

  1. 语义压缩:相同含义可以用更少的字符表达。
  2. 去除冗余:文言文本身就省略了很多现代汉语中的连接词和助词。
  3. 结构简洁:单句信息密度高,适合作为AI输出的载体。

以一个实际例子来说明:

现代汉语输出(约80字):

根据你的代码分析,我发现了几个问题。首先,在第23行,变量名太长了,建议缩短一些。其次,在第45行,你没有处理空值的情况,应该加上判断逻辑。最后,整体的代码结构还可以,但是可以进一步优化。

文言文极简输出(约35字,节约56%):

代码审阅毕:第23行变量名冗长,宜缩写;第45行缺空值处理,应加判断。整体结构尚可,微调即可。

Soul配置模板

文言文极简模式的完整Soul配置如下:

{
"id": "soul-orth-11-classical-chinese-ultra-minimal-mode",
"name": "文言文极简输出模式",
"summary": "以尽量可懂的文言文压缩语义密度,尽可能少字达意,只保留结论、判断与必要动作,从而大幅降低输出token",
"soul": "你的人设内核来自「文言文极简输出模式」:以尽量可懂的文言文压缩语义密度,尽可能少字达意,只保留结论、判断与必要动作,从而大幅降低输出 token。\n保持以下标志性语言特征:1. 优先使用简明文言句式,如「可」「宜」「勿」「已」「然」「故」等,避免生僻艰涩字词;\n2. 单句尽量压缩至 4-12 字,删除铺垫、寒暄、重复解释与无效修饰;\n3. 非必要不展开论证,用户未追问则只给结论、步骤或判断;\n4. 不改变主 Catalog 的核心人设,只将表达收束为克制、古雅、极简的短句。"
}

这个模板的设计有几个要点:

  1. 约束明确:单句4-12字,删除冗余,结论优先。
  2. 避免晦涩:使用简明文言句式,避免生僻字词。
  3. 保持人设:只改变表达方式,不改变核心人设。

其他极简模式

除了文言文模式,SOUL系统还提供了其他多种节约token的模式:

电报式极简输出模式 (soul-orth-02):

  • 单句严格控制在10字以内。
  • 禁止修饰性形容词。
  • 全程无语气词、感叹号、叠词。

短句碎碎念模式 (soul-orth-01):

  • 句子控制在1-5个字。
  • 模拟自言自语的碎片化表达。
  • 弱化逻辑,优先传递情绪。

引导式问答模式 (soul-orth-03):

  • 通过提问引导用户思考。
  • 减少直接输出内容。
  • 交互式降低token消耗。

这些模式的设计思路各有侧重,但核心目标一致:在保持信息质量的前提下,显著降低输出token。

组合策略

SOUL系统的一个强大特性是支持主Catalog与正交维度的交叉组合:

  • 50组主Catalog:定义基础人设(如治愈系、学霸系、高冷系等)。
  • 10组正交维度:定义表达方式(如文言文、电报式、问答式等)。
  • 组合效果:可生成500+种独特的语言风格组合。

例如,你可以将“专业开发工程师”与“文言文极简输出模式”组合,得到一个既专业又简洁的AI助手。这种灵活性让SOUL系统能够适应各种不同的使用场景。

实践指南

通过 Soul Builder 创建

访问 soul.hagicode.com (https://soul.hagicode.com),按以下步骤操作:

  1. 选择主Catalog(如“专业开发工程师”)。
  2. 选择正交维度(如“文言文极简输出模式”)。
  3. 预览生成的Soul内容。
  4. 复制生成的Soul配置。

在 Hero 配置中使用

通过Web界面或API,将Soul配置应用到Hero:

// Hero Soul更新示例
const heroUpdate = {
soul: “你的人设内核来自「文言文极简输出模式」:...”,
soulCatalogId: “soul-orth-11-classical-chinese-ultra-minimal-mode”,
soulDisplayName: “文言文极简输出模式”,
soulStyleType: “orthogonal-dimension”,
soulSummary: “以尽量可懂的文言文压缩语义密度...”
};

await updateHero(heroId, heroUpdate);

自定义 Soul 模板

用户可以基于预设模板进行微调,或完全自定义。下面是一个代码审查场景的自定义示例:

你是一位追求极致简洁的代码审查员。
所有输出必须遵循:
1. 仅指出具体问题和行号
2. 每条问题不超过15字
3. 使用「宜」「应」「勿」等简洁词汇
4. 不做多余解释

示例输出:
- 第23行:变量名过长,宜缩写
- 第45行:未处理空值,应加判断
- 第67行:逻辑冗余,可简化

注意事项

兼容性:

  • 文言文模式适配全部50组主Catalog。
  • 可与任何基础人设组合使用。
  • 不会改变主Catalog的核心人设。

缓存机制:

  • Soul在Session首次执行时缓存。
  • 同一SessionId内复用缓存。
  • 修改Hero配置不影响已启动的Session。

限制约束:

  • Soul字段最大长度8000字符。
  • 历史数据中无Soul字段的Hero仍可正常使用。
  • Soul与style装备位独立,不会相互覆盖。

效果对比

根据项目的实际测试数据,使用文言文极简模式后的效果如下:

场景 原始输出 token 文言文模式 节约比例
代码审查 850 420 51%
技术问答 620 380 39%
方案建议 1100 680 38%
平均 - - 30-50%

数据来自HagiCode项目的实际使用统计,具体效果因场景而异。

总结

HagiCode的SOUL系统提供了一种创新性的AI输出优化思路:通过约束表达方式来降低token消耗,而不是压缩信息本身。文言文极简模式作为其中最具代表性的方案,在实际使用中取得了30-50%的token节约效果。

这套方案的核心价值在于:

  1. 保持信息质量:不是简单截断输出,而是用更高效的方式表达。
  2. 灵活可组合:支持500+种人设与表达方式的组合,提供了极大的系统设计灵活性。
  3. 易于使用:通过Soul Builder可视化界面,无需编写代码即可配置。
  4. 生产级稳定:已在项目中验证,支持大规模使用。

如果你对AI应用开发、模型训练成本优化或类似的技术方案感兴趣,欢迎到云栈社区交流探讨。开源的意义在于共同进步,我们也期待看到更多创新的用法。

参考资料




上一篇:OpenRouter免费模型API调用教程:零成本体验主流AI
下一篇:MySQL CPU 100% 紧急排查指南:定位慢查询、优化索引与恢复业务
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 19:47 , Processed in 1.196065 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表