鉴权方式

所有API请求均需通过Bearer Token进行鉴权。Token应存储在后端,并在HTTP请求的Authorization头中使用。

一旦您拥有了 Token,您可以通过 HTTPS/WSS 请求与您的智能体进行交互。以下是如何使用 Token 调用 API 的示例。

为了确保您的账户安全,请避免在前端明文使用token或应用密钥(key)。

示例请求(仅供参考,请根据实际情况进行修改)

HTTP 请求

curl --location --request POST 'https://Host:PORT/api/v1/third_interface/下级接口名称?key=YOUR-KEY' \
--header 'Authorization: Bearer YOUR-TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '其他参数'
  • Authorization: 使用Bearer 你的个人令牌/应用令牌形式传入您生成的访问令牌。
  • Host: 扳手AI项目所在域名/IP
  • Port: 扳手AI项目后端项目端口

WebSocket 请求

对于WebSocket请求,keytoken均需拼接在URL中:

wss://Host:PORT/assistant/chat?key=YOUR-KEY&token=YOUR-TOKEN
  • Key: 用于鉴别具体某个助手/技能
  • Token: 用于鉴别应用/个人

使用示例

  • 安全性: 始终在后端存储API密钥,避免泄露。
  • 性能: 使用分页获取历史消息以减少响应时间。
  • 稳定性: 在请求失败时实现重试机制。

示例的项目调用

我们提供一个示例项目的代码架构以供参考。请注意,这些示例仅为代码参考,实际使用时需结合自身项目情况进行动态调整,以确保与您的系统架构和业务需求相匹配。

示例项目架构

示例项目采用 Spring Cloud 架构,使用 Nacos 作为配置中心。以下是如何在 Nacos 配置中添加路由规则:

Nacos 配置

routes:
  # 扳手AI-https
  - id: ai_https_route
    uri: https://YOUR-HOST:YOUR-PORT/
    predicates:
      - Path=/api/dcp-ai/**
    filters:
      - RewritePath=/api/dcp-ai/(?<segment>.*),/api/v1/third_interface/${segment}
  # 扳手AI-wss
  - id: ai_ws_route
    uri: wss://YOUR-HOST:YOUR-PORT/
    predicates:
      - Path=/api/ws/dcp-ai/**
    filters:
      - RewritePath=/api/ws/dcp-ai/(?<segment>.*),/api/v1/third_interface/${segment}

Gateway 的 Filter 过滤

以下是Gateway中的过滤器逻辑示例,用于处理HTTP/HTTPS和WebSocket请求:

if (protocolPath.equals("/api/dcp-ai")) {
    newUri = UriComponentsBuilder.newInstance()
            .scheme("https")
            .host(dcpAiHost)
            .port(dcpAiPort)
            .path(dcpAiPathPrefix + variablePath)
            .replaceQueryParams(queryParams)
            .queryParam("key", key)
            .build(true)
            .toUri();

    logger.debug("HTTP/HTTPS New Request URI: {}", newUri);
    ServerHttpRequest modifiedRequest = mutableExchange.getRequest().mutate()
            .uri(newUri)
            .header(HttpHeaders.AUTHORIZATION, "Bearer " + aiToken)
            .build();

    return chain.filter(mutableExchange.mutate().request(modifiedRequest).build());
} else if (protocolPath.equals("/api/ws/dcp-ai")) {
    logger.debug("======== 开始执行组装wss请求 ==========");
    newUri = UriComponentsBuilder.newInstance()
            .scheme("wss")
            .host(dcpAiHost)
            .port(dcpAiPort)
            .path(dcpAiPathPrefix + variablePath)
            .replaceQueryParams(queryParams)
            .queryParam("key", key)
            .queryParam("token", aiToken)
            .build(true)
            .toUri();

    logger.debug("目标地址 WebSocket URI: {}", newUri);
    ServerHttpRequest modifiedRequest = mutableExchange.getRequest().mutate()
            .uri(newUri)
            .build();

    return chain.filter(mutableExchange.mutate().request(modifiedRequest).build());
}

return chain.filter(mutableExchange);
查看全部

注意事项

  • 动态调整: 请根据您的项目需求动态调整这些配置,确保与您的业务逻辑和系统架构相匹配。
  • 安全性: 确保在后端安全地存储和使用Token和应用密钥,防止未经授权的访问。
  • 日志记录: 使用日志记录来调试和监控请求的流转情况,帮助快速定位和解决问题。