既然不想招客服,我就写了个“带性格”的 AI 自动回复助理。这玩意儿听起来挺酷,做起来全是坑,尤其是你指望它真能干活,而不是个只会说“亲,在的哦”的电子复读机。我花了整整一周,就卡在 Pinecone 这个向量数据库上了,不是 API 调用不通,是它返回的结果里,总他妈掺杂着一些看似相关、实则狗屁不通的“幻觉”数据。
这感觉就像你训练了一条顶级猎犬,指望它给你叼回野兔,结果它次次给你叼回来邻居家小孩的臭袜子,还一脸“快夸我”的表情。问题出在哪?数据。你喂给它的“知识库”,那些从官网扒下来的 FAQ、历史工单记录、产品文档,你以为清洗过了,实际上里面充满了重复、矛盾、过时和模糊不清的表述。AI 模型,尤其是 RAG 这套东西,它只是个超级联想机器,你给它垃圾,它就给你制造更精致的垃圾幻觉。我之前的思路全错了,总想着用更复杂的代码逻辑去过滤、去后处理,结果规则越写越多,系统脆得像纸糊的。
得回到源头。我停掉了所有代码开发,就干一件事:洗数据。不是简单的去重。首先,我把所有客服对话记录拉出来,用 GPT-4 跑了一遍,指令不是总结,而是“找出用户问题背后真正的意图,并用一句最精准、无歧义的话重新表述”。比如用户说“你们这个破软件怎么又打不开了?”,背后可能是“软件启动报错‘缺少.dll文件’的解决方案”。这一步,把几百条散乱的抱怨,收敛成了几十个明确的“意图点”。
然后是最恶心的,处理那些官方文档。产品迭代了三年,文档里到处是“即将上线”、“目前暂不支持”这种历史遗迹。我用了个笨办法,结合 git 提交记录和发布时间,手动给每段文档打上“生效时间”标签,无效的、过期的全部丢进另一个知识库,叫“历史背景库”,只在用户明确问到旧版本时才启用。这工作量巨大,但必须做,否则 AI 会一本正经地告诉用户一个两年前就废弃了的功能怎么用。
Pinecone 这边,索引的配置调得我头皮发麻。光是一个 `metric` 参数,从 cosine 换到 euclidean,搜索结果的相关性排名就能差出十万八千里。我建了三个测试索引,用同样的查询句去跑,人工一条条比对 top 5 的结果,看哪个索引返回的“臭袜子”最少。最后发现,对我这种短文本、意图明确的中文场景,用 `dotproduct` 效果反而更稳定。还有 chunk 的大小和重叠度,别信什么 512 token 的黄金标准,我的产品名词长,一段话被切得支离破碎,语义全丢了。最后定在 300 左右,重叠 50 个 token,保证核心上下文不被切断。
我给这个 AI 助理设了个“性格”:冷静、直接、带点技术范儿,绝不卖萌。这不是为了好玩,是战略。在 prompt 里固定它的口吻,相当于加了一层约束,当它想开始胡编乱造、用一堆模糊语言搪塞时,这种“性格”要求反而会迫使它去检索更确定的知识来支撑那种简洁肯定的语气。幻觉往往伴随着“可能”、“也许”、“一般来说”这种虚词。
现在它跑起来了,处理了大概 80% 的常见重复咨询。我没省下客服工资,因为前期投入的时间成本高得吓人。但我得到了更重要的东西:一套对“数据质量”的变态级敏感。以前做产品,堆功能、堆逻辑;现在 AI 来了,你堆的那些东西可能一夜之间就被一个提示词工程替代。真正的壁垒,变成了你手里有没有干净、结构好、实时的高质量数据。代码会贬值,数据不会,尤其是被你深度加工、贴合业务场景的“知识晶体”。这大概是 2023 年,我挨得最值的一顿毒打。














