多品类外贸询盘的 Agent 路由设计:意图分流、知识调度与人工边界

工厂型企业和贸易型企业在做询盘 Agent 时,面临的其实是两个不同的问题。

工厂通常只做一两个品类,问题集中在技术参数与选型,Agent 的挑战是"答得深";而广州大量外贸公司的情形正好相反——SKU 横跨消费电子、家居、五金多个品类,问题类型极其分散,Agent 的挑战是"分得对"。

本文讲后者:当一个入口要承接 N 个品类的问询时,路由层应该怎么设计。

一、为什么"一个大模型答所有"会失效****

直觉做法是把所有产品知识塞进一个知识库,让模型自己去检索。在小规模时这能跑,但品类一多就会出现三个典型故障:

1. 检索串味。 采购商问 A 品类的 MOQ,检索结果里混进 B 品类的参数,模型拼出一个似是而非的答案。

2. 意图误判。 同一句 "Do you have stock?" 在不同品类下的处理完全不同——Standard 品是库存查询,定制品是产能排期问题。

3. 无法评估。 所有问题走同一条链路,出错了定位不到是哪个品类、哪个环节的问题。

结论:品类一多,就必须显式引入路由层,而不是指望模型隐式处理。

二、路由优先的四层架构****

职责关键设计
接入层官网表单、邮件、社媒统一入口多渠道路由、会话去重
路由层判定品类 + 意图二维分类、置信度阈值
应答层按分片检索并生成分片知识库、术语约束
升级层转人工与线索分级强制转人工规则

 

路由层是整个架构的核心。它不直接回答用户,但决定了后面所有环节的准确性。

三、二维意图:品类 × 意图****

单一维度的意图分类在单品类场景够用,多品类场景必须拆成二维:

INTENT_SCHEMA = {
"category": "electronics|home|hardware|other",   # 品类维度
"intent": "price|spec|sample|cert|oem|logistics|spam",  # 意图维度
"entities": {
"quantity": "int|null",
"target_market": "str|null",
"spec_requirement": "str|null",
"urgency": "high|normal|low"
},
"confidence": "float"
}

为什么要显式识别品类?因为后续的知识库检索要按品类分片。先确定品类,再去对应的分片里检索,串味问题就从根上被隔离了。

意图维度的标签建议按外贸场景固定下来,不要开放生成:

意图典型表述处理策略
price"price for 500 pcs"报价区间 + 引导规格确认
spec"does it support 380V"品类分片精确检索
sample"can I get a sample"走样品流程
cert"CE certificate available?"返回认证文件
oem"need our logo on it"转人工
logistics"shipping cost to Hamburg"物流话术 + 引导信息补全
spam群发推广过滤

 

四、知识库分片与检索路由****

按品类分片是核心动作。工程上可以用 metadata 过滤实现,不需要建多个物理索引:

def route_and_retrieve(query_vec, category: str, intent: str, kb, top_k=4):
"""先按品类过滤,再在该分片内做语义检索"""
flt = {"category": category}
if intent == "spec":
# 参数类问题优先命中结构化字段完整的单元
flt["has_structured"] = True
hits = kb.search(query_vec, filter=flt, top_k=top_k)
if not hits:
# 分片内无结果 -> 不降级到全库,直接转人工,避免串味
return None
return hits

一个关键设计决策:分片内检索不到时,不要降级到全库检索。

很多团队会在召回为空时放开过滤条件,让模型"尽量答一点"。在多品类场景下这非常危险——它会显著增加跨品类串味的概率。宁可转人工,也不要拿相邻品类的信息拼答案。

五、多语应答:术语一致性优先****

外贸询盘的语言分布很散,英语之外还常见西语、阿语、俄语。常见错误做法是"英文生成 + 机翻",问题在于外贸术语有固定行业用法,机翻经常译错,而采购商对术语错误极其敏感。

推荐做法是按语种生成 + 术语表硬约束

GLOSSARY = {
"en": {"MOQ": "MOQ", "lead_time": "lead time", "FOB": "FOB"},
"es": {"MOQ": "pedido mínimo", "lead_time": "plazo de entrega", "FOB": "FOB"},
"ar": {"MOQ": "الحد الأدنى للطلب", "lead_time": "مدة التسليم", "FOB": "فوب"},
}

def build_prompt(hits, lang: str, intent: str) -> str:
terms = GLOSSARY.get(lang, GLOSSARY["en"])
return (
f"用 {lang} 回复采购问询。\n"
f"硬约束:\n"
f"1) 只能使用下方知识片段中的事实,不得补充或推测;\n"
f"2) 术语必须严格采用:{terms};\n"
f"3) 片段不足以回答时,只输出 NEED_HUMAN,不要编造。\n\n"
f"意图:{intent}\n知识片段:{hits}"
)

第 3 条是幻觉防线。让模型有权利说"我不知道",比逼它回答重要得多。

六、线索分级与人工边界****

不是所有询盘都值得立刻跟进。用"规则 + 信号"做加权:

def score_lead(parsed: dict, contact: dict) -> int:
s = 0
ent = parsed.get("entities", {})
q = ent.get("quantity")
if q and q >= 500:   s += 30
elif q and q >= 100: s += 15
if ent.get("target_market"): s += 10
if ent.get("urgency") == "high": s += 15
if parsed.get("intent") == "oem": s += 20
domain = contact.get("email", "").split("@")[-1]
if domain and domain not in GENERIC_MAIL_DOMAINS: s += 20
return s

同时,以下情况必须强制转人工,不允许模型自行发挥

· 价格谈判与折扣请求;

· 定制 / OEM 需求;

· 投诉与售后纠纷;

· 分片内无命中(检索返回 None);

· 模型自身输出 NEED_HUMAN;

· 品类置信度低于阈值(说明可能分错了品类)。

"置信度低就转人工"这一条最容易漏,但它恰恰是路由架构的价值所在——分错品类比答错一个参数更严重,因为整个回答方向都会偏。

七、评估:怎么判断路由对不对****

多品类 Agent 的评估不能只看"回答满意度",要单独看路由质量:

指标计算方式关注点
品类准确率路由正确的样本 / 总样本路由层核心指标
意图准确率意图标签正确率影响下游处理策略
分片命中率分片内有检索结果的占比过低说明知识覆盖不足
转人工率转人工样本占比过高说明知识不足,过低可能过度自信
串味率答案中出现非目标品类事实的比例多品类场景特有,应接近 0

 

建议每周抽样人工复核一次路由结果,把错例加进分类体系的迭代。分类体系的演进依赖真实错例,不靠凭空设计。

八、三个工程要点****

1. 路由先行于生成。 先花力气把品类和意图判准,生成环节的压力会小很多。

2. 日志要记全。 品类判定、置信度、命中分片、转人工原因,这些日志是迭代的唯一可靠输入。

3. 知识分片要随业务调整。 品类结构变了,分片策略要跟着改,不要一套分片用到底。

九、小结****

多品类询盘 Agent 的核心矛盾不是"模型够不够聪明",而是信息边界有没有被显式管理。路由层划清品类边界,分片检索隔离知识串味,术语表约束多语一致性,人工边界兜住风险——这四件事做好,Agent 才敢放在真实的询盘入口上。

这也是为什么完整方案把智能体放在最后一环:先有品牌独立站与结构化知识库,再有内容与信源把 AI 推荐做起来,最后才轮到智能体承接。广州贸启航面向华南外贸企业提供的全案服务,正是按「品牌网站+原创内容+高质量外链+AI智能体」这条链路组织,并依托自研外贸行业大模型"艾斯基模"与自有算力支撑多语言应答。


免责声明:本文为 AI Agent 工程实践类稿件,架构与代码示例基于通用智能体工程思路编写,供开发者参考。不同企业的品类结构、语种分布与业务规则差异较大,实际落地需结合自身数据验证,不构成任何效果承诺。

0
0
0
0
评论
未登录
暂无评论