当前位置:   article > 正文

(非代码层面)优化自己的本地langchain-chatglm3的QA效果思路分享。_langchain-chatchat的改造

langchain-chatchat的改造

前言

本篇不讲代码,仅分享一些优化自己处理QA任务的向量库大模型的方法。

背景

一、 大家有时制作基于langchain创建具有知识库的的本地GLM模型,在执行QA任务时。会发现效果会明显的差过智谱的智能体。个人认为原因主要是:

  1. 模型大小:本地模型体量(毕竟也就6B)明显小于网上官方的大小,而且智能体的模型大概率也有经过专门训练。故与我们本地模型的理解能力水平就不在一个档次上。
  2. 语句切割工具:智谱有更优秀的语句切割工具,能更好的分开不同内容的语句。(我猜的┗( ▔, ▔ )┛)
  3. embedding模型:智谱官方自己有优秀的的embedding模型。能把让不同语义内容距离更为明显。

二、对于上述问题,很多大厂和牛人们,在资源和技术充足条件下可以直接对embedding和glm模型进行微调,来满足自己的业务场景。这对我们很多只能照葫芦画瓢的新手,添加了不少难度。常见困难如下:

  1. 不懂微调模型。GG~
  2. 微调后的embedding无法和langchain结合
  3. 微调能跑起来,但是实际效果差到想哭
  4. 数据量太少,失了智

三、因此暂时受限于我们资源和技术的不足,我们需要另辟蹊径,即从非代码层面尽可能的优化。那就只能从提示词和导入向量库的文本这两块入手。毕竟清华大佬们的模型其实已经很不错。
什么?你一定要想用自己微调的过的模型?我只能说

在这里插入图片描述

思路

聪明的孩子领悟能力强,那天赋差的孩子就只能靠更细致的指导。我们具体思路就是:

  1. 既然模型的能力弱,那我们就要给予本地模型更为细致的提示。
  2. 既然文本割工具不如智谱,那我们就一开始规定好文本的内容格式。便于我们后续人为切割。
  3. embedding这块嘛,不微调的话,那就没法子(弃疗~)ヽ( ̄▽ ̄)ノ

导入向量库的文本与prompt提示词

一、导入向量库的文本

1.数据类型

用txt!用txt!用txt!
虽然langchain支持Word、Excel、pdf、txt等格式文件,但是!但是!但是!我建议你最好用txt。这个效果最好。

2.制作文本内容

核心思想就是除非万不得已,一个完整话语句话尽量在一行,不要和其他内容掺杂在一起

2.1 问答(QA)

如果数据就是问答(QA)类型,请将其放在同一行。这样后期可以只要按行划分句子。效果就能很好
比如:

问题1
答案1
问题2
答案2
  • 1
  • 2
  • 3
  • 4

效果不如:

 问题1; 答案1
 问题2; 答案2
  • 1
  • 2
2.2 规则型

不同规则单独一行,且每个规则尽量不要太长

1、规则一。2、规则二。...
  • 1

效果不如:

1、规则一。
2、规则二。
...
  • 1
  • 2
  • 3
2.3 特色数据类型

比如json,都尽量在一行

{
k1:v1,
k2:v2
}
  • 1
  • 2
  • 3
  • 4

效果就不如

{k1:v1,k2:v2}
  • 1
2.4 段落型

这个就比较尴尬了,如果内容都比较短,我们按可以自定义方法按段来分割也还是可以。如果太长的话那还是得去设置langchain下CharacterTextSplitter的chunk_size, chunk_overlap参数效果应该更好。

二、prompt提示词

1.结构(部分个人见解)

大体上,这个提示词无外乎分3个部分组成。
提示词模版 = 定义角色 + 知识库检索内容 + 用户输入
如果再加些要求,就可以变成下面4个部分。
提示词模版 = 定义角色 + 要求 + 知识库检索内容 + 用户输入

理论上,如果能用英文书写的效果将是最好!因为样容易切分的语言对大模型的理解会非常友善。但是考虑到实用性(才不是我学渣英语水平的问题!)我们还是选择用中文来写。

2.格式

提示词模版 = 定义角色 + 参考知识库检索内容 + 用户输入

为例

2.1 定义角色
你一个叫做00xx的智能问答小助手,你要尽力用户输入的问题
  • 1
2.2 参考知识库检索内容
回答输入问题时,你可以基于:
{知识库检索到的n条数据文本}
回答:
  • 1
  • 2
  • 3
2.1 用户输入
用户输入问题
  • 1

把以上三块生成str连起来输入进glm大模型即可。

3 小问答(以下只是个人观点,没有算法佐证)

问:是不是写得越多越好?
答:不一定,因为过多过细的规则最终都是要转成向量输入模型,写得太长我们无法保证转成向量后损失的文本信息有哪些,同时如果你写的太长glm也有可能出现分词效果不好的现象。而且要考虑到我们的模型只是6B,给它太多的要求本就是强人所难,到时给你瞎答,那就杯具咯~

问:写规则有什么语法要求吗。
答:尽量别口语化甚至是反语;条件要清晰明确;避免出现数值比对的要求;如果对其输出格式有要求,在说明格式要求时,再写一个范例效果会更好

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/1009734
推荐阅读
相关标签
  

闽ICP备14008679号