使用 Coze 搭建 TiDB 助手

news/发布时间2024/5/14 7:10:33

导读

本文介绍了使用 Coze 平台搭建 TiDB 文档助手的过程。通过比较不同 AI Bot 平台,突出了 Coze 在插件能力和易用性方面的优势。文章深入讨论了实现原理,包括知识库、function call、embedding 模型等关键概念,最后成功演示了如何在 Coze 平台上快速创建 TiDB Help Bot 。

本文作者 Weaxs,TiDB 社区布道师。

引言

目前市面上有很多搭建 AI Bot 的平台和应用,开源的有 langchain、flowise、dify、FastGPT 等等。字节之前也推出了 Coze,之前试过 Dify 和 FastGPT,目前感觉 Coze 的插件能力有很多,且易用性方面、搭建效率方面也强于其他平台(例如 langchain 或 flowise 需要搭建相对复杂的编排逻辑才能实现大模型调用互联网信息的拓展能力,但是 Coze 则是直接添加 plugin 且不指定任何参数就能实现)。

于是想尝试用 Coze 搭建一个 TiDB 文档助手,顺便研究厘清 Coze 平台是如何抽象一些大模型和其他能力来提高易用和搭建效率的。

实现原理

首先我们先抛开 Coze 平台,在大模型提供能力的基础上如何实现调用文档数据?

这里给出两种模式:知识库 和 function call。知识库的优点在于对非实时数据有一个相对准确的近似查询,function call 的优点在于可以实时获得最新的数据,当然也包括文档数据。

Coze 平台中的 plugins 实现了 function 模式,同时也提供了 knowledge 知识库可以管理本地和在线的文档。

1 embedding + 向量库

我们先来介绍基于 文本表示模型 (embedding model) + 向量数据库 (vector db) 增强大模型能力的方式。主要分为两个任务:

● 离线任务(同步原始文档到向量库):

i. 因为大模型本身会有 token 长度限制,所以需要现将原始文档进行切片(coze 平台的知识库能力,自动分割模式下将每块分片内容限制在最大 800 tokens)。

ii . 使用 embedding model 文本表示模型对每个分片进行 embedding,将其转换为 向量的形式

iii. 将向量存储在向量数据库中特定的 collection

● 在线任务(用户提问):

i. 使用 embedding model 对用户的问题做向量化

ii. 通过用户问题的向量数据,请求向量数据库做 ANN 近似近邻查询,并指定返回 topK

iii. 拿到对应 topK 分片后,我们需要结合分片内容和用户问题,拼凑完整的 prompt。示例如下, quote 为文档的分片内容, question 为用户的实际问题

- 使用标记中的内容作为你的知识:

- {{quote}}

- 回答要求:

如果你不清楚答案,你需要澄清。

避免提及你是从获取的知识。

保持答案与中描述的一致。

使用 Markdown 语法优化回答格式。

使用与问题相同的语言回答。

- 问题:"{{question}}"

iv. 最后请求大模型,拿到结果即可

在这种以知识库为主的模式下,比较关键的是 embedding model 、向量数据库 和 prompt。下面我们重点说一下 embedding model 和 向量库。

1.1 embedding

如果是自己尝试的话,embedding model 建议选 huggingface 开源模型,具体的排名 huggingface 上也有,可以看 Massive Text Embedding Benchmark (MTEB) Leaderboard ( https://huggingface.co/spaces/mteb/leaderboard )。中文长文本目前排名比较高的是 tao-8k,向量化后的维度是 1024,具体的调用示例如下:

def tao_8k_embedding(sentences):import torch.nn.functional as Ffrom transformers import AutoModel, AutoTokenizer
​model = AutoModel.from_pretrained("tao-8k")tokenizer = AutoTokenizer.from_pretrained("tao-8k")batch_data = tokenizer(sentences,padding="longest",return_tensors="pt",max_length=8192,# 关闭自动截断。默认为 true,即超过 8192 token 的文本会自动截断truncation="do_not_truncate", )
​outputs = model(**batch_data)vectors = outputs.last_hidden_state[:, 0]
​vectors = F.normalize(vectors, p=2, dim=1)

当然除了开源的外,像百川、OPENAI、ChatGLM、文心等等都提供了 embedding API。OPENAI 的文档如下:embeddings ( https://platform.openai.com/docs/guides/embeddings ),其他的大家可以自行去官网找文档。

1.2 向量库

向量库的选择也比较多,开源的有:国产分布式架构的 Milvus 、standalone 单机部署的 Qdrant 和基于 local 且 no-server 的 Chroma 等;基于现有数据库系统拓展了向量能力的有 Elasticsearch 、 PgVector 、 Redis 等;甚至还有一些向量库的 DBaas,比如 zilliz cloud 。抛开这些应用,向量库的核心主要是 3 点:距离度量选择、向量维度、索引类型。

以 Qdrant 为例,可以快速使用 docker 构建镜像。向量库的同步、查询等可以看 Qdrant 接口文档 ( https://qdrant.github.io/qdrant/redoc/index.html )。

docker pull qdrant/qdrant
​
docker run -p 6333:6333 -p 6334:6334 \\-v $(pwd)/qdrant_storage:/qdrant/storage:z \\qdrant/qdrant

2 system + 插件 (function)

基于知识库的模式很大程度上可以实现文档问答的能力,但是也有缺点:

● 需要维护向量库,且如果为了降低成本使用开源 embedding,那么需要在本地维护 embedding 模型。

● 文档同步实时性问题。文档一旦更新,需要及时同步,否则会拿到旧数据。

这里介绍另外一种 system 人设 + function call 的方式。system 比较简单就是用一段描述性 prompt 来设定模型的背景、能力、目标等等人设相关的信息;function call 是给大模型定义一些拓展能力,让大模型可以获取自己拿不到的数据。具体如何把他们串联起来,步骤如下:

  1. 用户设定 人设 (system) 和 插件 (function),并提问
  2. 服务端合并组合参数,并将用户选择的插件映射为大模型中的 function 工具,然后请求大模型
  3. 大模型判断是否需要调用 function
  4. 如果不需要 function,则服务端直接返回大模型结果即可;
  5. 如果需要调用 function,大模型会返回具体的函数和参数值,此时服务端通过自身的联网能力,执行 function 并将结果反哺给大模型
  6. 大模型拿到 function 的结果后,最终给用户一个明确的回答

2.1 function call

system 这部分就不额外介绍了,主要说说 function call。

前面提到,Coze 平台的 Plugins 是采用了 function call 的能力,下面以 Github plugin 为例,尝试用 OPENAI 定义的 function ( https://platform.openai.com/docs/guides/function-calling )的 schema 格式来定义它:

{"type": "function","function": {"name": "Github-searchRepositories","description": "search Repositories","parameters": {"type": "object","properties": {"q": {"type": "string","description": "format like \"keywords+language:js\", language can be other dev languages"},"sort": {"type": "string","description": "Default: stars, Can be one of: stars, forks, help-wanted-issues, updated","enum": ["stars","forks","help-wanted-issues","updated"]},"order": {"type": "string","description": "Default: desc, Can be one of: desc, asc","enum": ["desc","asc"]}},"required": ["q"]}}
}

现在我们知道了,OPENAI 会通过我们事先定义好的 function 来做判断,如果需要 function 提供的能力,大模型会给我们一个回调请求,以 Github-searchRepositories 为例,具体的执行实际是调用 Github 的 OpenAPI ( https://docs.github.com/en/rest/search/search?apiVersion=latest#search-repositories ),将其结果给到大模型。

Coze 搭建 bot

我们前面介绍了具体的实现方式,下面我们在 Coze 平台快速来搭建 TiDB Help Bot。不过再次之前,我们先参考一下 CloudWeGoHelpBot 的实现方式。

1 CloudWeGoHelpBot

首先介绍一下搭建步骤,因为我选用的是文档助手,所以参考了 coze 平台在 explore 中的 CloudWeGoHelpBot ( https://www.coze.com/explore/7302765283003957249 ),来看看它是怎么构建的。

可以看到这里主要有三个部分:

  1. Persona & Prompt:给大模型设定了人设、技能、约束和目标。对应 system 的部分。
  2. Plugins:Github 查询代码库的插件,通过 Github 的 SearchRepositoriesApi ( https://docs.github.com/en/rest/search/search?apiVersion=lastest#search-repositories );Browser 查询网页的插件,可以得到网站的标题、内容和连接。对应 function 的部分。

3 . Opening Dialog: 开场白,个人感觉这部分内容不参与和大模型的交互,功能是帮助用户快速理解 Bot 的功能和目的。

2 TiDB Help Bot

现在让我们来创造一个 TiDB Help Bot!

2.1 Plugins

Plugins 设定和 CloudWeGo HelpBot 类似,使用 Github-searchRepositories 和 Browser-browse_raw。

2.2 Persona & Prompt

在 Persona & Prompt 内容中需要明确 TiDB 的文档地址和代码库地址,这里直接用的 CloudWeGoHelpBot 的模板,并把相应的信息改成 TiDB,示例如下:

# Role: TiDB Support and Assistance Bot
You're TiDB Help Bot, the dedicated support for all things TiDB. Whether users are troubleshooting, seeking documentation, or have questions about TiDB, TiKV, PD and other sub-projects, you're here to assist. Utilizing the official TiDB documentation (<https://docs.pingcap.com/>) and GitHub repositories (<https://github.com/pingcap>, <https://github.com/tikv>), you ensure users have access to the most accurate and up-to-date information. You provide a smooth and productive experience.
​
## Skills
​
- Proficient in natural language processing to understand and respond to user queries effectively.
- Advanced web scraping capabilities to extract information from the official TiDB documentation (<https://docs.pingcap.com/>).
- Integration with the official GitHub repositories (<https://github.com/pingcap>, <https://github.com/tikv>) for real-time updates and issue tracking.
- Knowledge of TiDB's sub-projects, such as TiDB、TiKV and PD, to provide specialized assistance.
- User-friendly interface for clear communication and easy navigation.
- Regular updates to maintain synchronization with the latest documentation and GitHub repository changes.
​
## Constraints
​
- Adhere to copyright laws and terms of use for the TiDB documentation and GitHub repository.
- Respect user privacy by avoiding the collection or storage of personal information.
- Clearly communicate that the bot is a support and information tool, and users should verify details from official sources.
- Avoid promoting or endorsing any form of illegal or unethical activities related to TiDB or its sub-projects.
- Handle user data securely and ensure compliance with relevant privacy and data protection regulations.
​
## Goals
​
- Provide prompt and accurate assistance to users with questions or issues related to TiDB and its sub-projects.
- Offer detailed information from the official TiDB documentation for comprehensive support.
- Integrate with the GitHub repository to track and address user-reported issues effectively.
- Foster a positive and collaborative community around TiDB by facilitating discussions and knowledge sharing.
- Ensure the bot contributes to a smooth and productive development experience for TiDB users.
- Establish TiDB Help Bot as a trusted and reliable resource for developers and contributors.
- Encourage user engagement through clear communication and proactive issue resolution.
- Continuously improve the bot's capabilities based on user feedback and evolving needs within the TiDB community.

2.3 knowledge

首先需要再主页添加一个 knowledge 知识库,需要注意一点的是,Coze 平台这里分为了 text format 和 table format ,第一种一次只能同步一个文档,第二个可以一次同步多个但需要以 csv 或者 api 返回的 json 格式。

以同步【PingCAP 文档中心 | 主页】为例,我们直接通过 text format 中的 Online data ,贴上主页地址即可。

2.4 opening dialog

开场白和开场问题我们可以在 Coze 平台自动生成,生成如下:

I'm TiDB Help Bot, your dedicated support for all things TiDB. Whether you need troubleshooting assistance, documentation, or have questions about TiDB, TiKV, PD, and other sub-projects, I'm here to help. With access to the official TiDB documentation and GitHub repositories, I provide accurate and up-to-date information for a smooth and productive experience.

至此我们的 TiDB Help Bot 就做好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/iowe/1816.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

单片机学习笔记---红外遥控红外遥控电机调速(完结篇)

目录 低电平触发中断和下降沿触发中断的区别 红外遥控 Int0.c Int.h Timer0.c Timer0.h IR.c IR.h main.c 红外遥控电机调速 Timer1.c Timer.h Motor.c Motor.h main.c 上一节讲了红外发送和接收的工作原理&#xff0c;这一节开始代码演示&#xff01; 提前说…

启迪灵感:大广赛获奖作品赏析

2024年第16届全国大学生广告艺术大赛即将到来&#xff01;自2005年第一届以来&#xff0c;共成功举办了14届15届比赛&#xff0c;共有1869所大学参加&#xff0c;100多万学生提交作品&#xff0c;学生可以积极参与哦&#xff0c;作品分为平面、视频、动画、互动、广播、策划、文…

XMall 开源商城 SQL注入漏洞复现(CVE-2024-24112)

0x01 产品简介 XMall 开源电商商城 是开发者Exrick的一款基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等。 0x02 漏洞概述 XMall 开源商城 /item/list、/item/listSearch、/sys/…

软件项目整个项目生命周期所需文件,全套文档下载

一个软件项目从开始到结束需要一系列的文档来支撑&#xff0c;这些文档用于记录、规划、设计、测试、维护和管理软件项目。以下是一个软件项目从开始到结束可能需要的部分文档列表&#xff1a; 项目计划书/立项报告&#xff1a;描述项目的目标、范围、预期成果、资源需求、时间…

基于STL的演讲比赛流程管理系统(个人学习笔记黑马学习)

1、演讲比赛程序需求 1.1比赛规则 学校举行一场演讲比赛&#xff0c;共有12个人参加。比赛共两轮&#xff0c;第一轮为淘汰赛&#xff0c;第二轮为决赛。每名选手都有对应的编号&#xff0c;如 10001~10012比赛方式:分组比赛&#xff0c;每组6个人;第一轮分为两个小组&#xff…

stable diffusion webui学习总结(2):技巧汇总

一、脸部修复&#xff1a;解决在低分辨率下&#xff0c;脸部生成异常的问题 勾选ADetailer&#xff0c;会在生成图片后&#xff0c;用更高的分辨率&#xff0c;对于脸部重新生成一遍 二、高清放大&#xff1a;低分辨率照片提升到高分辨率&#xff0c;并丰富内容细节 1、先通过…

unity学习(16)——服务器组装(3)命名空间问题

using GameServer.logic; using GameServer.NetModel; 代码中这两句存在命名空间的引用问题&#xff0c;c#和c不一样&#xff0c;用的的using和命名空间&#xff0c;之前的惯性思维都是include和文件路径。 错误&#xff1a;直接把逆向文件夹粘到项目文件夹中&#xff0c;这样…

什么是CODESYS开发系统

CODESYS是一种用于工业自动化领域的开发系统软件&#xff0c;提供了一个完整集成的开发环境。该软件由德国CODESYS GmbH&#xff08;原 3S-Smart Software Solutions GmbH&#xff09;公司开发&#xff0c;其最新版本为CODESYS V3。 CODESYS开发系统具有多种特性和优点。首先&a…

PHP分析二维数据表(长度|数字字段|空值|纯姓名|英文用户名|科学计数|是否等长|是否唯一)

先看图&#xff0c;后有完整代码 <?php $t "Excel数据转Sql查询系统字段半智能分析"; $s "Excel复制过来的二维结构表内容,分析查询条件&#xff01;"; $x "字段|最大长度|长度有|数字字段|空值存在|纯姓名|英文用户名|科学计数|是否等长|是否…

3D人体姿态估计(教程+代码)

3D人体姿态估计是指通过计算机视觉技术和深度学习算法&#xff0c;从图像或视频数据中准确地推测出人体的三维姿态信息&#xff0c;包括关节位置、角度和运动轨迹等。这项技术在虚拟现实、增强现实、运动分析、人体动作捕捉等领域具有广泛的应用前景。 实现3D人体姿态估计的关…

如何在Ubuntu部署Emlog,并将本地博客发布至公网可远程访问

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

计算机网络Day1--计算机网络体系

1.三网合一 电信网络、广播电视网络、计算机网络&#xff08;最基础最重要发展最快&#xff09; 2.Internet 名为国际互联网、因特网&#xff0c;指当前全球最大的、开放的、由众多网络相互连接而成的特定互连网&#xff0c;采用TCP/IP 协议族作为通信的规则&#xff0c;前…

IDEA实现ssh远程连接本地Linux服务器

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

Golang for 循环

从基础知识到高级技术、并发和通道 Go&#xff08;Golang&#xff09;编程语言中的“for”循环是一个基本而多功能的结构&#xff0c;用于迭代集合、重复执行代码块以及管理循环控制流。Golang的“for”循环语法简洁却强大&#xff0c;为处理多样的循环场景提供了一系列能力。无…

RSA之前端加密后端解密

RSA之前端加密后端解密 RSA加密解密方式有&#xff1a; &#xff08;1&#xff09;公钥加密&#xff0c;私钥解密&#xff1b; &#xff08;2&#xff09;私钥加密&#xff0c;公钥解密&#xff1b; 此文章中以下我使用的是前端公钥加密&#xff0c;后端私钥解密&#xff1b; …

重复导航到当前位置引起的。Vue Router 提供了一种机制,阻止重复导航到相同的路由路径。

代码&#xff1a; <!-- 侧边栏 --><el-col :span"12" :style"{ width: 200px }"><el-menu default-active"first" class"el-menu-vertical-demo" select"handleMenuSelect"><el-menu-item index"…

SQL中的各种连接的区别总结

前言 今天主要的内容是要讲解SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别和用法&#xff0c;不用我说其实前面的这些基本SQL语法各位攻城狮基本上都用过。但是往往我们可能用的比较多的也就是左右连接和内连接了&#xff0c;而且对于许多初学…

【Qt】环境安装与初识

目录 一、Qt背景介绍 二、搭建Qt开发环境 三、新建工程 四、Qt中的命名规范 五、Qt Creator中的快捷键 六、QWidget基础项目文件详解 6.1 .pro文件解析 6.2 widget.h文件解析 6.3 widget.cpp文件解析 6.4 widget.ui文件解析 6.5 main.cpp文件解析 七、对象树 八、…

蓝桥杯备赛_python_BFS搜索算法_刷题学习笔记

1 bfs广度优先搜索 1.1 是什么 1.2怎么实现 2案例学习 2.1.走迷宫 2.2.P1443 马的遍历 2.3. 九宫重排&#xff08;看答案学的&#xff0c;实在写不来&#xff09; 2.4.青蛙跳杯子&#xff08;学完九宫重排再做bingo&#xff09; 2.5. 长草 3.总结 1 bfs广度优先搜索 【P…

Linux篇:指令

一 基本常识&#xff1a; 1. 文件文件内容文件的属性 2. 文件的操作对文件内容的操作对文件属性的操作 3. 文件的类型&#xff1a; d&#xff1a;目录文件 -&#xff1a;普通文件 4. 指令是可执行程序&#xff0c;指令的代码文件在系统的某一个位置存在的。/u…
推荐文章