用户之声——提建议·赢好礼> HOT
文档中心 > 向量数据库 > 快速入门 > 第一次相似性检索 > 基于 AI 套件快速导入文件并检索
腾讯云向量数据库(Tencent Cloud VectorDB)AI 套件 功能支持直接写入 Markdown 文件。本章节介绍如何应用 AI 套件上传文件写入数据,并基于输入的文本信息对文件内容进行相似性检索的方法。以 Linux 操作系统为例,使用 Python、Java、Go SDK 示例代码分别演示。运行本章节所提供的示例代码,您将初步了解 AI 套件一站式文档检索的解决方案。

导入 SDK 依赖模块

Python
Java
Go
import tcvectordb
from tcvectordb.model.ai_database import AIDatabase
from tcvectordb.model.collection_view import Embedding, SplitterProcess, Language, CollectionView
from tcvectordb.model.document import Filter, Document
from tcvectordb.model.document_set import DocumentSet
from tcvectordb.model.enum import FieldType, IndexType, ReadConsistency
from tcvectordb.model.index import Index, FilterIndex
import com.tencentcloudapi.client.VectorDBClient;
import com.tencentcloudapi.model.*
package main
?
import (
"context"
"time"
"log"
"github.com/tencent/vectordatabase-sdk-go/tcvectordb"
)

创建 Client

导入 SDK 所需的模块之后,需先创建一个向量数据库的客户端对象,与向量数据库服务器连接才能进行交互。
说明:
如下示例 url key 需要分别替换为已购买的免费版实例的 外网访问地址 与 API Key。请登录 向量数据库控制台,在实例详情页面网络信息区域直接复制外网地址,密钥管理页面直接复制密钥。
Python
Java
Go
#create a database client object
client = tcvectordb.VectorDBClient(url='http://10.0.X.X', username='root', key='eC4bLRy2va******************************', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
public class VectorDBExample {
public static void main(String[] args) {
// 创建VectorDB Client
ConnectParam connectParam = ConnectParam.newBuilder()
.withUrl("http://10.0.X.X:80")
.withUsername("root")
.withKey("eC4bLRy2va******************************")
.withTimeout(30)
.build();
VectorDBClient client = new VectorDBClient(connectParam,ReadConsistencyEnum.EVENTUAL_CONSISTENCY);
}
}
func main() {
// 初始化客户端
var defaultOption = &tcvectordb.ClientOption{
Timeout: time.Second * 5,
MaxIdldConnPerHost: 2,
IdleConnTimeout: time.Minute,
ReadConsistency: tcvectordb.EventualConsistency,
}
client, err := tcvectordb.NewClient("http://10.0.X.X:80", "root", "eC4bLRy2va******************************", defaultOption)
if err != nil {
panic(err)
}
}

创建数据库

基于已创建的客户端对象,创建数据库 db-test-ai
Python
Java
Go
Python SDK 支持通过 create_ai_database() 接口创建数据库。
db = client.create_ai_database(database_name='db-test-ai')
Java SDK 支持通过 createAIDatabase() 接口创建数据库。
AIDatabase db = client.createAIDatabase("db-test-ai");
Go SDK 支持通过 CreateAIDatabase() 接口创建数据库。
var (
ctx = context.Background()
aiDatabase = "db-test-ai"
)
db, _ := client.CreateAIDatabase(context.Background(), aiDatabase)
log.Printf("Create AI database success, %s", db.DatabaseName)

创建集合视图

创建 CollectionView 之前,需要针对预上传的文件数据选取可作为 Filter 索引的标量字段,以便使用该字段的 Filter 条件表达式过滤查找文件。通常选取文件的 Metadata 信息字段。如下示例,预以文件的作者字段为 Filter 索引,将字段名 author 设置 Filter 索引。
Python
Java
Go
Python SDK 通过 create_collection_view() 创建一个名为 coll-ai-files 集合视图。
# 第一步:设计索引,为文件 meta 信息标量字段 author 配置 Filter 索引
index = Index()
index.add(FilterIndex('author', FieldType.String, IndexType.FILTER))
# 第二步:创建集合视图
coll_view = db.create_collection_view(name='coll-ai-files',
description='This is a collectionView',
index=index)
print(vars(coll_view))
Java SDK 通过 createCollectionView() 创建一个名为 coll-ai-files 集合视图。
// link database, client 为 VectorDBClient() 创建的客户端对象
AIDatabase db = client.aiDatabase("db-test-ai");
// 初始化 ColletionView 参数
CreateCollectionViewParam collectionParam = CreateCollectionViewParam.newBuilder()
.withName("coll-ai-files")
.withDescription("This is a collectionView")
.addField(new FilterIndex("author", FieldType.String, IndexType.FILTER))
.build();
// Create CollectionView
CollectionView db.createCollectionView(collectionParam);
Go SDK 通过 CreateCollectionView() 创建一个名为 coll-ai-files 集合视图。
var (
ctx = context.Background()
aiDatabase = "db-test-ai"
collectionViewName = "coll-ai-files"
)
// 第一步:设计索引,为文件 meta 信息标量字段 author 配置 Filter 索引
index := tcvectordb.Indexes{
FilterIndex: []tcvectordb.FilterIndex{
{
FieldName: "author",
FieldType: tcvectordb.String,
IndexType: tcvectordb.FILTER,
},
},
}
// 第二步:创建集合视图
coll, _ := db.CreateCollectionView(ctx, collectionViewName, tcvectordb.CreateCollectionViewParams{
Description: "This is a collectionView",
Indexes: index,
})
log.Printf("CreateCollectionView success: %v: %v", coll.DatabaseName, coll.CollectionViewName)

上传文件

集合视图创建完成之后,便可指定上传文件所在路径,上传文件于数据库中。如下示例,文件路径为/tmp/腾讯云向量数据库.md,将该文件内容及其向量数据存储于集合视图 coll-ai-files 中。
Python
Java
Go
Python SDK 通过 load_and_split_text() 接口上传文件腾讯云向量数据库.md 于集合 coll-ai-files
# 上传文件
# 1. 指定文件在客户端的存放路径
# 2. 自定义文件meta数据
res = coll_view.load_and_split_text(local_file_path="/tmp/腾讯云向量数据库.md",
metadata={
'author': 'Tencent'
}
)
res = coll_view.load_and_split_text(local_file_path="/tmp/腾讯云向量数据库.md")
Java SDK 通过 loadAndSplitText() 接口上传文件腾讯云向量数据库.md 于集合 coll-ai-files
// link database, client 为 VectorDBClient() 创建的客户端对象
AIDatabase db = client.aiDatabase("db-test-ai");
// link collectionView
CollectionView collection = db.describeCollectionView("coll-ai-files");
// LocalFilePath 配置上传文件的本地路径
// DocumentSetName 指定文件存储于数据库的名称
LoadAndSplitTextParam param = LoadAndSplitTextParam.newBuilder()
.withLocalFilePath("/tmp/腾讯云向量数据库.md")
.Build();
// 配置文件 Meatdata 标量字段的值
Map<String, Object> metaDataMap = new HashMap<>();
metaDataMap.put("author", "Tencent");
// 调用 loadAndSplitText() 上传文件
collection.loadAndSplitText(param, metaDataMap);
Go SDK 通过 LoadAndSplitText() 接口上传文件腾讯云向量数据库.md 于集合 coll-ai-files
metaData := map[string]interface{}{
"author": "Tencent",
}
UpsertResult, _ := coll.LoadAndSplitText(ctx, tcvectordb.LoadAndSplitTextParams{
LocalFilePath: "/tmp/腾讯云向量数据库.md",
MetaData: metaData,
})
log.Printf("LoadAndSplitText success: %+v", UpsertResult)

查询文件

上传文件可能存在延迟,查询文件,以便确认文件已在后台解析完成。如下示例,指定文件名,查询存储于数据库中的文件状态。返回参数 indexedStatus 将显示文件预处理、Embedding 向量化的状态。
New:等待解析。
Loading:文件解析中。
Failure:文件解析、写入出错。
Ready:文件解析、写入完成。
Python
Java
Go
Python SDK 通过 get_document_set() 获取文件当前状态。
res = coll_view.get_document_set(document_set_name="腾讯云向量数据库.md")
print(vars(res))
Java SDK 通过 getFile() 获取文件当前状态。
String fileId="";
String fileName = "腾讯云向量数据库.md";
System.out.println(collection.getFile(fileName,fileId).toString());
Go SDK 通过 GetDocumentSetByName() 获取文件当前状态。
result, _ := coll.GetDocumentSetByName(ctx, "腾讯云向量数据库.md")
log.Printf("GetDocumentSetByName success: %+v", result)

相似性内容检索

确认文件已解析完成之后,便可开始进行相似性内容检索。如下示例,检索信息什么是向量数据库,默认返回相似度最高的信息。
Python
Java
Go
Python SDK 通过 search() 接口进行相似性检索。
# content 指定需检索的文本内容
# document_set_name 指定检索的文件名
doc_list = coll_view.search(
content='向量是指什么',
document_set_name = ['腾讯云向量数据库.md']
)
for doc in doc_list:
print(vars(doc))
检索结果,如下所示。
关键信息
子参数
参数含义
score
-
表示查询向量与检索结果向量之间的相似性计算分数。
输出结果按照相似程度得分由高到低逐一排列。
data
text
检索到的结果。
{
'score': 0.8473929762840271,
'data': {
'text': '### 什么是向量?\\n向量是指在数学和物理中用来表示大小和方向的量。它由一组有序的数值组成,这些数值代表了向量在每个坐标轴上的分量。\\n',
'startPos': 441,
'endPos': 508,
'pre': [
'## 关键概念\\n如果您不熟悉向量数据库和相似性搜索领域,请优先阅读以下基本概念,便于您对向量数据库有一个初步的了解。\\n'
],
'next': [
'### 什么是非结构化数据?\\n非结构化数据,是指图像、文本、音频等数据。与结构化数据相比,非结构化数据不遵循预定义模型或组织方式,通常更难以处理和分析。\\n'
]
},
'documentSet': {
'documentSetId': '1192727327592550400',
'documentSetName': '腾讯云向量数据库.md',
'author': 'Tencent'
}
}{
'score': 0.7868989706039429,
'data': {
'text': '### 什么是 AI 中的向量表示?\\n当我们处理非结构化数据时,需要将其转换为计算机可以理解和处理的形式。向量表示是一种将非结构化数据转换为嵌入向量的技术,通过多维度向量数值表述某个对象或事物的属性或者特征。腾讯云向量数据库提供的模型能力,目前在开发调试中。\\n',
'startPos': 585,
'endPos': 784,
'pre': [
'### 什么是非结构化数据?\\n非结构化数据,是指图像、文本、音频等数据。与结构化数据相比,非结构化数据不遵循预定义模型或组织方式,通常更难以处理和分析。\\n'
],
'next': [
'### 什么是向量检索?\\n向量检索是一种基于向量空间模型的信息检索方法。将非结构化的数据表示为向量存入向量数据库,向量检索通过计算查询向量与数据库中存储的向量的相似度来找到目标向量。\\n'
]
},
'documentSet': {
'documentSetId': '1192727327592550400',
'documentSetName': '腾讯云向量数据库.md',
'author': 'Tencent'
}
}{
'score': 0.7792050242424011,
'data': {
'text': '### 什么是向量检索?\\n向量检索是一种基于向量空间模型的信息检索方法。将非结构化的数据表示为向量存入向量数据库,向量检索通过计算查询向量与数据库中存储的向量的相似度来找到目标向量。\\n',
'startPos': 784,
'endPos': 876,
'pre': [
'### 什么是 AI 中的向量表示?\\n当我们处理非结构化数据时,需要将其转换为计算机可以理解和处理的形式。向量表示是一种将非结构化数据转换为嵌入向量的技术,通过多维度向量数值表述某个对象或事物的属性或者特征。腾讯云向量数据库提供的模型能力,目前在开发调试中。\\n'
],
'next': [
'## 为什么是腾讯云向量数据库?\\n腾讯云向量数据库作为一种专门存储和检索向量数据的服务提供给用户, 在高性能、高可用、大规模、低成本、简单易用、稳定可靠、智能运维等方面体现出显著优势。 \\n'
]
},
'documentSet': {
'documentSetId': '1192727327592550400',
'documentSetName': '腾讯云向量数据库.md',
'author': 'Tencent'
}
}
Java SDK 通过 search() 接口进行相似性检索。
// link database, client 为 VectorDBClient() 创建的客户端对象
AIDatabase db = client.aiDatabase("db-test-ai");
// link collectionView
CollectionView collection = db.describeCollectionView("coll-ai-files");
// 设置查询参数
// Content 配置需检索的文本信息
// DocumentSetNames 指定需要查找的文件名,可批量设置
SearchByContentsParam searchByContentsParam = SearchByContentsParam.newBuilder()
.withContent("向量是指什么")
.withDocumentSetNames(Arrays.asList("腾讯云向量数据库.md"))
.build();
// 根据配置的查询条件进行内容检索
List<Document> searchRes = collection.search(searchByContentsParam);
// 输出检索结果
int i = 0;
for (Document doc : searchRes) {
System.out.println("\\tres" +(i++)+": "+ doc.toString());
}
检索结果,如下所示。
关键信息
子参数
参数含义
score
-
表示查询向量与检索结果向量之间的相似性计算分数。
输出结果按照相似程度得分由高到低逐一排列。
data
text
检索到的结果。
res0: {
"score": 0.8938464522361755,
"data": {
"text": "### 什么是向量?\\n向量是指在数学和物理中用来表示大小和方向的量。它由一组有序的数值组成,这些数值代表了向量在每个坐标轴上的分量。\\n",
"endPos": 508,
"startPos": 441,
"next": [
"### 什么是非结构化数据?\\n非结构化数据,是指图像、文本、音频等数据。与结构化数据相比,非结构化数据不遵循预定义模型或组织方式,通常更难以处理和分析。\\n"
],
"pre": [
"## 关键概念\\n如果您不熟悉向量数据库和相似性搜索领域,请优先阅读以下基本概念,便于您对向量数据库有一个初步的了解。\\n"
]
},
"documentSet": {
"documentSetName": "\\"腾讯云向量数据库.md\\"",
"documentSetId": "\\"1182525034158882816\\"",
"docFields": [
{
"name": "author",
"value": "Tencent"
},
{
"name": "tags",
"value": [
"Embedding",
"向量",
"AI"
]
}
]
}
}res1: {
"score": 0.8378515839576721,
"data": {
"text": "### 什么是 AI 中的向量表示?\\n当我们处理非结构化数据时,需要将其转换为计算机可以理解和处理的形式。向量表示是一种将非结构化数据转换为嵌入向量的技术,通过多维度向量数值表述某个对象或事物的属性或者特征。腾讯云向量数据库提供的模型能力,目前在开发调试中。\\n",
"endPos": 784,
"startPos": 585,
"next": [
"### 什么是向量检索?\\n向量检索是一种基于向量空间模型的信息检索方法。将非结构化的数据表示为向量存入向量数据库,向量检索通过计算查询向量与数据库中存储的向量的相似度来找到目标向量。\\n"
],
"pre": [
"### 什么是非结构化数据?\\n非结构化数据,是指图像、文本、音频等数据。与结构化数据相比,非结构化数据不遵循预定义模型或组织方式,通常更难以处理和分析。\\n"
]
},
"documentSet": {
"documentSetName": "\\"腾讯云向量数据库.md\\"",
"documentSetId": "\\"1182525034158882816\\"",
"docFields": [
{
"name": "author",
"value": "Tencent"
},
{
"name": "tags",
"value": [
"Embedding",
"向量",
"AI"
]
}
]
}
}res2: {
"score": 0.8152828216552734,
"data": {
"text": "### 什么是向量检索?\\n向量检索是一种基于向量空间模型的信息检索方法。将非结构化的数据表示为向量存入向量数据库,向量检索通过计算查询向量与数据库中存储的向量的相似度来找到目标向量。\\n",
"endPos": 876,
"startPos": 784,
"next": [
"## 为什么是腾讯云向量数据库?\\n腾讯云向量数据库作为一种专门存储和检索向量数据的服务提供给用户, 在高性能、高可用、大规模、低成本、简单易用、稳定可靠、智能运维等方面体现出显著优势。 \\n"
],
"pre": [
"### 什么是 AI 中的向量表示?\\n当我们处理非结构化数据时,需要将其转换为计算机可以理解和处理的形式。向量表示是一种将非结构化数据转换为嵌入向量的技术,通过多维度向量数值表述某个对象或事物的属性或者特征。腾讯云向量数据库提供的模型能力,目前在开发调试中。\\n"
]
},
"documentSet": {
"documentSetName": "\\"腾讯云向量数据库.md\\"",
"documentSetId": "\\"1182525034158882816\\"",
"docFields": [
{
"name": "author",
"value": "Tencent"
},
{
"name": "tags",
"value": [
"Embedding",
"向量",
"AI"
]
}
]
}
}
Go SDK 通过 Search() 接口进行相似性检索。
// 等待文件解析完成
time.Sleep(time.Second * 30)
searchRes, _ := coll.Search(ctx, tcvectordb.SearchAIDocumentSetsParams{
Content: "向量是指什么",
DocumentSetName: []string{"腾讯云向量数据库.md"},
})
for _, doc := range searchRes.Documents {
log.Printf("document: %+v", doc)
}
检索结果,如下所示。
关键信息
子参数
参数含义
score
-
表示查询向量与检索结果向量之间的相似性计算分数。
输出结果按照相似程度得分由高到低逐一排列。
data
text
检索到的结果。
2024/01/05 16:18:22 document: {DatabaseName:db-test-ai CollectionViewName:coll-ai-files DocumentSetId:1192743758593921024 DocumentSetName:腾讯云向量数据库.md Score:0.8473929762840271 SearchData:{Text:### 什么是向量?
向量是指在数学和物理中用来表示大小和方向的量。它由一组有序的数值组成,这些数值代表了向量在每个坐标轴上的分量。
StartPos:441 EndPos:508 Pre:[## 关键概念
如果您不熟悉向量数据库和相似性搜索领域,请优先阅读以下基本概念,便于您对向量数据库有一个初步的了解。
] Next:[### 什么是非结构化数据?
非结构化数据,是指图像、文本、音频等数据。与结构化数据相比,非结构化数据不遵循预定义模型或组织方式,通常更难以处理和分析。
]} ScalarFields:map[author:Tencent]}
2024/01/05 16:18:22 document: {DatabaseName:db-test-ai CollectionViewName:coll-ai-files DocumentSetId:1192743758593921024 DocumentSetName:腾讯云向量数据库.md Score:0.7868989706039429 SearchData:{Text:### 什么是 AI 中的向量表示?
当我们处理非结构化数据时,需要将其转换为计算机可以理解和处理的形式。向量表示是一种将非结构化数据转换为嵌入向量的技术,通过多维度向量数值表述某个对象或事物的属性或者特征。腾讯云向量数据库提供的模型能力,目前在开发调试中。
StartPos:585 EndPos:784 Pre:[### 什么是非结构化数据?
非结构化数据,是指图像、文本、音频等数据。与结构化数据相比,非结构化数据不遵循预定义模型或组织方式,通常更难以处理和分析。
] Next:[### 什么是向量检索?
向量检索是一种基于向量空间模型的信息检索方法。将非结构化的数据表示为向量存入向量数据库,向量检索通过计算查询向量与数据库中存储的向量的相似度来找到目标向量。
]} ScalarFields:map[author:Tencent]}
2024/01/05 16:18:22 document: {DatabaseName:db-test-ai CollectionViewName:coll-ai-files DocumentSetId:1192743758593921024 DocumentSetName:腾讯云向量数据库.md Score:0.7792050242424011 SearchData:{Text:### 什么是向量检索?
向量检索是一种基于向量空间模型的信息检索方法。将非结构化的数据表示为向量存入向量数据库,向量检索通过计算查询向量与数据库中存储的向量的相似度来找到目标向量。
StartPos:784 EndPos:876 Pre:[### 什么是 AI 中的向量表示?
当我们处理非结构化数据时,需要将其转换为计算机可以理解和处理的形式。向量表示是一种将非结构化数据转换为嵌入向量的技术,通过多维度向量数值表述某个对象或事物的属性或者特征。腾讯云向量数据库提供的模型能力,目前在开发调试中。
] Next:[## 为什么是腾讯云向量数据库?
腾讯云向量数据库作为一种专门存储和检索向量数据的服务提供给用户, 在高性能、高可用、大规模、低成本、简单易用、稳定可靠、智能运维等方面体现出显著优势。

删除数据库

Python
Java
Go
Python SDK 通过 drop_ai_database() 接口删除数据库 db-test-ai
client.drop_ai_database(database_name='db-test-ai')
Java SDK 通过 dropAIDatabase() 删除数据库 db-test-ai
client.dropAIDatabase("db-test-ai");
Go SDK 通过 DropAIDatabase() 删除数据库 db-test-ai
result, _ := client.DropAIDatabase(context.Background(), aiDatabase)
?
http://www.vxiaotou.com