玑衡 Jiheng:给 AI Agent 的精确数学执行层(DSH 插件)

前言

写 Agent 的人都会遇到一类问题:模型推理没问题,但让它算 1/3 + 1/6,它可能直接给 0.5,也可能给 0.3333333333333333。更麻烦的是金融和工程场景,金额、税率、复利、单位换算一旦被静默舍入,错误会一路传进报价和报表,而且没人发现。

已有做法通常是两条路:让模型自己心算,或者给它一个 Python 代码执行器。前者必然有舍入风险;后者的问题是模型必须先写对代码,且每次启动解释器都有开销。玑衡 Jiheng 的做法不同:它不做推理,只做计算,而且明确承诺「要么给出精确值,要么明确告诉你为什么给不了」——既不静默舍入,也不静默失败。

Jiheng 由 CQQOOQ123 维护,源码在 GitHub:https://github.com/CQQOOQ123/jiheng ,社区目录页是 https://www.skillhub.cn/plugins/CQQOOQ123/jiheng ,分类为工作流。它既可以作为 MCP 服务器接入 Claude Desktop、Cursor、Codex 等客户端,也可以作为 DSH 插件装载。下面按「是什么 → 能做什么 → 怎么装 → 怎么用 → 适合谁」的顺序介绍。

这是什么

一句话定位:给 AI Agent / MCP 客户端使用的精确数学执行层,覆盖分数、根号、符号、统计、金融、单位、日期。它不负责读题、建模、推理,那部分仍然交给 LLM;它只保证「已经拿到的数字」算得准、算得干净。

两个接入形态:

  • MCP 服务器:uvx jiheng-mcp,在客户端配置里加一段 JSON 即可。
  • DSH 插件:@local/jiheng,装载后在设置页提供状态查看与策略配置。

核心功能

1、精确计算,不静默舍入。 1/3 保留分数形式,sqrt(2) 保留根号,2^200 逐位精确。结果文本里十进制结果与精确形式同时给出。

2、fail-loud 错误契约。 计算失败时返回 isError: true,文本中包含可修正的提示,让模型能自己调整表达式重试;不会返回「看起来对的错数」或猜一个单位蒙混过去。

3、19 个能力包,覆盖面较广。 统计、金融、工程、单位、日期、分布、ODE、线代等。README 给出的代价对比表显示,它在本地运行、无需 API key、热延迟约 3ms/次。

4、AI 原生接口设计。 支持一次调用提交多个命名 steps(中间变量),减少模型与工具之间的往返;提供 functions() 列出全部函数、help("name") 查询单个函数签名。

5、权限与范围克制。 不连接数据库、不抓网页、不读文件、不保存凭据、不发起网络请求。设计意图是让计算器保持小、可审计、可离线。

可信度指标按 README 原文:19,000 条表达式级验收、1,000 条综合验收、19 个能力包;另有 1000 题混合基准得分 97.6% 的结论,详见仓库内 BENCHMARKS.md。

安装与启用

DSH 插件方式

plugin_manager install_bundle target="D:\AI\DeepSeek-workplace\创造模式\dsh-calc"
plugin_manager set_bundle target="@local/jiheng" enabled=true

第一步把 bundle 内容安装到指定目录,第二步启用 @local/jiheng。装载后工具表出现 calc,设置 → 计算器 出现配置页。注意 target 路径替换为你实际的插件目录,README 示例用的是 Windows 路径。

MCP 服务器方式

先装 uv(已装可跳过):

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows PowerShell
irm https://astral.sh/uv/install.ps1 | iex

在 Claude Desktop、Cursor、Codex 等客户端的配置里加入:

{
  "mcpServers": {
    "jiheng": { "command": "uvx", "args": ["jiheng-mcp"] }
  }
}

首次启动 uvx 会自动下载 jiheng-mcp,之后走本地缓存。

其他安装方式:

方式 命令
PyPI(pip) pip install jiheng-mcp
本地目录开发 uvx --from ./dsh-calc jiheng-mcp
直接从 git uvx --from git+https://github.com/CQQOOQ123/jiheng jiheng-mcp

如果 uv pip install jiheng-mcp==x.y.z 报 unsatisfiable 但 PyPI 页面已有该版本,先执行 uv cache clean jiheng-mcp 再试;仍失败则执行完整 uv cache clean,通常是 uv 本地缓存了旧索引。

典型用法

装载后直接给模型下指令即可,例如:「用 calc 算 1/3 + 1/6」「用 calc 算 mean([12,15,9,22])」。也可以看工具调用本身的参数形式。

工具接收一个 JSON 参数,只有三个可选字段:

{
  "expr": "最终表达式(可省略,若 steps 已给出结果)",
  "steps": [{"name": "中间变量名", "expr": "子表达式"}],
  "defs": {"const": {"k": 1.05}, "fn": {"f": {"p": ["x"], "e": "x^2"}}}
}

返回 content[0].text 为十进制优先结果并附精确形式;出错时 isError: true,文本含可修正提示。

几个来自 README 的调用示例:

calc(expr="1/3 + 1/6")                         → 1/2
calc(expr="sqrt(2)*sqrt(2)")                   → 2
calc(expr="mean([12,15,9,22])")                → 14.5
calc(expr="loan_pmt(1000000, 0.049, 20)")      → 月供
calc(expr="black_scholes_call(115,113,1,0.05,0.30)")
calc(expr="npv(0.08, [623,644,431,286], 1)")   → start=1 表示首笔第 1 年末
calc(expr="functions()")                       → 全部函数名
calc(expr="help(\"norm_cdf\")")                → norm_cdf(x, mu, sigma) — 正态累积分布

多步一次提交,减少往返。下面这个例子把 Black-Scholes 拆成 d1、d2、C 三步:

{
  "steps": [
    {"name": "d1", "expr": "(ln(115/113)+(0.05+0.3^2/2)*1)/(0.3*sqrt(1))"},
    {"name": "d2", "expr": "d1-0.3*sqrt(1)"},
    {"name": "C", "expr": "115*norm_cdf(d1)-113*exp(-0.05)*norm_cdf(d2)"}
  ]
}

一个容易踩的坑,README 专门标注过:N(expr, digits) 是数值求值,不是正态 CDF;CDF 要用 norm_cdf(x)。

函数覆盖面按类别列一句:

  • 运算/常量:+ - * / % ** ^、pi、e
  • 统计:sum mean std std_pop std_sample var_pop var_sample median quantile min max count corr cov regression
  • 金融:loan_pmt npv(rate, flows[, start]) annuity_pv discount_factor irr bond_price bond_duration black_scholes_call black_scholes_put irr_all
  • 单位:unit_convert unit_add unit_mul unit_div unit_pow unit_eval + convert
  • 日期:days_between date_add weekday
  • 符号:solve diff integrate simplify expand factor subs limit series taylor
  • 工程:stress strain bending_stress beam_cantilever_point heat_flux thermal_resistance
  • 分布:norm_pdf norm_cdf norm_quantile t_pdf chi2_pdf

完整 61+ 函数见仓库 AI-USAGE.md。

配置与策略

使用策略(policy)。 可在设置页选,也可写进 cordis.patch.yml 的 config.policy:

policy 行为
always 任何计算都调工具
complex 只在数组统计、金额、单位、符号、3+ 步、大数时调(默认)
auto 模型自判
never 不注册工具
custom 用 customRules 自然语言规则

默认 complex 意味着普通四则运算不会强制走工具,只在金额、分数、单位、符号这类专业计算上插入,减少模型调用工具的开销。

限额。 设置 → 计算器 → 限额,写入 <calcHome>/settings.json,立即生效(默认值取自 README):

限额 默认 超限行为
max_series 10000 报错
max_output_items 200 列表转摘要
max_expr_chars 2000 报错
max_steps 50 报错
max_symbol_len / max_decimal_len 120 / 4000 降级为数值 + exact=false
exact_only 1 长符号表达式保留精确形式(同时给 d)
strict_numeric 0 1=无法精确表示时报错

Worker 池。 默认 1 个常驻进程,单次约 3ms。高并发或重符号任务可以开池,仍在 cordis.patch.yml 里配置:

workers: 1        # 1..maxWorkers,或 auto
maxWorkers: 8     # 硬上限 16;每个约 52MB

auto 表示起始 1 个,忙时自动扩到 maxWorkers。设置页可查看运行中/就绪状态并切换。对外接口有 GET/POST /calc/workers 和 POST /calc/batch(1..200 条表达式并行);worker 启动完成会发 {"ready":true} 握手,扩容后等全部就绪再返回。

环境变量。 常用几项:DSH_CALC_PYTHON 指定 worker 解释器(默认自动探测),DSH_CALC_HOME 指定公式/设置目录(默认 ./.calc 或 ~/.calc),DSH_CALC_TIMEOUT_MS 单次求值超时(默认 8000ms)。完整列表见 README。

架构层面。 DSH Host(Node,常驻)里的 index.js 注册 calc / calc_shard 两个工具,通过 JSON 行协议 spawn 1..N 个 worker.py 常驻进程,求值逻辑在 calc_core.py 里做 AST 白名单 + 精确有理数(Frac)。源码层面值得看一眼的是 worker 与 AST 白名单,这决定了它能执行什么、拒绝什么。

适用场景与注意

适合的场景:

  • 金融、量化类 Agent:金额、复利、折现、期权定价,不能容忍浮点舍入。
  • 工程和数据类 Agent:单位换算、日期跨度、列统计,口径要固定。
  • 需要「现成函数 + 稳定可解析输出」而不想把 Python 调用逻辑写进 Agent 里的场景。
  • 本地运行、无 API key、延迟敏感的场景(约 3ms/次,无网络往返)。

不太适合的场景,README 也写明了:

  • Risch 级符号积分、Meijer-G、PDE——符号深度是「够用,非 Wolfram 级」,这类需求用 Wolfram / Mathematica(或 SymPy)。
  • 大型 CSV / DataFrame 处理——Jiheng 不读文件,先取数据再交给它算。
  • 实时行情、新闻、网页查询——这是计算层不是数据层,需要先由别的 MCP 工具取数。
  • 任意编程任务——那该用代码解释器。

数据链路的分工大致是这样:数据库 MCP 或文件 MCP 取数返回数组,Jiheng 接收数字做统计、金融、单位、日期计算,大表 join / ETL 交给 DuckDB 或代码执行,画图交给图表 MCP。README 给出的典型例子是取 12 个月营收后算 CAGR、mean、NPV。

使用前的检查: Jiheng 的 DSH 插件以当前 dsh 进程权限运行,安装前建议打开源码核对 calc_core.py 的 AST 白名单、cordis.patch.yml 的配置项,以及仓库许可证(README 标注为 MIT,package.json 中 license: "MIT",版本 0.3.9)。社区目录页本身是独立站点,与 DeepSeek / 幻方无官方从属关系。插件线索中的星标数为 0,生态活跃度需要自己评估。

结尾

Jiheng 的价值不在「又一个计算器」,而在它划清了界线:推理是 LLM 的事,精确计算是它的事,两者用一个 calc 工具衔接,既不让模型心算、也不让它写代码。如果你的 Agent 输出里出现过「看起来对的错数」,花几分钟装一个本地运行、无需 API key 的插件,大概率比继续调提示词划算。

  • GitHub:https://github.com/CQQOOQ123/jiheng
  • 社区目录页:https://www.skillhub.cn/plugins/CQQOOQ123/jiheng
  • 详细文档入口:仓库内 AI-USAGE.md(函数清单)、PACKS.md(能力包)、QUALITY.md(质量审计)、BENCHMARKS.md(基准与限制)、llms.txt
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜