[Unity+文心知识库]使用百度智能云搭建私有知识库,集成知识库API,打造具备知识库的AI二次元姐姐

本文主要是介绍[Unity+文心知识库]使用百度智能云搭建私有知识库,集成知识库API,打造具备知识库的AI二次元姐姐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.简述

        最近从百度智能云的官方技术支持那边了解到,目前百度千帆大模型平台提供有在线的知识库功能,能够在线上传自己的私人知识库文档,并且配置文心一言模型作为文本生成的引擎,构建自己的私有知识库。之前自己搭建知识库都是用的langchain框架,在本地部署使用的,那么现在通过百度智能云提供的知识库构建平台,就可以很方便的构建出自己的私有知识库应用了,另外的话,这个知识库应用也提供了API调用能力,可以非常方便的集成到我们自己的应用,这就非常的赞了。所以这次这篇文章,就简单给大家介绍一下怎么在百度智能云平台上构建自己的知识库应用,同时利用API服务,将知识库功能集成到我的AI二次元小姐姐项目里。

2.上传知识库

        首先,咱们需要登录到百度智能云的官方站点,账户大家自备。百度智能云的官方站点如下所示:

https://cloud.baidu.com/icon-default.png?t=N7T8https://cloud.baidu.com/

        在百度智能云平台登录账号后,我们从官网菜单中,找到[产品->千帆大模型超级工厂->RAG问答应用],点击即可进入到知识库应用视图。

        在百度智能云知识库应用的控制界面,可以选择知识库,查看知识库视图

        点击创建知识库集合,即可进入到知识库上传视图

        这里的话,百度智能云的知识库能够支持的文档格式包括word、txt以及pdf,我们只需要将自己的知识文档上传,系统将自动处理文档内容,并对文档的内容做切片,提取文档中的知识内容。上传成功后,咱们就可以查看已上传的文档的切片结果,以及提取出来的知识片段。

        同一个知识库集合可以上传多个文档内容,上传完成之后,我们就构建了一个自己专属的知识库集合了,后续的知识库应用的构建,就需要使用到相关的知识库集合,接下来咱们来看看如何创建知识库应用。

3.创建知识库应用

        知识库集合创建完毕后,我们可以创建自己的知识库应用了。点击我的应用,并点击创建一个新的应用,即可是开始构建自己的知识库应用了。

        百度智能云官方提供了三种可构建的应用模板,包括基础生成应用、RAG问答应用以及人设对话应用,其中后两种模板都是对话型模板,我们需要构建对话式的知识库应用,例如AI客服机器人应用,就需要使用后两种模板。

        选择一种模板后,进行应用的创建,界面将进入到知识库应用创建视图

        在知识库应用创建界面中,我们可以选择并指定私有知识库所对应的知识库集合,并根据自己的需求选择一个大语言模型应用。这里,我们也可以选择官方提供的免费试用服务,官方提供了200次的文心大模型4.0的免费调用次数供大家选用。如果咱们选择付费大模型服务的话,那么首先需要在千帆大模型平台创建一个大模型应用,这个可以参考我之前的文章进行操作。

        配置完成之后,我们可以在界面右侧,对已创建的大模型服务进行测试,查看知识库应用的应用效果。测试无误之后,点击发布,即可发布知识库应用了。

        在应用发布界面中提供了两种可访问的形式:

        ①我们可以通过复制知识库应用的服务地址,通过浏览器访问知识库应用;

        ②可以通过API调用,来访问知识库应用。

        这个根据自己的实际需求即可。

4.API调用知识库应用的代码实现

        本节内容将着重介绍一下,如果通过API调用,来访问已构建的知识库应用。在应用发布页面,可以找到API调用说明的文档入口,在实现API调用代码之前,我们先阅读一下API文档。

        API的调用流程很简单,首先,咱们需要在应用发布时,创建API KEY,拿到API key后,再根据API调用的接口规范,使用POST请求进行访问即可。以下是API相关的接口说明:

       4.1 创建API key

        API key的创建,只需要在应用发布界面,点击创建API KEY,即可获取到密钥,请妥善保存api key的信息。

        4.2 API接口说明

        API调用的方法,根据接口文档的说明,我们可以了解到:

        API的请求地址以及方式:

        请求地址:https://console.bce.baidu.com/api/ai_apaas/v1/instance/integrated
        请求方式:POST

        Header参数

参数说明
Content-Typeapplication/json-
X-AuthorizationBearer {API Key}鉴权字段,大括号内需填入API Key(密钥)

        Body参数

注意:要求使用 JSON 格式的结构体来描述一个请求的具体内容。

参数是否必选类型可选值范围描述
querystring-用户的请求query
response_modestringstreaming/blocking响应模式,支持以下两种:
1. streaming:流式响应,使用SSE协议
2. blocking:阻塞响应
conversation_iduuid-对话ID,仅对话型应用生效。在对话型应用中:
1. 空:表示表新建会话
2. 非空:表示在对应的会话中继续进行对话,服务内部维护对话历史

        响应说明

参数是否必选类型描述
codeint错误码。非0为错误,请参考错误码说明
messagestring报错信息
resultobject返回结果
+ answerstring应用响应结果
+ conversation_iduuid对话ID,仅对话式应用生效。如果是对话请求中没有conversation_id,则会自动生成一个

        错误码

错误码错误信息描述
400InvalidRequestArgumentError请求参数错误
401PermissionDeniedError权限错误
404NotFoundResource账户、应用、模型、模版等无法找到
500InternalServerError服务器内部错误
1001QuotaLimitExceeded调用超限,免费额度不足
1004LLMStreamingResponseError模型服务报错
1005TemplateValuesError模版参数校验错误
1006QuotaLimitExpired免费额度已过期
1007QianfanServiceError千帆服务无法访问
1008QianfanPermissionDeniedError千帆服务访问失败,一般是权限错误

4.3 API接口调用的代码实现

        API接口调用的代码实现,我将在Unity中进行代码实现,主要的代码如下:

   #region Params[Header("填写百度助手的apikey")][SerializeField] private string m_ApiKey = string.Empty;private string m_ConversationID= string.Empty;//对话id#endregion#region Methodprivate void Awake(){url = "https://console.bce.baidu.com/api/ai_apaas/v1/instance/integrated";}/// <summary>/// 发送消息/// </summary>/// <returns></returns>public void PostMsg(string _msg, Action<string> _callback){base.PostMsg(_msg, _callback);}/// <summary>/// 发送数据/// </summary> /// <param name="_postWord"></param>/// <param name="_callback"></param>/// <returns></returns>public IEnumerator Request(string _postWord, System.Action<string> _callback){stopwatch.Restart();string jsonPayload = JsonConvert.SerializeObject(new RequestData{query= _postWord,conversation_id=m_ConversationID});using (UnityWebRequest request = new UnityWebRequest(url, "POST")){byte[] data = System.Text.Encoding.UTF8.GetBytes(jsonPayload);request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();request.SetRequestHeader("Content-Type", "application/json");request.SetRequestHeader("X-Authorization ", m_ApiKey);yield return request.SendWebRequest();if (request.responseCode == 200){string _msg = request.downloadHandler.text;ResponseData response = JsonConvert.DeserializeObject<ResponseData>(_msg);if (response.code == 0){string _msgBack = response.result.answer;m_ConversationID = response.result.conversation_id;//添加记录m_DataList.Add(new SendData("assistant", _msgBack));//回调_callback(_msgBack);}else{OnLogError(response.code);}}}stopwatch.Stop();Debug.Log("文心一言AI助手耗时:" + stopwatch.Elapsed.TotalSeconds);}/// <summary>/// 打印错误信息/// </summary>/// <param name="code"></param>private void OnLogError(int code){if (code == 400){Debug.LogError("请求参数错误");return;}if (code == 401){Debug.LogError("权限错误");return;}if (code == 404){Debug.LogError("账户、应用、模型、模版等无法找到");return;}if (code == 500){Debug.LogError("服务器内部错误");return;}if (code == 1001){Debug.LogError("调用超限,免费额度不足");return;}if (code == 1004){Debug.LogError("模型服务报错");return;}if (code == 1005){Debug.LogError("模版参数校验错误");return;}if (code == 1006){Debug.LogError("免费额度已过期");return;}if (code == 1007){Debug.LogError("千帆服务无法访问");return;}if (code == 1008){Debug.LogError("千帆服务访问失败,一般是权限错误");return;}}#endregion#region 数据定义[Serializable]private class RequestData{[SerializeField] public string query=string.Empty;//对话内容[SerializeField] public string response_mode= "blocking";//对话模式 1. streaming:流式响应,使用SSE协议  2. blocking:阻塞响应[SerializeField] public string conversation_id=string.Empty;//对话id,第一次对话后返回,用作聊天记录,服务端自行处理}[Serializable]private class ResponseData{[SerializeField] public int code;[SerializeField] public string message = string.Empty;[SerializeField] public ReData result = new ReData();}[Serializable]private class ReData{[SerializeField] public string answer = string.Empty;//回复[SerializeField] public string conversation_id = string.Empty;//对话id}#endregion

        通过调用PostMsg方法,即可实现将输入的文本信息,发送到知识库的API接口,并返回AI回复的信息文本的功能。

5. Unity端配置

        关于文心知识库的API调用模块,我已经更新到我开源项目中,本节内容将介绍一下在unity端的配置方式。注意一下,unity的版本要求在2020.3.44及以上。

        我们在Unity端,找到LLM对象下的“文心知识库”对象,在对象脚本上填写知识库应用的API KEY,并将文心知识库对象配置为ChatAgent的LLM模块即可完成配置了。详细配置流程可以参见我的B站视频。

6. 结束语

        本次的文章详细介绍了如何在百度智能云平台创建知识库结合,并构建自己的私有知识库应用的操作方法,并且实现了通过API访问,将百度文心知识库应用集成到AI二次元小姐姐项目中。通过这次的应用集成,我们的AI小姐姐将具备知识库储备了。关于本文所涉及内容的详细讲解视频,感兴趣的朋友可以观看我的B站视频,以下为视频传送门:

[Unity+文心知识库]使用百度智能云搭建私有知识库,集成知识库API,打造具备知识库的AI二次元姐姐


项目地址传送门:

AI二次元老婆开源项目(unity-AI-Chat-Toolkit):

Github地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit

Gitee地址:https://gitee.com/DammonSpace/unity-ai-chat-toolkit
 

这篇关于[Unity+文心知识库]使用百度智能云搭建私有知识库,集成知识库API,打造具备知识库的AI二次元姐姐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/489976

相关文章

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构