Skip to content

Commit

Permalink
add baidu vdb as retriever (#183)
Browse files Browse the repository at this point in the history
  • Loading branch information
fengjial authored Mar 15, 2024
1 parent 4f1e494 commit c237a9c
Show file tree
Hide file tree
Showing 8 changed files with 581 additions and 82 deletions.
86 changes: 4 additions & 82 deletions appbuilder/core/components/retriever/README.md
Original file line number Diff line number Diff line change
@@ -1,88 +1,10 @@
# 向量检索(Baidu ElasticSearch Retriever)
# 向量检索

## 简介
向量检索组件(Baidu ElasticSearch Retriever)基于一款Baidu ElasticSearch的内容检索组件,支持根据文本的向量的相似度进行内容检索
Appbuilder提供多种向量数据库作为向量检索的底座,当前主要支持百度向量数据库、百度 ElasticSearch。

### 功能介绍
向量检索组件(Baidu ElasticSearch Retriever)用于在将文本内容输入到Baidu ElasticSearch,根据文本的向量相似度进行高效的内容检索
向量检索组件-VDB(Baidu VDB Retriever)以百度向量数据库作为向量存储和检索的底座。百度向量数据库是一个专注于多维向量数据的存储、检索和分析的企业级分布式数据库服务。基于百度自主研发的向量数据库内核,VectorDB在保证高性能和高可用性的同时,也特别注重易用性和可扩展性。它支持多种索引类型和相似度计算方法,能够满足各类复杂和多样化的数据应用需求。特别值得一提的是,VectorDB能够管理高达数十亿的向量规模,同时保持毫秒级的查询响应时间,非常适合进行大规模的向量检索和分析任务

### 特色优势
- 高效准确:基于Baidu ElasticSearch的强大能力,提供高效且准确的内容检索功能。
向量检索组件-BES(Baidu ElasticSearch Retriever)以百度 ElasticSearch作为向量存储和检索的底座。百度 ElasticSearch是一款专为企业级需求设计的分布式搜索和分析服务,它在全面兼容开源ElasticSearch的基础上,提供了更多增强功能。这款服务的核心优势在于其高性能和高可靠性,它为处理结构化和非结构化数据提供了一个低成本且高效的平台。对于关注数据安全的客户来说,百度ElasticSearch提供了先进的权限管理机制,使得您可以根据业务需求自由地配置集群权限。

### 应用场景
各种内容检索场景

## 准备工作
在使用Baidu ElasticSearch Retriever进行内容检索之前,需要到Baidu ElasticSearch官网创建相应的集群,详情见[教程](https://cloud.baidu.com/doc/BES/s/gke3ocf89)

注:创建集群时请选择7.10.2版本的ES,否则可能无法使用本组件。

## 基本用法

以下是有关如何开始使用BESRetriever的代码示例:

```python
import os
import appbuilder

# 请前往千帆AppBuilder官网创建密钥,流程详见:https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6#1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5
os.environ["APPBUILDER_TOKEN"] = '...'

embedding = appbuilder.Embedding()
segments = appbuilder.Message(["文心一言大模型", "百度在线科技有限公司"])
# 初始化构建索引
vector_index = appbuilder.BESVectorStoreIndex.from_segments(segments=segments, cluster_id=es_cluster_id, user_name=es_username,
password=es_password, embedding=embedding)
# 获取当前索引中的全部内容
all_content = vector_index.get_all_segments()
print(all_content)
# 转化为retriever
retriever = vector_index.as_retriever()
# 按照query进行检索
query = appbuilder.Message("文心一言")
res = retriever(query=query, top_k=1)
print(res)
# 删除当前索引中的全部内容
vector_index.delete_all_segments()
```

## 参数说明

### 鉴权说明
使用组件之前,请首先申请并设置鉴权参数,可参考[组件使用流程](https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6#1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5)
```python
# 设置环境中的TOKEN,以下示例略
os.environ["APPBUILDER_TOKEN"] = "bce-YOURTOKEN"
```

### 初始化参数说明:

- segments (Message[List[str]],必填):需要入库的文本段落
- cluster_id (str,必填):ElacticSearch集群的id,创建集群时获取
- user_name (str,必填):连接ES集群所需的用户名,创建集群时获取
- password (str,必填):连接ES集群所需的密码,创建集群时获取
- embedding (obj,非必填):用于将文本转为向量的模型,默认为Embedding

### 调用参数:
| 参数名称 | 参数类型 |是否必须 | 描述 | 示例值 |
|---------|--------|--------|------------------|---------------|
| message | String || 需要检索的内容 | "中国2023人均GDP" |
| top_k | int || 返回相似度最高的top_k个内容 | 1 |

### 响应参数
| 参数名称 | 参数类型 | 描述 | 示例值 |
|------|--------|-----|--------------------|
| text | string | 检索结果 | "中国2023年人均GDP8.94万元" |
| score | float | 相似度 | 0.95 |
| meta | dict | 元信息 | "" |
### 响应示例
```json
{"text": "中国2023年人均GDP8.94万元", "score": 0.95, "meta": ""}
```

## 高级用法:

本组件根据向量的相似度进行检索,支持使用不同的embedding方法和索引方式来优化检索的效果。

## 更新记录和贡献
* 向量检索能力 (2023-12)
85 changes: 85 additions & 0 deletions appbuilder/core/components/retriever/baidu_vdb/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# 向量检索(Baidu VDB Retriever)

## 简介
向量检索组件(Baidu VDB Retriever)基于一款百度向量数据库的内容检索组件,支持根据文本的向量的相似度进行内容检索。

### 功能介绍
向量检索组件(Baidu VDB Retriever)用于在将文本内容输入到百度向量数据库,根据文本的向量相似度进行高效的内容检索。

### 特色优势
高效准确:基于百度向量数据库的强大能力,提供高效且准确的内容检索功能。

### 应用场景
各种内容检索场景

## 准备工作
在使用Baidu VDB Retriever进行内容检索之前,需要到百度向量数据库官网创建相应的实例,[教程](https://cloud.baidu.com/doc/VDB/s/hlrsoazuf)

## 基本用法

以下是有关如何开始使用BaiduVDBRetriever的代码示例:

```python
import os
import appbuilder

# 请前往千帆AppBuilder官网创建密钥,流程详见:https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6#1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5
os.environ["APPBUILDER_TOKEN"] = '...'

embedding = appbuilder.Embedding()
segments = appbuilder.Message(["文心一言大模型", "百度在线科技有限公司"])
# 初始化构建索引
vector_index = appbuilder.BaiduVDBVectorStoreIndex.from_params(
instance_id=your_instance_id,
api_key=your_api_key,
drop_exists=True,
)
vector_index.add_segments(segments)

query = appbuilder.Message("文心一言")
retriever = vector_index.as_retriever()
res = retriever(query)
print(res)
```

## 参数说明

### 鉴权说明
使用组件之前,请首先申请并设置鉴权参数,可参考[组件使用流程](https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6#1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5)
```python
# 设置环境中的TOKEN,以下示例略
os.environ["APPBUILDER_TOKEN"] = "bce-YOURTOKEN"
```

### 初始化参数说明:

- segments (Message[List[str]],必填):需要入库的文本段落
- instance_id(str,必填):百度向量数据库的实例id,创建实例时获取
- api_key (str,必填):连接向量数据库所需的密码,创建实例时获取
- account (str,非必填):连接向量数据库所需的用户名,默认root
- embedding (obj,非必填):用于将文本转为向量的模型,默认为Embedding
- drop_exists (bool, 非必填) :是否清空数据库历史记录,默认为False

### 调用参数:
| 参数名称 | 参数类型 |是否必须 | 描述 | 示例值 |
|---------|--------|--------|------------------|---------------|
| message | String || 需要检索的内容 | "中国2023人均GDP" |
| top_k | int || 返回相似度最高的top_k个内容 | 1 |

### 响应参数
| 参数名称 | 参数类型 | 描述 | 示例值 |
|------|--------|-----|--------------------|
| text | string | 检索结果 | "中国2023年人均GDP8.94万元" |
| score | float | 相似度 | 0.95 |
| meta | dict | 元信息 | "" |
### 响应示例
```json
{"text": "中国2023年人均GDP8.94万元", "score": 0.95, "meta": ""}
```

## 高级用法:

本组件根据向量的相似度进行检索,支持使用不同的embedding方法和索引方式来优化检索的效果。

## 更新记录和贡献
* 向量检索能力 (2024-03)
Empty file.
Loading

0 comments on commit c237a9c

Please sign in to comment.