在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方案。它的核心原理是利用文言文的高语义密度特性,在保持信息完整的前提下压缩输出长度。
为什么是文言文
文言文具有几个天然优势:
- 语义压缩:相同含义可以用更少的字符表达。
- 去除冗余:文言文本身就省略了很多现代汉语中的连接词和助词。
- 结构简洁:单句信息密度高,适合作为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 的核心人设,只将表达收束为克制、古雅、极简的短句。"
}
这个模板的设计有几个要点:
- 约束明确:单句4-12字,删除冗余,结论优先。
- 避免晦涩:使用简明文言句式,避免生僻字词。
- 保持人设:只改变表达方式,不改变核心人设。
其他极简模式
除了文言文模式,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),按以下步骤操作:
- 选择主Catalog(如“专业开发工程师”)。
- 选择正交维度(如“文言文极简输出模式”)。
- 预览生成的Soul内容。
- 复制生成的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节约效果。
这套方案的核心价值在于:
- 保持信息质量:不是简单截断输出,而是用更高效的方式表达。
- 灵活可组合:支持500+种人设与表达方式的组合,提供了极大的系统设计灵活性。
- 易于使用:通过Soul Builder可视化界面,无需编写代码即可配置。
- 生产级稳定:已在项目中验证,支持大规模使用。
如果你对AI应用开发、模型训练成本优化或类似的技术方案感兴趣,欢迎到云栈社区交流探讨。开源的意义在于共同进步,我们也期待看到更多创新的用法。
参考资料