知识库对外 API
把已审核发布的知识库以 HTTPS API 开放给下游系统调用:Token 鉴权 · 60 次/分钟/IP · 知识库未覆盖的内容不编造。
平台 API Token 仅管理员可见;请在右上角「我的密钥」生成个人密钥,以 Authorization: Bearer ssk_... 调用。
API Token
••••••••
对外端点(开启后生效,站内登录免 Token):
POST /api/kb/v1/search 向量检索:{query, top_k?, doc_id?} → hits[](片段 + 相似度)
POST /api/kb/v1/ask RAG 问答:{query, top_k?} → answer + sources[] + hits[]
GET /api/kb/v1 服务发现:端点清单 + 向量条数
调用示例
curl -s https://data.straightship.com/api/kb/v1/ask \
-H "Authorization: Bearer $KB_TOKEN" -H "Content-Type: application/json" \
-d '{"query":"电池货运有什么要求?","top_k":5}'
import requests
resp = requests.post(
"https://data.straightship.com/api/kb/v1/ask",
headers={"Authorization": "Bearer $KB_TOKEN"},
json={"query": "电池货运有什么要求?", "top_k": 5},
timeout=60,
)
resp.raise_for_status()
data = resp.json()
print(data["answer"])
for s in data["sources"]:
print(s["score"], s["heading_path"])
// Java 11+,无需第三方依赖
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class KbAskDemo {
public static void main(String[] args) throws Exception {
String body = "{\"query\":\"电池货运有什么要求?\",\"top_k\":5}";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://data.straightship.com/api/kb/v1/ask"))
.header("Authorization", "Bearer $KB_TOKEN")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> resp = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());
}
}
// Node 18+ / 浏览器均可
const resp = await fetch("https://data.straightship.com/api/kb/v1/ask", {
method: "POST",
headers: {
"Authorization": "Bearer $KB_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({ query: "电池货运有什么要求?", top_k: 5 }),
});
if (!resp.ok) throw new Error("HTTP " + resp.status);
const data = await resp.json();
console.log(data.answer);
console.log(data.sources);