Skip to main content

Dify 检索与数据库查询

本页补充第三方知识检索适配与已接入数据库表的查询接口。请求统一使用 JSON,并按 API 鉴权 在服务端配置平台 API Key。

Dify 外部知识库检索

方法与路径行为
POST /openapi/paas/dify/v1/retrieval知识分片检索,平台密钥模块 knowledge_search=READ
POST /openapi/paas/dify/v2/retrieval先进行知识地图检索限定文档,再检索分片;需部署方启用并准备相应知识地图能力

不要根据日志中的历史简称省略路径的 paas。V2 依赖知识地图数据,接入前应确认目标环境的功能和授权配置。

请求字段类型必填说明
knowledge_idstring知识库 code,必填
querystring非空查询文本
retrieval_settingobject可选检索设置
retrieval_setting.top_kinteger默认 5,使用正整数
retrieval_setting.score_thresholdnumber默认 0.5,相关性阈值
{
"knowledge_id": "partner_kb_001",
"query": "产品部署要求",
"retrieval_setting": {
"top_k": 5,
"score_threshold": 0.5
}
}

请求模型保留 metadata_condition,但当前检索实现未应用该字段。需要元数据过滤时,使用 知识检索 的 metadataFilter。

请求示例

curl --request POST "${BASE_URL}/openapi/paas/dify/v1/retrieval" \
--header "Authorization: Bearer ${AIS_API_KEY}" \
--header "Content-Type: application/json" \
--data '{"knowledge_id":"partner_kb_001","query":"产品部署要求","retrieval_setting":{"top_k":5,"score_threshold":0.5}}'

调用 V2 时仅将路径中的 v1 改为 v2,字段与响应结构相同;V2 没有知识地图候选文档时可直接返回空 records。请使用在当前环境已具备地图数据的知识库联调。

响应字段

字段JSON 类型说明
recordsarray[object]命中片段列表,无命中可为空
records[].titlestring来源标题/文件名
records[].contentstring命中片段文本
records[].scorenumber相关分数,依检索模型计算,不是置信度百分比
records[].metadataobject引用元数据,字段随来源变化,允许空对象

响应示例

成功直接返回 records,无 Result 包装:

{
"records": [
{
"title": "产品白皮书.pdf",
"content": "产品部署要求说明。",
"score": 0.91,
"metadata": {}
}
]
}

metadata 为引用元数据,字段随知识来源变化。无命中可返回空 records;模型未配置或嵌入调用失败也可能返回空 records,因此持续空结果需同时排查模型与索引配置。

已接入数据库表的 SQL 查询

POST /openapi/paas/v1/knowledge/sql/execute

平台密钥要求 knowledge_sql_execute=READ。只支持 SELECT 查询,目标表必须已经在当前租户接入。

字段类型说明
itemsarray[object]查询项列表,调用时提供非空列表
items[].tableCodestring已接入数据库表的业务编码
items[].sqlsarray[string]SELECT 语句列表
{
"items": [
{
"tableCode": "REPLACE_WITH_TABLE_CODE",
"sqls": ["SELECT product_name FROM product_catalog LIMIT 10"]
}
]
}

示例 SQL 必须替换为实际数据源的表名、字段和方言。成功返回 Result<string>,data 是查询结果拼接的文本,不是结构化行数组。空结果也可能来自底层查询失败,应结合实际数据源检查。

该接口没有提供任意外部数据库连接参数;连接与表定义由 AIS 中已配置的数据源决定。

请求示例

curl --request POST "${BASE_URL}/openapi/paas/v1/knowledge/sql/execute" \
--header "Authorization: Bearer ${AIS_API_KEY}" \
--header "Content-Type: application/json" \
--data '{"items":[{"tableCode":"REPLACE_WITH_TABLE_CODE","sqls":["SELECT product_name FROM product_catalog LIMIT 10"]}]}'

响应字段

字段JSON 类型说明
codeinteger8200 表示外层请求正常返回
messagestring提示信息
datastring各查询结果拼接的文本;不是行数组、JSON 对象或总行数

无可用结果时的响应结构示例:

{
"code": 8200,
"message": "SUCCESS",
"data": ""
}

有数据时 data 包含查询结果文本;其排版不作为机器读取结构契约,不建议依赖固定分隔符解析业务行。底层查询失败也可能产生空文本,持续空结果时核对数据源连接、tableCode、SQL 方言与查询日志。

安全与失败处理

对接服务端应使用已审核的只读 SQL,限定查询范围和行数,不把客户端任意输入直接拼接到 SQL。接口不支持通过请求临时指定数据库连接,也不应尝试写入语句。普通业务错误见 错误编码;Dify 的空列表与 SQL 的空字符串分别按各自语义处理。