当前位置: 首页 > news >正文

使用 Coze 搭建 TiDB 助手

导读

本文介绍了使用 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 就做好了。

相关文章:

使用 Coze 搭建 TiDB 助手

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

Arduino程序简单入门

文章目录 一、结构1.1 setup()1.2 loop() 二、结构控制2.1 if2.2 if...else2.3 switch case2.4 for2.5 while2.6 do...while2.7 break2.8 continue2.9 return2.10 goto 三、扩展语法3.1 ;&#xff08;分号&#xff09;3.2 {}&#xff08;花括号&#xff09;3.3 //&#xff08;单…...

QT+OSG/osgEarth编译之八十三:osgdb_ogr+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_ogr)

文章目录 一、osgdb_ogr介绍二、文件分析三、pro文件四、编译实践一、osgdb_ogr介绍 osgDB是OpenSceneGraph(OSG)库中的一个模块,用于加载和保存3D场景数据。osgDB_ogr是osgDB模块中的一个插件,它提供了对OGR(开放地理空间联盟)库的支持。 OGR是一个开源的地理空间数据…...

开年炸裂-Sora/Gemini

最新人工智能消息 谷歌的新 Gemini 模型 支持多达 1M的Token&#xff0c;可以分析长达一小时的视频 1M Token可能意味着分析700,000 个单词、 30,000 行代码或11 小时的音频、总结、改写和引用内容。 Comment&#xff1a;google公司有夸大的传统&#xff0c;所以真实效果需要上…...

vue前端系统启动报错Module not found: Error: Can‘t resolve ‘sass-loader‘

1、确认项目中是否已安装 node-sass 包。sass-loader 是依赖于 node-sass 包的&#xff0c;如果没有安装 node-sass 包&#xff0c;也会导致无法找到 sass-loader 包。 npm ls node-sass安装 node-sass 包&#xff1a; npm install --save-dev node-sass2、确认项目中是否已安…...

HTML | DOM | 网页前端 | 常见HTML标签总结

文章目录 1.前端开发简单分类2.前端开发环境配置3.HTML的简单介绍4.常用的HTML标签介绍 1.前端开发简单分类 前端开发&#xff0c;这里是一个广义的概念&#xff0c;不单指网页开发&#xff0c;它的常见分类 网页开发&#xff1a;前端开发的主要领域&#xff0c;使用HTML、CS…...

乡政府|乡政府管理系统|基于Springboot的乡政府管理系统设计与实现(源码+数据库+文档)

乡政府管理系统目录 目录 基于Springboot的乡政府管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、活动信息管理 3、新闻类型管理 4、新闻动态管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推…...

存储系统如何规避数据静默错误SDC?

存储系统规避数据静默错误&#xff08;Silent Data Corruption, SDC&#xff09;是一项复杂且关键的任务&#xff0c;涉及多个层次的技术和策略。数据静默错误是指在存储或传输过程中发生的错误&#xff0c;这些错误未被检测出来&#xff0c;因此无法立即纠正&#xff0c;可能导…...

《Linux 简易速速上手小册》第8章: 安全性与加固(2024 最新版)

文章目录 8.1 防火墙与安全策略8.1.1 重点基础知识8.1.2 重点案例&#xff1a;配置 iptables 以保护 Web 服务器8.1.3 拓展案例 1&#xff1a;使用 firewalld 配置动态防御区域8.1.4 拓展案例 2&#xff1a;配置 ufw 以简化管理 8.2 SSH 安全最佳实践8.2.1 重点基础知识8.2.2 重…...

Ubuntu Desktop 显示文件路径

Ubuntu Desktop 显示文件路径 1. GUI hot key2. CLIReferences 1. GUI hot key Ctrl L: 显示文件路径 2. CLI right click -> Open in Terminal -> pwd strongforeverstrong:~/Desktop$ pwd /home/strong/DesktopReferences [1] Yongqiang Cheng, https://yongqiang…...

【Java程序设计】【C00270】基于Springboot的moba类游戏攻略分享平台(有论文)

基于Springboot的moba类游戏攻略分享平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的游戏攻略分享平台 本系统分为系统功能模块、管理员功能模块、以及用户后台功能模块。 系统功能模块&#xff1a;在平台首…...

【旧文更新】【优秀毕设】人脸识别打卡/签到/考勤管理系统(OpenCV+最简基本库开发、可移植树莓派 扩展网络图像推流控制 验证码及Excel邮件发送等功能)

【旧文更新】【优秀毕设】人脸识别打卡/签到/考勤管理系统&#xff08;OpenCV最简基本库开发、可移植树莓派 扩展网络图像推流控制 验证码及Excel邮件发送等功能&#xff09; 文章目录 关于旧文新发毕设结构主页面验证码识别效果管理页面人脸信息采集管理实时数据更新签到结果…...

模型 4i(趣味、利益、互动、个性)理论

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_总纲目录。重在提升认知。以用户为中心营销。 1 模型 4i(趣味、利益、互动、个性)理论的应用 1.1 4i理论在电子商务中的应用 小米公司在其电子商务平台上运用了 4i理论&#xff0c;取得了较好的效果。具体表现如下…...

解线性方程组(二)——Jacobi迭代法求解(C++)

迭代法 相比于直接法求解&#xff0c;迭代法使用多次迭代来逐渐逼近解&#xff0c;其精度比不上直接法&#xff0c;但是其速度会比直接法快很多&#xff0c;计算精度可控&#xff0c;特别适用于求解系数矩阵为大型稀疏矩阵的方程组。 Jacobi迭代法 假设有方程组如下&#xf…...

信息安全技术基础知识

一、考点分布 信息安全基础&#xff08;※※&#xff09;信息加密解密技术&#xff08;※※※&#xff09;密钥管理技术&#xff08;※※&#xff09;访问控制及数字签名技术&#xff08;※※※&#xff09;信息安全的保障体系 二、信息安全基础 信息安全包括5个基本要素&#…...

使用Taro开发鸿蒙原生应用——快速上手,鸿蒙应用开发指南

导读 本指南为开发者提供了使用 Taro 框架开发鸿蒙原生应用的快速入门方法。Taro&#xff0c;作为一个多端统一开发框架&#xff0c;让开发者能够使用一套代码同时适配多个平台&#xff0c;包括鸿蒙系统。文章将详细介绍如何配置开发环境&#xff0c;以及如何利用 Taro 的特性…...

C语言指针(初阶)

文章目录 1:内存与地址1.1内存1.2:如何理解编址 2:指针变量与地址2.1:指针变量与解引用操作符2.1.1:指针变量2.1.2:如何拆解指针类型2.1.3:解引用操作符 2.2:指针变量的大小 3:指针变量类型的意义代码1解引用修改前解引用修改后 代码2解引用修改前解引用修改后 4:const修饰指针…...

Python循环语句——for循环的嵌套使用

一、引言 在Python编程中&#xff0c;循环是控制程序流程的重要工具&#xff0c;它允许我们重复执行某段代码&#xff0c;直到满足特定的条件为止。其中&#xff0c;for循环是Python中最常用的循环类型之一。而嵌套循环&#xff0c;即在一个循环内部再嵌套另一个循环&#xff…...

Java创建线程真的有三种方式吗?

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有限&am…...

17-k8s控制器资源-job控制

job控制器&#xff1a;就是一次性任务的pod控制器&#xff0c;pod完成作业后不会重启&#xff0c;其重启策略是&#xff1a;Never 1&#xff0c;job控制器案例描述 启动一个pod&#xff0c;执行完成一个事件&#xff0c;然后pod关闭&#xff1b; 事件&#xff1a;计算π的值&a…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...

Spring事务传播机制有哪些?

导语&#xff1a; Spring事务传播机制是后端面试中的必考知识点&#xff0c;特别容易出现在“项目细节挖掘”阶段。面试官通过它来判断你是否真正理解事务控制的本质与异常传播机制。本文将从实战与源码角度出发&#xff0c;全面剖析Spring事务传播机制&#xff0c;帮助你答得有…...

Qt学习及使用_第1部分_认识Qt---Qt开发基本流程

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...