海妈家电商 AI 产品技术文档
围绕多平台客服售后、商品运营决策、招聘辅助三个场景,说明从前端体验、业务规则、智能工作流、数据留痕到部署验证的完整技术路线。
文档定位与真实边界
已经做到
三个可交互前端、FastAPI 业务后台、SQLite 数据、三个 Dify 应用、三个 n8n 工作流、Baserow 留痕、异常降级、request_id 追踪、FastAPI 幂等和自动验收。
当前技术定位
规则优先、可解释、可审计。Dify 当前以 Code Workflow 为主,保证没有外部模型 Key 时也能稳定演示。
生产化方向
接入平台 OpenAPI、统一指标服务、RAG、模型路由、权限审批、消息队列、监控告警和多环境发布。
核心设计思想
规则基线AI 增强人工复核过程留痕失败可回退
不是让大模型直接替代业务负责人,而是把 AI 放在“信息提取、风险识别、建议生成、证据整理”环节,把退款、降价、加量、录用等高风险动作保留给责任人。
产品总览
多平台客服与售后风险
从工单摘要、风险词、同 SKU 重复投诉、SLA 超时识别高风险,生成处理建议和可审核回复草稿。
质量风险SLA人工接管
AI 商品运营与爆款决策
联合 CTR、CVR、贡献毛利率、退货率和可售天数,输出商品分层、证据与小步运营动作。
流量转化毛利库存
智能招聘辅助
对脱敏文本做岗位能力匹配、缺失项识别和核实问题准备,不处理无关敏感属性,不自动做招聘决定。
证据匹配核实问题HR 复核
产品闭环
技术架构
组件职责与版本
| 组件 | 当前版本/形态 | 职责 | 为什么这样选 |
|---|---|---|---|
| HTML/CSS/JavaScript | 无前端框架,静态页面 | 快速构建三个可演示交互页面 | 依赖少、启动快、客户演示稳定 |
| Node.js HTTP | 原生模块,8787 | 静态文件服务 | 避免为了 Demo 引入大型前端构建链 |
| FastAPI | 0.116.1,Python 3.11 | 业务接口、数据校验、规则基线 | 类型清晰、自动 OpenAPI、适合 AI 工具层 |
| Uvicorn | 0.35.0,8788 | ASGI 服务 | 本地启动简单,可平滑迁移容器部署 |
| SQLite | WAL 模式 | 本地业务数据与规则运行日志 | 零运维、可复制,适合 PoC |
| Dify | 开源版 1.15.0,8083 | 三个可发布的 AI Workflow 应用 | 可视化编排、标准 API、便于后续加 RAG/LLM |
| n8n | 2.29.10,5678 | 系统间编排、凭据、Webhook、日志回写 | 连接能力强,适合跨平台自动化 |
| Baserow | 开源本地容器,8081 | 低代码业务表与运行日志 | 运营可读、可手工筛选,不要求懂 SQL |
端到端时序
三大场景底层逻辑
客服售后风险识别
输入
ticket_id、platform、issue、summary、same_sku_recent_count、overdue
核心信号
高风险词、一般售后词、同 SKU 重复次数、SLA 是否超时
输出
risk_level、risk_score、matched_signals、recommended_action、reply_draft、human_review_required
评分公式
分层阈值:score ≥ 80 → 高;45 ≤ score < 80 → 中;否则为低。高风险必须人工接管,未核实前不做退款或赔付承诺。
| 信号组 | 关键词/字段 | 业务含义 |
|---|---|---|
| 高风险词 | 掉色、过敏、受伤、投诉、监管、曝光、赔偿、假货、批次 | 质量、舆情、合规或批次风险 |
| 一般风险词 | 退货、退款、物流、未收到、尺码、破损、漏发 | 常规售后与履约问题 |
| 聚集风险 | same_sku_recent_count | 从单一工单上升到 SKU/批次问题 |
| 服务风险 | overdue | 超出 SLA 后投诉升级概率增加 |
商品运营与爆款决策
输入
sku、product_name、ctr、cvr、margin、return_rate、stock_days
核心原则
不以销量单指标判定爆款,同时约束毛利、退货和库存
输出
score、tier、evidence、recommended_action、human_review_required
综合评分公式
| 判断顺序 | 条件 | 分层 | 动作 |
|---|---|---|---|
| 1 | 退货率 ≥ 15% 或毛利率 < 20% | 风险款 | 暂停加量,拆分尺码、批次和退货原因,联动质量/供应链/财务 |
| 2 | score ≥ 78 且可售天数 ≥ 14 | 潜力款 | 保持价格,流量小步增加 10%—15%,验证 3 天并确认补货周期 |
| 3 | CTR < 3% 且 CVR ≥ 3.5% | 待优化 | 做主图、标题或搜索词单变量实验,不直接降价 |
| 4 | 其他 | 观察中 | 积累 7 天样本,复盘点击、转化、退货、库存 |
智能招聘辅助
输入
job_name + resume_text;FastAPI 内部兼容 job_key=ai/ops/service
核心信号
岗位必须项命中、加分项命中、项目落地证据、待核实能力
输出
match_score、grade、matched_skills、missing_or_unverified、verification_questions
评分公式
等级:A ≥ 85、B ≥ 70、C ≥ 60、其他为 D。岗位名称与编码在 n8n 中做双向兼容,避免 Dify 与 FastAPI 字段口径不一致。
| 岗位 | 必须项 | 加分项 |
|---|---|---|
| AI 应用工程师 | Python、API、RAG、工作流、需求梳理 | FastAPI、Dify、n8n、电商 |
| AI 商品运营 | 商品运营、数据分析、转化率、毛利、库存 | 投放、爆款、退货、AI |
| 客服运营专员 | 客服、售后、工单、风险、沟通 | 天猫、抖音、质量、AI |
Dify 应用与工作流配置
三个应用均为 Dify Workflow 模式,DSL 版本 0.6.0,当前结构为 Start → Python Code → End。这样可以先保证规则稳定和输出结构固定,再渐进加入知识检索与 LLM。
客服应用
6 个输入7 个输出
输出风险等级、分数、命中信号、处理建议、回复草稿和人工审核标识。
商品应用
7 个输入7 个输出
输出商品分层、综合分数、证据、运营建议和人工审核标识。
招聘应用
2 个输入8 个输出
输出岗位匹配、缺失项、核实问题、决策边界和人工审核标识。
Dify 调用协议
POST http://host.docker.internal:8083/v1/workflows/run
Authorization: Bearer <app-api-key>
Content-Type: application/json
{
"inputs": {
"ticket_id": "CS-20260714-E2E",
"platform": "天猫",
"issue": "质量售后",
"summary": "同款 SKU 第 3 起掉色投诉",
"same_sku_recent_count": 3,
"overdue": "是"
},
"response_mode": "blocking",
"user": "haimajia-n8n"
}n8n 使用每个应用独立的 Header Auth 凭据,避免三个应用共用同一密钥。返回值从 data.outputs 读取,并保留 workflow_run_id 与耗时。
当前实现与目标实现
| 维度 | 当前 PoC | 生产演进 |
|---|---|---|
| 推理核心 | Python Code 节点确定性规则 | 规则服务 + RAG + LLM,模型只处理非确定性任务 |
| 知识 | 未开启知识库检索 | 商品手册、平台规则、售后 SOP、岗位标准分库检索 |
| 模型 | 不依赖外部模型 Key | 按场景配置模型路由、成本、超时和回退 |
| 输出 | 固定字段,便于 API 联调 | Schema 校验、版本兼容、置信度和证据引用 |
n8n 工作流编排
每条工作流共 13 个节点,包含一条本地手动测试支路和一条正式 Webhook 端到端支路。三条流程结构一致,只替换输入字段、FastAPI 地址、Dify 凭据和 Baserow 日志摘要。
正式 Webhook 支路
手动支路
onError=continueRegularOutput。FastAPI 失败后仍尝试 Dify;Dify 失败时保留 FastAPI 基线;Baserow 写入失败不会吞掉可用分析结果。| HTTP | integration_status | 判定条件 | 前端行为 |
|---|---|---|---|
| 200 | succeeded | FastAPI、Dify、Baserow 全部成功 | 显示全链路成功,仍保留人工复核 |
| 207 | partial_success | 至少一份分析可用,但某个依赖失败 | 展示可用结果和异常节点,不伪装完整成功 |
| 502 | failed | FastAPI 和 Dify 均没有可用结果 | 提示人工处理,不启用浏览器本地规则兜底 |
异常字段包含 backend_status、dify_status、logging_status、errors[]、failed_node、error_code、retryable 和上游 HTTP 状态。
三条工作流配置
| 场景 | 工作流 ID | Webhook | FastAPI | Dify 凭据 |
|---|---|---|---|---|
| 客服 | yCIL2WHm4nXeCJnx | /webhook/haimajia/customer-service-risk | /api/customer-service/analyze | Dify-海妈家客服助手 |
| 商品 | FC5PXEayMmniPSep | /webhook/haimajia/product-opportunity | /api/product-ops/analyze | Dify-海妈家商品运营助手 |
| 招聘 | csvTieWRz7sMfUYg | /webhook/haimajia/recruiting-assessment | /api/recruiting/analyze | Dify-海妈家招聘辅助助手 |
Baserow 通过 host.docker.internal:8081 访问,同时设置 Host: localhost:8081,适配本机 Baserow Caddy 的站点域名校验。
API 接口设计
FastAPI 接口总表
| 方法 | 路径 | 用途 | 主要输入 |
|---|---|---|---|
| GET | /api/health | 服务与数据库健康检查 | 无 |
| GET | /api/readiness | 检查 FastAPI、n8n、Dify、Baserow 是否就绪 | 无 |
| GET | /api/customer-service/tickets | 客服工单列表 | 无 |
| POST | /api/customer-service/analyze | 售后风险分析 | request_id + 通用 JSON 工单字段 |
| POST | /api/customer-service/draft | 按已有工单生成规则草稿 | record_id |
| GET | /api/product-ops/products | 商品指标列表 | 无 |
| POST | /api/product-ops/analyze | 商品分层与动作建议 | request_id、SKU 与 5 类指标 |
| GET | /api/recruiting/candidates | 候选人模拟列表 | 无 |
| GET | /api/recruiting/jobs | 岗位标准列表 | 无 |
| POST | /api/recruiting/analyze | 脱敏文本岗位匹配 | request_id、job_key、resume_text |
| GET | /api/orders | 订单关联数据 | 无 |
| GET | /api/workflow-runs | 本地规则运行日志 | 无 |
| POST | /api/workflow-runs | 外部补充运行记录 | app_code、record_id、摘要、状态、耗时 |
Webhook 请求示例
客服
POST http://127.0.0.1:5678/webhook/haimajia/customer-service-risk
Content-Type: application/json
{
"request_id": "customer-550e8400-e29b-41d4-a716-446655440000",
"ticket_id": "CS-20260714-E2E",
"platform": "天猫",
"issue": "质量售后",
"summary": "同款SKU第3起掉色投诉,当前工单已超时",
"same_sku_recent_count": 3,
"overdue": "是"
}商品
POST http://127.0.0.1:5678/webhook/haimajia/product-opportunity
Content-Type: application/json
{
"request_id": "product-550e8400-e29b-41d4-a716-446655440000",
"sku": "HMJ-TZ-2607-BL-140",
"product_name": "男童速干运动套装",
"ctr": 5.8,
"cvr": 4.6,
"margin": 31.2,
"return_rate": 8.4,
"stock_days": 16
}招聘辅助
POST http://127.0.0.1:5678/webhook/haimajia/recruiting-assessment
Content-Type: application/json
{
"request_id": "recruit-550e8400-e29b-41d4-a716-446655440000",
"job_key": "ai",
"job_name": "AI应用工程师",
"resume_text": "脱敏候选人具备 Python、FastAPI、API、RAG、Dify 与工作流交付经验。"
}统一返回信封
{
"request_id": "customer-550e8400-e29b-41d4-a716-446655440000",
"idempotent_replay": false,
"backend_result": { "score": 98, "risk_label": "高" },
"dify_outputs": { "risk_level": "高", "risk_score": 98 },
"backend_status": "succeeded",
"dify_status": "succeeded",
"logging_status": "succeeded",
"integration_status": "succeeded",
"http_status": 200,
"errors": [],
"dify_workflow_run_id": "...",
"dify_elapsed_time_ms": 1200,
"human_review_required": true,
"decision_boundary": "关键动作必须由责任人确认。"
}FastAPI 幂等处理
处理中状态有 5 分钟超时恢复,避免进程异常结束后请求永久卡死。招聘流程仅保存请求哈希和分析结果,不把简历正文写入运行摘要。
部分成功返回示例
HTTP/1.1 207 Multi-Status
{
"request_id": "product-550e8400-e29b-41d4-a716-446655440000",
"backend_status": "succeeded",
"dify_status": "failed",
"logging_status": "succeeded",
"integration_status": "partial_success",
"backend_result": { "score": 88, "tier": "潜力款" },
"dify_outputs": null,
"errors": [{
"stage": "dify",
"code": "DIFY_REQUEST_FAILED",
"message": "Dify 请求失败",
"http_status": 400,
"retryable": false
}],
"human_review_required": true
}Baserow 回写接口
POST http://host.docker.internal:8081/api/database/rows/table/861/?user_field_names=true
Authorization: Token <baserow-token>
Host: localhost:8081
Content-Type: application/json
{
"运行编号": "customer-550e8400-e29b-41d4-a716-446655440000",
"应用编码": "customer_service",
"触发来源": "n8n_dify_webhook",
"业务记录": "CS-20260714-E2E",
"输入摘要": "天猫/质量售后:同款SKU第3起掉色投诉",
"输出摘要": "succeeded;高风险 98 分;立即人工接管...",
"风险等级": "高",
"是否人工审核": "是",
"运行状态": "success",
"耗时毫秒": "1200",
"创建时间": "2026-07-14T10:00:00+08:00"
}数据模型与存储逻辑
SQLite:本地业务数据底座
| 表 | 主键 | 核心字段 | P0 验收快照 |
|---|---|---|---|
| customer_service_tickets | ticket_id | platform、order_no、sku、risk_level、risk_score、status、payload_json | 6 |
| product_metrics | sku | platform、product_name、tier、score、task_status、payload_json | 6 |
| candidates | candidate_id | candidate_name、job_name、grade、score、stage、follow_up_overdue | 5 |
| job_profiles | job_key | job_name、payload_json | 3 |
| orders | order_no | platform、sku、金额、履约、物流、退款、linked_ticket_id | 6 |
| workflow_runs | run_id | app_code、trigger_source、摘要、风险、状态、耗时 | 64(测试后持续追加) |
| idempotency_records | request_id + app_code | request_hash、response_json、status、updated_at | 12(测试后持续追加) |
数据库启用 WAL;初始化使用 CREATE TABLE IF NOT EXISTS 和 INSERT OR IGNORE,保证重复启动不覆盖已有数据。关键查询使用参数占位符,表名与字段名使用代码白名单。
Baserow:业务人员可读的数据与审计层
正式表
客服售后工单、商品运营指标、候选人评估、岗位标准、订单关联数据、AI 工作流运行日志。
当前状态
6 张正式表;运行日志随正常、部分成功、失败和冒烟验收持续追加,不在文档中写死数量。
最小权限
n8n Token 只允许对运行日志表 861 执行 create/read,不允许 update/delete。
为什么同时保留 SQLite 和 Baserow?
SQLite 面向程序
稳定、轻量、适合 FastAPI 规则读取和结构化日志;代码可版本化,便于自动测试。
Baserow 面向业务
运营、客服、HR 可以直接筛选、查看和修正模拟数据;适合演示低代码后台和流程留痕。
安全、权限与人工边界
密钥管理
- Dify 三个应用各自一把 API Key。
- Baserow 使用独立最小权限 Token。
- 真实 Token 只进入 n8n 加密 Credentials,不写入代码或 README。
- 项目只保留被 .gitignore 忽略的非敏感凭据 ID 映射。
.env仅保存本地地址和超时配置,不存放 Dify/Baserow 密钥。
数据最小化
- 使用脱敏模拟数据,不连接真实客户账号。
- 招聘不采集身份证、住址、联系方式。
- 简历正文不写入 Baserow 运行日志。
- 日志只保留业务记录号、摘要、风险、状态和耗时。
操作边界
- 客服:不自动退款、赔付、承诺到货或发送消息。
- 商品:不自动调价、改预算、补货或下架。
- 招聘:不自动录用、淘汰或推进阶段。
- 所有输出都带 human_review_required。
当前非生产项
- 本地 HTTP,无 TLS 与统一身份认证。
- 未做租户隔离、细粒度 RBAC、API 网关限流。
- 未做敏感字段加密、数据生命周期和审计导出。
- 未做高可用、备份恢复演练和灾备。
生产安全路线
部署拓扑与配置
| 服务 | 访问地址 | 运行方式 | 持久化 |
|---|---|---|---|
| Demo 前端 | http://127.0.0.1:8787 | node server.mjs | 项目静态文件 |
| FastAPI | http://127.0.0.1:8788/docs | .venv/bin/uvicorn | data/haimajia_demo.sqlite3 |
| n8n | http://127.0.0.1:5678 | Docker,haimajia-n8n | haimajia_n8n_data volume |
| Dify | http://127.0.0.1:8083 | Docker Compose | PostgreSQL/Redis/Storage |
| Baserow | http://localhost:8081 | Docker,manufacturing-baserow | /baserow/data |
交付包命令
# 必须使用项目 .venv,democtl 会初始化数据、启动/复用服务并检查依赖
cd /Users/hejunkai/工作中枢/01_AI工具链/Codex/与chatGPT联动/haimajia-ai-demo-suite
scripts/democtl.sh start
scripts/democtl.sh status
scripts/democtl.sh smoke
scripts/democtl.sh logs
scripts/democtl.sh stopPython 项目固定使用根目录 .venv,当前依赖为 FastAPI 0.116.1 与 Uvicorn 0.35.0;不使用系统全局 Python。
浏览器验收入口:http://127.0.0.1:8787/ops.html。页面通过 /api/readiness 检查核心依赖,并展示 SQLite 计数和最近 FastAPI 留痕。
运行时配置
| 变量 | 默认值 | 作用 | 是否可放密钥 |
|---|---|---|---|
| FRONTEND_PORT | 8787 | 前端静态服务端口 | 否 |
| API_PORT / API_BASE_URL | 8788 / http://127.0.0.1:8788 | FastAPI 监听与前端数据地址 | 否 |
| N8N_BASE_URL | http://127.0.0.1:5678 | 三个 Webhook 的基础地址 | 否 |
| DIFY_BASE_URL | http://127.0.0.1:8083 | 就绪检查;密钥仍由 n8n Credentials 保管 | 否 |
| BASEROW_BASE_URL | http://localhost:8081 | 就绪检查;Token 仍由 n8n Credentials 保管 | 否 |
| WORKFLOW_TIMEOUT_MS | 60000 | 前端调用 n8n 的超时上限 | 否 |
n8n 容器关键配置
时区
GENERIC_TIMEZONE / TZ = Asia/Shanghai
主机访问
extra_hosts: host.docker.internal:host-gateway
数据卷
/home/node/.n8n → haimajia_n8n_data
日志、可观测性与验证
FastAPI
workflow_runs 记录规则调用、输入摘要、输出摘要、风险、状态与耗时。
Dify
workflow_runs 记录应用执行与发布版本,可通过 workflow_run_id 关联。
n8n
执行历史保留每个节点的状态、输入输出和错误,便于复盘。
Baserow
业务可读日志,便于非技术人员查看应用、业务记录、风险与状态。
request_id,n8n 透传到 FastAPI 并作为 Baserow 运行编号;Dify 另返回 dify_workflow_run_id。定位问题时先用 request_id 跨系统对齐,再进入 Dify 运行 ID 查看单应用执行。已验证结果
| 场景 | HTTP | Dify | 业务结果 | Baserow |
|---|---|---|---|---|
| 客服售后 | 200 | succeeded | request_id 已透传,FastAPI/Dify 均有可用风险结果 | succeeded |
| 商品运营 | 200 | succeeded | request_id 已透传,返回商品分层和动作建议 | succeeded |
| 招聘辅助 | 200 | succeeded | 返回岗位匹配、缺失项和核实问题 | succeeded,未保存正文 |
| 异常矩阵 | 207 / 502 | 部分成功 / 失败 | 已验证 Dify 失败、FastAPI 失败和两者同时失败 | 可写时仍保留异常留痕 |
目前缺失的可观测能力
- 已有 request_id,但缺少集中日志中对 correlation_id 的统一索引和搜索界面。
- 缺少 Prometheus 指标、Grafana 看板、结构化集中日志和告警阈值。
- 缺少业务 SLA:成功率、P95 延迟、Dify 成本、人工接管率、建议采纳率。
产品技术演进路线
优先级建议
P0:已完成
异常降级、request_id、FastAPI 幂等、运行时配置、一键启停、健康检查、冒烟验收和回滚备份。
P1:真实只读数据
导出报表或一个受控 OpenAPI、PostgreSQL、登录/RBAC、Dify 知识库、评测集和 UAT。
P2:生产与智能增强
全链路幂等、队列/补偿、RAG、LLM、图片理解、模型评测、监控告警和 CI/CD。
背诵与讲解提纲
3 分钟版本
“我做的不是三个孤立页面,而是一套电商 AI PoC。前端有客服、商品运营、招聘辅助三个业务入口;FastAPI 提供确定性规则和 SQLite 数据,Dify 把每个场景封装成可发布智能应用,n8n 负责跨系统编排、凭据和 Baserow 留痕。”
“设计上我没有让大模型直接做高风险决策,而是采用规则基线 + AI 增强 + 人工复核。当前 Dify 先用 Code 节点保证稳定,后续可以在不改 API Contract 的情况下插入 RAG 和 LLM。”
“我实际完成了三个 Dify 应用、三个 13 节点 n8n 工作流、独立 API Key、最小权限 Baserow Token,并把三个前端按钮都切到了 n8n Webhook。链路会统一返回 200、207 或 502,而不是失败时返回空响应。”
“在工程稳定性上,我加了 request_id、FastAPI 幂等表、5 分钟卡死恢复、自动健康检查和三场景冒烟测试。当前 P0 交付包已经能稳定演示,但真实平台接口、RAG/LLM、鉴权和生产可观测性仍然是后续工作。”
10 分钟讲解顺序
- 业务问题:多平台信息分散、人工判断口径不一、动作缺少留痕。
- 产品拆分:客服降风险、商品提经营质量、招聘提信息整理效率。
- 架构分层:体验层、n8n 编排层、Dify 智能层、FastAPI 业务层、数据审计层。
- 核心逻辑:讲一个公式,建议讲商品评分,因为能体现增长与利润/退货/库存约束。
- 工作流:讲清 Dify 管智能应用,n8n 管跨系统;演示 Webhook → FastAPI → Dify → Baserow。
- 工程细节:Pydantic、SQLite WAL、request_id + SHA-256 幂等、加密 Credentials、最小权限 Token、招聘正文不落日志。
- 诚实边界:当前是规则版 PoC、没有真实平台数据、没有自动高风险动作。
- 演进路线:先可靠性和真实数据,再上 RAG/LLM,而不是一开始堆模型。
最值得强调的技术取舍
稳定性优先于“看起来智能”
先用规则和固定输出跑通业务闭环,再增加 LLM。避免演示受模型 Key、网络和随机性影响。
编排和智能职责分离
Dify 负责应用内部推理,n8n 负责系统间流程,FastAPI 负责可测试业务能力,Baserow 负责业务可读留痕。
明确人工决策边界
AI 输出建议和证据,不直接执行退款、调价、投放或招聘决定,符合企业落地安全原则。
保留失败记录
联调错误没有清理掉,而是作为审计证据,说明如何定位 Host 校验、字段类型和版本发布问题。
知识复习问答与参考答案
为什么不用 Dify 一个平台把所有事情做完?
当前没有 LLM,为什么还能叫 AI 产品?
为什么 FastAPI 和 Dify 都有一套规则?
如何保证接口幂等?
Dify 或 Baserow 挂了怎么办?
真实电商平台如何接入?
如何评估 AI 是否真的有效?
为什么使用 SQLite,不直接上 PostgreSQL?
项目文件与实现映射
| 文件/目录 | 作用 |
|---|---|
| app/main.py | FastAPI 应用、Pydantic 请求模型、13 个接口、就绪检查与幂等执行入口 |
| app/rules.py | 客服风险、商品评分、招聘证据匹配的确定性规则 |
| app/db.py | SQLite 7 表 Schema、安全初始化、幂等预占/重放/恢复、白名单数据访问和运行日志 |
| data/demo_seed.json | 三场景及订单、岗位、运行日志的脱敏模拟种子数据 |
| dify/*.yml | 三个 Dify Workflow DSL 0.6.0 |
| n8n/workflows_v3/*.json | 三个当前已发布的 FastAPI → Dify → Baserow 工作流,包含异常协议和 request_id |
| scripts/generate_n8n_workflows_v3.py | 用非敏感凭据 ID 生成三条 n8n 异常处理工作流 |
| n8n/docker-compose.yml | n8n 2.29.10 容器、时区、端口、数据卷和 host gateway |
| demos/*.html + assets/*.js | 三个业务交互 Demo |
| assets/runtime-config.js + server.mjs | 前端运行时地址/超时配置和 Node.js 静态服务 |
| ops.html + assets/ops.js | P0 交付验收台:依赖状态、SQLite 计数和最近留痕 |
| scripts/democtl.sh | 一键启动、停止、状态检查、日志与冒烟测试 |
| scripts/health_check.py + scripts/smoke_test.py | 五项依赖健康检查、三场景端到端验收和 FastAPI 幂等验收 |
| docs/P0稳定交付与验收手册.md | 启动、验收、排障、停止、回滚边界和当前限制 |