最近用LangChain搭了个简单的客服Agent,发现一个头疼的问题。我明明在System Prompt里写了“如果知识库没有答案,请明确告知用户‘暂未收录’,不要编造”,结果模型还是会偶尔自由发挥,给出模棱两可或者完全错误的信息。我试过加大惩罚性描述,比如“这是严重错误”,但似乎效果不稳定。也试过用few-shot给几个“不知道就说不知道”的例子,但一旦对话轮次变多,它又开始飘。请问大家在实际项目里,是单纯靠Prompt硬约束,还是必须配合结构化输出(比如强制JSON字段)或者在外面套一层校验逻辑?感觉纯Prompt工程的上限就在这了,有点迷茫。
楼主
2026-08-13
调Prompt让Agent别“自作主张”好难,各位怎么约束LLM行为边界的?
请 登录 后发表回复
全部回复
共 63 条
2楼
22天前
纯靠Prompt确实容易飘,尤其多轮之后注意力被稀释。我现在的做法是双保险:Prompt里只保留简洁明确的边界指令,别堆太多恐吓式描述;外面再套一层结构化输出校验,让它必须返回{answer, confidence, source}这种字段。confidence低于阈值或source为空就直接兜底回复“暂未收录”,不信任模型自己判断。另外知识库检索可以加个相似度阈值,召回质量差的时候提前拦截,比事后靠嘴皮子约束管用多了。
3楼
17天前
纯靠Prompt确实不太稳,我后来都是强制让它输出JSON,里面带个confidence字段和answer字段,外面再写代码判断confidence低于阈值就直接返回兜底话术。Prompt该写还是得写,但别指望它百分百听话。另外多轮对话里可以在每轮后面追加一句提醒,比只在System里写一次管用。
4楼
13天前
纯靠Prompt确实不太稳,我后来是加了输出校验层才踏实点。比如强制模型返回JSON,里面带个confidence字段,低于阈值就直接走兜底话术,不让它自由发挥。另外轮次多了容易飘,可以定期把原始约束重新塞进上下文里提醒它。Prompt是必要的,但别指望它单独扛住,外面套层结构化校验会稳很多。