赞
踩
本篇不讲代码,仅分享一些优化自己处理QA任务的向量库大模型的方法。
一、 大家有时制作基于langchain创建具有知识库的的本地GLM模型,在执行QA任务时。会发现效果会明显的差过智谱的智能体。个人认为原因主要是:
二、对于上述问题,很多大厂和牛人们,在资源和技术充足条件下可以直接对embedding和glm模型进行微调,来满足自己的业务场景。这对我们很多只能照葫芦画瓢的新手,添加了不少难度。常见困难如下:
三、因此暂时受限于我们资源和技术的不足,我们需要另辟蹊径,即从非代码层面尽可能的优化。那就只能从提示词和导入向量库的文本这两块入手。毕竟清华大佬们的模型其实已经很不错。
什么?你一定要想用自己微调的过的模型?我只能说
聪明的孩子领悟能力强,那天赋差的孩子就只能靠更细致的指导。我们具体思路就是:
用txt!用txt!用txt!
虽然langchain支持Word、Excel、pdf、txt等格式文件,但是!但是!但是!我建议你最好用txt。这个效果最好。
核心思想就是除非万不得已,一个完整话语句话尽量在一行,不要和其他内容掺杂在一起
如果数据就是问答(QA)类型,请将其放在同一行。这样后期可以只要按行划分句子。效果就能很好
比如:
问题1
答案1
问题2
答案2
效果不如:
问题1; 答案1
问题2; 答案2
不同规则单独一行,且每个规则尽量不要太长
1、规则一。2、规则二。...
效果不如:
1、规则一。
2、规则二。
...
比如json,都尽量在一行
{
k1:v1,
k2:v2
}
效果就不如
{k1:v1,k2:v2}
这个就比较尴尬了,如果内容都比较短,我们按可以自定义方法按段来分割也还是可以。如果太长的话那还是得去设置langchain下CharacterTextSplitter的chunk_size, chunk_overlap参数效果应该更好。
大体上,这个提示词无外乎分3个部分组成。
提示词模版 = 定义角色 + 知识库检索内容 + 用户输入
如果再加些要求,就可以变成下面4个部分。
提示词模版 = 定义角色 + 要求 + 知识库检索内容 + 用户输入
理论上,如果能用英文书写的效果将是最好!因为样容易切分的语言对大模型的理解会非常友善。但是考虑到实用性(才不是我学渣英语水平的问题!)我们还是选择用中文来写。
以
提示词模版 = 定义角色 + 参考知识库检索内容 + 用户输入
为例
你一个叫做00xx的智能问答小助手,你要尽力用户输入的问题
回答输入问题时,你可以基于:
{知识库检索到的n条数据文本}
回答:
用户输入问题
把以上三块生成str连起来输入进glm大模型即可。
问:是不是写得越多越好?
答:不一定,因为过多过细的规则最终都是要转成向量输入模型,写得太长我们无法保证转成向量后损失的文本信息有哪些,同时如果你写的太长glm也有可能出现分词效果不好的现象。而且要考虑到我们的模型只是6B,给它太多的要求本就是强人所难,到时给你瞎答,那就杯具咯~
问:写规则有什么语法要求吗。
答:尽量别口语化甚至是反语;条件要清晰明确;避免出现数值比对的要求;如果对其输出格式有要求,在说明格式要求时,再写一个范例效果会更好
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。