跳到主要内容

基于 seekdb 多模融合构建文旅小助手

本文演示如何通过 seekdb 的多模融合技术构建您的 seekdb 文旅小助手。

在本示例中,通过 seekdb 的空间数据和向量搜索的多模融合来构建您的景点推荐应用,该应用可以利用 GIS 与向量数据混合搜索相关景区,结合大模型 Agent 工作流,实现简易旅行规划助手。

技术原理

  • 空间数据处理技术:GIS 系统提供了精准的地理定位和最佳路线规划。

  • 向量数据处理技术:采用预训练模型(BGE-m3)将景点的非结构化数据转换为向量表示,并使用 seekdb 向量搜索能力高效处理相似度搜索。

  • 大模型 Agent 技术:在智能交互层面,运用大模型 Agent 技术,配合 Prompt Engineering 实现用户意图理解和多轮对话,实现复杂任务的分解与规划。同时提升了系统的交互体验,能够准确理解您的需求并提供个性化服务。

  • 基于内容的推荐算法:结合协同过滤和基于内容的推荐算法,融入季节、评价等上下文信息,实现个性化推荐。

概念介绍

  • 多模融合:多模融合是 seekdb 的一个重要能力。本文的多模融合主要指的是多模数据混合搜索技术。seekdb 支持向量数据、空间数据、文档数据、标量数据等类型融合查询,基于向量索引、空间索引、全文索引等多种索引的支持,提供更高性能的混合搜索能力。

    多模融合示意图

  • LLM(Large Language Model):大语言模型。指使用大量文本数据训练的深度学习模型,可以生成自然语言文本或理解语言文本的含义。大语言模型可以处理多种自然语言任务,如文本分类、问答、对话等,是通向人工智能的重要途径。

前提条件

  • 您已部署 seekdb。更多有关部署 seekdb 的信息,请参见 部署概述

  • 您已创建数据库。更多有关创建数据库的信息,请参见 创建数据库

  • 数据库已开启向量搜索功能。更多关于向量搜索功能的信息,请参见 使用 SQL 快速进行向量搜索

    obclient> ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
  • (推荐,非必选)安装 Python 3.10 及以上版本 和相应 pip。如果您的机器上 Python 版本较低,可以使用 Miniconda 来创建新的 Python 3.10 及以上的环境,具体可参考 Miniconda 安装指南

    conda create -n obmms python=3.10 && conda activate obmms
  • 安装 Poetry,可参考命令:

    python3 -m ensurepip
    python3 -m pip install poetry
  • 安装相应的 Python 包。可参考命令:

    pip install python-dotenv tqdm streamlit pyobvector==0.2.16

步骤一:获取 LLM API 密钥

注册阿里云百炼账号,开通模型服务并获取 API 密钥。

点击开通模型服务

确认开通模型服务

阿里云百炼

获取阿里云百炼 API Key

步骤二:获取地理服务 API 密钥

注册高德开放平台,并获取基础 LBS 服务 API 密钥。

进入应用管理页面

点击新建应用

输入应用名称和类型-创建应用

添加 Key

编辑 Key 信息

生成并获取 Key

步骤三:下载公开数据集

下载 Kaggle 的中国城市景点详情数据集 ZIP 压缩包。

步骤四:构建您的文旅小助手

克隆项目仓库

  1. 克隆最新的项目仓库。

    git clone https://github.com/oceanbase-devhub/ob-multi-model-search-demo.git
    cd ob-multi-model-search-demo
  2. 将下载完毕的 archive 数据集 ZIP 压缩包移动到 ob-multi-model-search-demo 项目文件夹中,重命名为 citydata,并解压。

    # 请修改为 archive.zip 文件的实际保存路径
    mv ./archive.zip ./citydata.zip
    unzip ./citydata.zip

安装依赖

在项目根目录下,运行以下命令安装依赖。

poetry install

设置环境变量

.env 文件中设置环境变量:

vim .env

你需要将 OB_ 开头的变量更新为您的数据库连接信息,并手动增加以下变量:将 DASHSCOPE_API_KEY 更新为您从阿里云百炼控制台获取的 API KEY 值,将 AMAP_API_KEY 更新为您从高德地图 API 服务获取的 API KEY 值,然后保存文件。

# 数据库连接串中的主机地址
OB_URL="******" ## 格式:IP:<端口号>
OB_USER="******" ## 用户名
OB_DB_NAME="******" ## 数据库名称
# 数据库连接串中的密码
OB_PWD="******"
# 数据库连接串中的 SSL CA 文件路径(可选),如果不需要使用 SSL 链路加密,需要删除此参数
OB_DB_SSL_CA_PATH="******"

# 手动增加 LLM API Key
DASHSCOPE_API_KEY="******"
# 手动增加高德地图 API Key
AMAP_API_KEY="******"

导入数据

在该步骤中,我们将下载的数据集中的数据导入到 seekdb 中。

注意

首次构建时,建议先选取数据集中的一部分(例如只选取首字母为 A 的景点)进行导入,全部导入会时间花费较长。

python ./obmms/data/attraction_data_preprocessor.py

出现以下运行进度,则表示数据正在成功导入。

...
./citydata/常德.csv:
100%|███████████████████████████████████████████████████████████████████████████| 100/100 [00:04<00:00, 20.77it/s]
./citydata/渭南.csv:
100%|█████████████████████████████████████████████████████████████████████████████| 90/90 [00:13<00:00, 6.54it/s]
...

启动 UI 聊天界面

执行以下命令启动聊天界面:

poetry run streamlit run ./ui.py

如无直接弹出网页,可访问终端中显示的 URL 来打开文旅小助手应用界面。

  You can now view your Streamlit app in your browser.

Local URL: http://localhost:8501
Network URL: http://172.xxx.xxx.xxx:8501
External URL: http://172.xxx.xxx.xxx:8501

应用展示

tourism-assistant-ui

故障排除

依赖包安装问题

Poetry 安装失败

如果 poetry install 命令失败,可以尝试以下步骤:

  1. 更新 Poetry 到最新版本:

    pip install --upgrade poetry
  2. 清除 Poetry 缓存:

    poetry cache clear --all pypi
  3. 重新安装依赖:

    poetry install --no-cache

环境配置问题

Python 环境未激活

重要

确保您已经激活了正确的 Python 环境(如 obmms conda 环境)再进行依赖安装。

确保您已经激活了正确的 conda 环境:

conda activate obmms

Python 版本不兼容

确保使用 Python 3.10 及以上版本:

python --version

如果版本过低,请重新创建环境:

conda create -n obmms python=3.10
conda activate obmms

数据库连接问题

如果遇到数据库连接问题,请检查:

  1. .env 文件中的数据库连接信息是否正确
  2. seekdb 是否正常运行
  3. 网络连接是否正常
  4. 数据库用户权限是否足够

其他常见问题

端口占用

如果 Streamlit 启动时提示端口被占用,可以指定其他端口:

poetry run streamlit run ./ui.py --server.port 8502

内存不足

如果数据导入过程中出现内存不足的问题,可以:

  1. 减少批量导入的数据量
  2. 增加系统内存
  3. 调整 seekdb 的内存配置

API 密钥问题

确保您已经正确配置了:

  1. 阿里云百炼 API 密钥(DASHSCOPE_API_KEY)
  2. 高德地图 API 密钥(AMAP_API_KEY)

API 密钥可以在 .env 文件中进行配置。