跳到主要内容 使用 AutoFlow 快速搭建 TiDB 向量搜索本地知识库问答机器人 | 极客日志
SQL AI 算法
使用 AutoFlow 快速搭建 TiDB 向量搜索本地知识库问答机器人 本文介绍利用 PingCAP 开源项目 AutoFlow 结合 TiDB 向量检索功能,快速构建本地知识库问答机器人的流程。无需编写代码,通过 Docker 部署环境,配置 LLM 及 Embedding 模型,导入企业文档数据源,即可实现基于 Graph RAG 技术的智能问答。涵盖环境准备、数据库初始化、应用启动、Web 端配置及索引创建等关键步骤,并演示了实际问答效果,展示了 TiDB 在增强大模型专业领域知识方面的能力。文章还补充了常见问题排查与性能优化建议,帮助用户更好地落地实施。
基于 AutoFlow 快速搭建 TiDB 向量搜索的本地知识库问答机器人
导读 本文将详细介绍如何通过 PingCAP 开源项目 AutoFlow 实现快速搭建基于 TiDB 的本地知识库问答机器人。如果提前准备好 Docker、TiDB 环境,整个搭建过程估计在 10 分钟左右即可完成,无须开发任何代码。
文中使用一篇 TiDB 文档作为本地数据源作为示例,在实际情况中,您可以基于自己的企业环境用同样的方法快速构造企业内部知识库问答机器人。
AutoFlow 是 PingCAP 开源的一个基于 Graph RAG、使用 TiDB 向量存储和 LlamaIndex 构建的对话式知识库聊天助手。https://tidb.ai 也是 PingCAP 基于 AutoFlow 实现的一个 TiDB AI 智能问答系统,我们可以向 tidb.ai 咨询任何有关 TiDB 的问题,比如 "TiDB 对比 MySQL 有什么优势?"
以下是 tidb.ai 的回答,从结果来说,tidb.ai 非常准确的理解了用户的问题并给出了相应的回答。它首先给出 TiDB 优势及 MySQL 限制的详细说明,然后给出一个结论性的总结,最后给出更多的参考链接。
相信通过前面的一些介绍,大家对 tidb.ai 的能力已经有了一个清楚的认识。TiDB 的使用人员很幸运,因为有了 tidb.ai,几乎任何有关 TiDB 的问题都可以在这个统一的平台得到相应的解答,一方面节省了自己人工去查找 TiDB 官方文档或 AskTUG 论坛的时间,另一方面 tidb.ai 拥有比普通大模型更专业的 TiDB 知识问答。
在技术实现上,tidb.ai 背后主要使用到 TiDB 的 Graph RAG 技术、TiDB 向量检索功能以及 LLM 大模型的使用。实际上,在 AutoFlow 出来之前,我们也可以通过 python 编程开发的方式基于 LLM+RAG+TiDB 实现一套问答系统。主要的开发流程如下:
准备私域文本数据
对文本进行切分
通过 Embedding 将文本转为向量数据
把向量数据保存到 TiDB
获得用户输入问题并进行向量化,然后从 TiDB 中进行相似度搜索
将上述片段和历史问答作为上下文,与用户问题一起传入大模型,最后输出结果
基于 python 开发这样一套问答系统,一般要结合大模型常用开发框架如 Langchain,Langchain 集成了多种文件格式或 URL 网址的导入功能。如果希望给这个系统增加 Web 界面的能力,还需要引入前端可视化工具,如 Gradio 或 Steamlit。但是如果使用开源的 AutoFlow,即使对于没有任何开发背景的同学来说,搭建一套这样的问答系统也是一件轻而易举的事情,以下我们具体演示整个搭建的过程。
环境准备
Docker 环境 需要确保 AutoFlow 运行的机器上具备 Docker 运行环境,因为 AutoFlow 项目中的应用是基于 docker 容器环境运行的。有关 Docker 运行环境的准备工作本文不作说明,安装完成后可使用 docker run hello-world 命令验证安装成功。
AutoFlow 项目 cat > .env <<'EOF'
ENVIRONMENT=production
SECRET_KEY="some_secret_key_that_is_at_least_32_characters_long"
TIDB_HOST=<ip>
TIDB_PORT=<port>
TIDB_USER=<username>
TIDB_PASSWORD=<password>
TIDB_DATABASE=tidbai_test
TIDB_SSL=false
EMBEDDING_DIMS=1024
EMBEDDING_MAX_TOKENS=4096
EOF
带向量功能的 TiDB 环境 需要确保 TiDB 8.4 集群正常运行,且已经创建有 AutoFlow 配置中指定的 TIDB_DATABASE 数据库(必须为空库)。
mysql> select version();
+
| version() |
+
| 8.0 .11 - TiDB- v8.4 .0 |
+
1 row in set (0.00 sec)
mysql> create database tidbai_test;
Query OK, 0 rows affected (0.52 sec)
智谱 AI API Key
数据初始化 cd autoflow
docker compose -f docker-compose-cn.yml run backend /bin/sh -c "alembic upgrade head"
docker compose -f docker-compose-cn.yml run backend /bin/sh -c "python bootstrap.py"
当看到如上输出结果时,说明初始化这一步已经成功(注意保存好红色字体中的密码以备后面使用 )。这时我们去 TiDB 数据库中查看,发现 tidbai_test 这个库中已经自动创建出了相应的表并有一些初始化数据,符合预期。
启动知识库应用 运行以下 docker compose 命令启动知识库应用程序:
cd autoflow
docker compose -f docker-compose-cn.yml up -d --force-recreate
网页访问和配置知识库应用 应用启动成功后,我们可以直接通过默认的 3000 端口访问相应的界面进行下一步操作了。使用默认管理员用户 [email protected] 以及上述应用启动打印的密码进行登录。
登录成功后,会弹出如下图所示的提示框,后面我们只要按照提示框一步步进行相应配置即可。
注意:3000 这个端口是 TiDB 数据库默认的 Grafana 端口号,如果把 AutoFlow 部署在和 Grafana 相同的节点,需要考虑端口冲突问题。
1. 配置 LLM
模型名称
模型提供商(选择 OpenAI Like)
模型型号(如 glm-4-0520)
智谱 AI API KEY(见环境准备阶段)
高级选项-> api_base 路径(需与 LLM 对应)
是否默认 LLM(是或否)
配置完成后,点击 Create LLM 创建 LLM 关联。需要注意的是,这里提供的 API Key 必须是一个有效的 Key,如果创建 API Key 的账户本身就过时,创建 LLM 时可能就会遇到以下报错。如果只是为了测试用途,可以重新注册一个账号并取得一个新的 API Key 试用。
Failed to create LLM
Error code: 429 - { 'error': { 'code': '1113 ', 'message': '您的账户已欠费,请充值后重试。'} }
2. 配置 Embedding 模型
embedding 名称
模型提供商(选择 OpenAI Like)
模型型号(如 embedding-2)
智谱 AI API KEY(与上述相同)
配置完成后,点击 Create Embedding Model 创建 Embedding 模型。需要注意的是,这里的 Model 必须要与环境变量中的 EMBEDDING_DIMS 对应,否则可能会出现以下类似报错。
Failed to create Embedding Model
Currently we only support 1536 dims embedding, got 1024 dims.
3. 配置数据来源
数据源名称
数据源描述
网页 URL(可以配置一个或多个)
是否 build 知识图谱 Index(是或否)
配置完成后,点击 Create Datasource 创建数据来源。当然,如果有本地文件,也可以直接导入本地文件并创建数据源。另外如果不是在初始化时配置数据源,我们也可以在后续的过程中手动添加更多的数据源,下图显示将一个本地的文档导入为数据源。
4. 查看索引创建进度 上述步骤配置完成后,应用将基于配置的数据源进行向量化并创建索引,这需要一定的时间,具体耗时跟数据源的多少以及机器的配置都有关。通过页面左侧菜单栏-> Index Progress 查看索引创建进度,绿色代表索引创建成功,蓝色代表正在创建,红色代表创建失败。下图表示 Vector Index 已经创建成功,Knowlege Graph Index 正在创建中。当两个图表都变成绿色时,代表全部创建成功。
体验智能问答 至此,我们已经完成了配置数据源并完成了向量化存储及向量索引的创建。在网页的左侧菜单栏中,我们可以点击 Datasources 查看当前数据源,LLMs 查看当前 LLM,Embedding Model 查看 Embedding 模型。
我们现在也可以开始向自己搭建的 tidb.ai 咨询有关 TiDB 的问题了,比如提问 "TiFlash 高性能列式分析引擎"。从结果可以看出,本地知识库问答机器人引用导入的文档并作出了相似回答,而假如我们删除数据源之后再提出相同的问题,它的回答是 Empty Response。下图对比充分说明了 TiDB 向量搜索在基础 LLM 大模型的增强能力。
常见问题与优化建议 在实际部署和使用过程中,可能会遇到一些常见问题,以下是一些优化建议和排查思路:
向量检索性能优化 :如果数据量较大,建议在 TiDB 中对向量字段建立索引。同时,调整 EMBEDDING_MAX_TOKENS 参数以适应不同的文档长度,避免截断导致语义丢失。
API Key 管理 :生产环境中建议使用环境变量或密钥管理服务来存储 API Key,避免硬编码在 .env 文件中。定期轮换 API Key 以提高安全性。
内存资源监控 :AutoFlow 依赖 Docker 容器运行,需确保宿主机有足够的内存和 CPU 资源。特别是 Embedding 模型加载和向量计算过程较为消耗资源。
数据更新机制 :目前 AutoFlow 支持手动触发数据源更新。对于频繁变化的知识库,建议编写脚本定期调用 API 或后台任务同步新数据。
多租户支持 :如果需要支持多部门使用,可考虑在 TiDB 层面进行权限隔离,或在 AutoFlow 配置中限制不同用户的访问范围。
通过上述配置和优化,您可以构建一个高效、准确的本地化 AI 知识库系统,显著提升团队内部的信息检索效率。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
SQL 美化和格式化 在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
SQL转CSV/JSON/XML 解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 工具包 CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online