AI-3.3-05 供需智能撮合 · 实现策略 TDD

供需 AI 自动撮合——规则级撮合引擎先行,算法撮合为演进项(PRD 需求编号 FR-3.3-05)

类型:技术设计文档(TDD) 条目编号:AI-3.3-05(溯源 FR-3.3-05) PRD 版本:V1.4(2026-10-22) 优先级:Should(P1:部分实现,规则级先行) 深度分级:full full 波次:p1 文档版本:v1.0(2026-10-26) 源文件:docs/reports/ai-module-prd/tdd/AI-3.3-05-supply-demand-matching.md

摘要

PRD V1.4 §5.2 FR-3.3-05 验收要点:「撮合推荐经人工确认后分发;撮合商机有效率跟踪(基线立项定)。」 现状判定为部分实现——平台已具备三种人工/规则驱动的供需对接形态:B2B 询价报价(quote 五态状态机)、 集采(八态状态机+自动成团判定)、采购需求参考(demand_basis 只读脱敏快照); 但「撮合」的业务语义已具备、智能引擎为零——推荐/匹配评分/智能分发全库 0 业务命中(仅 3 处法务文案误报)。

本卡交付规则级撮合(需求→结构化条件→候选供方评分→人工确认分发):确定性规则+加权评分(评分维度可解释、人工可确认), 算法撮合(推荐模型/用户画像/学习型评分)显式划出范围为演进项(衔接 AI-3.4-03 与 AI-3.3-04); 把关状态机本体归人工审核框架条目(AI-3.9-04)所有,本卡只定义挂接点(禁止两套状态机声明)。 P1 全部能力为确定性规则引擎,零 AI/LLM 调用;撮合失败永远存在人工出路(quote/集采直达)。

评分维度
4
D1 品类命中度 / D2 资质等级 / D3 履约记录 / D4 响应能力——权重数值 DEC-5 占位
Workflow / API
3 / 6
create / confirm / distribute 三 Workflow;store 2 + admin 4 共 6 路由(含 config)
验收标准
7
A1 确认后分发 … A7 quote 兼容,含评分确定性(A4)与门禁保守默认(A5)
Blocker
1
D-dec3(大额阈值+非标场景清单)——仅阻塞配置数值,不阻塞引擎结构(RK-05 框架与参数解耦)

关键概念

规则级撮合
需求→结构化条件→候选供方确定性规则+加权评分→人工确认分发;同输入同输出(纯函数评分,无随机/无时变因子)——PRD「智能」在 P1 兑现为可解释的规则级结构化撮合。
matching_recommendation
撮合推荐实体(新本地模块 matching):demand_snapshot 冻结 + candidate_seller_ids 显式关联 + score_detail 可解释评分 + 五态生命周期 + 留痕三件套。
「未确认不生效」门禁
draft 态推荐对供方完全不可见(无任何 store 侧读路径),confirmed 前不产生任何对供方的写动作——NFR-3.9-04「AI 输出→人工确认→生效」把关框架在本实体上的实例化。
demand_snapshot
需求结构化条件 JSONB(建单时冻结、不回写,沿用 demand_basis 快照范式);可嵌入 order_history_digest 脱敏摘要(无 PII 红线:无姓名/邮箱/地址/公司名/单笔金额)。
D-dec3
大额交易人工确认阈值与非标合作场景清单(PRD §2.5 管理层决策)——仅阻塞 confirmation_threshold 数值与非标场景枚举值的生产配置;缺省 null=门禁退化为「全部推荐需人工确认」(保守默认,合规安全向)。
挂接点三件
本卡对把关框架(AI-3.9-04 本体所有)仅定义三件:①门禁语义挂接(draft→confirmed)②确认动作挂接(confirm API)③分发动作挂接(distribute API)——迁移合法性校验交接前由 step 内局部白名单兜底。
无 cart 直发变体
quote 现状以 cart 为输入({cart_id, customer_id})——撮合分发场景无买家 cart 可依赖,新增变体 workflow 建询价时直写 seller_id,不修改既有 workflow 本体(红线不改上游/既有签名)。
商机有效率
confirmed→distributed→(quote accepted 转化线索)漏斗计数(distribution_refs 数据源);口径与目标值基线立项定(DEC-5),metadata.engine_version 支持分引擎版本对比。

方案设计

设计红线声明与两段式总览

红线对照(AGENTS.md §0.1)
  • Workflow 承载业务逻辑:撮合推荐的生成/确认/分发全部数据变更走 Workflow,守卫(阈值门禁/状态迁移校验)在 step 内实现;
  • 不改上游源码:quote/集采/h2b-trade 实体均为本地模块(backend/src/modules/*)——quote 补 seller 关联按本地模块 migration 实施,不触碰上游;
  • 后端单一数据源:撮合状态/评分/留痕以后端为准,三端仅消费;
  • 参数化 SQL:评分聚合查询全部参数化绑定(demand-basis「值全部 ? 参数化」既有正面范式沿用)。
分段门控内容开工条件
规则级撮合段 无门控 结构化条件 / 评分引擎 / 推荐实体与确认分发 / workflow / 前端 立即可开工(p1 波)
阈值参数接入段 DEC-3 门控 matching.confirmation_threshold 数值、非标场景清单枚举值 前置决策点 DEC-3 关闭后方可配置生产值(结构与配置载体先行落地,值占位)
算法撮合(演进项) 划出本卡范围 推荐模型/用户画像/学习型评分/自然语言需求理解 归 AI-3.4-03 与 AI-3.3-04(P2),本卡仅留接口位

输入段:需求结构化条件(字段级)

载体:matching_recommendation.demand_snapshot JSONB(快照冻结范式沿用 demand_basis「建单时冻结、不回写」)。字段级清单(每字段给来源与类型):

条件字段类型来源(既有链路)约束
category_handles string[] product_category.handle(三语类目树,seed 6 根 18 子) 必填≥1;品类硬过滤依据
attribute_constraints {attribute_id, operator("in"|"range"|"eq"), values[]}[] MercurJS attribute 系统 possible_values(admin-panel/src/types/attribute/common.ts:29)约束合法值 operator 白名单闭合校验(zod)
quantity number 买家输入(对齐集采 target_quantity bigNumber 语义) >0
budget_range {min_minor?, max_minor?, currency_code} 买家输入;金额 minor 整数(沿用集采/quote unit_price_minor bigNumber 实践) currency 三选一(JPY/USD/CNY 按站点)
delivery_terms {region?, deadline_at?} 买家输入;区域枚举对齐 h2b_receiving_location.service_regions 既有语义 deadline 为 ISO8601
order_history_digest object(可选) demand_basis 脱敏快照直接嵌入(DemandBasisSnapshot 结构:seller_id/seller_name/captured_at/orders[]/gp_activities[],orders 近 20 单摘要+gp_activities 集采汇总,RECENT_ORDERS_LIMIT = 20) 无 PII 红线沿用:无姓名/邮箱/地址/公司名/单笔金额;获取失败置 null 不阻断(GAP-8 catch→null 范式)

结构化条件校验:backend/src/api/store/matching-recommendations/validators.ts(zod schema,键闭合);P1 无 LLM 解析——结构化条件由买家表单/采购需求页结构化提交;自然语言→结构化的 LLM 解析为 AI-3.3-04 接口位。

匹配段:候选供方评分(维度×权重结构,数值 DEC-5)

维度字段级口径数据源(只读,既有链路)
D1 品类命中度 供方在售商品类目集合 ∩ demand_snapshot.category_handles 的交集占比(0~1) product→seller 归属(remote query 现有 link)+ product_category
D2 资质等级 seller_profile.approval_data 资质材料完成度加权(如执照+行业资质+验厂齐备=1.0 档位映射) seller-profile(approval_data JSONB)
D3 履约记录 历史订单履约率聚合:已完成订单占比(quote accepted 终态率 + 集采 completed 参与率聚合口径) quote/group-procurement 既有实体聚合(只读 SQL,参数化)
D4 响应能力 seller_profile.capabilities 数组与需求 attribute_constraints/delivery_terms 的匹配度(出口经验/产能字段命中数) seller-profile(capabilities)

权重表结构(数值基线立项定(DEC-5),本卡只冻结结构与键名):

// 配置载体:matching config(以下为 schema 非数值)
{
  "weights": { "category_hit": <DEC-5>, "qualification": <DEC-5>,
               "fulfillment": <DEC-5>, "responsiveness": <DEC-5> },  // 归一化校验 Σ=1
  "candidate": { "top_n": <DEC-5>, "category_hard_filter": true,
                 "min_score": <DEC-5> }
}
  • 评分确定性:同输入同输出(纯函数 scoreCandidates(demand, candidates, weights) → scored[],无随机/无时变因子进评分式——数据快照在生成时冻结);单测断言确定性(验收 A4);
  • 候选集裁剪:品类硬过滤(D1=0 直接剔除,category_hard_filter:true 默认开)→ 评分排序 → top-N 截取(N 数值 DEC-5)→ 低于 min_score 剔除;
  • 无候选出口:裁剪后空集 → 推荐记录落 status=empty_result(不报错不阻断,走降级提示)。

输出段:人工确认分发(挂钩 NFR-3.9-04)

把关状态机挂接点(本体归人工审核框架条目 AI-3.9-04 所有——禁止两套状态机声明):

  • 本体所有者:AI-3.9-04(同波并行卡)——把关框架的通用状态集语义、forward-only 迁移校验工具(qualification-state-machine.ts:29-39 REVIEW_TRANSITIONS 表驱动范式为共享工具来源)、五类场景枚举均归其所有;
  • 本卡仅定义挂接点(三件):①门禁语义挂接——draft→confirmed 迁移即「未确认不生效」门禁实例化,draft 态推荐对供方完全不可见;迁移合法性校验调用共享校验器(其交付前由本卡 step 内局部白名单兜底:仅允许 draft→confirmed/rejected、confirmed→distributed,交接时替换为共享工具调用);②确认动作挂接——POST /admin/matching-recommendations/:id/confirm 写 status/reviewed_by/reviewed_at(或 rejected+rejection_reason);③分发动作挂接——POST /admin/matching-recommendations/:id/distribute 仅 confirmed 态可调(step 内守卫),向候选供方推送询价/商机。

分发=复用既有询价链路:分发 step 供方侧动作落点为向供方发起询价请求(复用 create-request-for-quote 链路语义);无 cart 直发变体为本卡对 quote 链路的唯一扩展点,不修改既有 workflow 本体。

配置载体(DEC-3 占位):权重与阈值配置落新表 matching_config(单行 key="default",字段 weights jsonb / candidate jsonb / confirmation_threshold jsonb——threshold 结构 {large_amount_minor?, scenarios[]} 数值与场景枚举标注 D-dec3,缺省 null=门禁退化为「全部推荐需人工确认」(保守默认,合规安全向));读侧 getEffectiveMatchingConfig()(DB 优先+代码默认回退,translation-config service 同构范式)。

sequenceDiagram autonumber participant DEM as 需求方(B2C 买家 / B2B 组织) participant API as POST /store/matching-recommendations participant ENG as 评分引擎(create Workflow) participant ADM as admin 撮合工作台 participant REC as matching_recommendation participant VEN as 供方(询价收件箱) DEM->>API: 提交结构化需求(zod 校验) API->>ENG: validate → fetch-candidate-sellers(品类硬过滤)→ score-candidates(纯函数评分 + top-N 裁剪) ENG->>REC: persist(status=draft / empty_result,含权重快照 metadata) ENG-->>API: { id, status=draft, candidate_count }(不含 score_detail 供方明细) ADM->>REC: 查看 score_detail 全量(工作台数据源) ADM->>REC: confirm(draft→confirmed,写 reviewed_by/at)或 reject(rejection_reason) ADM->>REC: distribute(仅 confirmed 态,step 守卫) REC->>VEN: 逐供方建询价(无 cart 直发变体,直写 seller_id) REC-->>ADM: distribution_refs + distributed_at 落值(商机有效率追踪数据源) Note over REC,VEN: draft 态对供方零可见(未确认不生效);单供方分发失败继续其余,全失败则 status 停留 confirmed 可重试
图 1. 撮合全链路时序——结构化提交→评分→人工确认→分发复用询价链路
stateDiagram-v2 [*] --> draft : create-matching-recommendation(评分完成后落库) draft --> confirmed : confirm(reviewed_by/at 留痕,唯一入口) draft --> rejected : reject(rejection_reason 留痕) confirmed --> distributed : distribute(step 守卫:仅 confirmed 可调) draft --> empty_result : 无候选/低分全剔除(不报错不阻断) note right of draft draft 态对供方完全不可见 (未确认不生效门禁) end note note right of confirmed 全失败→停留 confirmed 可重试 DEC-3 未决(threshold=null)时 全部推荐需人工确认(保守默认) end note
图 2. 推荐记录生命周期——状态机本体归把关框架条目(AI-3.9-04)所有,本图为本卡挂接点上的实例化视图(迁移白名单兜底:draft→confirmed/rejected、confirmed→distributed)

既有三形态语义沿用不重设计 + quote 缺陷补字段

形态语义沿用声明本卡动作
quote 询价报价 五态状态机(pending_merchant/pending_customer/accepted/customer_rejected/merchant_rejected,quote.ts)与 9 个生命周期 workflow 全部沿用(不重设计);分发产物「供方收到询价」复用其 pending_merchant 入口语义 缺陷注明与修复:quote 无 seller_id 靠 draft_order 反查(query-config.ts:11-17)——分发场景无买家 cart 可依赖;补 seller 侧显式关联字段设计:quote 本地模型 migration 新增 seller_id text nullable(供方接受询价建单时落值,既有 cart 路径不受影响=nullable 向后兼容);分发变体 workflow 建询价时直写 seller_id
集采 group procurement 八态机(draft/scheduled/open/closed/processing/cancelling/cancelled/completed)+target_reached 自动成团(mark-participation-paid.ts:208 精确命中)沿用——「条件触发→状态迁移→审计留痕」为既有正面范式,本卡评分触发动作对齐此范式 撮合不改变集采流程;集采活动可作为需求来源之一(demand_snapshot.order_history_digest.gp_activities)与分发目标之一(供方组织集采的推荐位,P1 仅留 metadata 标记不实现)
demand_basis 参考快照 脱敏需求快照语义沿用——只读、冻结、无 PII demand_snapshot.order_history_digest 直接嵌入其结构;获取失败 null 不阻断(空态范式同构)

子任务 DAG 与排期

flowchart TD M1["M1 matching 实体 + migration + config"] M2["M2 结构化条件字段 + 校验(demand_basis 嵌入)"] M3["M3 评分引擎 + 权重配置载体 + 裁剪 + 单测"] M1 --> M4["M4 三个 Workflow + API × 6 + 单测"] M2 --> M3 M3 --> M4 M4 --> M5["M5 admin 工作台 + 三端表单 + i18n"] M5 --> M6["M6 共享校验器交接(把关框架交付后替换兜底白名单)——契约对齐点"]
图 3. 子任务 DAG——M1/M2 可并行,M6 为与把关框架(AI-3.9-04)的契约对齐点
子任务依赖估时
M1 实体+migration+config无1d
M2 条件校验+demand_basis 嵌入无1d
M3 评分引擎+裁剪+单测M22d
M4 workflow×3+API×6+单测M1-M32.5d
M5 前端(admin 工作台+表单+i18n)M42d
M6 挂接点交接AI-3.9-040.5d

所属波次 p1(与 AI-3.9-04 同波并行,挂接点契约对齐;与 AI-3.3-02 同域不同链路,无资源冲突)。交叉引用:AI-3.9-04(P1 同波,把关框架本体);AI-3.3-04 / AI-3.4-03(P2 演进承接);AI-3.2-02(资质数据上游)。

数据模型 / API / Workflow

新实体 matching_recommendation(字段级)

erDiagram MATCHING_RECOMMENDATION { text id "PK(prefix mtrec)" jsonb demand_snapshot "结构化条件(冻结不回写)" text demand_owner_type "customer / company" text demand_owner_id "customer_id 或 company_id" text candidate_seller_ids "裁剪后候选供方(seller 显式关联)" jsonb score_detail "逐候选 total + per_dimension(评分可解释性)" text status "draft / confirmed / rejected / distributed / empty_result" text reviewed_by "确认人(actor_id)" timestamptz reviewed_at "确认时点" text rejection_reason "驳回原因" timestamptz distributed_at "分发时点(confirmed 之后写入)" jsonb distribution_refs "[{type,quote_id?,draft_order_id?,seller_id}]" jsonb metadata "引擎版本/权重快照(评分可复现审计)" } MATCHING_CONFIG { text id "单行 key=default" jsonb weights "四维权重(Σ=1,数值 DEC-5)" jsonb candidate "top_n / category_hard_filter / min_score" jsonb confirmation_threshold "D-dec3 占位,缺省 null=保守全确认" } QUOTE { text id "既有询价单" text seller_id "新增 nullable 列(补缺陷)" text status "五态状态机(沿用)" } MATCHING_RECOMMENDATION ||--o{ QUOTE : "分发产物询价(distribution_refs)" MATCHING_CONFIG ||--o{ MATCHING_RECOMMENDATION : "权重/阈值快照入 metadata"
图 4. 撮合数据模型——推荐记录/单行配置/quote 补列(索引:(status)、(demand_owner_type, demand_owner_id)、(created_at))

索引:(status)、(demand_owner_type, demand_owner_id)、(created_at)。留痕三件套对齐 seller-profile 范式;reviewed_by=req.auth_context.actor_id 落库范式(findings AI-3.9-04 锚点 review-channel-qualification.ts:43-46 同构)。

API 契约汇总

路由方法权限域请求/响应要点错误码
/store/matching-recommendations POST store(customer auth) 请求=结构化条件(zod 校验);响应 {id, status:"draft", candidate_count}——store 侧只读回执不含 score_detail 供方明细(draft 未确认不外泄) 400 校验失败 / 401 / 403
/store/matching-recommendations/:id GET store(owner 校验) 需求方查看自身推荐进度(status/distributed_at 脱敏视图) 401/403/404
/admin/matching-recommendations GET admin 列表+score_detail 全量(工作台数据源);status/candidate_count 筛选 401/403
/admin/matching-recommendations/:id/confirm POST admin body {decision:"approve"|"reject", rejection_reason?};draft→confirmed 唯一入口;写 reviewed_by/at 400(非 draft 态)/401/403/404
/admin/matching-recommendations/:id/distribute POST admin 仅 confirmed 态可调(step 守卫);触发分发 workflow;响应分发产物计数 400(非 confirmed)/401/403/404
/admin/matching-config GET/PUT admin 权重/阈值配置(threshold 数值 DEC-3 占位) 401/403/400

Workflow 设计(业务逻辑必须在 Workflow)

Workflow状态steps 链补偿逻辑事件
create-matching-recommendation 新增 ① validate-demand-snapshot(zod+attribute 合法值闭合)→ ② fetch-candidate-sellers(品类硬过滤,remote query)→ ③ score-candidates(纯函数评分+top-N 裁剪)→ ④ persist-recommendation(status=draft/empty_result,含 metadata 权重快照) ②③ 失败→step 抛错整体回滚(无部分写);④ 幂等(同 demand 指纹+活跃记录存在则跳过) 完成后 emit matching.recommendation.created(event bus 直接 emit——step 事务上下文外 emit 的既有理由同 run-translate-product 范式)
confirm-matching-recommendation 新增 ① assert-transition(draft→confirmed/rejected 白名单兜底,交接共享校验器)→ ② persist-review(status/reviewed_by/reviewed_at/rejection_reason) ① 抛 MedusaError 拒绝非法迁移(对齐 qualification-state-machine 反向跳转抛错范式) matching.recommendation.confirmed / .rejected
distribute-matching-recommendation 新增 ① assert-confirmed(守卫在 step 内,红线)→ ② create-quote-requests-per-seller(复用 create-request-for-quote 语义的无 cart 变体,逐供方循环+直写 seller_id)→ ③ persist-distribution-refs(distribution_refs 回写+distributed_at) ② 单供方失败:该供方标记失败继续其余(部分成功语义),失败清单入 metadata;全失败→workflow 抛错,status 停留 confirmed 可重试 matching.recommendation.distributed

AI 能力接入点:规则级无 LLM 调用声明 + 演进接口位

本卡 P1 全部能力(结构化条件校验/评分/确认分发)为确定性规则引擎,零 AI/LLM 调用——与 translation client 通路无调用关系。PRD「智能匹配」的「智能」在 P1 兑现为规则级结构化撮合(评分维度可解释、人工可确认)。

演进能力承接条目本卡预留位
自然语言需求→结构化条件解析 AI-3.3-04(P2) demand_snapshot 旁预留 source_raw_text jsonb nullable(原始输入留痕,供未来解析对照/回流标注);解析产物仍走同一 zod 校验(接口契约不变)
推荐模型/用户画像/学习型评分 AI-3.4-03(P2) score_detail.per_dimension 结构允许未来插入 ml_score 维度键;metadata.engine_version 区分规则级/算法级产出(有效率指标可分引擎版本对比——A2 口径预留)
语义匹配(品类/属性向量相似度) AI-3.3-04 品类硬过滤未来可放宽为「硬过滤+语义召回」两段——本卡结构不变

前端改动面与 i18n

端改动i18n 文件路径新增 key(示意)
admin-panel 撮合工作台(推荐列表+score_detail 展开+确认/分发动作) admin-panel/src/i18n/translations/{en.json, zhCN.json, ja.json} matching.recommendation.status.draft/confirmed/rejected/distributed/empty_result、matching.recommendation.action.confirm/reject/distribute、matching.recommendation.score.*(维度名)、matching.config.threshold.pendingDecision(DEC-3 占位提示)
storefront 需求提交表单(结构化条件)+推荐进度查看 storefront/messages/{en,ja,zh-Hans}.json matching.form.category/quantity/budget/delivery、matching.status.pendingReview/approved
b2b / h2b storefront 同 storefront(B2B 组织维度提交) 各端 messages/{en,ja,zh-Hans}.json 同 storefront 命名空间
vendor-panel 供方收到的撮合询价复用既有询价收件箱(quote pending_merchant 视图),无新增页面 — 无新增(复用既有 quote i18n)——分发落点即询价,商家零学习成本
influencer / referrer panel 无改动 — —

验收与测试

验收标准(PRD 要点 + 技术口径)

#验收标准映射
A1 人工确认后分发可验证:①draft 态推荐对供方零可见(store 侧无读路径,供方 API/前端均无该数据暴露);②confirm 前 distribute 被拒(400);③confirmed 后分发触发且 distribution_refs/distributed_at 落值 PRD 验收要点①
A2 商机有效率可追踪:matching_recommendation 可聚合 confirmed→distributed→(quote accepted 转化线索)漏斗计数;有效率口径与目标值基线立项定(DEC-5) PRD 验收要点②
A3 无候选降级:品类无供方数据集→empty_result 终态+需求方收到人工询价引导;询价/集采主流程全程可用 NFR-3.8-01
A4 评分确定性:同 demand_snapshot+同权重快照→score_detail 逐字节一致(单测断言,含并列分数稳定排序) 评分引擎
A5 门禁保守默认:DEC-3 未决(threshold=null)时全部推荐需人工确认方可分发——合规安全向默认可验证;DEC-3 回填后大额场景拦截可配 DEC-3 占位
A6 留痕完整性:confirm/distribute 动作均落 reviewed_by/reviewed_at(/rejection_reason)+审计记录(action/actor 范式) 合规挂钩 / Workflow
A7 quote 兼容:补 seller_id 列后既有 cart 询价路径行为不变(nullable 向后兼容回归) 缺陷补字段

测试策略(分层)与 L0 门禁

L0 门禁:本文档十要素章节齐备、关键 code anchor 字符串可 rg 命中、quote/集采既有单测可回归(backend/src/workflows/group-procurement/__tests__ 目录存在,实现期确认覆盖面并复跑;quote workflow 测试同规则)。

层范围明细
既有回归 三形态守卫 quote 生命周期 workflow、集采 mark-participation-paid(target_reached 判定行为不变)、demand-basis 快照构造(无 PII 断言既有用例)
新增单测(引擎) 条件/评分 ① 结构化条件 zod 校验(operator 白名单/attribute 值闭合/budget 负值拒绝);② 评分四维度各自口径正确;③ top-N+硬过滤裁剪;④ 确定性(A4);⑤ 空候选→empty_result
新增单测(门禁与分发) 确认/分发 ⑥ 迁移白名单(draft→confirmed/rejected 合法、confirmed→draft 拒绝、分布式守卫);⑦ confirm 写留痕三件套;⑧ 分发变体建询价直写 seller_id+失败清单部分成功语义;⑨ threshold=null 保守默认(A5)
集成 跨模块 创建→确认→分发→供方询价收件箱可见(quote pending_merchant 视图)全链路;matching_config 热更新生效路径
降级路径测试 A3/A5 flag 关闭/评分故障/无候选/DEC-3 未决四态

量化指标占位口径:撮合商机有效率(基线/目标)、top-N 候选数、评分权重四值——全部基线立项定(DEC-5);大额阈值与非标场景清单——D-dec3(管理层决策,配置占位)。

风险与降级

风险卡

Blocker D-dec3:大额阈值+非标场景清单未决(management_decision,PRD §2.5)
仅阻塞 confirmation_threshold 数值与非标场景枚举值的生产配置(阈值参数值)——不阻塞规则级引擎与评分结构设计(配置载体/校验/保守默认先行,RK-05 mitigation「框架设计与参数值解耦」落文)。可并行:全部结构可立即开工——权重表结构(值 DEC-5 占位)、门禁 step(缺省全确认语义)、admin 工作台、workflow 全链;DEC-3 关闭后仅回填配置值+场景枚举,无 schema 变更。
Medium X-data-prerequisite:评分数据稀疏(运行时数据风险)
seed/demo 数据量小——不阻塞开发;影响 D3 履约记录维度上线初期的区分度。缓解:评分权重可配置化(matching_config)支持数据积累后调参;冷启动期权重可向 D1/D2(品类/资质,静态可算)倾斜——调参动作属运营,不改结构。
Low 资质数据完整性依赖(上游 AI-3.2-02)
seller_profile.approval_data 资质数据完整性影响 D2 维度区分度——数据质量依赖,非开发阻塞。

降级设计(撮合失败/无候选不阻断主流程,NFR-3.8-01 范式)

「未配置/故障即跳过不阻断主业务」——撮合失败永远存在人工出路
  • 引擎开关关闭(feature flag matching.enabled 缺省 false):需求提交入口隐藏,既有询价/集采人工流程完全不受影响(撮合是增量入口非替代);
  • 评分聚合查询失败:step 抛错→workflow 回滚→store API 返回 503 语义错误码+「可稍后重试或直接发起询价」提示(不阻塞询价直达入口);
  • 无候选/低分全剔除:empty_result 终态+需求方收到「暂无匹配供方,可发起人工询价」引导——撮合失败永远存在人工出路(quote/集采直达);
  • DEC-3 未决→确认门禁保守默认(全部需人工确认,合规安全向)。

合规挂钩

NFR / 决策项挂钩点本卡动作
NFR-3.9-04(人工审核覆盖 AI 产出物) PRD FR-3.3-05 合规挂钩注记原文:「撮合结果导向的交易,按 NFR-3.9-04 枚举场景执行人工确认(大额交易/非标合作等),确认后方可生效」 挂接点三件:draft→confirmed 未确认不生效门禁+确认/分发 API+reviewed_by/at/rejection_reason 留痕;五类场景框架与状态机本体归 AI-3.9-04(引用不重复设计)
DEC-3(大额交易人工确认阈值与非标合作场景清单) 阈值参数值阻塞 matching_config.confirmation_threshold 配置占位,数值标注 D-dec3 不臆造;缺省 null=保守全确认
NFR-3.9-01(APPI 数据最小化) 需求侧数据 demand_snapshot 仅结构化商业条件;order_history_digest 沿用 demand_basis 无 PII 红线(无姓名/邮箱/地址/公司名/单笔金额)——输入侧脱敏沿用声明
NFR-3.9-03(审计可追溯) 撮合决策留痕 ①推荐记录 metadata 权重快照(评分可复现);②分发审计对齐 mark-participation-paid 范式(action/actor_type/actor_id/metadata);③reviewed_by/at/rejection_reason 三件套
NFR-3.9-02(AI 输出免责) 撮合推荐展示给 admin/需求方时 前端文案标注「系统推荐,仅供参考」(i18n key 随前端提交);P1 推荐不直接面向公众(人工确认后分发),公众侧暴露面为零
C6(AI 异常不阻断) 引擎故障路径 三级降级(见上)

迁移与回滚

migration内容兼容性
matching 模块 migrationCREATE TABLE matching_recommendation(全列+3 索引)+ CREATE TABLE matching_config(单行配置)新表,无存量
quote 模块 migrationALTER TABLE quote ADD COLUMN seller_id text NULL(缺陷补字段)nullable 加列——既有行不回填、既有 cart 路径零行为变化(A7)

pnpm db:reset / db:reset:demo 兼容声明:两 migration 均可空库重放;matching_recommendation/matching_config 空表不参与 seed(seed 留空惯例一致);quote.seller_id 为 NULL 时全链路行为与现状逐字节等价。

变更回滚路径
撮合全能力 feature flag matching.enabled(独立开关,缺省 false)置 false——入口隐藏、workflow 不可触发;已产生的推荐记录保留(审计数据不删),回滚=回到人工询价/集采现状
quote.seller_id 列nullable 列保留无害;如需 schema 回退走反向 migration(数据为 NULL 时零损失)
权重/阈值配置matching_config 改回默认行(threshold=null=保守全确认)即恢复安全态

上线顺序建议:M1-M4 后端先行(flag=false 影子运行:workflow 可单测/integration 验证但入口不开)→ M5 前端+flag=true 灰度开管理员侧 → DEC-3 回填阈值 → 全量开放。

前置决策点

Blocker 二分表(阻塞什么 / 可并行做什么)

Blocker类型阻塞什么可并行做什么
D-dec3(大额阈值+非标场景清单,PRD §2.5)Blocker management_decision 仅阻塞 confirmation_threshold 数值与非标场景枚举值的生产配置(阈值参数值)——不阻塞规则级引擎与评分结构设计(RK-05 框架与参数解耦落文) 全部结构可立即开工:权重表结构(值 DEC-5 占位)、门禁 step(缺省全确认语义)、admin 工作台、workflow 全链;DEC-3 关闭后仅回填配置值+场景枚举,无 schema 变更
~~F-search-backend-choice~~ 不涉及 —(检索域决策,与撮合无依赖) —
X-data-prerequisite(评分数据稀疏)运行时风险 运行时数据风险(seed/demo 数据量小) 不阻塞开发;影响 D3 履约记录维度上线初期的区分度 评分权重可配置化支持数据积累后调参;冷启动期权重向 D1/D2(静态可算)倾斜——调参属运营,不改结构

内部依赖与下游消费

方向条目关系
同波并行 AI-3.9-04(人工审核框架) 契约对齐非串行依赖:本卡挂接点(三件)与其共享校验器交接——其交付前本卡 step 内局部白名单兜底,交付后替换调用;双方 TDD 互相交叉引用(决策二工具级共享粒度)
上游 AI-3.2-02(入驻资质) seller_profile.approval_data 资质数据完整性影响 D2 维度区分度(数据质量依赖,非开发阻塞)
下游 AI-3.3-04 / AI-3.4-03(P2) 算法撮合演进承接方(演进接口位);商机有效率分引擎版本口径(A2)为其评估基线
下游 NFR-3.9-04 五类场景全局 本实体为五类场景中「大额交易/非标合作」在撮合域的首个实例化载体

开放数值决策

  • DEC-5 撮合商机有效率(基线/目标)、top-N 候选数、评分权重四值——基线立项定,本卡仅引用编号不臆造数值。
  • DEC-3 大额交易人工确认阈值与非标合作场景清单——管理层决策,配置占位;缺省 null=保守全确认(合规安全向)。

附录:溯源表

本文档由 docs/reports/ai-module-prd/tdd/AI-3.3-05-supply-demand-matching.md(v1.0,2026-10-26)可读化重组生成。章节映射与处理方式如下:

本文档章节源文档章节处理方式
摘要文档头(元数据/范围边界)+ §1 溯源与现状Summarized
关键概念§1.2 关联条目映射 + §3 缺口与目标状态 + §4 方案设计Summarized
方案设计 · 设计红线与两段式总览§4.0 设计红线声明与两段式总览Preserved
方案设计 · 需求结构化条件§4.1 输入段(字段级表)Preserved
方案设计 · 候选供方评分§4.2 匹配段(维度×权重结构)Preserved
方案设计 · 人工确认分发§4.3 输出段(实体字段级+挂接点三件+配置载体)Preserved
方案设计 · 三形态沿用与 quote 补字段§4.4 既有三形态语义沿用不重设计 + quote 缺陷补字段Preserved
方案设计 · 子任务 DAG§9 波次与排期适配(M1-M6 DAG + 估时表)Preserved
数据模型 / API / Workflow§4.3 实体字段表 + §4.5 API 契约汇总 + §4.6 Workflow 设计 + §5 AI 能力接入点Preserved
前端改动面与 i18n§4.7 前端触点与 i18n 三语 key 规划Preserved
验收与测试§8.1 验收标准(A1-A7)+ §8.2 测试策略与 L0 门禁Preserved
风险与降级(风险卡/降级/合规/迁移回滚)§4.8 降级设计 + §6 合规挂钩 + §10 迁移与回滚Preserved
前置决策点§7.1 Blocker 二分表 + §7.2 内部依赖与下游消费Preserved
图 1 撮合全链路时序§4.3/§4.5/§4.6(确认分发链路+API+Workflow steps)Inferred(文字流程转绘为时序图,含降级注记)
图 2 推荐记录生命周期§4.3 把关状态机挂接点(本体归 AI-3.9-04 所有)Inferred(挂接点实例化视图,迁移白名单一致)
图 3 子任务 DAG§9 子任务 DAG 文字图Inferred(文字图转绘为流程图,依赖关系一致)
图 4 撮合数据模型§4.3 实体字段表 + §4.4 config 载体 + §10.1 migrationInferred(按源字段表转绘 ER 图)
锚点复核约定

源 TDD 全部 file:line 锚点在其生成 run 中以 rg/sed 逐条复核;上游原始锚点与复核实际行号存在漂移处以「来源锚点(复核:实际行号)」双写标注(如 h2b-trade.ts :55-58→:38-40、quote.ts 模型 :4-20、mark-participation-paid.ts:208 精确命中),内容实质均验证成立。本页沿用源文档复核后的锚点表述。