拓尔思(TRS)AI知识库问答需对接私有服务而非公开大模型API,PHP须用curl手动构造HTTP请求,关键参数包括正确endpoint、token、Content-Type及超时设置,返回结果含snippet等结构化字段而非纯文本答案。

拓尔思(TRS)AI 的知识库问答能力,不是通过公开标准 API 直接调用的“大模型接口”,而是依赖其私有部署的 TRS AI Search 或 TRS Knowledge Engine 服务,需走企业级对接流程。PHP 本身不提供原生 SDK,必须手动构造 HTTP 请求与后端服务通信。
确认你对接的是 TRS 哪个具体服务模块
“AI_传检索词调知识库模型得答案”这个描述,实际对应两个常见部署形态:
-
TRS AI Search(推荐):基于语义检索 + RAG 架构,输入检索词,返回结构化答案片段 + 来源文档锚点;需调用/api/v1/search或类似路径,必须携带X-Auth-Token或Authorization: Bearer xxx -
TRS Knowledge Engine + 自定义 LLM Adapter:更重模型层,可能暴露/v1/chat/completions类似 OpenAI 的接口,但 endpoint、参数名(如query而非messages)、鉴权方式均由客户侧配置决定
⚠️ 没有 TRS 客户经理提供的 API 地址、AppKey/AppSecret 或 Token 有效期策略,PHP 代码写得再全也 401。
PHP 发起 POST 请求传检索词的核心写法
假设你已拿到合法 endpoint(例如 https://ai-search.example.com/api/v1/search)和 token(例如 abc123def456),PHP 最简可靠调用方式是 curl,避免用 file_get_contents(不支持自定义 header)。
立即学习“PHP免费学习笔记(深入)”;
关键点:
- Content-Type 必须为
application/json - 检索词字段名不是固定的
q或query,要按 TRS 提供的接口文档填,常见是keyword或search_text - 务必设置超时(
CURLOPT_TIMEOUT≥ 15),知识库检索可能涉及向量相似度计算,响应慢于普通 API - 检查
curl_error($ch)和 HTTP 状态码,TRS 返回 500 不代表 PHP 错,很可能是知识库索引未加载或字段映射异常
$keyword, // ⚠️ 注意:此处字段名以 TRS 文档为准
'top_k' => 3,
'with_snippet' => true
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $token
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
die("cURL error: " . $error);
}
if ($httpCode !== 200) {
die("API error: HTTP {$httpCode}, body: " . $response);
}
$data = json_decode($response, true);
print_r($data);
?>
处理 TRS 返回结果时容易忽略的细节
TRS 知识库接口返回的不是纯文本答案,而是带元数据的结构体。直接 echo $data['answer'] 很可能为空——因为它的答案通常藏在:
-
$data['results'][0]['snippet']:高亮摘要(含 标签) -
$data['results'][0]['doc_id']或$data['results'][0]['source_url']:原始文档定位信息 -
$data['debug']['retrieval_time_ms']:调试用,若 > 3000ms,说明向量库未建好或检索词太泛
另外:snippet 中的 HTML 标签(如 )默认不会被浏览器渲染——PHP 输出前需确保 header('Content-Type: text/html; charset=utf-8'); 已设置,否则看到的是裸标签字符。
真正卡住的往往不是 PHP 语法,而是 TRS 侧的知识库是否完成清洗、向量化、权限配置(比如某类文档对 PHP 所用账号不可见),这些在接口返回里常表现为 "results": [] 却不报错。建议先用 curl -H "Authorization: Bearer xxx" https://.../api/v1/health 确认服务存活,再用 Postman 模拟相同请求体看原始响应。











