掘金 后端 ( ) • 2024-05-16 13:46

环境准备

关于fastgpt的安装、添加模型、测试,在另一篇有详细记录:
https://juejin.cn/post/7366981996620890163

补充说明

高级编排具体教程参考官方文档:
https://doc.fastai.site/docs/workflow/intro/

要想使用AI对接自己的系统实现业务,根本逻辑就是让AI从用户输入的指令中,提取出我们想要的参数,并且转成对应的字段,调用我们自己的http接口,AI收到接口返回的数据之后,再让AI进行学习分析结合用户的问题给出答案。
其中最重要的就是“问题分类”和“文本内容提取”两个模块,需要确保使用的AI模型支持function_call功能,如果使用了不支持function_call的模型的话,到也不会报错,只是永远都会走你配置的最后一个节点或提取的内容永远是空。无法实现正确的业务逻辑。
目前测试了线上模型:零一万物的“yi-vl-plus”、百川的“Baichuan2-Turbo-192k”,智谱的“glm-4”,这些都是支持的,本地模型测试了千问的“qwen:4b”也是支持的。

业务准备

首先准备好自己的业务系统,我准备了一个巡检系统的例子,提供了两个个方法,一个是获取所有的巡检列表数据 image.png 接口结果大概就是这样的 image.png

另一个是修改巡检数据 image.png

我期望的需求是,在AI中查询指令能给我返回我需要的结果,包括各种筛选条件,并且能进行修改指定的数据

高级编排

创建一个新应用,然后点击左侧的【高级编排】,即可进入高级编排涉及界面 image.png

可以看到默认已经存在了一个流程,这个流程就是一个普通的对话流程,它的含义就是用户输入指令从【流程开始】模块,将指令传到【AI对话】模块,然后在【AI对话】模块给出答案,这样一个完整的对话流程就结束了。 image.png

目前自己的系统有两个接口,一个查询接口一个修改接口,首先得要AI知道去调用哪个接口,也就是说得让AI知道用户的指令是“查询”还是“修改”,【问题分类】模块正是解决这个问题的。
首先把原来的【AI对话】模块删除掉,左上角点击【+】号,找到【问题分类】拖入面板中,然后将【流程开始】模块和【问题分类】模块使用连接线连起来。完成后界面是这样的: image.png

配置【问题分类】模块:
AI模型:选择自己想要的模型;
背景知识:写一段描述文字,帮助AI更好的理解,从而分析出属于哪种分类;
用户问题:选择变量引用 → 流程开始 → 用户问题;
分类123:填写自己期望的分类描述,我填写了3个,查询、修改、其他;

image.png

这时可以测试一下,三个分类则会有三个输出节点,每一个输出节点连接一个【指定回复】模块,这样能测试出问题分类有没有效果,面板右上角点击“调试按钮”进行对话测试,如下图 image.png

查询功能

先做查询的功能,知道属于“查询”分类后,就知道该调用哪个接口地址了。把“查询”的【指定回复】模块删掉,增加进来一个【Http请求】模块,并将“查询”的输出与【Http请求】模块连接,填写相关信息,比如请求方式get/post,请求地址就是查询的接口地址,请求参数和请求头根据自己的情况填写,我这个查询接口不需要任何参数,这样一个【Http请求】节点就配置好了。 image.png

【Http请求】模块的输出就是自己接口的返回结果,现在需要拿返回结果做为AI的知识库进行回答问题。在面板中添加【文本加工】模块,如下图: image.png

【文本加工】模块需要拿到上一步接口的返回信息,还有用户的问题。在输入一栏点击“新增”,要新增两个变量,名字随便起,这里我新增了“response”和“q”,变量值如下图配置,然后在文本中输入以下内容(参考官方模板):

请使用下面<data></data>中的数据作为你的知识。请直接输出答案,不要提及你是从<data></data>中获取的知识。  
  
<data>  
{{response}}  
</data>  
  
问题:"""{{q}}"""

image.png

【文本加工】这一模块配置好后,下一步就该让AI进行输出答案了,在面板中添加【AI对话】模块,修改相关配置,注意这里的用户问题要选择上一步【文本加工】输出的text变量,如下图: image.png

到此一个完整的AI查询功能就做好了,现在可以点击右上角的调试按钮测试: image.png

修改功能

从【问题分类】模块,分出了查询、修改、其他三个分支。查询分支的第一步是进行http调用,因为不需要传任何参数,所以可以直接调用。修改的话我需要知道修改的巡检任务的主键id,和巡检结果,所以我需要先拿到这两个参数后才可以进行http调用,那么可以使用【文本内容提取】这个模块。新建一个【文本内容提取】模块,与【问题分类】的“修改”输出节点连接(先把之前测试的【指定回复】删掉): image.png

进行配置:主要是增加两个自己需要的字段,给出描述 image.png

拿到需要的两个字段后,就可以进行http调用了,增加【Http请求】模块,并配置输入参数、请求方法、请求地址、和请求参数,注意请求参数中使用变量的写法: image.png

修改操作的回复,无非就是修改成功还是修改失败,这个我们自己回复就行,不需要使用AI回复了。添加一个【指定回复】模块,回复内容选择变量引用,选择http调用的原始响应: image.png

修改功能就也做好了,现在把查询和修改结合起来测试一下: image.png image.png image.png

至此一个完整的AI巡检查询修改系统就完成了,FastGPT的高级编排很强大,可以随意组合你想要的流程,发挥想象,比如可以增加一个【判断器】,来做修改任务时的字段验证:

image.png

问题补充

一般自己的服务都需要在请求头传一个token,那么这个token可以当作一个全局变量传到FastGPT的api接口里,然后在【Http请求】模块中使用这个全局变量:
FastGPT的api接口文档:https://doc.fastai.site/docs/development/openapi/chat/ image.png image.png