大模型学习笔记-问题分类器

2024 年 7 月 14 日 星期日(已编辑)
/ ,
302
这篇文章上次修改于 2024 年 7 月 14 日 星期日,可能部分内容已经不适用,如有疑问可询问作者。

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

大模型学习笔记-问题分类器

最近才发现qq机器人已经可以个人开发,而且这个星期qq群的权限也已经开放给个人开发者。所以有动力给自己做一个猫娘机器人了。在这之中结合LLM及各项技术,希望能完善开发出一个好用的东西。

接下来也会根据开发进度发一些相关的文章,今天是第一篇正式文章,之前的function calling系列内容也算是一部分基础。

问题分类器简介

制造一只猫娘,只是单纯的让LLM角色扮演一只猫娘那么就算现在在随便什么网页大模型设置一段prompt都能完成这个功能,还不用花钱。

所以,我的目标是她能实现除了对话之外的一系列功能,这就是Agent(智能体)的基本概念,能根据不同的需求从外部采集额外的数据内容来完善回答或者是直接执行命令,来代替人工操作。传统的QQ机器人需要使用指令 /xxx拼上参数来执行操作,而使用了基于LLM的问题分类器之后,就可以用自然语言来让LLM提取参数后再操作,实现方式类似于之前写的能在api不提供FC功能的伪function calling

根据我自己的机器人,在现在已经写完的插件系统上,里面现有的插件(功能完善的就一个获取天气)。根据用户的输入内容,这个智能体猫娘Kurumi能判断用户是想聊天还是想获取最新的天气信息。

分类器实现

在大模型足够聪明的情况下你直接在模型中写入你想要的结构那么他就能自己提取出来了。但是现实就是现在的大模型不全是那么聪明,所以还需要一份精细的prompt才行。

借鉴

我在这里就直接借鉴dify这个项目的prompt

具体内容可以查看源码#53行QUESTION_CLASSIFIER_COMPLETION_PROMPT

prompt分析

首先是向llm描述任务内容,告诉任务具体细节,同时规定输入输出格式并额外告诉了要注意的约束条件——模型的输出内容只能是json格式的数据。

并在中间提供几段完整的示例。其中如果与上下文有关的话还可以带入以前的对话历史。最后再加入输入和目标的分类细节,以及可以加入额外的classification_instruction分类指令,对分类效果进行调整,最后的最后就是模型要输出的地方了。

可以看出这个prompt一气呵成,更适合的是指令型(instruct)模型和使用补全接口。如果要在Chat接口上使用可以进行一点修改,将example内容放入历史对话中。

实验效果

在本地实验了llama3:8b和gemma2:9b,虽然能提取出keyward,但是category_id错误,之前的function calling相关的实验中这种小参数的大语言模型逻辑推理能力还是不行。闭源模型或大参数的模型如llama3:70b对其简直就是碾压级别的差距。相比来说价格便宜的gpt3.5 turbo准确性比这种开源小参数大语言模型效果好了很多,起码是完全可接受的错误率,即使是这么精细的prompt情况下本地小模型有一半正确就不错了。

如果要本地离线实现这种分类效果或者准确的内容提取,看来是只能上大显存的计算卡跑大参数的模型、或者是针对场景微调过的模型。或者买内存加满的mac mini? 对比老黄的显卡来mac的内存性价比也高了起来。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...