You need to enable JavaScript to run this app.
导航
API鉴权机制说明
最近更新时间:2025.08.22 23:57:02首次发布时间:2025.04.24 20:27:18
复制全文
我的收藏
有用
有用
无用
无用

鉴权机制说明

AI搜索数据面API(包括搜索、对话、推荐等服务API和数据的上传、删除、查询API)均支持2种鉴权方式:
API Key鉴权:​简单方便,可直接在AI 搜索 控制台配置使用。
Access Key鉴权:​火山云产品体系的传统云资源访问鉴权方式,面向企业精细化资源和权限管控。

使用API Key鉴权

创建并获取API Key

登录 AI 搜索引擎 控制台,前往API Key管理 页面,可查看已创建好的API Key,您也可以重新创建一个 API Key。
Image
从API Key列表中查看并复制API Key
Image

签名构造

API Key 签名鉴权方式要求在 HTTP 请求 header 中按如下方式添加 Authorization header:

Authorization: Bearer <API_KEY>

API 调用示例

curl -X POST 'https://aisearch.cn-beijing.volces.com/api/v1/application/${application_id}/search' \ 
  -H 'Content-Type: application/json' \ 
  -H 'Authorization:Bearer <API_KEY>' \ 
  -d '{ 
    "query": { 
        "text": "科幻片" 
    }, 
    "page_number": 1, 
    "page_size": 5, 
    "user": { 
        "_user_id": "ldy_199432" 
    }, 
    "filter": {
        "op": "must",
        "field": "director",
        "conds": ["郭帆"]
    },
    "dataset_id": "106265704" 
}' 

使用火山Access Key鉴权

获取Access Key

Access Key 包括 Access Key ID(简称为 AK) 和 Access Key Secret(简称为 SK),其中,Access Key ID 用于标识用户,Access Key Secret 用于验证用户的密钥,请您妥善保管。

说明

如果您使用子账号操作,请与您的企业管理员确认您的子账号拥有Access Key的创建和读取权限。

AK/SK 密钥获取方式如下,详情请参考 Access Key(密钥)管理

  1. 单击右上角账号名下拉框中的【API 访问密钥】进入对应页面。

Image

  1. 单击【新建密钥】按钮,可获取 AK/SK,可以此为凭证调用上述已接入应用的接口。

Image
注意:​安全起见,建议新建子账户,并使用子账户的 AK/SK。

构造签名

  1. 使用 Access Key 构造签名,签名方法和签名构造详细机制请参见签名方法;推荐使用火山引擎提供的多语言官方SDK来进行构造签名。
    • 签名用到的AI搜索平台相关参数
Service:aisearch
Region:cn-beijing
  1. 在 HTTP 请求 header 中添加 Authorization 为构造的签名字符串。
curl -X POST 'https://aisearch.cn-beijing.volces.com/api/v1/{api action}'
  -H 'Content-Type: application/json' \
  -H 'Authorization: HMAC-SHA256 Credential={AccessKeyId}/{CredentialScope}, SignedHeaders={SignedHeaders}, Signature={Signature}' \
  -d '{
  "key": "value"
}'

API 调用示例

安装火山引擎程序包

pip install volcengine

生成签名并测试调用

import json
import sys
import requests

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

Host = "aisearch.cn-beijing.volces.com"
Schema = "https"
Service = "aisearch"
Region = "cn-beijing"

# 用户的AK/SK
AK = "xxx"
SK = "xxx"


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(Schema)
    r.set_method(method)
    r.set_connection_timeout(10)
    r.set_socket_timeout(10)
    mheaders = {
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Host": Host
    }
    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, Service, Region)
    SignerV4.sign(r, credentials)
    return r


def search_demo():
    path = "/api/v1/application/{}/search".format("应用id")
    url_param = None
    body_data = {
        "query": {
            "text": "测试"
        },
        "user": {
            "_user_id": "mock_user_id",
        },
        "dataset_id": "106621109",
        "page_number": 1,
        "page_size": 10
    }

    sign_req = prepare_request("POST", path, AK, SK, url_param, body_data)

    resp = requests.request(
        method=sign_req.method,
        url="{}://{}{}".format(Schema, Host, path),
        headers=sign_req.headers,
        data=sign_req.body
    )
    resp.raise_for_status()

    print(resp.text)


def chat_search_demo():
    path = "/api/v1/application/{}/chat_search".format("应用id")
    url_param = None
    body_data = {
        "input_message": {
            "content": [
                {
                    "type": "text",
                    "text": "帮我推荐几部喜剧?"
                }
            ]
        },
        "user": {
            "_user_id": "mock_user_id",
        },
        "session_id": "mock_session_id",
    }

    sign_req = prepare_request("POST", path, AK, SK, url_param, body_data)

    resp = requests.request(
        method=sign_req.method,
        url="{}://{}{}".format(Schema, Host, path),
        headers=sign_req.headers,
        data=sign_req.body,
        stream=True,  # 注意需要开启流式
    )
    resp.raise_for_status()
    process_stream_response(resp)


def process_stream_response(response):
    for line in response.iter_lines(decode_unicode=True):
        if line:
            print(line)


if __name__ == "__main__":
    search_demo()
    chat_search_demo()