鉴权方式
所有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请求,key和token均需拼接在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和应用密钥,防止未经授权的访问。
- 日志记录: 使用日志记录来调试和监控请求的流转情况,帮助快速定位和解决问题。