AI阐微 v1.0

项目经验与教训总结报告

从零到一:在微信生态上构建 AI 语义解析智能体-易经科学解卦系统

📅 2026-05-28 ~ 2026-06-03 📝 113 commits 🏷️ v1.0.1 — v1.0.4

一、项目概况

AI阐微 是一个运行在微信公众号上的「AI 语义解析智能体 · 易经科学解卦系统」。用户通过公众号发一条消息描述自己的困惑,系统调用 DeepSeek 等大模型进行六维语义分析,生成包含卦象、卦名、文化卡、白话解读、洞察、结论等模块的完整 HTML 报告,推送到用户的微信聊天中。

项目始于 2026 年 5 月中旬,至 6 月 3 日标记 v1.0.4,历时约 3 周完成第一个可上线的生产版本。后两周(5月28日~6月3日)纳入 Git 管理,产生 113 次提交,形成 4 个 tag 版本。

核心定位:AI(DeepSeek)+ 传统文化(易经)+ 微信生态(服务号)的三位一体产品。
技术栈:腾讯云 SCF(Node.js 18)+ CloudBase MongoDB + COS 对象存储 + DeepSeek API + 微信公众平台。

二、核心数据一览

6
云函数
66
部署脚本
10
测试文件
113
Git 提交
4
版本 tag
~5.7k
shared 代码行
~2k
核心代码行
7 天
Git 追踪周期
9→6
状态机缩减
~80
卡片迭代次数
5k+
会话消息数
3 轮
LLM 降级链
1
分支(master)

三、系统架构

3.1 整体架构

┌──────────────┐ ┌──────────────────────────────────────────────────────┐ │ 微信客户端 │────▶│ 腾讯云 ap-shanghai │ │ (服务号对话) │ │ │ └──────────────┘ │ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │ │ webhook │─▶│task-queue│─▶│ analyze │ │ ┌──────────────┐ │ │(入口/状态机)│ │ (队列轮询) │ │(LLM+质检+装配) │───▶│ COS 存储桶 │ │ └──────────┘ └──────────┘ └──────────────────┘ │ │(ap-guangzhou)│ │ │ │ │ │ report.html │ │ ▼ ▼ │ │ history.html│ │ ┌───────────────────────────────────────────────┐ │ │ 报告 HTML │ │ │ CloudBase MongoDB │ │ └──────────────┘ │ │ users / conv_state / reports / payments │ │ │ │ system_config / report_tasks │ │ │ └───────────────────────────────────────────────┘ │ │ │ ┌──────────────┐ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ 自定义域名 │ │ │ api │ │ payment │ │ keepwarm │ │ │ yijing.ai- │ │ │(数据接口) │ │(微信支付) │ │(防冷启动) │ │ │ chanwei.chat │ │ └──────────┘ └──────────┘ └──────────┘ │ └──────────────┘ └──────────────────────────────────────────────────────┘

3.2 六云函数职责

函数 超时/内存 职责
webhook 10s / 256MB 微信消息入口。验签、XML 解析、对话状态机(IDLE→Q1~Q6→PROCESSING→DONE)、写任务队列
task-queue 600s / 256MB 每 10s 轮询 report_tasks,HTTP POST 调 analyze,自适应并发 1~30,死信检测
analyze 600s / 512MB (1) SKILL.md 引导 LLM 生成报告 (2) 22 项质检 (3) 程序化 HTML 装配 (4) COS 上传
api 30s / 256MB 报告查询/列表/内容代理/用户同步/管理后台/数据统计,内容锁定预览
payment 30s / 256MB 微信 JSAPI 统一下单、支付回调验签与通知、价格动态读取
keepwarm 3s / 64MB 每 5 分钟定时触发,防止冷启动影响用户体验

3.3 数据流:从用户发消息到收到报告

  1. 用户发消息 → 微信服务器 → webhook(POST XML)
  2. webhook 验签 → 解析 → 状态机路由(IDLE 检测触发词 / Q1~Q6 收集信息)
  3. webhook 将请求写入 report_tasks 集合 → 5s 内回复微信(不可超时)
  4. task-queue(10s 轮询)拉起新任务 → HTTP POST 到 analyze
  5. analyze 调用 DeepSeek API(含 3 次降级 4→Kimi→Claude)→ 执行 22 项质检 → 程序化 HTML 装配 → 上传 COS
  6. analyze 更新 reports 集合 → 通过客服消息推送卡片链接给用户
  7. 用户点击卡片 → report.html(COS CDN)→ 加载报告(非付费用户看预览)
  8. 付费流程 → api 获取支付参数 → payment 统一下单 → 微信支付 → 回调通知 → 解锁报告

四、技术实现要点

4.1 LLM 驱动的内容生成流水线

项目最核心的技术挑战:让 LLM 稳定产出结构正确的易经报告 HTML。

4.2 微信生态集成

4.3 对话状态机设计

从最初的 9 个状态(IDLE / DIVINATION_SELECT / SMART_CONFIRM / Q1~Q6 / POST_REPORT / HISTORY / PROCESSING / DONE)逐步精简到 6 个:

关键设计决策:webhook 必须在 5s 内回复微信,因此所有耗时操作(LLM 调用、HTML 生成、COS 上传)都通过 report_tasks 队列异步执行,webhook 仅做消息路由和状态持久化。

4.4 卡片分享系统

"保存卡片"功能是 v1.0 后期最重的开发任务,经历了多次架构反复:html2canvas → 独立 card.html → 原生 Canvas → 内嵌 history.html。最终方案是在 history.html 内用 Canvas 2D API 绘制 600×900 PNG:

卡片生成功能的迭代过程本身就是一个缩影,反映了项目中反复出现的挑战:

fc9b879 feat: 保存卡片 — 点击生成 600×900 分享卡片(首次尝试) 7df7013 fix: 卡片 SVG 改用 data URL 避免 html2canvas 跨域问题 3d5b6ce fix: 卡片改用原生 Canvas,彻底解决 html2canvas 兼容 5e4be49 fix: 保存卡片改为打开 card.html 独立页面 291e3c5 feat: 卡片图片生成 — 独立 card-gen.html,Canvas 绘制 5582932 feat: 保存卡片 — history.html 内 canvas 绘制 428099c fix: 卦名空白 + 品牌重复绘制 — 卡片生成失败根因 ... b749833 feat: 保存卡片 — 仅用 Edit 工具,不外挂脚本 ... 1c03979 v1.0.4 feat: 右上角图钉 📌

4.5 数据库配额红线下的架构设计

CloudBase 体验版每月读写配额各 50,000 次,这条红线深刻影响了架构设计:

五、工程方法与纪律

5.1 七条工程原则(来自全局 CLAUDE.md)

这些原则在 v1.0 开发过程中逐步沉淀,最终成为所有项目共享的工程纪律:

原则 在 v1.0 中的实践
先澄清需求 每次改造前先出 plan(HTML + Mermaid 流程图),用户确认后再动手
拆分细化 所有 plan 分解为 Step 0~N,每步独立可验证。如状态机简化 plan 分 3 步:测试→改代码→部署
测试驱动 10 个测试文件覆盖:webhook 队列、analyze 回归、MD 解析、渲染、重试逻辑、智能模式等
回滚配套 每次部署前准备 rollback 脚本 + tag 标记。delete-function 被禁止,统一用 UpdateFunctionCode 保留触发器
步进交付 部署三步:node --check → 跑测试 → 部署。走一步确认一步
生产安全 构建基线(八步备份法)→干涉性检查→版本一致性检查→再部署。不改没碰过的代码
Double check 所有信息交叉验证:线上 vs 本地版本比对、基线完整性自动检查、卡片像素采样+源代码双重确认

5.2 基线备份体系

一套完整的灾备方案,按场景分为两种:

实践效果:卡片开发过程中多次出现"改坏了用户无法展示",依靠 baseline 快速定位差异;函数部署时发现环境变量与脚本不一致,通过基线备份比对及时纠正。

5.3 版本管理与 Tag 策略

Git 在 5 月 28 日才初始化,113 次提交全部发生在 7 天内。版本标签语义清晰:

部署纪律:"部署完成 = 提交完成"。每次 node scripts/deploy-*.js 成功后立即 git add + commit,不累积、不合并。66 个脚本中 deploy-* 和 rollback-* 是日常主力。

六、人机协作经验

6.1 协作模式演变

Phase 1
探索期 无结构化协作 — 用户给出模糊目标,AI 自由尝试。效果不稳定,多次产生废代码。特点是来回反复多,方向频繁调整。
Phase 2
规范期 Plan → Do → Review 循环 — 形成标准化工作流:
  1. EnterPlanMode 出 plan(HTML + Mermaid 流程图 + 干涉性检查 + 防御措施)
  2. 用户审阅 → 确认或打回
  3. 按 Step 执行,每步验证
  4. 部署前打基线,部署后验证巡查
Phase 3
纪律化 自动化纪律机制 — 沉淀在 CLAUDE.md 的强制约束:
  • "没有我说可以,你都不得修改" — 红线原则
  • 部署前 checklist(回滚就绪 / 本地测试 / 顺序 / 基线)
  • 每次部署后立即 commit
  • 禁止 DeleteFunction
Phase 4
高压期 v1.0 冲刺 — 高密度、高精度的 bug 修复。用户"像素级"校对卡片布局(QR 码反复移动 1px、标签行距调整),AI 必须适应毫厘必较的工作风格。

6.2 高效模式

✅ 生效的做法

  • 格式化 CLAUDE.md:把协作纪律写进配置文件,每次会话自动加载
  • Plan HTML 模板:标准化流程(Context → 方案 → 干涉性检查 → Steps → 防御 → 工程原则对照 → Double Check)
  • /loop 压力测试:一次跑 20 遍验证稳定性
  • 基线兜底:改动前快照,出问题快速定位差异
  • Tag 锚点:可执行版本标记,回滚位置明确
  • Double Check:所有信息交叉验证后再行动

❌ 无效/有害的做法

  • 不写 CLAUDE.md:每次会话丢失上下文,重复犯错
  • 无 plan 直接写代码:方向错了,改来改去浪费大量时间
  • 热部署不同步本地:导致本地与线上不一致,基线也无法覆盖
  • Python/Node 脚本改源码:中文编码问题连续 8 次导致页面崩溃
  • html2canvas:微信 X5 不支持,花了 4 次迭代才彻底放弃
  • TDD 缺失的区域:卡片 Canvas 没有测试,全靠目测,效率低

6.3 关键教训

教训一:先想清楚再动手。
卡片分享功能就是最典型的例子 — 先后尝试了 html2canvas、独立 card.html、card-gen.html、内嵌 canvas、独立 card-gen.html、再回到 history.html canvas。6 次架构反复,根源是没有想清楚 X5 的限制就动手了。如果先调研微信 X5 不支持什么(roundRect、letterSpacing、html2canvas),可以一次走对。
教训二:不要绕过工具链。
用 Python / Node 脚本批量修改 HTML 源码,8 次中有 8 次因为编码问题导致页面崩溃。正确做法是只用 Edit 工具逐项修改(最终也确实这样走通了)。这个教训反复出现直到被写入红线。
教训三:CSS 像素不是 Canvas 像素。
卡片坐标反复调整了 30+ 次提交,从 insight 下移/QR 上移到最终的精密级协调。原因是初期用 demo 375px×562px 的比例直接缩放 1.6x 到 600×900,忽略了 text 实际渲染的差异。最终靠逐坐标域的独立调优才解决。
成功经验一:状态机简化。
删除 POST_REPORT(追问)和 HISTORY(历史查询)两个状态,DONE 直回 IDLE,删 ~200 行代码,增 ~5 行。干涉性分析表明不影响任何其他函数,部署后零问题。这是"少即是多"的典范。
成功经验二:程序化 HTML 装配。
让 LLM 输出结构化 Markdown 而非直接输出 HTML,代码再逐块装配,极大提升报告稳定性。配合 22 项质检和最多 2 次 retry,LLM 输出的不稳定性被有效控制。
成功经验三:步进部署纪律。
部署前 checklist(回滚脚本 / 本地测试 / 部署顺序 / 基线)加上部署后立即 commit 的纪律,使 20+ 次部署中从未出现不可恢复的生产事故。

6.4 用户画像与工作风格

用户(任老师)在 v1.0 开发中展现出的特征深刻影响了协作模式:

这种协作风格对 AI 的要求是:先确认后执行、精确到像素、不投机取巧、不能有"凑合用"的思维

七、从 Git 历史看开发节奏

113 次提交的时序分布清晰地反映了 v1.0 冲刺阶段的开发特征:

7.1 按日期分布

日期 提交数 主要内容
5-287Git 初始化、CLAUDE.md 工程体系、plan 标准
5-297CLAUDE.md 补充、Double check 原则、plan 目录整理
5-301报告架构重构(里程碑式的 MD 解析 + 程序化 HTML)
5-319文化卡、印章、SVG 标题、提示文本优化
6-0114智能模式、状态机简化、PROCESSING 提前持久化
6-0219欢迎语、菜单、SVG 包皮剥离、提示文本统一、动爻修复
6-0355卡片分享系统冲刺(占全部提交的 48.6%)
观察:6 月 3 日是开发强度最高的一天(55 次提交),几乎全部围绕"保存卡片"功能。从上午 11:13 第一个 feat 到下午 18:20 图钉装饰,7 小时 55 次迭代,平均每 8.5 分钟一次提交。这反映了两件事:功能复杂度高、以及初期方向反复浪费了大量时间。

7.2 提交信息词频

fix:
修复(最多)
feat:
新功能
chore:
工程/依赖
~50
fix: 类提交

提交信息的压倒性主题是 fix — 超过 45% 的提交是修复。这符合 v1.0 冲刺的特征:快速出功能、即时修 bug。典型模式是"feat 出一个功能 → 连续 n 个 fix 修到满意"。

八、项目特点

AI阐微 v1.0 的开发呈现几个显著特点:

九、展望

v1.0 完成了从 0 到 1 的跨越。回顾整个开发过程,可以清晰地看到几个值得持续改进的方向:

v1.0 不是终点,而是一个可以安全迭代的起点。
7 天 113 次提交、零生产事故、4 个可执行版本 — 工程体系证明了它的价值。

十、传统开发 vs AI Coding:效率对比

费米估算法 逐模块估算:如果这个项目按传统手工开发(不使用 AI Coding),需要多少人力。以下是 13 个模块的详细估算。

传统手工开发
10~11
人月
约 3 人小团队 · 4~5 月
VS
AI Coding 实际
0.75
人月
任老师 + Claude · 3 周
效率提升
~15x
加速倍数
执行周期压缩

10.1 逐模块估算明细

模块 工作内容 传统(人月)
webhook 微信消息验签、XML 解析、状态机(9→6 个状态)、写任务队列、智能模式 LLM 对话 0.5
analyze DeepSeek/Kimi/Claude 降级链、22 项质检 + retry 逻辑、SKILL.md prompt 工程、程序化 HTML 装配 1.5
api 11 个 REST 接口(手动路由)、内容锁定预览、OAuth 同步、管理后台、统计 1.0
payment JSAPI 统一下单、异步回调验签、支付状态通知、在线改价 1.0
task-queue 10s 轮询、自适应并发算法(1~30)、死信检测、超时处理 0.5
keepwarm 定时触发器,3s/64MB 0.1
report.html 响应式 H5 页面、OAuth 集成、JSAPI 支付调起、预览/付费墙、X5 兼容适配 1.0
history.html 历史记录 + 卡片 Canvas 绘制(roundRect/letterSpacing 手动 polyfill,像素级调优) 1.0
DevOps 部署 SCF 6 函数部署脚本、COS 上传、回滚脚本、环境变量管理 0.5
基线灾备 八步备份法设计实现,自动完整性校验,灾备恢复手册 0.5
微信接入 服务号配置、菜单设置、客服消息、OAuth 域名备案、JSAPI 支付资质与沙箱 0.8
测试与 QA 10 个测试文件、22 项质检调参、WeChat 全流程回归、X5 兼容性测试 1.0
架构与管理 架构设计、需求澄清、跨模块联调、bug 追踪、重构决策 1.0
合计 10 ~ 11
前提说明:微信接入的"资质门槛"(备案、支付资质申请)无法被 AI 加速,传统和 AI 都要花一样的时间。调试类工作(X5 兼容性、像素级对齐)AI 不会一次性走对,但迭代速度远快于人工。
补充说明:以上估算仅涵盖开发与运维角色(后端/前端/DevOps),未计入传统开发中必要的其他角色:产品经理(需求梳理与验收)、领域专家(易经知识培训与审核)、平面设计师(品牌视觉、卡片 UI 设计)。这些角色在 AI Coding 模式下或由任老师一人兼任,或由 AI 直接承担(如视觉设计),但在传统开发中是不可或缺的独立角色。加计这些角色后,传统开发的实际人力成本会更高。
关键结论:3 周完成传统约 10 个月的工作量,效率提升约 13~15 倍。但这建立在"人负责判断、AI 负责执行"的分工前提上——架构决策、需求定义、质量把关仍完全取决于人的判断力,AI 没有取代人的角色,而是极大地压缩了执行层的周期。