给文心一言加上知识库和搜索引擎(一)

文心一言开放了,手机端的几个模板还不错
但是还是要拉出来溜溜
文心一言发布了,官方示例太无聊,写个知识库项目看看文心一言的水平究竟有多少。
待在家里躺床太无聊,所以小小地练练手和脑子
前期准备
申请文心一言apikey
前往并登录 百度智能云-登录 (baidu.com)
创建应用并打开文心一言turbo的付费
然后充值10元钱
创建Milvus数据库(可选)
教程 Install Milvus Standalone with Docker Compose (CPU) Milvus documentation
测试文心一言
首先给langchain安装升级一下
去langchain库里翻代码找找文心一言的例子
注意client_id应该是你的apikey,不得不说百度的文档就是答辩依托
成功得到答案
🤖Hello, ErnieBot. I'm a language model. What can I do for you?
正式开始
让我们开始我们的敏捷开发
AI应用最快的应用开发方式当然是gradio
我们首先尝试使用gradio调用文心一言
这里要用到gradio的chatbot模块
我们可以直接观赏一下官方用例
chatbot

可以看到以下特性
聊天框
流式传输
文件上传
基本满足了一个chatbot的基本需求,我们直接在此基础上进行开发
安装gradio
观察函数,我们需要修改的地方其实只有response部分
response部分使用文心一言的回答进行替换即可
这里使用了langchain的ConversationChain,并删除了chatbot文件上传功能

效果不错涅~就是界面有点简陋
接下来我们使用gradio的block功能为我们的界面进行大升级
首先把我们的apikey放到yaml文件中
添加的代码如下
yaml文件,new_cof.yaml
添加个初始化模型和chain的函数
通过gradio的block函数优化我们的设计
启动后项目界面如下

来感觉了,有没有
来试试

可以看到我们目前实现的功能设计:
流式回答
上下文记忆
刷新与发送
更改模型配置
至此一个完整简单的chatbot设计就完成了
Embedding
我们在使用embedding功能时主要用到了milvus向量数据库,也有平替的向量数据库,请自行寻找...
设计gradio切换embedding和llm的按钮,来决定是否使用知识库
并设计按钮使用知识库
为知识库添加支持函数,并使用embedding相关的chain
重写block部分和部分函数,添加知识库支持,这是目前的完整函数

使用,从文本中测试
新建文本文件test.txt
选择载入知识库,并上传test.txt
询问问题,可以看到我们的知识库完美实现了功能

目前为止,我们实现的功能有
上传文件作为知识库
从链接中载入知识库
是否使用知识库的切换
search
这里我们使用了duckduckgo_search作为我们的搜索引擎,如果你愿意,使用百度微软谷歌也是同理
搜索实现
让我们把搜索加入我们的应用



可以从我们的终端中看出我们的搜索引擎在完美运作
.................

后续如果继续就是设计向量数据库对embedding数据的生命周期进行设计了