You need to enable JavaScript to run this app.
向量数据库VikingDB

向量数据库VikingDB

复制全文
API参考
签名鉴权与调用示例
复制全文
签名鉴权与调用示例

知识库支持通过 API 接口进行操作,调用 API 接口的前提条件是获取 API 访问密钥(AK/SK)和完成签名鉴权。本文介绍获取访问密钥的方法,并提供签名鉴权和完整调用的多语言示例代码。


获取 API 访问密钥(AK/SK)

在调用知识库的各项能力之前,请确保您已生成访问密钥 Access Key,Access Key 包括以下内容:

  • Access Key ID:简称为 AK,用于标识用户。
  • Access Key Secret:简称为 SK,用于验证用户的密钥。

请按照以下步骤创建您自己的 AK/SK:

  1. 登录火山引擎控制台。
  2. 在控制台右上角,将鼠标指针悬停在头像上,然后在弹出菜单中点击 API 访问密钥
    Image
  3. API 访问密钥页面上点击新建密钥。在此处获取的 AK/SK 可以作为调用相关接口的凭证。

    注意

    为了您的数据和资金安全,请务必妥善保管您的 AK/SK,不要轻易向他人披露。另外,由于主账号的权限过大,根据权限最小化原则,建议您新建子账号,并使用子账号的 AK/SK。

    关于 AK/SK 的进一步信息,请参见 Access Key(密钥)管理

签名鉴权

签名是 API 请求中经过计算得到的一串编码字符串,用于身份认证和防止数据被篡改。

签名的时效性

与 AK/SK 不同,每个请求的签名都是独立且临时的,一个签名只能用于一次特定的请求,不能长期固定使用。

签名的计算方式

签名由签名生成函数 prepare_request 基于以下参数计算而来:

参数

含义

说明

method

请求方法

影响签名计算,例如 GET、POST。

path

请求路径

例如 /api/collection/create

ak

Access Key ID

标识 API 调用者。

sk

Access Key Secret

用于 HMAC-SHA256 计算签名(需保密)。

params

查询参数

适用于 GET 请求等。

data

请求体

适用于 POST、PUT 请求。

doseq

查询参数的格式控制

影响 params 的格式。

签名生成函数示例代码

签名生成函数的各语言示例代码见下方说明。
如需了解通过源码生成签名的详情,请参考签名源码示例;如需了解通过 SDK 生成签名的详情,请参考 SDK 概览

以下为通过 Python SDK 生成签名的示例代码。

  1. 安装火山引擎程序包。

    pip install volcengine
    
  2. 生成签名。

    import json
    import sys
    import requests
    
    from volcengine.auth.SignerV4 import SignerV4
    from volcengine.base.Request import Request
    from volcengine.Credentials import Credentials
    
    def prepare_request(method, path, ak, sk, params=None, data=None, doseq=0):
        if params:
            for key in params:
                if (
                    type(params[key]) == int
                    or type(params[key]) == float
                    or type(params[key]) == bool
                ):
                    params[key] = str(params[key])
                # elif sys.version_info[0] != 3: # 在 Python 3.x 中,不需要这部分代码
                #     if type(params[key]) == unicode:
                #         params[key] = params[key].encode("utf-8")
                elif type(params[key]) == list:
                    if not doseq:
                        params[key] = ",".join(params[key])
        r = Request()
        r.set_shema("https")
        r.set_method(method)
        r.set_connection_timeout(10)
        r.set_socket_timeout(10)
        mheaders = {
            "Accept": "application/json",
            "Content-Type": "application/json",
        }
        r.set_headers(mheaders)
        if params:
            r.set_query(params)
        r.set_path(path)
        if data is not None:
            r.set_body(json.dumps(data))
        # 生成签名
        credentials = Credentials(ak, sk, "air", "cn-north-1")
        SignerV4.sign(r, credentials)
        return r
    

知识库 API 调用示例

获取 AK/SK 后,可以将签名生成函数具体接口调用写进同一个脚本文件。以下为对接签名生成逻辑与创建知识库接口的 Python 示例代码。

说明

请将 main 函数中的aksk分别替换为您自己的 AK 和 SK。

import json
import requests
from volcengine.auth.SignerV4 import SignerV4
from volcengine.base.Request import Request
from volcengine.Credentials import Credentials

#签名生成逻辑
def prepare_request(method, path, params=None, data=None, doseq=0):
    #创建request
    if params:
        for key in params:
            if (
                    isinstance(params[key], int)
                    or isinstance(params[key], float)
                    or isinstance(params[key], bool)
            ):
                params[key] = str(params[key])
            elif isinstance(params[key], list):
                if not doseq:
                    params[key] = ",".join(params[key])
    r = Request()
    r.set_shema("http")
    r.set_method(method)
    r.set_connection_timeout(10)
    r.set_socket_timeout(10)
    mheaders = {
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Host": g_knowledge_base_domain,
        "V-Account-Id": account_id,
    }
    r.set_headers(mheaders)
    if params:
        r.set_query(params)
    r.set_host(g_knowledge_base_domain)
    r.set_path(path)
    if data is not None:
        r.set_body(json.dumps(data))
    # 生成签名
    credentials = Credentials(ak, sk, "air", "cn-north-1")
    SignerV4.sign(r, credentials)
    return r

#创建知识库逻辑
def create():
    #创建知识库的请求方式
    method = "POST"
    #创建知识库的请求路径
    path = "/api/knowledge/collection/create"
    #创建知识库所需要的一些参数
    request_params = {
        "name": "lzm_test2",
        "data_type": "unstructured_data",
        "preprocessing": {
            "chunking_strategy":"custom_balance",
            "multi_modal":["image_ocr"]
        },
        "index": {
            "cpu_quota": 1,
            "embedding_model": "doubao-embedding-and-m3",
            "embedding_dimension": 2048,
            "quant": "int8",
            "index_type": "hnsw_hybrid"
        },
    }
    info_req = prepare_request(method=method, path=path, data=request_params)
    rsp = requests.request(
        method=info_req.method,
        url="https://{}{}".format(g_knowledge_base_domain, info_req.path),
        headers=info_req.headers,
        data=info_req.body
    )
    print(rsp.text)

if __name__ == "__main__":
    ak = '刚才申请到的ak'
    sk = '刚才申请到的sk'
    g_knowledge_base_domain = "api-knowledgebase.mlp.cn-beijing.volces.com"
    #调用创建知识库的函数
    create()
最近更新时间:2026.01.15 19:07:46
这个页面对您有帮助吗?
有用
有用
无用
无用