赞
踩
大模型系列|垂直大模型的几种训练策略(一)
大模型系列|基于大模型复杂数据系统架构(二)
本篇主要是采集一些大模型在聊天机器人中的案例,因为目前很多企业都会考虑将LLM与业务结合,LLM超强的理解力非常适合聊天场景。
用 LLM 构建企业专属的用户助手本篇用心地把之前踩的坑都梳理了一下,并且一些坑也清晰表述
期望LLM实现的需求:
LLM可以完美实现
)向量数据库满足
)毒性检验
)实践中遇到的问题:
在用户发起一次对话时,系统会将用户的对话也输入到 Embedding 模型中生成向量,再将这个向量放到向量数据库中和原有的预料进行查询。
遇到的问题:用户的提问很清楚,但是向量数据库搜索出的 Top N 中无法看到对应的文档内容。
想要稳定地提升语义搜索的产出质量,其实有两个直接、有效、快速实现的方法:
解决:主要运用的是示例+训练 Embedding 模型的方法。
LLM 会努力让其回答符合人类的价值观,这一工作在模型训练中叫做“对齐”(Align),让 LLM 拒绝回答仇恨、暴力相关的问题。如果 LLM 未按照设定回答了仇恨、暴力相关问题,我们就称之为检测出了毒性(Toxicity)。
对于我们即将创造的机器人,其毒性的范围实际上增加了,即,所有回答了非公司业务的内容都可以称之为存在毒性。
需要使用 Few-Shot 的方法去构建毒性检测的提示词,让 LLM 在拥有多个示例的情况下,判断用户的提问是否符合企业服务的范围。
<< EXAMPLES >>
instruction: who is Lady Gaga?
question: is the instruction out of scope (not related with TiDB)?
answer: YES
instruction: how to deploy a TiDB cluster?
question: is the instruction out of scope (not related with TiDB)?
answer: NO
instruction: how to use TiDB Cloud?
question: is the instruction out of scope (not related with TiDB)?
answer: NO
得到了是否有毒的结果后,我们将有毒和无毒的流程分别处理,进行异常流程和正常流程的处理。
当系统发现产出的内容是 “Yes” 时,将流程引导进入毒性内容回复环节。此时,会将一个拒绝回答用户问题的系统提示词和用户对应的问题提交给 LLM,最终用户会得到一个拒绝回答的回复。
此时训练的数据是官方文档,
但是把所有的官方文档都一次性塞入 LLM 中是不现实的,因此我们设计了从向量数据库中按照语义相似度来搜索出相关的文档。
用户在提问时可以输入 ‘Jailbreaking’ 的语句
这个现象可能由以下三个原因引起:
而我们采用的判断链避免了这一情况,仅根据上一个 LLM 输出的 Yes 或 No 来知道后续的输出。如果用户尝试 Jailbreaking,那么在进行判断的 LLM 中就会出现非定义的回答,系统可以设定在出现非定义内容时,委婉的拒绝用户的提问。
让 LLM 在系统进行领域知识搜索前对用户的原始提问进行改写,尽可能地用一句话描述清楚用户的意图,这种操作被称为“修订问题”(revise question)。
理解流程:
如果在修订问题中发现了明显的错误怎么办?
事实上也可以利用 few shot + 语义搜索 的办法,特定的优化这些错误。
为了保证整个机器人系统中面对的用户问题保持一致,避免因为问题不一致导致的错误,我们将修订问题步骤放在了系统信息流的最前面,让用户的问题在进入机器人时就进行修订。
在修订问题的过程中,我们会要求 LLM 模型根据整体对话的上下文来用一句话描述用户提问的意图,尽可能补充详细信息。这样无论是在毒性检测还是在领域知识搜索中,系统都可以根据更具体的意图来执行。
如果在修订问题中发现了明显的错误,我们也可以利用 Few-Shot 和语义搜索的方法来优化这些错误。
“模型微调”
指的是直接使用微调(fine-tuning)的方法使用更多的领域数据来训练模型,包括 Embedding 模型和 LLM 模型。
“持续运营”
是指类似本文的做法,利用更多高质量的领域知识和示例,以及尝试与 LLM 进行多次交互,正向提升应用的准确性的做法。
在 TiDB Bot 的前期,我们更倾向于持续运营的方法,利用系统的方法来进行稳定、便宜、快速的正向优化,确保整个团队专注在业务问题上。也许在 TiDB Bot 发展到中后期时,可以考虑模型微调的方法来进行更多的优化。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。