针对LLM上下文窗口优化的数据格式
TONL-MCP Bridge 是一个 TypeScript 库和 CLI 工具,用于在 JSON/YAML 和 TONL(Token 优化自然语言)格式之间转换结构化数据。当与包含 10 个以上相似对象的数据集一起使用时,TONL 可以比 JSON 减少 30-60% 的 token 使用量。
主要用例:
不适用场景:
# 全局安装
npm install -g tonl-mcp-bridge
# 局部安装
npm install tonl-mcp-bridge
import { jsonToTonl, tonlToJson } from 'tonl-mcp-bridge';
const users = [
{ id: 1, name: "Alice", age: 25 },
{ id: 2, name: "Bob", age: 30 }
];
const tonl = jsonToTonl(users, "users");
// users[2]{id:i8,name:str,age:i8}:
// 1, Alice, 25
// 2, Bob, 30
const json = tonlToJson(tonl);
// 往返转换保留数据
import { calculateRealSavings } from 'tonl-mcp-bridge';
const jsonStr = JSON.stringify(users);
const tonlStr = jsonToTonl(users);
const stats = calculateRealSavings(jsonStr, tonlStr, 'gpt-5');
console.log(`Token 减少: ${stats.savingsPercent}%`);
console.log(`节省的 Token 数: ${stats.savedTokens}`);
| 数据集大小 | JSON Token | TONL Token | 节省 | 推荐 |
|---|---|---|---|---|
| 1 个对象 | 18 | 23 | -27.8% | 使用 JSON |
| 2 个对象 | 56 | 37 | 33.9% | 边缘情况 |
| 10 个对象 | 280 | 165 | 41.1% | 使用 TONL |
| 100 个对象 | 2,800 | 1,450 | 48.2% | 使用 TONL |
| 1000 个对象 | 28,000 | 14,000 | 50.0% | 使用 TONL |
使用 GPT-5 分词器进行基准测试,具有一致的模式
TONL 的结构化格式和显式类型定义增强了 LLM 解析的可靠性:
已测试:
关键因素:
在生产测试中,经过 10,000 多次转换,TONL 达到了与原生 JSON 相当的解析准确性,同时保持了显著的 token 节省。
最佳条件:
次优条件:
# 转换单个文件
tonl convert data.json
# 转换并统计
tonl convert data.json -s
# 指定输出位置
tonl convert data.json output.tonl
# 自定义集合名称
tonl convert data.json --name users
# 转换多个文件
tonl batch "data/*.json"
# 转换并统计
tonl batch "data/*.json" -s
# 自定义输出目录
tonl batch "*.json" -o ./output
# 文件更改时自动转换
tonl watch "data/*.json"
# 带选项
tonl watch "*.json" --name collection -o ./output
# 指定分词器模型
tonl convert data.json -s --model claude-4
tonl convert data.json -s --model gemini-2.5
支持的模型:
gpt-5(默认)gpt-4, gpt-3.5-turboclaude-4-opus, claude-4-sonnet, claude-sonnet-4.5gemini-2.5-pro, gemini-2.5-flashfunction jsonToTonl(
data: Record<string, unknown>[],
name?: string,
options?: ConvertOptions
): string
将对象数组转换为 TONL 格式。
参数:
data - 具有一致模式的对象数组name - 集合名称(默认:"data")options - 转换选项
flattenNested - 展平嵌套对象(默认:false)返回值: TONL 格式的字符串
抛出异常: 如果数据不是数组或模式验证失败
function tonlToJson(tonl: string): Record<string, unknown>[]
将 TONL 格式解析回 JSON 数组。
参数:
tonl - TONL 格式的字符串返回值: 对象数组
抛出异常: 如果格式无效,则抛出 TonlParseError
function calculateRealSavings(
jsonStr: string,
tonlStr: string,
model: ModelName
): TokenSavings
使用真实分词器计算 token 节省。
参数:
jsonStr - JSON 字符串tonlStr - TONL 字符串model - 分词器模型名称返回值:
interface TokenSavings {
originalTokens: number;
compressedTokens: number;
savedTokens: number;
savingsPercent: number;
}
import { yamlToTonl, tonlToYaml } from 'tonl-mcp-bridge';
const yamlStr = `
- role: assistant
context: technical
tone: professional
`;
const tonl = yamlToTonl(yamlStr, 'prompts');
const yaml = tonlToYaml(tonl);
const data = [{
id: 1,
user: { name: "Alice", email: "alice@example.com" },
tags: ["developer", "typescript"]
}];
// 保留嵌套结构
const tonl = jsonToTonl(data);
// data[1]{id:i8,user:obj,tags:arr}:
// 1, {name:Alice,email:alice@example.com}, [developer,typescript]
// 展平嵌套对象
const tonlFlat = jsonToTonl(data, 'data', { flattenNested: true });
// data[1]{id:i8,user_name:str,user_email:str,tags:arr}:
// 1, Alice, alice@example.com, [developer,typescript]
TONL-MCP Bridge 包含一个 Model Context Protocol 服务器,用于与 AI 助手集成。
# 启动 MCP 服务器
npm run mcp:start
# 或使用二进制文件
tonl-mcp-server
MCP 服务器暴露三个工具:
添加到 claude_desktop_config.json:
{
"mcpServers": {
"tonl": {
"command": "node",
"args": ["/path/to/tonl-mcp-bridge/dist/mcp/index.js"]
}
}
}
npx @modelcontextprotocol/inspector node dist/mcp/index.js
TONL SDK 提供无缝数据库集成,并自动进行 TONL 转换。目前支持 PostgreSQL,更多数据库即将推出。
import { PostgresAdapter } from 'tonl-mcp-bridge';
const db = new PostgresAdapter({
host: 'localhost',
port: 5432,
database: 'myapp',
user: 'admin',
password: 'secret'
});
await db.connect();
// 简单查询
const result = await db.query('SELECT * FROM users');
// 查询并自动进行 TONL 转换
const tonlResult = await db.queryToTonl('SELECT * FROM users', 'users');
console.log(tonlResult.tonl);
// 查询并统计 token
const stats = await db.queryWithStats(
'SELECT * FROM users',
'users',
{ model: 'gpt-5' }
);
console.log(`原始: ${stats.stats.originalTokens} tokens`);
console.log(`TONL: ${stats.stats.compressedTokens} tokens`);
console.log(`节省: ${stats.stats.savingsPercent}%`);
await db.disconnect();
使用 PostgreSQL 中的 10 条用户记录进行测试:
| 格式 | Token 数 | 节省 |
|---|---|---|
| JSON | 431 | - |
| TONL | 212 | 50.8% |
成本影响(GPT-4o,每百万输入 token 3 美元):
节省按查询量线性增长
我们提供了一个完整的演示设置,使用 Docker:
cd examples/sdk-demo
docker-compose up -d
npx tsx demo.ts
查看实时 token 节省,使用真实的 PostgreSQL 数据!
v0.6.0:
即将推出:
TONL 自动选择最优数值类型:
{ id: 1 } // i8 (1 字节,-128 到 127)
{ id: 1000 } // i16 (2 字节,-32,768 到 32,767)
{ id: 100000 } // i32 (4 字节,-2B 到 2B)
{ price: 19.99 } // f32 (32 位浮点数)
{ score: 3.14159265359 } // f64 (64 位浮点数)
支持的类型:
i8, i16, i32, i64f32, f64strbooldate, datetime, null, obj, arr输入格式 核心引擎 输出
┌──────────┐ ┌──────────┐ ┌──────────┐
│ JSON │─────────▶│ 类型 │─────────▶│ TONL │
│ YAML │ │ 检测器 │ │ 格式 │
└──────────┘ └──────────┘ └──────────┘
│
┌──────────┐
│ 模式 │
│ 验证器 │
└──────────┘
│
┌──────────┐
│ 分词器 │
│ (真实) │
└──────────┘
核心组件:
git clone https://github.com/kryptomrx/tonl-mcp-bridge.git
cd tonl-mcp-bridge
npm install
# 运行测试
npm test
# 监控模式
npm run test:watch
# 覆盖报告
npm run test:coverage
npm run build
# 代码检查
npm run lint
# 格式化
npm run format
操作基准(100 个对象,嵌套结构):
| 操作 | 时间 | 吞吐量 |
|---|---|---|
| JSON → TONL | 2.3ms | 43,478 次/秒 |
| TONL → JSON | 1.8ms | 55,555 次/秒 |
| 流式传输(10MB) | 145ms | 68 MB/秒 |
| 批量(50 个文件) | 89ms | 561 个文件/秒 |
内存使用: