用户之声——提建议·赢好礼> HOT

功能介绍

/ai/documentSet/uploadUrl 接口用于获取文件上传路径和授权签名。
说明:
获取授权签名后,您需使用 COS(对象存储)SDK 或 Restful API 将文档上传至 COS 服务器。文件上传完成的状态通知之后,向量数据库便会开始拉取文件并解析文件内容,进行拆分、向量化,创建索引并进行存储。
HTTP 上传文件的方式需要借助 COS 上传文件的接口,操作较繁琐,推荐使用向量数据库 Python SDK 的方式直接上传文件。

约束限制

每次仅能上传一个文件,上传之后,将自动进行拆分、向量化等。
该接口当前不支持使用别名获取文件的上传路径与授权。

请求参数

注意:
如下示例可直接复制,在 CVM 运行之前,您需在文本编辑器将 api_key=A5VOgsMpGWJhUI0WmUbY******************** 与 10.0.X.X 依据实际情况进行替换。
curl -i -X POST \\
-H 'Content-Type: application/json' \\
-H 'Authorization: Bearer account=root&api_key=A5VOgsMpGWJhUI0WmUbY********************' \\
http://10.0.X.X:80/ai/documentSet/uploadUrl \\
-d '{
"database":"db-test-ai",
"collectionView":"coll-ai-files",
"documentSetName":"腾讯云向量数据库.md"
}'
参数名
是否必选
参数含义
database
文件预上传的目标数据库名。
collectionView
文件预上传的目标数据库的集合视图名。
说明:
该参数目前不支持配置为集合视图的别名,即该接口当前不支持使用别名获取文件的上传路径与授权。
documentSetName
文件名称。

返回信息

{
"code": 0,
"msg": "operation success, requestId: eea021e910f89417****************",
"cosEndpoint": "https://gz-vector-test-cos-1257943044.cos.ap-guangzhou.myqcloud.com",
"cosRegion":"ap-guangzhou",
"cosBucket":"gz-vector-test-cos-1257943044",
"uploadPath": "embedding_file/vdb-jcrlbp46/db-test-ai/coll-ai-files/腾讯云向量数据库.md",
"credentials": {
"TmpSecretId": "AKIDhE7OGtx4MtnneVOECDf*********************************************",
"TmpSecretKey": "pnIGo********+Jete***************************",
"Token": "4EGei**********************************************************************************************************************************************************"
},
"uploadCondition": {
"maxSupportContentLength":1048576
},
"documentSetId": "MTE2ODgzNDAxNDU0MzYxMzk1Mg=="
}

返回参数

接口 /ai/document/uploadurl 获取授权签名凭证之后,需使用 COS 接口上传文件,其与接口对应的参数解释如下所示。具体应用,请参见 使用 COS 接口上传文件
VDB 参数名
参数含义
子参数
子参数含义
对应 COS SDK 参数名
COS 子参数
cosEndpoint
腾讯云对象存储(COS)的服务端点(Endpoint),即 COS 服务的访问地址。
-
-
cos_endpoint
-
cosBucket
COS 服务端存储桶名称。
-
-
-
-
cosRegion
COS 服务端存储桶所属地域。
-
-
cosRegion
-
uploadPath
依据数据库名、集合名、文件名拼接生成的 COS 端存放路径。
-
-
upload_path
-
credentials
COS 给该文件上传分配的临时身份凭证,以便在上传文件时进行身份验证和授权访问。
TmpSecretId
密钥 ID
credentials
SecretId
TmpSecretKey
密钥信息
SecretKey
Token
Token 信息
Token
uploadCondition
上传约束条件。
maxSupportContentLength
限制上传文件的最大字节数
maxSupportContentLength
-
documentSetId
COS 给文件分配的 ID 信息。
-

fileId
-

使用 COS Python SDK 上传文件示例

如下示例为 COS Python SDK 上传文件的参考代码。您需要根据代码注释替换相关授权凭证,以及如下表所列参数,便可以通过 upload_file() 接口上传文件。更多信息,请参见 COS Python SDK
参数
是否必须
参数含义
local_file_path
本地上传路径
cos_metadata
文件元数据库配置,配置方法,请参见如下代码示例注释。文件的 Metadata 元数据信息,可自定义扩展字段。例如:author、tags等。
上传文件时,可为创建 CollectionView 设置的 Filter 索引的字段赋值,以便在检索时,使用该字段的 Filter 表达式检索文件。
上传文件时,可以新增标量字段,但新增字段不会构建 Filter 索引。
append_title_to_chunk
在对文件拆分时,配置是否将 Title 追加到切分后的段落后面一并 Embedding。取值如下所示:
0:不追加。默认值为 0。
1:将段落 title 追加到切分后的段落。
append_keywords_to_chunk
在对文件拆分时,配置是否将关键字 keywords 追加到切分后的段落一并 Embedding。取值如下所示:
0:不追加。
1:将全文的 keywords 追加到切分后的段落。默认值为 1。
import requests

import json
import os
import sys
import urllib
import base64
from qcloud_cos import CosConfig, CosS3Client

local_file_path = "<your_local_file_path>"

# 1. json解析 /ai/documentSet/uploadUrl 获得的签名结果:
result = json.loads("<results from /ai/documentSet/uploadUrl>")

# 2. 文件Size校验(支持1MB Markdown文件)
limit_size = result["uploadCondition"]["maxSupportContentLength"]
file_stat = os.stat(local_file_path)
if limit_size < file_stat.st_size:
print("The file exceeds its maximum permitted size")
sys.exit(0)

# 3. 设置COS上传签名
credentials = result["credentials"]
print(credentials)

config = CosConfig(
Region=result["cosRegion"],
SecretId=credentials["TmpSecretId"],
SecretKey=credentials["TmpSecretKey"],
Token=credentials["Token"]
)

# 4. 您可以自定义文件 Metadata 信息
# 说明1:x-cos-meta-data,自定义属性及赋值,必填字段;{类型}支持string、uint64、array;{字段名}为元数据字段名,例如:author,page,city等。
metadata = {"fieldStr": "v1", "fieldInt": 1024, "fieldList": ["a", "b", "c"]}
# notice:必填字段,没有传:metadata = {}
# 说明2:chunk embedding增强参数
config = {"appendTitleToChunk": 1, "appendKeywordsToChunk": 1} #上传文件时单独配置预处理逻辑

cos_metadata = {
'x-cos-meta-id': result.get('documentSetId'), # 文件唯一标识符,必填字段
'x-cos-meta-config': urllib.parse.quote(base64.b64encode(json.dumps(config).encode('utf-8'))),
'x-cos-meta-data': urllib.parse.quote(base64.b64encode(json.dumps(metadata).encode('utf-8')))
}

# 5. 上传文件:
CosS3Client(config).upload_file(
Bucket=result.get('cosBucket'),
Key=result.get('uploadPath'),
LocalFilePath=local_file_path, # 本地文件路径
Metadata=cos_metadata
)