实战经验:如何限定AI的知识边界、让它在不知道时拒绝而非编造、以及何时应该转人工处理。
让它的回复听起来像人说话很容易
我们想在课程里放一个助手,能回答学生关于教材的问题。让它回答问题花了一个周末——接上模型、喂给它课程内容,学生提问,它回复。演示效果很好,大家纷纷鼓掌。
然后有个学生问了一个我们从未涵盖的内容,它编了一个答案出来。自信、流畅、错误。它编造了一个不存在的功能,还告诉学生去用它。那一刻,真正的项目才刚开始,而真正的项目几乎与生成文本无关——恰恰相反,是教它停下来。
上线后的几周,主要花在三个问题上:划定它能知道什么、让它学会拒绝而不是编造、以及知道什么时候该退让、把学生转接给真人。我来逐一展开,因为做一个 AI 助手的真实情况大部分是这样的,而不是你们看到的那个演示。
我们的第一反应是给模型所有东西——所有课程、所有笔记、所有旧帖子。更多上下文,更好的回答,对吧。
错了,大部分情况下都是错的。当知识变成一个大杂烩时,模型会把旧草稿里一句随口的话和核心课程一视同仁地对待。它分不清经典内容和噪音。所以我们把它裁剪了。助手只能看到一组定义好的源材料,每块内容都标记了来源和权威性。一篇已发布的课程优先级高于论坛回复,论坛回复优先级高于空白——因为我们不再喂给它随机的论坛回复了。
我们还在系统提示词里明确划定了边界。助手被清楚地告知它涵盖哪些主题,其他一切都不在范围内。这听起来理所当然,但在我们写下来之前,模型以为它的范围是"任何有帮助的助手都能讨论的内容",也就是整个互联网。给边界命名比我们尝试的任何检索技巧都更有效。
划定范围的另一个好处是可追溯性。因为每个答案都来自带标签的片段,我们可以查看一个坏答案,准确找出是哪条源材料把它带偏了。我们的修复有一半根本不是改提示词,而是找到一份过时文档然后删掉它。
让模型拒绝是件奇怪地难的事,因为整个训练梯度都在推着它变得有帮助。问它超出知识范围的问题,它的本能是还是要帮忙,那就意味着猜测。
我们从几个方向解决这个问题。在提示词里,我们用强有力的语言给了它"可以不知道"的许可,并附上了好的拒绝示例。在我们的系统里,拒绝不是死胡同。它会说明它无法回答什么,然后把学生引导到真实的地方,通常是一个真人。给模型一个具体的"我没有这个,这里是接下来可以怎么做"的模板,比告诉它"不要 hallucinate"有效得多——模型基本忽略后者。
然后我们像测软件一样测试它,这是我在任何类似项目上都会重複的部分。我们建立了一组我们确定不在范围内的题目,外加一组"差点命中"的题——听起来在范围内但实际不在的。每次修改提示词或源材料都要跑一遍那个题集。如果不在范围内题目的拒绝率下降了,这个改动就不上线。在有那个测试之前,每一次对回答能力的改进都在悄悄损害拒绝能力,而我们看不到这个权衡,直到学生碰上。
有一个细节帮助很大。我们停止奖励长回答了。一个觉得自己必须填满空间的模型会编造空间来填充。一旦我们告诉它,短回答和一句干净的"这个问题你可以问导师"都是完全可以接受的结果,编造就减少了。它有了简短作答的许可,于是停止了填充。
最后一块是接受这样一个事实:助手应该故意在某些对话中输掉。如果学生感到沮丧,或者问题涉及到个人信息比如他们的进度或退款,或者模型连续拒绝两次,它就把对话转给真人。不会有第三次猜测。
我们把转接做成了一条真正的路径,而不是礼貌的死胡同。助手会传递被问了什么、它没能覆盖什么,这样接手的人不是从零开始。那个上下文传递是很小的工程,但回报很大。学生讨厌重复自己说的话,如果转接把他们说的全丢了,感觉比没有助手还糟。
如果有一件事要告诉做这个项目的人,那就是困难的、有价值的工作在拒绝那一侧,而不是回答那一侧。回答是演示。拒绝得好、划定范围紧密、转接干净,这才是产品。这些做起来更慢、更不好玩,但这是区分"学生信任的助手"和"坐在你课程里自信满满的骗子"的关键。
AGINE Academy 是 AGINE AI 的独立产品(与 Anthropic 无关联)。我们通过动手做来教用 Claude 建造,而不是看讲座。