前言¶
写 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