前言 #
在实际项目中经常遇到这种情况:算法工程师告诉你,模型准确率已经从 85% 提到 87%,用了两周时间。离目标的 90% 还差 3 个百分点,但按这个速度可能还得再花一个月。而产品下个月就要上线了。
这时候怎么办?继续死磕算法?还是换个思路?
这就是这篇文章想聊的核心主题:当算法效果有限时,怎么用产品设计手段来补齐短板。 这个思路在 AI 产品圈子里有一个通俗的说法,叫做"技术不够,产品来补"。
AI 产品设计的三个容易踩的坑 #
在讲具体方法之前,先说三个在实际项目中反复出现的教训。
别忽视前端交互 #
AI 产品有一个很特别的地方:它像一座冰山。水面之下是算法工程师的大量工作和迭代逻辑策略,水面之上才是用户能看到的交互界面。
大部分时间确实在研究算法、业务、数据和逻辑,但这不意味着可以忽视前端交互。因为用户体验才是第一位的,所有后端逻辑最终都是为用户端服务的1。
我见过不少项目犯这个错误:花 80% 的时间研究算法效果,结果前端交互做得很粗糙,用户根本不买账。算法再好,用户不愿意用也是白搭。
保证算法功能模块的闭环 #
AI 产品有一个其他产品不太关注的要求:算法功能模块必须形成闭环。
线下可以做的事情是:收集 Bad Case,训练模型,优化效果,上线。但线上产品也要保证这个闭环通畅:数据收集、模型训练、优化迭代、上线,整条路径必须顺畅且持续运转。
如果设计的产品只有"用"的功能,没有"反馈"和"优化"的通道,那这个 AI 产品就是死的。上线那一刻就是它的巅峰,之后只会越来越差。
算法效果有限是常态 #
算法优化有一个残酷的现实:付出 80% 的努力可能只提升 1-2 个百分点的准确率。 从 85% 到 87% 可能要两周,从 90% 到 92% 可能要两个月2。
所以需要学会利用其他力量来提升效果:规则辅助、算法辅助、语料清洗等等。核心思路就是"技术不够,产品来补"或者"数据来补"。
用智能客服场景落地:三个关键触点 #
说完注意事项,用智能客服机器人这个具体场景来落地。一个完整的智能客服有三个关键触点。
触点一:访客端聊天页面 #
用户进入咨询页面的第一眼看到什么,决定了后续的体验。这个页面需要设计好几个元素:
- 快捷入口:转人工按钮、评价按钮、常用操作入口,让用户随时有退路
- 问题推荐:用户刚提交贷款申请,就推荐审批进度查询、放款时间询问等可能关心的问题
- 理财产品/贷款产品信息:用户从理财产品详情页进来的就展示该产品,从官网首页进来的就展示近期热销产品
这些设计的目的不是炫技,而是在用户还没开口之前就预判他的需求,减少用户的操作成本。
触点二:智能问答交互 #
这是用户和机器人直接对话的部分,也是最考验产品设计的地方。不同的场景需要设计不同的对话管理步骤:贷前咨询场景怎么引导,外呼营销场景怎么推进,提前还款场景怎么处理,都需要单独设计。
这里有一个非常重要的设计原则:给用户可选择性内容,而非可指示性内容。
举个具体的例子。普通做法是告诉用户"你在手机银行 APP 里面的贷款管理里可以查",用户还得自己去找入口。更好的做法是直接展示用户待查询的贷款供其选择,用户点一下就搞定。
让用户做选择题,不要让用户做填空题。 这个原则在 AI 产品设计中极其重要3。
另外,如果产品涉及语音交互,还有一个专门的角色叫 VUI 设计师(Voice User Interface)。语音场景下用户连页面都没有,所有体验都来自每一轮对话,所以对话话术的设计会直接影响产品成败。
触点三:管理后台 #
这是给运营人员用的,通常包含:
- 配置访客端展示内容
- 维护知识库
- 训练和学习机器人
- 查看数据报表
如果是做 MVP 版本,这三个触点就是核心:用户与机器人聊天的客户端页面 + 智能问答逻辑 + 管理后台。其他功能可以后续迭代。
“产品补技术"的两大方向 #
当算法效果不理想时,有两大方向可以发力。
方向一:算法辅助识别 #
冷启动阶段扩充相似问题。 刚上线的时候,知识库里每个标准问题可能只有很少的相似问法。直接上算法做匹配,准确率会很低。
解决办法是对所有标准问题进行扩写,或者用技术手段生成相似问题。比如标准问题是"能不能提前还清”,你可以扩充出:
- “怎么样提前还款”
- “我已经还了一年了还能提前结清吗”
- “提前还款入口在哪里”
问法越多,算法能匹配到的范围就越广。冷启动阶段,手动扩充相似问题是最简单有效的提升手段。
添加正则或关键词强制召回。 这是一个非常实用的"兜底"策略。比如用户问题中包含"提前还款"两个字,不管算法怎么匹配,都直接强制召回"还款方式"这个标准问题。
为什么要这么做?因为在冷启动阶段语料不够多,算法可能会漏掉一些很明显的匹配。关键词强制召回相当于给算法加了一道保险:即使算法不靠谱,关键词匹配不会漏。
# 关键词强制召回的简单实现示例
FORCE_RECALL_RULES = {
"提前还款": "还款方式",
"利率调整": "利率变更流程",
"提前结清": "提前结清政策",
}
def force_recall(user_input: str) -> str | None:
for keyword, intent in FORCE_RECALL_RULES.items():
if keyword in user_input:
return intent
return None引导用户点击选择。 还有一招是从用户侧入手,降低算法的难度:
- 输入推荐:用户刚输入几个字,就把包含这些字的问题推荐出来。用户还没打完字就已经看到想问的问题了,直接点击就行
- 快捷入口:会话开始前展示用户最可能问的问题;用户提问后,预测下一个最可能的问题并展示
这些设计的本质是:不指望算法 100% 猜对用户意图,而是把"猜"的过程可视化,让用户帮算法做选择4。
方向二:清洗数据降低算法噪声 #
有时候算法效果不好,不是因为算法不行,而是因为输入的数据太脏了。可以从数据清洗的角度来提升效果。
维护转译词库。 在语音转文字(ASR)场景中,方言是个大问题。比如四川话说"咬嗳"意思是"好的",算法不认识这个词。如果维护一个方言转译词库,把"咬嗳"自动转成"好的",算法就能正确识别了。
维护专有词和同义词库。 品牌名和专有名词经常被算法错误切分。比如"神州租车"可能被切成"神州"和"租车",“网易七鱼"可能被切成"网易"和"七鱼”。维护一个专有词库,告诉算法这些词是一个整体,不要切分。
同理,用户可能说"提前还款"、“提前结清”、“不想贷了”,其实都是同一个意思。维护同义词库可以帮助算法理解这些不同表达。
# 专有词库示例
proper_nouns:
- 神州租车
- 网易七鱼
- 飞猪旅行
# 同义词库示例
synonyms:
提前还款:
- 提前结清
- 不想贷了
- 提前还清贷款
利率调整:
- 利率变高了
- 利息太贵
- 能不能降利率过滤无意义词句。 “嗯嗯嗯”、“这个那个”、“就是那个什么”,这些语气词对理解用户意图没有任何帮助,反而会干扰算法判断。维护一个屏蔽词库,把这些无意义的内容过滤掉,算法的效果会有明显提升。
数据清洗的价值往往被低估,但它可能是投入产出比最高的优化手段。不需要改算法,不需要训练新模型,只需要在数据进入算法之前多做一步处理5。
SaaS 产品 vs 定制产品:思路不同 #
“技术不够产品来补"的具体策略,还要看产品类型。
SaaS 产品面向大量企业使用,不可能为每个客户做线下数据采集、标注和训练。所以管理后台必须支持在线的完整闭环:在线收集数据、在线标注、在线训练、在线查看模型指标。客户的数据和模型训练过程都要产品化、自动化。这对产品设计的要求更高,但一旦做好,边际成本极低。
深度定制产品就有更大的操作空间。比如可以为某个场景训练 10 个深度学习模型,每个分配 10% 的流量做 A/B 测试,一段时间后选效果最好的那个模型。定制产品有更大的优化空间,但每个客户的交付成本也更高。
核心区别在于:SaaS 产品靠自动化规模化,定制产品靠深度优化差异化。产品设计的时候要先把这条线想清楚,再决定往哪个方向投入资源。
-
这一点在 ToC 产品中尤其明显。用户对 AI 产品的耐心比传统产品更低,因为期望更高。前 30 秒的体验决定了用户会不会继续用下去。 ↩︎
-
算法优化的边际效益递减是客观规律,这在学术界也有大量讨论。简单来说,越接近理论上限,每提升一个百分点所需的算力、数据和时间都会指数级增长。 ↩︎
-
这个原则其实不只适用于 AI 产品。任何需要用户输入的场景,选择题都优于填空题。但 AI 产品尤其需要重视,因为用户对"智能"的期望更高,对操作成本更敏感。 ↩︎
-
这种思路在推荐系统中也很常见:不是靠算法精准预测用户想要什么,而是给出一个候选集让用户自己选。把最终决定权交给用户,既降低了算法压力,又提升了用户感知。 ↩︎
-
数据科学领域有一句老话:“Garbage in, garbage out。“算法的上限往往不是模型架构决定的,而是数据质量决定的。在投入大量资源优化模型之前,先看看数据有没有洗干净。 ↩︎