璣衡 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
羽毛球分组比赛记分
小程序二维码

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

小夜