图搜索在电商实现
目录
你这个思路方向是对的:先识别这是“配件/兼容/搭配”类需求 → 抽取主体商品与约束 → 走图谱做多跳匹配。但有两个关键点需要修正/补全:
- 用户多数时候不会给出“搭配的商品是什么”,只会给出“我想配一个能夹在山地车上的支架”这种需求约束;
- 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. 关键工程细节(很重要,决定能不能上线)
- 实体链接要稳:Action 4 这类名称可能歧义,建议“检索召回 + rerank + 置信度阈值”。低置信度时先追问:“您说的是 DJI Osmo Action 4 还是 Action 3?”
- Graph 结果要可解释:把“接口匹配链路”也返回给 LLM(作为证据),例如:
Action4 -> GoPro卡扣 -> 支架X支持GoPro卡扣 - Hybrid:如果图谱里没覆盖到该接口或配件(冷启动),fallback 到向量检索(搜“Action4 车把支架”)并标注“可能兼容,建议确认接口/型号”。
如果你愿意,我可以按你当前业务(电商/证券/数码/家居等)帮你把 KG 的 schema(节点、边、字段)画成一张表,并给一套“LLM 抽槽 JSON + Graph 查询 + 回答生成”的 Prompt/接口定义,方便你直接落地到 ReAct tool 里。你这个“场景一”主要落在哪个品类(3C/家电/服饰/家居)?

浙公网安备 33010602011771号