@huicai/cli 2026.714.0 → 2026.721.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/README.md +2 -1
  2. package/bin/huicai.js +83 -0
  3. package/package.json +2 -2
  4. package/skills/ab-testing/SKILL.md +58 -0
  5. package/skills/ab-testing/scripts/__pycache__/ab_test.cpython-312.pyc +0 -0
  6. package/skills/ab-testing/scripts/ab_test.py +71 -0
  7. package/skills/academic-writing/SKILL.md +54 -0
  8. package/skills/accounting-ops/SKILL.md +68 -0
  9. package/skills/accounting-ops/scripts/__pycache__/acct_tools.cpython-312.pyc +0 -0
  10. package/skills/accounting-ops/scripts/acct_tools.py +89 -0
  11. package/skills/ai-agent/SKILL.md +85 -0
  12. package/skills/ai-agent/references/tool-design-checklist.md +51 -0
  13. package/skills/ai-aiops/SKILL.md +73 -0
  14. package/skills/ai-aiops/references/aiops-rollout-checklist.md +36 -0
  15. package/skills/ai-coding/SKILL.md +89 -0
  16. package/skills/ai-coding/references/task-brief-template.md +48 -0
  17. package/skills/ai-compliance/SKILL.md +74 -0
  18. package/skills/ai-compliance/references/genai-compliance-checklist.md +40 -0
  19. package/skills/ai-eval/SKILL.md +80 -0
  20. package/skills/ai-eval/scripts/eval-runner.py +150 -0
  21. package/skills/ai-llm-app/SKILL.md +90 -0
  22. package/skills/ai-llm-app/references/llm-integration-checklist.md +39 -0
  23. package/skills/ai-mlops/SKILL.md +72 -0
  24. package/skills/ai-mlops/scripts/token-cost-calc.py +108 -0
  25. package/skills/ai-multimodal/SKILL.md +86 -0
  26. package/skills/ai-multimodal/scripts/field-validate.py +182 -0
  27. package/skills/ai-prompt/SKILL.md +75 -0
  28. package/skills/ai-prompt/references/prompt-template.md +46 -0
  29. package/skills/ai-rag/SKILL.md +76 -0
  30. package/skills/ai-rag/scripts/chunk-inspect.py +129 -0
  31. package/skills/anomaly-detection/SKILL.md +54 -0
  32. package/skills/anomaly-detection/scripts/__pycache__/anomaly.cpython-312.pyc +0 -0
  33. package/skills/anomaly-detection/scripts/anomaly.py +99 -0
  34. package/skills/api-integration/SKILL.md +74 -0
  35. package/skills/api-integration/references/signing-recipes.md +141 -0
  36. package/skills/arch-design/SKILL.md +57 -0
  37. package/skills/arch-distributed/SKILL.md +81 -0
  38. package/skills/arch-distributed/references/idempotency-review.md +43 -0
  39. package/skills/arch-multitenant/SKILL.md +73 -0
  40. package/skills/arch-multitenant/references/tenant-isolation-checklist.md +34 -0
  41. package/skills/audit-assist/SKILL.md +63 -0
  42. package/skills/audit-assist/scripts/__pycache__/audit_sampling.cpython-312.pyc +0 -0
  43. package/skills/audit-assist/scripts/audit_sampling.py +93 -0
  44. package/skills/audit-chain/SKILL.md +60 -0
  45. package/skills/banking-credit/SKILL.md +59 -0
  46. package/skills/banking-credit/scripts/__pycache__/credit_metrics.cpython-312.pyc +0 -0
  47. package/skills/banking-credit/scripts/credit_metrics.py +53 -0
  48. package/skills/brand-design/SKILL.md +56 -0
  49. package/skills/business-plan/SKILL.md +56 -0
  50. package/skills/capital-ops/SKILL.md +52 -0
  51. package/skills/cicd-pipeline/SKILL.md +85 -0
  52. package/skills/cicd-pipeline/references/pipeline-review-checklist.md +39 -0
  53. package/skills/content-creation/SKILL.md +56 -0
  54. package/skills/corporate-governance/SKILL.md +56 -0
  55. package/skills/crawl-chain/SKILL.md +61 -0
  56. package/skills/customer-service/SKILL.md +51 -0
  57. package/skills/data-analysis/SKILL.md +46 -0
  58. package/skills/data-analysis/scripts/cjk_font.py +56 -0
  59. package/skills/data-chain/SKILL.md +54 -0
  60. package/skills/data-governance/SKILL.md +54 -0
  61. package/skills/data-report-pro/SKILL.md +65 -0
  62. package/skills/data-report-pro/scripts/__pycache__/bigdata.cpython-312.pyc +0 -0
  63. package/skills/data-report-pro/scripts/bigdata.py +79 -0
  64. package/skills/data-streaming/SKILL.md +87 -0
  65. package/skills/data-streaming/references/job-checklist.md +36 -0
  66. package/skills/data-wrangling/SKILL.md +52 -0
  67. package/skills/data-wrangling/scripts/__pycache__/join_tools.cpython-312.pyc +0 -0
  68. package/skills/data-wrangling/scripts/join_tools.py +99 -0
  69. package/skills/db-es/SKILL.md +68 -0
  70. package/skills/db-es/scripts/es-health.sh +72 -0
  71. package/skills/db-migration/SKILL.md +72 -0
  72. package/skills/db-migration/scripts/checksum-mysql.sql +46 -0
  73. package/skills/db-migration/scripts/checksum-postgres.sql +39 -0
  74. package/skills/db-migration/scripts/compare-reports.py +98 -0
  75. package/skills/db-mysql/SKILL.md +78 -0
  76. package/skills/db-mysql/scripts/mysql-health.sql +80 -0
  77. package/skills/db-postgres/SKILL.md +86 -0
  78. package/skills/db-postgres/scripts/pg-health.sql +67 -0
  79. package/skills/db-redis/SKILL.md +83 -0
  80. package/skills/db-redis/scripts/redis-health.sh +92 -0
  81. package/skills/dev-cpp/SKILL.md +94 -0
  82. package/skills/dev-cpp/references/cmake-sanitizer-snippets.md +56 -0
  83. package/skills/dev-cross-platform/SKILL.md +73 -0
  84. package/skills/dev-cross-platform/references/capability-matrix-template.md +39 -0
  85. package/skills/dev-csharp/SKILL.md +96 -0
  86. package/skills/dev-csharp/references/review-checklist.md +37 -0
  87. package/skills/dev-frontend/SKILL.md +91 -0
  88. package/skills/dev-frontend/scripts/bundle-budget.py +106 -0
  89. package/skills/dev-go/SKILL.md +88 -0
  90. package/skills/dev-go/scripts/go-triage.sh +54 -0
  91. package/skills/dev-harmony/SKILL.md +64 -0
  92. package/skills/dev-harmony/references/harmony-checklist.md +40 -0
  93. package/skills/dev-java/SKILL.md +77 -0
  94. package/skills/dev-java/scripts/jvm-triage.sh +84 -0
  95. package/skills/dev-mobile/SKILL.md +82 -0
  96. package/skills/dev-mobile/references/store-compliance-checklist.md +33 -0
  97. package/skills/dev-node/SKILL.md +82 -0
  98. package/skills/dev-node/scripts/node-triage.sh +78 -0
  99. package/skills/dev-php/SKILL.md +86 -0
  100. package/skills/dev-php/scripts/fpm-calc.py +48 -0
  101. package/skills/dev-python/SKILL.md +81 -0
  102. package/skills/dev-python/scripts/venv-doctor.sh +75 -0
  103. package/skills/dev-rust/SKILL.md +84 -0
  104. package/skills/dev-rust/references/cargo-ci-snippets.md +50 -0
  105. package/skills/dev-toolchain/SKILL.md +78 -0
  106. package/skills/dev-toolchain/scripts/secret-scan.sh +83 -0
  107. package/skills/doc-chain/SKILL.md +58 -0
  108. package/skills/doc-compare/SKILL.md +44 -0
  109. package/skills/doc-compare/scripts/compare.py +93 -0
  110. package/skills/docx-author/SKILL.md +39 -0
  111. package/skills/docx-author/scripts/docx_doc.py +161 -0
  112. package/skills/ecommerce-ops/SKILL.md +54 -0
  113. package/skills/ecommerce-ops/scripts/__pycache__/gmv_decompose.cpython-312.pyc +0 -0
  114. package/skills/ecommerce-ops/scripts/gmv_decompose.py +61 -0
  115. package/skills/education-training/SKILL.md +53 -0
  116. package/skills/ehs-safety/SKILL.md +63 -0
  117. package/skills/email-writing/SKILL.md +52 -0
  118. package/skills/eng-ai/SKILL.md +74 -0
  119. package/skills/eng-ai/references/ai-feature-checklist.md +36 -0
  120. package/skills/eng-architecture/SKILL.md +85 -0
  121. package/skills/eng-architecture/scripts/capacity-calc.py +100 -0
  122. package/skills/eng-automation/SKILL.md +84 -0
  123. package/skills/eng-automation/references/automation-inventory.md +38 -0
  124. package/skills/eng-automation/references/routine-presets.md +73 -0
  125. package/skills/eng-collaboration/SKILL.md +76 -0
  126. package/skills/eng-collaboration/references/collab-templates.md +43 -0
  127. package/skills/eng-complex-env/SKILL.md +84 -0
  128. package/skills/eng-complex-env/references/env-dossier-template.md +52 -0
  129. package/skills/eng-complex-env/scripts/env-recon.sh +152 -0
  130. package/skills/eng-data-platform/SKILL.md +81 -0
  131. package/skills/eng-data-platform/references/table-spec-template.md +39 -0
  132. package/skills/eng-database/SKILL.md +79 -0
  133. package/skills/eng-database/references/schema-review-checklist.md +37 -0
  134. package/skills/eng-develop/SKILL.md +76 -0
  135. package/skills/eng-develop/references/dod-checklist.md +43 -0
  136. package/skills/eng-docs/SKILL.md +71 -0
  137. package/skills/eng-docs/references/runbook-template.md +57 -0
  138. package/skills/eng-efficiency/SKILL.md +75 -0
  139. package/skills/eng-efficiency/scripts/dora-calc.py +104 -0
  140. package/skills/eng-infra/SKILL.md +81 -0
  141. package/skills/eng-infra/references/production-readiness.md +46 -0
  142. package/skills/eng-integration/SKILL.md +82 -0
  143. package/skills/eng-integration/references/integration-dossier-template.md +38 -0
  144. package/skills/eng-legacy/SKILL.md +81 -0
  145. package/skills/eng-legacy/references/modernization-workbook.md +46 -0
  146. package/skills/eng-observability/SKILL.md +78 -0
  147. package/skills/eng-observability/scripts/slo-calc.py +82 -0
  148. package/skills/eng-ops/SKILL.md +74 -0
  149. package/skills/eng-ops/references/postmortem-template.md +67 -0
  150. package/skills/eng-performance/SKILL.md +73 -0
  151. package/skills/eng-performance/scripts/perf-baseline.py +110 -0
  152. package/skills/eng-planning/SKILL.md +79 -0
  153. package/skills/eng-planning/scripts/schedule-calc.py +101 -0
  154. package/skills/eng-quality/SKILL.md +74 -0
  155. package/skills/eng-quality/references/test-plan-templates.md +46 -0
  156. package/skills/eng-release/SKILL.md +78 -0
  157. package/skills/eng-release/references/release-plan-template.md +36 -0
  158. package/skills/eng-reliability/SKILL.md +72 -0
  159. package/skills/eng-reliability/references/resilience-review.md +43 -0
  160. package/skills/eng-requirements/SKILL.md +86 -0
  161. package/skills/eng-requirements/references/story-templates.md +47 -0
  162. package/skills/eng-research/SKILL.md +73 -0
  163. package/skills/eng-research/references/research-templates.md +42 -0
  164. package/skills/eng-security/SKILL.md +73 -0
  165. package/skills/eng-security/references/security-review-checklist.md +33 -0
  166. package/skills/eng-ux/SKILL.md +85 -0
  167. package/skills/eng-ux/references/ux-review-checklist.md +36 -0
  168. package/skills/engineering-chain/SKILL.md +101 -0
  169. package/skills/engineering-chain/references/eng-health-review.md +37 -0
  170. package/skills/env-offline/SKILL.md +81 -0
  171. package/skills/env-offline/scripts/bundle-manifest.sh +94 -0
  172. package/skills/env-private-deploy/SKILL.md +72 -0
  173. package/skills/env-private-deploy/references/delivery-templates.md +35 -0
  174. package/skills/env-xinchuang/SKILL.md +73 -0
  175. package/skills/env-xinchuang/references/adaptation-matrix-template.md +41 -0
  176. package/skills/equipment-tpm/SKILL.md +56 -0
  177. package/skills/equipment-tpm/scripts/oee.py +58 -0
  178. package/skills/esg-report/SKILL.md +58 -0
  179. package/skills/esg-report/scripts/carbon_calc.py +61 -0
  180. package/skills/event-management/SKILL.md +51 -0
  181. package/skills/excel-analysis-chain/SKILL.md +73 -0
  182. package/skills/file-ingest/SKILL.md +51 -0
  183. package/skills/file-ingest/scripts/__pycache__/file_toolkit.cpython-312.pyc +0 -0
  184. package/skills/file-ingest/scripts/file_toolkit.py +404 -0
  185. package/skills/finance-analysis/SKILL.md +60 -0
  186. package/skills/finance-analysis/references/ratios.md +54 -0
  187. package/skills/finance-analysis/scripts/fin_ratios.py +132 -0
  188. package/skills/finance-chain/SKILL.md +59 -0
  189. package/skills/financial-modeling/SKILL.md +58 -0
  190. package/skills/financial-modeling/scripts/fin_model.py +123 -0
  191. package/skills/foreign-trade/SKILL.md +54 -0
  192. package/skills/funnel-cohort/SKILL.md +53 -0
  193. package/skills/funnel-cohort/scripts/__pycache__/funnel.cpython-312.pyc +0 -0
  194. package/skills/funnel-cohort/scripts/funnel.py +105 -0
  195. package/skills/gov-document/SKILL.md +57 -0
  196. package/skills/hr-chain/SKILL.md +51 -0
  197. package/skills/hr-operations/SKILL.md +53 -0
  198. package/skills/info-disclosure/SKILL.md +56 -0
  199. package/skills/infra-gateway/SKILL.md +85 -0
  200. package/skills/infra-gateway/references/golive-checklist.md +36 -0
  201. package/skills/infra-k8s/SKILL.md +78 -0
  202. package/skills/infra-k8s/scripts/k8s-triage.sh +84 -0
  203. package/skills/infra-mq/SKILL.md +87 -0
  204. package/skills/infra-mq/references/mq-review-checklist.md +36 -0
  205. package/skills/insurance-advisory/SKILL.md +57 -0
  206. package/skills/internal-audit/SKILL.md +66 -0
  207. package/skills/ip-management/SKILL.md +54 -0
  208. package/skills/ipo-listing/SKILL.md +60 -0
  209. package/skills/it-audit/SKILL.md +56 -0
  210. package/skills/itsm-ops/SKILL.md +55 -0
  211. package/skills/knowledge-sop/SKILL.md +51 -0
  212. package/skills/legal-chain/SKILL.md +55 -0
  213. package/skills/legal-contract/SKILL.md +58 -0
  214. package/skills/legal-contract/references/contract-checklists.md +59 -0
  215. package/skills/litigation-support/SKILL.md +53 -0
  216. package/skills/logistics-warehouse/SKILL.md +53 -0
  217. package/skills/logistics-warehouse/scripts/freight_check.py +71 -0
  218. package/skills/long-doc-analysis/SKILL.md +52 -0
  219. package/skills/management-accounting/SKILL.md +57 -0
  220. package/skills/management-accounting/scripts/__pycache__/costing.cpython-312.pyc +0 -0
  221. package/skills/management-accounting/scripts/costing.py +90 -0
  222. package/skills/manufacturing-chain/SKILL.md +57 -0
  223. package/skills/manufacturing-quality/SKILL.md +57 -0
  224. package/skills/manufacturing-quality/scripts/__pycache__/spc.cpython-312.pyc +0 -0
  225. package/skills/manufacturing-quality/scripts/spc.py +86 -0
  226. package/skills/marketing-analytics/SKILL.md +59 -0
  227. package/skills/marketing-analytics/scripts/__pycache__/rfm.cpython-312.pyc +0 -0
  228. package/skills/marketing-analytics/scripts/rfm.py +60 -0
  229. package/skills/marketing-chain/SKILL.md +57 -0
  230. package/skills/meeting-minutes/SKILL.md +55 -0
  231. package/skills/metrics-system/SKILL.md +55 -0
  232. package/skills/negotiation-prep/SKILL.md +56 -0
  233. package/skills/obs-prometheus/SKILL.md +74 -0
  234. package/skills/obs-prometheus/references/promql-cheatsheet.md +78 -0
  235. package/skills/office-automation/SKILL.md +54 -0
  236. package/skills/okr-review/SKILL.md +44 -0
  237. package/skills/ops-fleet/SKILL.md +69 -0
  238. package/skills/ops-fleet/scripts/batch-exec-guard.sh +119 -0
  239. package/skills/ops-linux/SKILL.md +69 -0
  240. package/skills/ops-linux/scripts/quick-triage.sh +138 -0
  241. package/skills/optimization-solver/SKILL.md +53 -0
  242. package/skills/optimization-solver/scripts/__pycache__/solver.cpython-312.pyc +0 -0
  243. package/skills/optimization-solver/scripts/solver.py +107 -0
  244. package/skills/pdf-toolkit/SKILL.md +43 -0
  245. package/skills/pdf-toolkit/scripts/pdf_ops.py +137 -0
  246. package/skills/pivot-crosstab/SKILL.md +44 -0
  247. package/skills/pivot-crosstab/scripts/__pycache__/pivot_tools.cpython-312.pyc +0 -0
  248. package/skills/pivot-crosstab/scripts/pivot_tools.py +90 -0
  249. package/skills/policy-analysis/SKILL.md +47 -0
  250. package/skills/portfolio-analysis/SKILL.md +56 -0
  251. package/skills/portfolio-analysis/scripts/__pycache__/portfolio.cpython-312.pyc +0 -0
  252. package/skills/portfolio-analysis/scripts/portfolio.py +78 -0
  253. package/skills/ppt-chain/SKILL.md +61 -0
  254. package/skills/pptx-author/SKILL.md +48 -0
  255. package/skills/pptx-author/scripts/pptx_deck.py +193 -0
  256. package/skills/pr-comms/SKILL.md +58 -0
  257. package/skills/pr-comms/references/pr-templates.md +54 -0
  258. package/skills/procurement-supply/SKILL.md +47 -0
  259. package/skills/procurement-supply/scripts/__pycache__/supply.cpython-312.pyc +0 -0
  260. package/skills/procurement-supply/scripts/supply.py +71 -0
  261. package/skills/product-design/SKILL.md +66 -0
  262. package/skills/product-design/references/prd-framework.md +60 -0
  263. package/skills/production-planning/SKILL.md +56 -0
  264. package/skills/production-planning/scripts/__pycache__/mrp_capacity.cpython-312.pyc +0 -0
  265. package/skills/production-planning/scripts/mrp_capacity.py +70 -0
  266. package/skills/project-management/SKILL.md +53 -0
  267. package/skills/project-management/scripts/__pycache__/cpm.cpython-312.pyc +0 -0
  268. package/skills/project-management/scripts/cpm.py +84 -0
  269. package/skills/project-proposal/SKILL.md +54 -0
  270. package/skills/project-proposal/scripts/budget_sheet.py +90 -0
  271. package/skills/qa-api-automation/SKILL.md +67 -0
  272. package/skills/qa-api-automation/references/three-layer-skeleton.md +61 -0
  273. package/skills/qa-mobile-automation/SKILL.md +70 -0
  274. package/skills/qa-mobile-automation/references/device-matrix-template.md +34 -0
  275. package/skills/qa-ui-automation/SKILL.md +80 -0
  276. package/skills/qa-ui-automation/references/stability-conventions.md +41 -0
  277. package/skills/quant-analysis/SKILL.md +60 -0
  278. package/skills/quant-analysis/scripts/__pycache__/quant.cpython-312.pyc +0 -0
  279. package/skills/quant-analysis/scripts/quant.py +102 -0
  280. package/skills/real-estate-property/SKILL.md +51 -0
  281. package/skills/real-estate-property/scripts/__pycache__/property_calc.cpython-312.pyc +0 -0
  282. package/skills/real-estate-property/scripts/property_calc.py +106 -0
  283. package/skills/regression-forecast/SKILL.md +52 -0
  284. package/skills/regression-forecast/scripts/__pycache__/regress.cpython-312.pyc +0 -0
  285. package/skills/regression-forecast/scripts/regress.py +106 -0
  286. package/skills/retail-store-ops/SKILL.md +57 -0
  287. package/skills/retail-store-ops/scripts/store_ops.py +57 -0
  288. package/skills/risk-compliance/SKILL.md +51 -0
  289. package/skills/sec-auth/SKILL.md +89 -0
  290. package/skills/sec-auth/references/auth-review-checklist.md +38 -0
  291. package/skills/sec-compliance/SKILL.md +74 -0
  292. package/skills/sec-compliance/references/dengbao-checklist.md +43 -0
  293. package/skills/securities-chain/SKILL.md +69 -0
  294. package/skills/securities-research/SKILL.md +58 -0
  295. package/skills/securities-research/scripts/__pycache__/valuation.cpython-312.pyc +0 -0
  296. package/skills/securities-research/scripts/valuation.py +93 -0
  297. package/skills/slides-html/SKILL.md +50 -0
  298. package/skills/slides-html/scripts/template.html +117 -0
  299. package/skills/statistical-testing/SKILL.md +51 -0
  300. package/skills/statistical-testing/scripts/__pycache__/stat_tests.cpython-312.pyc +0 -0
  301. package/skills/statistical-testing/scripts/stat_tests.py +131 -0
  302. package/skills/strategy-planning/SKILL.md +53 -0
  303. package/skills/supply-chain/SKILL.md +53 -0
  304. package/skills/tax-compliance/SKILL.md +57 -0
  305. package/skills/tax-compliance/scripts/tax_calc.py +90 -0
  306. package/skills/tech-research/SKILL.md +55 -0
  307. package/skills/tech-research/references/research-framework.md +50 -0
  308. package/skills/tender-bidding/SKILL.md +65 -0
  309. package/skills/tender-bidding/references/bid-checklist.md +44 -0
  310. package/skills/translation-pro/SKILL.md +44 -0
  311. package/skills/treasury-mgmt/SKILL.md +56 -0
  312. package/skills/treasury-mgmt/scripts/__pycache__/cashflow_forecast.cpython-312.pyc +0 -0
  313. package/skills/treasury-mgmt/scripts/cashflow_forecast.py +51 -0
  314. package/skills/web-scraping/SKILL.md +81 -0
  315. package/skills/web-search/SKILL.md +67 -0
  316. package/skills/xlsx-analysis/SKILL.md +96 -0
  317. package/skills/xlsx-analysis/scripts/__pycache__/xlsx_toolkit.cpython-312.pyc +0 -0
  318. package/skills/xlsx-analysis/scripts/xlsx_style.py +71 -0
  319. package/skills/xlsx-analysis/scripts/xlsx_toolkit.py +335 -0
  320. package/src/agent.js +1 -1
  321. package/src/api.js +1 -1
  322. package/src/codeindex.js +1 -1
  323. package/src/commands.js +1 -1
  324. package/src/config.js +1 -1
  325. package/src/context.js +1 -1
  326. package/src/doccache.js +1 -0
  327. package/src/doctor.js +1 -1
  328. package/src/executors.js +1 -1
  329. package/src/input.js +1 -1
  330. package/src/permissions.js +1 -1
  331. package/src/pyruntime.js +1 -0
  332. package/src/repl.js +1 -1
  333. package/src/scan.js +1 -1
  334. package/src/tools.js +1 -1
  335. package/src/tui/app.js +1 -1
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: ai-llm-app
3
+ description: LLM 应用开发链(模型接入抽象层与多模型路由→超时重试的 LLM 特调→流式判据→结构化输出三层防线→函数调用工具 schema→上下文窗口预算→前缀/语义缓存判据→降级兜底链→提示注入防护→token 成本工程→录制回放测试)。eng-ai 的应用开发孙链:写 LLM 调用代码、输出不稳、上下文超限、AI 接口又慢又贵时载入。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # LLM 应用开发链
8
+
9
+ eng-ai 的应用开发孙链。心智基调:**把 LLM 当一个"能力强但不可靠的远程依赖"**——
10
+ 慢(秒级)、贵(按 token 计费)、非确定(同输入不同输出)、会一本正经地错(幻觉),四个特性决定全部工程设计。
11
+
12
+ ## 模型接入层
13
+
14
+ - **抽象层收口**:模型调用统一走内部封装(OpenAI 兼容协议是事实标准),业务代码不直连供应商 SDK——换模型/多供应商路由/统一计量都靠这层(eng-integration 防腐层同理);
15
+ - 多模型路由:按任务分级(分类/抽取类走小模型,复杂推理走大模型),按可用性主备(主模型故障自动切备,**备模型要定期用评测集验证**,别切过去才发现效果崩);
16
+ - 供应商配额与限流:客户端并发闸门+429 退避;配额余量监控(eng-integration 配额纪律)。
17
+
18
+ ## 超时重试的 LLM 特调
19
+
20
+ LLM 是最慢依赖,常规参数不适用:超时按 P99 生成时长定(长生成场景 60s+ 正常,**流式下改盯首 token 超时**+token 间隔超时);
21
+ 重试判据:超时/429/5xx 可重试(指数退避),**内容质量差不算失败不自动重试**(那是提示或模型问题,重试=烧钱抽奖);
22
+ 幂等注意:LLM 调用天然非幂等(重试结果不同),下游逻辑不得假设两次一致;
23
+ 成本护栏:重试也计费,重试预算与单请求 max_tokens 上限双闸(eng-reliability 重试预算)。
24
+
25
+ ## 流式判据
26
+
27
+ 用户盯着看的界面=必须流式(首 token 时延决定体感,总时长反而其次);
28
+ 机器消费的后台任务=非流式(省编码复杂度);
29
+ 流式工程要点:SSE 断线重连策略/前端渐进渲染防抖/**流中途出错的 UI 兜底**(已渲染一半怎么办:标注中断+可重试)/流式下结构化输出要攒完整再解析(或用增量解析器)。
30
+
31
+ ## 结构化输出三层防线
32
+
33
+ 1. **约束生成**:能用 JSON schema/函数调用强约束就用(供应商结构化输出能力优先),枚举字段给死选项;
34
+ 2. **校验**:出参过 schema 校验(zod/pydantic 思路)+业务规则校验(数值范围/枚举合法/引用存在);
35
+ 3. **修复与重试**:校验失败→携错误信息让模型重试一次(常能自愈)→仍失败走降级(默认值/人工队列);
36
+ 纪律:**模型输出永远当外部输入对待**(eng-security 一切外部输入不可信的 AI 延伸)——不 eval、不拼 SQL、不直接执行。
37
+
38
+ ## 函数调用(工具 schema 设计)
39
+
40
+ 工具名与描述就是提示工程:动词开头、说清"何时该用我"、参数描述给格式与示例;
41
+ 参数能枚举不自由(模型面对自由字符串就自由发挥);
42
+ 工具返回的错误要**可行动**("参数 date 需 YYYY-MM-DD 格式,收到 '昨天'"——模型靠错误信息自我修正,Agent 场景细则见 ai-agent);
43
+ 工具数量控制(几十个工具一起给=选择困难,按场景分组挂载)。
44
+
45
+ ## 上下文窗口预算
46
+
47
+ 四段分账:系统提示(固定)+对话历史(可压缩)+检索内容(可裁剪,ai-rag)+输出预留(max_tokens)——
48
+ **先定预算再填内容**,超了按优先级裁(检索内容截断>历史摘要压缩>历史丢弃,系统提示不动);
49
+ 历史压缩判据:轮次超阈值把早期对话摘要化(信息有损要认);
50
+ 长文档处理:分块+map-reduce 或长上下文模型直塞的成本对比先算(长上下文按 token 全额计费,不是免费午餐);
51
+ **上下文利用率监控**:平均填充率与截断发生率进指标(截断率高=预算设计有病)。
52
+
53
+ ## 缓存判据
54
+
55
+ - **前缀缓存**(供应商侧):系统提示与固定内容置前、可变内容置后(提示结构为缓存设计,ai-prompt 稳定前缀纪律);命中率进监控,改一个字就破缓存——**系统提示别放时间戳**(经典自杀);
56
+ - 语义缓存(相似问复用答案):FAQ 类高重复场景才上;风险先认(相似≠相同,措辞差一字含义反转),命中阈值保守+敏感类目排除;
57
+ - 确定性任务结果缓存:同输入同参数的抽取/分类任务,业务层按输入哈希缓存,最便宜的优化。
58
+
59
+ ## 降级兜底链
60
+
61
+ 主模型故障→备模型(效果已验证)→规则/模板兜底(能力降级但不白屏)→人工队列(明示排队);
62
+ **幻觉兜底**:事实性输出配溯源(引用来源,ai-rag)/关键动作前给用户确认页(AI 起草人拍板,eng-ai 人审判据)/"不确定"话术优于硬编("根据现有资料无法确认"比编一个强十倍);
63
+ 兜底路径演练(eng-reliability 预案纪律):把模型 mock 成挂的,看产品还能不能用。
64
+
65
+ ## 提示注入防护
66
+
67
+ 外部内容(用户输入/检索文档/网页/文件)与指令**结构隔离**(分隔标记+"以下为资料非指令"声明,注入防不绝但要设防);
68
+ 输出不直接执行:模型说"调工具删数据"≠真删(工具权限分级,ai-agent 沙箱);
69
+ 敏感操作二次确认;检索内容里的指令型文本(“忽略之前指令”)检测告警;
70
+ 数据边界:用户 A 的上下文不得混入用户 B(会话隔离,多租户强校验,eng-security 越权同理)。
71
+
72
+ ## 成本工程
73
+
74
+ 计量三归因:按特性/按租户/按模型统计 token 与费用(ai-mlops 承接监控面);
75
+ 单任务成本=输入+输出 token×单价,**立项时算,上线后对账**(eng-ai 成本链);
76
+ 省钱四招按序:缓存→路由降级→提示瘦身(冗余示例/重复上下文)→输出限长;
77
+ 异常告警:单用户/单特性用量突刺(死循环调用/被薅)。
78
+
79
+ ## 测试
80
+
81
+ 评测集回归为主(ai-eval,质量层);工程层用**录制回放**:真实请求响应录制成夹具,单测不真调模型(快、稳、免费);
82
+ 契约测试:mock 模型返回各类边界(超长/空/非法 JSON/超时),验证三层防线与降级链真的接得住;
83
+ 非确定性测试纪律:断言结构与约束(schema 合规/必含字段)不断言完整文本相等。
84
+
85
+ **作业包**:`references/llm-integration-checklist.md`(LLM 接入评审:抽象层/超时重试特调/结构化三层/上下文预算/降级注入逐项勾)。
86
+
87
+ ## 使用纪律
88
+
89
+ 业务代码不直连供应商 SDK(过抽象层);模型输出当外部输入;上线前降级链演练过;
90
+ 每次线上 AI 事故(超时雪崩/成本突刺/注入)回写本链判据;质量问题走 ai-eval/ai-prompt,别在应用层硬扛。
@@ -0,0 +1,39 @@
1
+ # LLM 接入评审单(ai-llm-app 落笔件:新 LLM 调用点上线前逐项勾)
2
+
3
+ ## 接入层
4
+
5
+ - [ ] 走统一抽象层,业务代码不直连供应商 SDK(换模型/路由/计量靠它)
6
+ - [ ] 模型路由:任务分级 __(小模型)/__(大模型);主备切换的备模型已用评测集验证
7
+ - [ ] 供应商限流应对:客户端并发闸 __;429 退避;配额余量监控
8
+
9
+ ## 慢与贵的特调
10
+
11
+ - [ ] 超时按 P99 生成时长(流式盯首 token 超时 __s + token 间隔超时 __s)
12
+ - [ ] 重试仅超时/429/5xx(退避);**内容差不重试**(烧钱抽奖);重试预算 ≤__%
13
+ - [ ] max_tokens 上限 __;单请求成本上限心算过(token-cost-calc)
14
+ - [ ] 流式判据:用户盯着看=流式;流中断 UI 兜底(标注中断+可重试)
15
+
16
+ ## 结构化输出三层
17
+
18
+ - [ ] ①schema/函数调用强约束(枚举给死) ②出参 schema+业务规则校验 ③失败携错误重试一次→降级
19
+ - [ ] **模型输出当外部输入**:不 eval/不拼 SQL/不直接执行/入库前校验
20
+
21
+ ## 上下文与缓存
22
+
23
+ - [ ] 窗口预算四段分账:系统 __ +历史 __ +检索 __ +输出预留 __;超载裁剪顺序已定
24
+ - [ ] 稳定前缀纪律:系统提示无时间戳/随机数;缓存命中率进监控
25
+ - [ ] 历史压缩策略:超 __ 轮摘要化(信息有损已认)
26
+
27
+ ## 降级与注入
28
+
29
+ - [ ] 降级链:主模型→ __ →规则/模板→人工;**演练过**(mock 挂了产品还能用)
30
+ - [ ] 幻觉兜底:溯源引用/置信度不足转人工/"不确定"话术(禁硬编)
31
+ - [ ] 注入防护:外部内容与指令结构隔离;会话与租户隔离强校验(跨用户上下文=P0)
32
+ - [ ] 敏感数据:入模型前过分级脱敏;外部 API=出域审批 __
33
+
34
+ ## 测试与观察
35
+
36
+ - [ ] 评测集回归接入(ai-eval;工程层录制回放夹具:超长/空/非法 JSON/超时四类边界 mock 过)
37
+ - [ ] 上线观察项:首 token 时延/错误率/兜底触发率/token 用量(突刺告警)
38
+
39
+ > 结论: □通过 □带条件(条件+Owner+期限) □打回。评审人 __ 日期 __
@@ -0,0 +1,72 @@
1
+ ---
2
+ name: ai-mlops
3
+ description: 模型服务与运维链(部署形态判据(API 托管/自部署/端侧)→自部署推理优化(量化/批处理/KV 缓存/并发排队)→服务治理(配额/优先级/过载保护)→三层监控(技术/质量/漂移)→成本归因与单位任务成本→数据回流与微调判据→模型-提示-参数三元组版本化与回滚)。eng-ai 的服务运维孙链:模型服务上线、AI 账单失控、效果悄悄衰减、自部署选型评估时载入。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 模型服务与运维链
8
+
9
+ eng-ai 的服务运维孙链。AI 服务=普通服务的全部运维要求(eng-ops/eng-observability 照单全收)
10
+ +三样特有:**质量会漂移、成本按 token 流血、变更三元组(模型/提示/参数)**。
11
+
12
+ ## 部署形态判据
13
+
14
+ | 形态 | 启用信号 | 代价 |
15
+ |---|---|---|
16
+ | API 托管(默认) | 快速起步/弹性需求/无强合规限制 | 数据出域评估(eng-security)/供应商依赖(多供应商路由对冲,ai-llm-app) |
17
+ | 开源自部署 | 数据不出域硬合规/用量大到自部署更省(先算账:GPU+运维人力 vs API 账单,**通常月账单十万级才值得认真算**)/深度定制 | GPU 采购运维/推理优化自己扛/模型迭代自己追 |
18
+ | 端侧小模型 | 离线可用/隐私极敏/超低延迟 | 能力天花板低/端适配碎片 |
19
+
20
+ 混合是常态:敏感场景自部署+通用场景 API;形态决策走 eng-research 评分卡(退出成本:提示与评测集可迁移,但行为差异要重校)。
21
+
22
+ ## 自部署推理优化(按 ROI 排序)
23
+
24
+ 服务引擎选型(vLLM 类连续批处理引擎是基线,裸跑框架=浪费卡);
25
+ **连续批处理**:吞吐的第一来源(并发请求动态拼批);
26
+ 量化:显存与吞吐换精度——**量化后必跑评测集**(ai-eval,精度损失要量化不要感觉);
27
+ KV 缓存与前缀复用:系统提示共享前缀命中(与 ai-llm-app 提示结构纪律联动);
28
+ 并发与排队:最大并发限制+排队上限+超时快拒(过载时排长队人人超时,不如快拒部分保另一部分,eng-reliability 背压);
29
+ GPU 监控专项:显存/利用率/温度进 eng-observability,**显存碎片与泄漏是自部署常客**。
30
+
31
+ ## 服务治理
32
+
33
+ 多租户配额:按租户/特性限 QPM 与 token 日额(一个失控脚本烧光全公司额度=真实事故);
34
+ 优先级队列:在线交互>批处理任务(批任务错峰跑,削峰填谷省容量);
35
+ 过载保护:限流+降级链(ai-llm-app:备模型/规则兜底)+熔断,容量口径用压测定(eng-performance,LLM 压测记得测长输出场景);
36
+ 网关统一收口:认证/计量/审计/路由在一处(ai-llm-app 抽象层的服务端形态)。
37
+
38
+ ## 三层监控(技术层会绿灯,质量层在流血)
39
+
40
+ - **技术层**(常规 RED,eng-observability):可用率/首 token 时延与总时延分开看/429 与超时率/队列深度;
41
+ - **质量层**:在线抽样评测分趋势(ai-eval 例程)/用户隐式信号(重试率/放弃率/点踩)/拒答率与兜底触发率——**质量指标进大盘,和可用率同屏**;
42
+ - **漂移层**:输入分布漂移(话题/长度/语种占比变化=用户在用新姿势,评测集可能已过时)/效果衰减(同一评测集分数走低)/上游模型静默升级检测(API 托管时供应商可能悄悄换模型——固定金丝雀题集每日跑,分数突变=上游变了);
43
+ 告警阈值:质量分连续下降/成本突刺/兜底触发率抬升,三者都要叫人(eng-observability 告警三问)。
44
+
45
+ ## 成本工程(token 是流动的钱)
46
+
47
+ 计量三归因:特性×租户×模型的 token 与费用日报(eng-automation 例程);
48
+ **单位任务成本**是北极星(每次问答/每份报告的成本趋势,总额会涨、单价要降,eng-infra FinOps 同理);
49
+ 预算与熔断:特性级月预算+80% 预警+超额降级策略(降小模型/限频,预先声明别静默断服务);
50
+ 优化路径复查(eng-ai 成本链):缓存命中率/路由分级命中率/平均输入输出长度趋势——**输入长度悄悄膨胀是最常见的隐性漏钱**(上下文利用率,ai-llm-app)。
51
+
52
+ ## 数据回流与微调判据
53
+
54
+ 回流管道:线上请求响应按合规采样落库(脱敏+分级+用户协议依据,eng-security)→标注→评测集补充(ai-eval)→(可选)微调语料;
55
+ **微调判据严格把关**(eng-ai:改风格/格式/领域黑话,不是灌知识):上微调前先确认 提示+RAG 已到瓶颈且评测集能证明;
56
+ 微调后:同一评测集对照基础模型(赢了多少/输了哪些象限),**微调模型也会过期**(基础模型升级后重评,常常新基座裸跑赢过老微调);
57
+ 数据资产纪律:标注数据版本化,训练数据可追溯(哪个模型用了哪批数据)。
58
+
59
+ ## 版本管理与发布(三元组纪律的运维面)
60
+
61
+ **模型/提示/参数三元组捆绑版本化**:任何一元变更=新版本,评测回归(ai-eval)→灰度(eng-release 金丝雀,质量指标进观察项)→全量;
62
+ 可回滚:三元组随时可整体回退(供应商模型下线风险→提前跟进废弃公告,老版本冻结期内完成迁移评测);
63
+ 变更事件打点(eng-observability 第四支柱):质量波动第一问"三元组谁动了";
64
+ API 托管的模型版本要**钉住显式版本号**,禁用 latest 漂移(eng-infra 镜像标签同则)。
65
+
66
+ **作业包**:`scripts/token-cost-calc.py`(usage.csv→按维度成本归因/占比/单位任务成本/输入膨胀提醒/预算对照)。
67
+
68
+ ## 使用纪律
69
+
70
+ 质量与成本指标与可用性同级运维(进值班看板);漂移金丝雀题集每日跑;
71
+ 每次成本/质量事故回写:预算护栏或监控盲区;
72
+ **AI 服务的成熟度=你多快发现"它变了":供应商换模型、用户换用法、数据换分布——三小时还是三周,差的就是这条链。**
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env python3
2
+ # Token 成本归因计算器(ai-mlops 成本工程"三归因/单位任务成本"的可执行版)。python3 stdlib,零依赖。
3
+ # 输入 usage.csv: 维度,模型,调用次数,输入token,输出token (维度=特性/租户,从网关计量导出,ai-llm-app 抽象层)
4
+ # 价格: --price "模型名:输入价:输出价" 可重复,单位=每百万 token 的货币数(元/美元自定,输出跟着口径走)
5
+ # 用法:
6
+ # python3 token-cost-calc.py usage.csv --price "big-model:12:36" --price "small-model:1:2" [--budget 5000]
7
+ # python3 token-cost-calc.py --selftest
8
+ # 退出码: 0=预算内 1=超预算(接月度巡检例程) 2=输入错。
9
+ import csv
10
+ import sys
11
+
12
+
13
+ def load(path):
14
+ rows = []
15
+ with open(path, encoding="utf-8") as f:
16
+ for ln in csv.reader(f):
17
+ if not ln or ln[0].startswith("#") or ln[0] in ("维度", "feature", "dim"):
18
+ continue
19
+ if len(ln) < 5:
20
+ continue
21
+ rows.append((ln[0].strip(), ln[1].strip(), int(ln[2]), int(ln[3]), int(ln[4])))
22
+ return rows
23
+
24
+
25
+ def report(rows, prices, budget):
26
+ if not rows:
27
+ print("[错误] usage.csv 无有效行(维度,模型,调用次数,输入token,输出token)")
28
+ return 2
29
+ agg = {}
30
+ unknown = set()
31
+ total = 0.0
32
+ for dim, model, calls, tin, tout in rows:
33
+ if model not in prices:
34
+ unknown.add(model)
35
+ continue
36
+ pin, pout = prices[model]
37
+ cost = tin / 1e6 * pin + tout / 1e6 * pout
38
+ a = agg.setdefault(dim, {"cost": 0.0, "calls": 0, "tin": 0, "tout": 0})
39
+ a["cost"] += cost
40
+ a["calls"] += calls
41
+ a["tin"] += tin
42
+ a["tout"] += tout
43
+ total += cost
44
+ if unknown:
45
+ print(f"[警告] 无价格的模型被跳过: {', '.join(sorted(unknown))} (补 --price)")
46
+ if not agg:
47
+ return 2
48
+ print(f"== Token 成本归因(合计 {total:,.2f}) ==")
49
+ print(f"{'维度':<16}{'成本':>10}{'占比':>7}{'调用':>10}{'单位任务成本':>12}{'平均输入tok':>12}")
50
+ for dim, a in sorted(agg.items(), key=lambda x: -x[1]["cost"]):
51
+ unit = a["cost"] / a["calls"] if a["calls"] else 0
52
+ avg_in = a["tin"] / a["calls"] if a["calls"] else 0
53
+ share = a["cost"] * 100 / total if total else 0
54
+ hot = " <== 头部,优化路径按序:缓存→路由降级→提示瘦身(eng-ai 成本链)" if share > 40 else ""
55
+ print(f"{dim:<16}{a['cost']:>10,.2f}{share:>6.0f}%{a['calls']:>10,}{unit:>12,.4f}{avg_in:>12,.0f}{hot}")
56
+ big_in = [d for d, a in agg.items() if a["calls"] and a["tin"] / a["calls"] > 8000]
57
+ if big_in:
58
+ print(f"[黄] 平均输入 >8K token 的维度: {', '.join(big_in)} —— 上下文膨胀是最常见隐性漏钱(检查检索 topK/历史压缩,ai-llm-app 预算)")
59
+ if budget is not None:
60
+ pct_ = total * 100 / budget if budget else 0
61
+ print(f"预算对照: {total:,.2f} / {budget:,.2f} ({pct_:.0f}%)")
62
+ if total > budget:
63
+ print("判定: [红] 超预算 —— 触发降级策略(预先声明的降小模型/限频,禁静默断服)")
64
+ return 1
65
+ if pct_ > 80:
66
+ print("判定: [黄] 达预算 80% 预警线")
67
+ print("纪律: 单位任务成本是北极星(总额会涨,单价要降);月度归因例程化(eng-automation)。")
68
+ return 0
69
+
70
+
71
+ def parse_prices(argv):
72
+ out = {}
73
+ i = 0
74
+ while i < len(argv):
75
+ if argv[i] == "--price" and i + 1 < len(argv):
76
+ parts = argv[i + 1].split(":")
77
+ if len(parts) == 3:
78
+ out[parts[0]] = (float(parts[1]), float(parts[2]))
79
+ i += 2
80
+ else:
81
+ i += 1
82
+ return out
83
+
84
+
85
+ def selftest():
86
+ import tempfile, os
87
+ with tempfile.TemporaryDirectory() as d:
88
+ f = os.path.join(d, "u.csv")
89
+ open(f, "w", encoding="utf-8").write(
90
+ "维度,模型,调用次数,输入token,输出token\n"
91
+ "合同问答,big-model,1200,42000000,2400000\n"
92
+ "票据识别,small-model,90000,180000000,9000000\n"
93
+ "会议纪要,big-model,300,9000000,3000000\n")
94
+ rc = report(load(f), {"big-model": (12, 36), "small-model": (1, 2)}, 1000)
95
+ assert rc in (0, 1)
96
+ print("\nselftest ok")
97
+ return 0
98
+
99
+
100
+ if __name__ == "__main__":
101
+ a = sys.argv[1:]
102
+ if "--selftest" in a:
103
+ sys.exit(selftest())
104
+ if not a:
105
+ print("用法: token-cost-calc.py usage.csv --price '模型:输入价:输出价' [--price ...] [--budget N] | --selftest")
106
+ sys.exit(2)
107
+ budget = float(a[a.index("--budget") + 1]) if "--budget" in a else None
108
+ sys.exit(report(load(a[0]), parse_prices(a), budget))
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: ai-multimodal
3
+ description: 多模态应用链(场景判据(文档解析/表格/图表/图像生成/语音)→文档解析管道式 vs VLM 端到端判据→OCR 工程(预处理/置信度分级转人工/关键字段规则校验)→表格专项(合并单元格/跨页)→图表读数低信任纪律→图像生成合规(肖像/版权/AI 标识)→语音转写与热词→多模态评测集分层→分辨率分级成本工程)。eng-ai 的多模态孙链:发票合同识别、扫描件处理、图表问答、会议转写、图像生成功能设计时载入。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 多模态应用链
8
+
9
+ eng-ai 的多模态孙链,办公平台的主场景(票据/合同/报表/会议)。总纪律与 ai-* 各链同源:
10
+ **评测集先行(ai-eval)、置信度不足转人工(eng-ai 人审)、关键数字可溯源**——多模态里"看错"比"想错"更隐蔽。
11
+
12
+ ## 场景判据表
13
+
14
+ | 场景 | 技术形态 | 要点 |
15
+ |---|---|---|
16
+ | 票据/证照识别 | OCR+结构化抽取 | 字段级准确率是唯一口径,规则校验兜底(见 OCR 节) |
17
+ | 合同/长文档 | 版式解析+分块(ai-rag 管道前段) | 表格与条款结构保真是难点 |
18
+ | 报表/图表理解 | VLM 读图 | **读数低信任**(见图表节) |
19
+ | 图像生成 | 文生图 | 办公配图/海报(brand-design 衔接);合规见生成节 |
20
+ | 语音会议 | ASR+说话人分离 | meeting-minutes 衔接;热词定制 |
21
+ | 拍照办公 | 手机拍摄件处理 | 预处理决定成败(dev-mobile 端上拍摄引导) |
22
+
23
+ ## 文档解析:管道式 vs VLM 端到端
24
+
25
+ - **管道式**(版式检测→OCR→结构还原→抽取):可控、可溯源、错误可定位到环节(坏例三分类思想,ai-rag 同构)、成本低——**默认起点,金额类字段必须走可溯源路径**;
26
+ - VLM 端到端(整页图直问模型):简单、对复杂版式鲁棒,但**幻觉风险**(没看清也答得流畅)+错误不可定位——适合低风险场景(摘要/分类)与管道兜底(版式怪异件);
27
+ - 混合常态:管道为主+VLM 处理管道失败件+VLM 校验管道结果(双通道对比,不一致转人工);
28
+ - 判据一句话:**输出要进账本/合同/审批的,用管道+校验;输出给人看着参考的,VLM 可**。
29
+
30
+ ## OCR 工程
31
+
32
+ - 预处理决定上限:纠偏/去噪/二值化判据/分辨率下限(低于阈值提示重拍而不是硬识,拍摄引导做在端上);
33
+ - 分类分治:印刷体/手写体/表格/印章分开对待(手写与印章单独评测,准确率预期要对业务讲清);
34
+ - **置信度分级**:高置信自动通过/中置信人工复核队列/低置信直接人工——阈值用评测集标定(ai-eval 校准思想),**复核队列的人机界面要好用**(逐字段对照原图,eng-ux);
35
+ - **关键字段规则校验**(便宜且必做):金额(大小写互验/合计=明细和)/日期合法性/证件号校验位/发票号规则/税率枚举——OCR 说"识别成功"不算数,**规则过了才算数**;
36
+ - 多要素勾稽:票面字段互验(金额×税率≈税额),不平即标记(anomaly 思想)。
37
+
38
+ ## 表格专项(办公场景的硬骨头)
39
+
40
+ 难点分层建测试集(ai-eval 样本分层):规则表格→合并单元格→无线表格→跨页表格→嵌套表格;
41
+ 结构还原口径:单元格内容准确率与**结构还原率**(行列关系对不对)分开测——内容全对结构错位=数字张冠李戴,比识别错更危险;
42
+ 跨页表格:表头继承与断行合并策略;
43
+ 输出格式:结构化(JSON/markdown 表)带单元格坐标(溯源到原图位置,复核界面靠它)。
44
+
45
+ ## 图表理解(读数低信任纪律)
46
+
47
+ **图表读数默认低信任**:VLM 从柱状图/折线图"读"出的数值是估计不是读取——
48
+ 关键数据回原始数(图表问答场景优先要底表,没有底表则输出标注"图上估读");
49
+ 适合的任务:趋势描述/结构理解/异常点指认(定性);不适合:精确数值抽取进报表(定量)——**定性可托,定量要源**;
50
+ 评测:图表理解单独评测集(定性判断准确率+读数误差分布)。
51
+
52
+ ## 图像生成(合规先行)
53
+
54
+ 办公场景判据:配图/示意图/海报初稿(brand-design 规范约束:品牌色与字体后期把控);
55
+ **合规红线**:真人肖像生成与深度合成的标识义务(按属地法规:AI 生成内容显式标识)/版权风险(风格模仿的边界)/敏感内容过滤(生成前提示词过滤+生成后内容审核双层);
56
+ 可用性纪律:生成结果人选后用(不直出),企业素材库沉淀(好结果入库复用,省成本);
57
+ 提示词资产化(ai-prompt 版本化同则)。
58
+
59
+ ## 语音转写
60
+
61
+ 会议场景链:ASR 转写→说话人分离→**热词定制**(人名/产品名/行业术语表,不定制=专名全错)→纪要生成(meeting-minutes 结构);
62
+ 质量分层:录音质量检测前置(提示改善拾音,预处理同 OCR 思想);
63
+ 转写稿标注置信度低的片段(纪要引用原话时人工核对该片段);
64
+ 合规:录音告知与同意(会议录制提示,legal 属地要求)。
65
+
66
+ ## 评测(ai-eval 方法+多模态特有)
67
+
68
+ 评测集分层:按难度(清晰扫描/手机拍摄/低质)×按类型(票据/表格/手写)——**线上分布对齐**(评测全是清晰件,线上全是手机拍=虚高);
69
+ 指标:字段级准确率(按字段报,金额字段单列)/结构还原率/端到端通过率(全字段对才算过);
70
+ 坏例回流:复核队列的人工修正=天然标注数据(回流评测集与优化,ai-eval 生命线);
71
+ 版本回归:OCR 引擎/VLM/提示变更跑全量评测(eng-ai 三元组纪律)。
72
+
73
+ ## 成本工程(多模态 token 贵)
74
+
75
+ 图片 token 与分辨率挂钩:**分辨率分级**(缩略图初判→高清重识低置信件,两级调用省大头);
76
+ 页数预算:长文档先版式过滤(空白页/无关页不进模型);
77
+ 批量错峰(非实时票据夜间批处理,ai-mlops 优先级队列);
78
+ 成本归因按场景(票据/合同/会议分开算单件成本,ai-mlops 单位任务成本)。
79
+
80
+ **作业包**:`scripts/field-validate.py`(身份证与统一社会信用代码校验位、金额数字↔大写互验、日期合法性、批量模式——规则过了才算识别成功)。
81
+
82
+ ## 使用纪律
83
+
84
+ 关键字段规则校验必配;置信度分级转人工;图表定量不直采;生成内容合规标识;
85
+ 评测集与线上分布对齐,坏例周回流;
86
+ 每次识别事故回写:样本入难度层+规则校验补一条——**多模态的信用=复核队列越来越短,而不是模型吹得越来越神**。
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/env python3
2
+ # 关键字段规则校验器(ai-multimodal"OCR 说成功不算数,规则过了才算数"的可执行版)。stdlib,零依赖。
3
+ # 支持: 身份证 18 位校验位 / 统一社会信用代码 / 金额数字↔中文大写互验 / 日期合法性 / 手机号。
4
+ # 用法:
5
+ # python3 field-validate.py idcard 11010519491231002X
6
+ # python3 field-validate.py uscc 91350100M000100Y43
7
+ # python3 field-validate.py amount 1234.56 壹仟贰佰叁拾肆元伍角陆分
8
+ # python3 field-validate.py date 2026-02-30
9
+ # python3 field-validate.py batch fields.csv # CSV: 类型,值[,辅助值] → 全量报告
10
+ # python3 field-validate.py --selftest
11
+ # 退出码: 0=全过 1=有不过(进人工复核队列) 2=输入错。OCR 管道里低置信+规则不过=必转人工。
12
+ import re
13
+ import sys
14
+ from datetime import datetime
15
+
16
+
17
+ def check_idcard(v, _extra=""):
18
+ v = v.strip().upper()
19
+ if not re.fullmatch(r"\d{17}[\dX]", v):
20
+ return False, "格式错(须 17 位数字+校验位)"
21
+ w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
22
+ m = "10X98765432"
23
+ s = sum(int(v[i]) * w[i] for i in range(17))
24
+ if m[s % 11] != v[17]:
25
+ return False, f"校验位错(应为 {m[s % 11]})——OCR 高发混淆: 0/O、1/7、5/S"
26
+ try:
27
+ datetime.strptime(v[6:14], "%Y%m%d")
28
+ except ValueError:
29
+ return False, "出生日期段非法"
30
+ return True, "通过"
31
+
32
+
33
+ def check_uscc(v, _extra=""):
34
+ v = v.strip().upper()
35
+ chars = "0123456789ABCDEFGHJKLMNPQRTUWXY"
36
+ if len(v) != 18 or any(c not in chars for c in v):
37
+ return False, "格式错(18 位,不含 I/O/Z/S/V)"
38
+ w = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28]
39
+ s = sum(chars.index(v[i]) * w[i] for i in range(17))
40
+ cd = chars[(31 - s % 31) % 31]
41
+ if cd != v[17]:
42
+ return False, f"校验位错(应为 {cd})"
43
+ return True, "通过"
44
+
45
+
46
+ _DIG = "零壹贰叁肆伍陆柒捌玖"
47
+ _UNIT4 = ["", "拾", "佰", "仟"]
48
+
49
+
50
+ def _four(n): # 0-9999 → 中文
51
+ if n == 0:
52
+ return ""
53
+ out, zero = "", False
54
+ for i in range(3, -1, -1):
55
+ d = n // (10 ** i) % 10
56
+ if d:
57
+ if zero:
58
+ out += "零"
59
+ out += _DIG[d] + _UNIT4[i]
60
+ zero = False
61
+ elif out:
62
+ zero = True
63
+ return out
64
+
65
+
66
+ def amount_to_cn(x):
67
+ fen = int(round(float(x) * 100))
68
+ if fen == 0:
69
+ return "零元整"
70
+ yuan, jf = divmod(fen, 100)
71
+ jiao, f = divmod(jf, 10)
72
+ parts = []
73
+ yi, rest = divmod(yuan, 10 ** 8)
74
+ wan, ge = divmod(rest, 10 ** 4)
75
+ if yi:
76
+ parts.append(_four(yi) + "亿")
77
+ if wan:
78
+ if yi and wan < 1000:
79
+ parts.append("零")
80
+ parts.append(_four(wan) + "万")
81
+ if ge:
82
+ if (yi or wan) and ge < 1000:
83
+ parts.append("零")
84
+ parts.append(_four(ge))
85
+ cn = "".join(parts) + "元" if yuan else ""
86
+ if jiao == 0 and f == 0:
87
+ return cn + "整"
88
+ if not yuan:
89
+ cn = ""
90
+ if jiao:
91
+ cn += _DIG[jiao] + "角"
92
+ elif yuan and f:
93
+ cn += "零"
94
+ if f:
95
+ cn += _DIG[f] + "分"
96
+ return cn
97
+
98
+
99
+ def check_amount(v, cn=""):
100
+ try:
101
+ expect = amount_to_cn(v)
102
+ except (ValueError, TypeError):
103
+ return False, "数字金额非法"
104
+ if not cn:
105
+ return True, f"大写应为: {expect}"
106
+ got = cn.strip().replace("人民币", "").replace("圆", "元")
107
+ if got == expect:
108
+ return True, "数字与大写互验通过"
109
+ return False, f"互验不过: 大写按数字应为「{expect}」,OCR 读到「{cn}」——两处必有一错,转人工(票面多要素勾稽)"
110
+
111
+
112
+ def check_date(v, _extra=""):
113
+ v = v.strip().replace("/", "-").replace(".", "-").replace("年", "-").replace("月", "-").replace("日", "")
114
+ try:
115
+ d = datetime.strptime(v, "%Y-%m-%d")
116
+ except ValueError:
117
+ return False, "日期非法(2 月 30 日类=OCR 误读)"
118
+ if not (1990 <= d.year <= 2100):
119
+ return False, f"年份 {d.year} 超合理范围(OCR 年份位错读嫌疑)"
120
+ return True, "通过"
121
+
122
+
123
+ def check_mobile(v, _extra=""):
124
+ v = re.sub(r"[ -]", "", v.strip())
125
+ if re.fullmatch(r"1[3-9]\d{9}", v):
126
+ return True, "通过"
127
+ return False, "手机号格式错"
128
+
129
+
130
+ CHECKS = {"idcard": check_idcard, "uscc": check_uscc, "amount": check_amount, "date": check_date, "mobile": check_mobile}
131
+
132
+
133
+ def batch(path):
134
+ import csv as _csv
135
+ bad = 0
136
+ with open(path, encoding="utf-8") as f:
137
+ for i, ln in enumerate(_csv.reader(f), 1):
138
+ if not ln or ln[0].startswith("#") or ln[0] in ("类型", "type"):
139
+ continue
140
+ t = ln[0].strip().lower()
141
+ if t not in CHECKS:
142
+ print(f" 行{i} [跳过] 未知类型 {t}")
143
+ continue
144
+ ok, msg = CHECKS[t](ln[1] if len(ln) > 1 else "", ln[2] if len(ln) > 2 else "")
145
+ if not ok:
146
+ bad += 1
147
+ print(f" 行{i} [{'过' if ok else '不过'}] {t} {ln[1][:24] if len(ln) > 1 else ''}: {msg}")
148
+ print(f"---- 批量结果: 不过 {bad} 条 → 进人工复核队列 ----")
149
+ return 1 if bad else 0
150
+
151
+
152
+ def selftest():
153
+ assert check_idcard("11010519491231002X")[0]
154
+ assert not check_idcard("110105194912310021")[0]
155
+ assert check_uscc("91350100M000100Y43")[0]
156
+ assert not check_uscc("91350100M000100Y44")[0]
157
+ assert amount_to_cn(1234.56) == "壹仟贰佰叁拾肆元伍角陆分"
158
+ assert amount_to_cn(100000001.05) == "壹亿零壹元零伍分"
159
+ assert amount_to_cn(200) == "贰佰元整"
160
+ assert check_amount("1234.56", "壹仟贰佰叁拾肆元伍角陆分")[0]
161
+ assert not check_amount("1234.56", "壹仟贰佰叁拾肆元整")[0]
162
+ assert not check_date("2026-02-30")[0]
163
+ assert check_mobile("13812345678")[0]
164
+ print("selftest ok: 身份证/信用代码/金额互验/日期/手机号全部正常")
165
+ return 0
166
+
167
+
168
+ if __name__ == "__main__":
169
+ a = sys.argv[1:]
170
+ if "--selftest" in a:
171
+ sys.exit(selftest())
172
+ if not a:
173
+ print("用法: field-validate.py idcard|uscc|amount|date|mobile <值> [辅助值] | batch fields.csv | --selftest")
174
+ sys.exit(2)
175
+ if a[0] == "batch" and len(a) > 1:
176
+ sys.exit(batch(a[1]))
177
+ if a[0] in CHECKS and len(a) > 1:
178
+ ok, msg = CHECKS[a[0]](a[1], a[2] if len(a) > 2 else "")
179
+ print(("[过] " if ok else "[不过] ") + msg)
180
+ sys.exit(0 if ok else 1)
181
+ print("参数错;--selftest 看示例")
182
+ sys.exit(2)
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: ai-prompt
3
+ description: 提示工程链(六段式提示结构与稳定前缀→技法判据表(zero/few-shot/CoT/分步拆链)→反模式清单(否定指令/矛盾/堆砌)→一次一变量迭代纪律→提示资产版本化与回归→提示解决不了的问题分诊)。eng-ai 的提示工程孙链:写系统提示、输出不稳定调优、提示越写越长失控、"多加一句就好了"魔咒时载入。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # 提示工程链
8
+
9
+ eng-ai 的提示工程孙链。基调:提示工程是**工程**——有结构、有版本、有评测对照;
10
+ 凭感觉改提示=凭感觉改生产代码。
11
+
12
+ ## 六段式提示结构(默认骨架,顺序即缓存设计)
13
+
14
+ 1. **角色与目标**:一句话人设+任务使命(具体胜于华丽:"你是报销制度问答助手,只依据提供的制度条文回答");
15
+ 2. **规则约束**:行为边界(什么必须做/什么不许做),按重要性排序,**条数控制在 10 条内**(规则越多单条权重越稀);
16
+ 3. **输出格式**:结构说明+能上 schema 就上 schema(格式靠约束不靠恳求,ai-llm-app 结构化三层);
17
+ 4. **示例**(按需):输入输出对,见技法判据;
18
+ 5. **动态上下文**:检索内容/用户资料(与指令结构隔离,注入防护标记,ai-rag);
19
+ 6. **本次输入**:用户问题放最后(近因效应+缓存友好)。
20
+ **稳定内容前置、可变内容后置**——前缀缓存命中率是这么来的(ai-llm-app 缓存判据);系统提示里禁时间戳/随机数。
21
+
22
+ ## 技法判据表
23
+
24
+ | 技法 | 启用信号 | 要点与代价 |
25
+ |---|---|---|
26
+ | zero-shot | 默认起点 | 指令写清就够,别一上来堆示例 |
27
+ | few-shot | 格式模仿/风格对齐/分类边界模糊 | 2–5 个覆盖边界的示例(含"该拒答的例");示例是最强的隐性指令,**示例与规则冲突时模型信示例** |
28
+ | CoT 分步思考 | 推理/计算/多条件判断 | "先分析再结论";推理型模型自带思考,再叫嚷 CoT 反而冗余,按模型调 |
29
+ | 任务拆链 | 单提示揉不下(先抽取再校验再生成) | 拆成多次调用各司其职,可测可缓存;代价是时延与编排(工作流化,ai-agent 判据) |
30
+ | 自检后缀 | 高错误代价输出 | "输出前检查:引用是否都在原文中"——便宜有效的最后一道 |
31
+
32
+ ## 反模式清单(改提示先对照这里)
33
+
34
+ - **否定指令弱**:"不要长篇大论"不如"控制在 3 句内";"不要编造"不如"仅依据资料回答,资料未涵盖则回答'未找到'"(给出路,不只堵路);
35
+ - 矛盾指令:"详细全面"+"简明扼要"并存=模型随机选边;规则间冲突要裁决出优先级;
36
+ - 万字堆砌:每次出错加一句补丁,提示滚成裹脚布——**定期重构提示**(合并/删除/重排,同代码重构,refactor-safely 精神);补丁式提示的规则相互稀释;
37
+ - 示例污染:示例里的偶然特征被模型当规律(示例全是北京的地址→模型以为只服务北京);
38
+ - 拟人恳求与威胁("这对我很重要"):不稳定的魔法,用结构化约束替代;
39
+ - 把知识塞提示:大量事实性内容进系统提示=贵且难更新,该走 RAG(ai-rag 判据)。
40
+
41
+ ## 迭代纪律(一次一变量)
42
+
43
+ 改前有基线:评测集跑分(ai-eval,20 条冒烟起步)——**没有评测集的提示调优是掷骰子**;
44
+ 一次只改一处(改了三处变好了=不知道哪处有效,下次复制不了经验,eng-performance 同则);
45
+ 坏例驱动:从失败案例归纳模式(格式错?理解偏?越界?)针对性改,不做"感觉性全文重写";
46
+ 过拟合警惕:为一个坏例加的规则,跑全量评测确认没伤其他案例(修一个坏三个是常态);
47
+ 显著性心智:LLM 非确定性下,单次对比无意义,同题多跑或大样本对比(ai-eval 方法)。
48
+
49
+ ## 提示资产管理(提示=代码)
50
+
51
+ 版本化入库:提示文件与代码同仓同评审(diff 可见,eng-docs docs-as-code);
52
+ **变更走评测回归**:提示改动=行为变更,评测集全跑+劣化阻断(eng-ai 三元组纪律);
53
+ 模板参数化:动态段用模板变量(检索内容/用户名),模板引擎统一(拼字符串散装=注入与转义隐患);
54
+ 多模型适配:同一任务在不同模型上的提示变体分开维护并分别评测(换模型≠提示白嫖通用);
55
+ 提示注释:关键规则旁注"为什么有这条"(哪次坏例加的)——防后人误删,也防补丁堆积无人敢动。
56
+
57
+ ## 提示解决不了的问题(分诊,别死磕)
58
+
59
+ | 症状 | 真病因 | 转诊 |
60
+ |---|---|---|
61
+ | 缺知识/答陈旧 | 模型不知道 | RAG(ai-rag),别在提示里塞百科 |
62
+ | 复杂任务步步错 | 单次调用超能力上限 | 拆链/上 Agent(ai-agent)或换更强模型 |
63
+ | 格式老不稳 | 恳求无用 | 结构化约束(ai-llm-app 三层防线) |
64
+ | 风格顽固不改 | 提示带不动 | 微调判据(eng-ai:改风格是微调正当理由) |
65
+ | 快但要更准/准但要更快 | 模型层级不匹配 | 路由分级(ai-llm-app),不是提示的锅 |
66
+
67
+ **提示是杠杆不是魔法**:撬得动的尽快撬,撬不动的认账转诊——在提示上耗一周常常不如换个方案半天。
68
+
69
+ **作业包**:`references/prompt-template.md`(六段式骨架(缓存友好)/迭代记录表(一次一变量)/补丁注释规范/分诊速查)。
70
+
71
+ ## 使用纪律
72
+
73
+ 系统提示改动走评审+评测回归;稳定前缀纪律守住缓存命中;
74
+ 每个生效的"补丁规则"标注来源坏例;季度重构一次提示(熵减);
75
+ **提示工程的复利在评测集与坏例注释,不在收藏一百个"神奇咒语"**。