图搜索在电商实现


你这个思路方向是对的:先识别这是“配件/兼容/搭配”类需求 → 抽取主体商品与约束 → 走图谱做多跳匹配。但有两个关键点需要修正/补全:

  1. 用户多数时候不会给出“搭配的商品是什么”,只会给出“我想配一个能夹在山地车上的支架”这种需求约束
  2. Graph 搜索的核心不是“找语义相近的配件”,而是基于图谱里的接口/规格/适配规则可解释的过滤与推理

下面用“运动相机 + 自行车支架”这个场景(我之前的场景一)给你一套可落地的实现方案。


1. 整体实现流水线(生产可用)

Step A:识别这是“兼容/搭配”意图(Router)

  • 轻量规则/小模型即可:关键词如「配、适配、兼容、能不能用、能不能装、支架、转接、接口」等
  • 输出:intent = COMPATIBILITY / ACCESSORY_MATCH

Step B:抽取结构化槽位(Slot Filling)

你要抽取的不是“搭配商品”,而是这些槽位:

  • primary_item:主体商品(用户已有/正在看)
    • 例:大疆 Action 4(或 SKU_ID)
  • accessory_category:配件品类
    • 例:支架/夹具/车把支架
  • constraints:约束条件(非常关键)
    • 例:安装场景=山地车;固定方式=夹在车把;可能还有直径范围、快拆、横竖拍等

这一步可以用大模型做 JSON 抽取(很稳),也可以用“规则+NER+字典”。工程上常见做法:

  • 主体商品实体链接(Entity Linking)尽量走字典/检索召回 + rerank,确保 SKU 对得准
  • 约束抽取用 LLM(可控输出 JSON)

示例输出:

{
  "primary_item": {"brand":"DJI", "model":"Action 4", "sku_id":"SKU_123"},
  "accessory_category": "bike_mount",
  "constraints": {
    "mount_position": "handlebar",
    "vehicle": "mountain_bike"
  }
}

Step C:Graph 检索(多跳推理)

用图谱根据主体商品的“接口/规格”多跳找到“配件”的适配集合,再叠加约束过滤。

Step D:候选排序与业务过滤

  • 库存/价格/毛利/活动等走传统检索或特征排序
  • 最终取 TopN(比如 3 个)给 LLM 生成话术

Step E:生成回答(LLM)

LLM 只负责解释与组织语言,核心事实从 Graph 返回的结构化结果来,避免幻觉。


2. 图谱(KG)怎么建:节点、关系、关键字段

兼容性/搭配推荐能跑起来,图谱至少要有这些实体与关系:

节点(Nodes)

  • Item:商品/SKU(Action 4、某车把支架)
  • Interface:接口标准(1/4螺纹、GoPro卡扣、冷靴等)
  • MountType:安装方式(handlebar_clamp、chest_strap…)
  • Constraint(可选):车把直径范围、承重、适用场景等(也可做属性字段)

关系(Edges)

  • (Item)-[:HAS_INTERFACE]->(Interface)
  • (AccessoryItem)-[:SUPPORTS_INTERFACE]->(Interface)
  • (AccessoryItem)-[:MOUNT_TYPE]->(MountType)
  • (AccessoryItem)-[:HAS_SPEC]->(Spec) 或直接属性:min_diameter,max_diameter, max_load...

核心逻辑:主体商品的接口 = 配件支持的接口,这是最重要的“中间桥梁”。


3. Graph 搜索怎么写:一个 Cypher 例子(Neo4j)

假设:

  • Action 4 支持 gopro_mount 接口(示例)
  • 你要找 “bike_mount + handlebar_clamp”
MATCH (cam:Item {sku_id:$cam_sku})-[:HAS_INTERFACE]->(i:Interface)
MATCH (acc:Item)-[:SUPPORTS_INTERFACE]->(i)
MATCH (acc)-[:MOUNT_TYPE]->(mt:MountType {name:"handlebar_clamp"})
WHERE acc.category = "bike_mount"
RETURN acc.sku_id AS sku_id,
       acc.name   AS name,
       collect(i.name) AS compatible_interfaces,
       acc.min_diameter AS min_diameter,
       acc.max_diameter AS max_diameter
LIMIT 20;

如果用户还说“车把直径 31.8mm”,再加约束:

AND acc.min_diameter <= 31.8 AND acc.max_diameter >= 31.8

Graph 返回的是可解释结构化证据:为什么兼容(接口匹配)、是否满足安装方式、是否满足尺寸。


4. 你原来的想法要怎么改得更准确?

你说:“提取商品和搭配的商品,然后走图搜索?”

建议改为:

  • 提取:主体商品 + 配件品类 + 使用场景/约束
  • 图搜索:从主体商品出发,走接口/规格多跳,找到满足约束的配件候选

因为“搭配的商品”在用户输入里通常不存在;你需要 Graph 帮你推理出该搭配什么,而不是让 LLM 先猜一个“搭配商品名”。


5. 关键工程细节(很重要,决定能不能上线)

  1. 实体链接要稳:Action 4 这类名称可能歧义,建议“检索召回 + rerank + 置信度阈值”。低置信度时先追问:“您说的是 DJI Osmo Action 4 还是 Action 3?”
  2. Graph 结果要可解释:把“接口匹配链路”也返回给 LLM(作为证据),例如:Action4 -> GoPro卡扣 -> 支架X支持GoPro卡扣
  3. Hybrid:如果图谱里没覆盖到该接口或配件(冷启动),fallback 到向量检索(搜“Action4 车把支架”)并标注“可能兼容,建议确认接口/型号”。

如果你愿意,我可以按你当前业务(电商/证券/数码/家居等)帮你把 KG 的 schema(节点、边、字段)画成一张表,并给一套“LLM 抽槽 JSON + Graph 查询 + 回答生成”的 Prompt/接口定义,方便你直接落地到 ReAct tool 里。你这个“场景一”主要落在哪个品类(3C/家电/服饰/家居)?

posted @ 2026-03-22 08:14  向着朝阳  阅读(4)  评论(0)    收藏  举报