更新知识库设置
更改知识库的嵌入模型或检索设置。在内容索引前后如何设置模型,详见 更换模型或检索设置。
具体行为取决于模型是否已经生效:
- 第一个文档完成索引前,设置会保存为待生效状态,调用返回
200。这些设置会在第一个文档索引时校验并生效。省略embedding或retrieval时,该组设置保持其待生效的值。 - 模型生效后,调用返回
202,更改以迁移的方式进行。用migration.id轮询 获取设置迁移,直到迁移结束,再读取最终设置。无需迁移的更改(例如重新发送当前生效的嵌入模型)返回200。
更换嵌入模型会重新嵌入所有文档。检索设置的更改,包括更换推理模型,都无需重建即可生效:已索引的文档仍保留原模型构建的内容,直到你用 重新索引文档 重新索引为止。
规则:
- 至少发送
embedding或retrieval之一。模型生效后,每次调用只能发送其中一个。 retrieval需要已启用的重排序模型:同时发送rerank.enabled: true和rerank.model。retrieval需要嵌入模型,可在同一次调用中发送,也可以是之前已保存的。否则调用返回409。scoreThreshold.enabled: true时必须提供scoreThreshold.value。
1 min read
patch/knowledge-fs/spaces/{knowledge_base_id}/settings
Request example
curl --request PATCH \
--url https://api.dify.ai/v1/knowledge-fs/spaces/{knowledge_base_id}/settings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"embedding": {
"model": "text-embedding-3-small",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"expectedRevision": 7,
"retrieval": {
"defaultMode": "fast",
"reasoningModel": {
"model": "gpt-4.1-mini",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"rerank": {
"enabled": true,
"model": {
"model": "rerank-v3.5",
"pluginId": "langgenius/cohere",
"provider": "cohere"
}
},
"scoreThreshold": {
"enabled": true,
"stage": "mode-final",
"value": 0.4
},
"topK": 10
}
}'import requests
url = "https://api.dify.ai/v1/knowledge-fs/spaces/{knowledge_base_id}/settings"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
}
payload = {
"embedding": {
"model": "text-embedding-3-small",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"expectedRevision": 7,
"retrieval": {
"defaultMode": "fast",
"reasoningModel": {
"model": "gpt-4.1-mini",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"rerank": {
"enabled": True,
"model": {
"model": "rerank-v3.5",
"pluginId": "langgenius/cohere",
"provider": "cohere"
}
},
"scoreThreshold": {
"enabled": True,
"stage": "mode-final",
"value": 0.4
},
"topK": 10
}
}
response = requests.request("PATCH", url, headers=headers, json=payload)
print(response.text)const response = await fetch('https://api.dify.ai/v1/knowledge-fs/spaces/{knowledge_base_id}/settings', {
method: 'PATCH',
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"embedding": {
"model": "text-embedding-3-small",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"expectedRevision": 7,
"retrieval": {
"defaultMode": "fast",
"reasoningModel": {
"model": "gpt-4.1-mini",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"rerank": {
"enabled": true,
"model": {
"model": "rerank-v3.5",
"pluginId": "langgenius/cohere",
"provider": "cohere"
}
},
"scoreThreshold": {
"enabled": true,
"stage": "mode-final",
"value": 0.4
},
"topK": 10
}
})
});
const data = await response.json();
console.log(data);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.dify.ai/v1/knowledge-fs/spaces/{knowledge_base_id}/settings',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_POSTFIELDS => '{
"embedding": {
"model": "text-embedding-3-small",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"expectedRevision": 7,
"retrieval": {
"defaultMode": "fast",
"reasoningModel": {
"model": "gpt-4.1-mini",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"rerank": {
"enabled": true,
"model": {
"model": "rerank-v3.5",
"pluginId": "langgenius/cohere",
"provider": "cohere"
}
},
"scoreThreshold": {
"enabled": true,
"stage": "mode-final",
"value": 0.4
},
"topK": 10
}
}',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer <token>',
'Content-Type: application/json',
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
url := "https://api.dify.ai/v1/knowledge-fs/spaces/{knowledge_base_id}/settings"
payload := strings.NewReader("{\n \"embedding\": {\n \"model\": \"text-embedding-3-small\",\n \"pluginId\": \"langgenius/openai\",\n \"provider\": \"openai\"\n },\n \"expectedRevision\": 7,\n \"retrieval\": {\n \"defaultMode\": \"fast\",\n \"reasoningModel\": {\n \"model\": \"gpt-4.1-mini\",\n \"pluginId\": \"langgenius/openai\",\n \"provider\": \"openai\"\n },\n \"rerank\": {\n \"enabled\": true,\n \"model\": {\n \"model\": \"rerank-v3.5\",\n \"pluginId\": \"langgenius/cohere\",\n \"provider\": \"cohere\"\n }\n },\n \"scoreThreshold\": {\n \"enabled\": true,\n \"stage\": \"mode-final\",\n \"value\": 0.4\n },\n \"topK\": 10\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.dify.ai/v1/knowledge-fs/spaces/{knowledge_base_id}/settings"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString("{\n \"embedding\": {\n \"model\": \"text-embedding-3-small\",\n \"pluginId\": \"langgenius/openai\",\n \"provider\": \"openai\"\n },\n \"expectedRevision\": 7,\n \"retrieval\": {\n \"defaultMode\": \"fast\",\n \"reasoningModel\": {\n \"model\": \"gpt-4.1-mini\",\n \"pluginId\": \"langgenius/openai\",\n \"provider\": \"openai\"\n },\n \"rerank\": {\n \"enabled\": true,\n \"model\": {\n \"model\": \"rerank-v3.5\",\n \"pluginId\": \"langgenius/cohere\",\n \"provider\": \"cohere\"\n }\n },\n \"scoreThreshold\": {\n \"enabled\": true,\n \"stage\": \"mode-final\",\n \"value\": 0.4\n },\n \"topK\": 10\n }\n}"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());require 'uri'
require 'net/http'
url = URI('https://api.dify.ai/v1/knowledge-fs/spaces/{knowledge_base_id}/settings')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = url.scheme == 'https'
request = Net::HTTP::Patch.new(url)
request['Authorization'] = 'Bearer <token>'
request['Content-Type'] = 'application/json'
request.body = '{
"embedding": {
"model": "text-embedding-3-small",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"expectedRevision": 7,
"retrieval": {
"defaultMode": "fast",
"reasoningModel": {
"model": "gpt-4.1-mini",
"pluginId": "langgenius/openai",
"provider": "openai"
},
"rerank": {
"enabled": true,
"model": {
"model": "rerank-v3.5",
"pluginId": "langgenius/cohere",
"provider": "cohere"
}
},
"scoreThreshold": {
"enabled": true,
"stage": "mode-final",
"value": 0.4
},
"topK": 10
}
}'
response = http.request(request)
puts response.read_bodyResponse
{
"migration": null,
"settings": {
"active_profile_available": false,
"active_profile_revisions": {
"embedding": null,
"retrieval": null
},
"capabilities": {
"deep": false,
"index": false,
"ingest": true,
"query": false,
"research": false,
"source_sync": true
},
"configuration_state": "active",
"embedding": {
"dimension": null,
"model": "text-embedding-3-small",
"plugin_id": "langgenius/openai",
"provider": "openai",
"revision": null,
"vector_space_id": null
},
"issues": [],
"retrieval": {
"default_mode": "fast",
"reasoning_model": {
"dimension": null,
"model": "gpt-4.1-mini",
"plugin_id": "langgenius/openai",
"provider": "openai",
"revision": null,
"vector_space_id": null
},
"rerank": {
"enabled": true,
"model": {
"model": "rerank-v3.5",
"pluginId": "langgenius/cohere",
"provider": "cohere"
}
},
"revision": null,
"score_threshold": {
"enabled": true,
"stage": "mode-final",
"value": 0.4
},
"top_k": 10
},
"revision": 8
}
}{
"migration": {
"candidate_publication_fingerprint": null,
"changed_kind": "embedding",
"checkpoint": "queued",
"completed_at": null,
"created_at": "2026-09-08T03:10:00Z",
"error_code": null,
"evaluation_summary": null,
"id": "a7c3e9f1-2b4d-4c6e-8f0a-1b3d5f7a9c2e",
"knowledge_space_id": "0a9d3c2e-5b6f-4e1a-8c7d-2f3e4a5b6c7d",
"rebuild_scope": "full-vector-space",
"run_state": "queued",
"updated_at": "2026-09-08T03:10:00Z"
},
"settings": {
"active_profile_available": true,
"active_profile_revisions": {
"embedding": 2,
"retrieval": 3
},
"capabilities": {
"deep": true,
"index": true,
"ingest": true,
"query": true,
"research": true,
"source_sync": true
},
"configuration_state": "active",
"embedding": {
"dimension": 1536,
"model": "text-embedding-3-small",
"plugin_id": "langgenius/openai",
"provider": "openai",
"revision": 2,
"vector_space_id": "embedding-space-sha256:4f7c2d9a1b3e5f60718293a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4"
},
"issues": [],
"retrieval": {
"default_mode": "fast",
"reasoning_model": {
"dimension": null,
"model": "gpt-4.1-mini",
"plugin_id": "langgenius/openai",
"provider": "openai",
"revision": null,
"vector_space_id": null
},
"rerank": {
"enabled": true,
"model": {
"model": "rerank-v3.5",
"pluginId": "langgenius/cohere",
"provider": "cohere"
}
},
"revision": 3,
"score_threshold": {
"enabled": false,
"stage": "mode-final",
"value": null
},
"top_k": 10
},
"revision": 7
}
}{
"code": "knowledge_fs_invalid_request",
"message": "Agent Knowledge Base request is invalid.",
"status": 400,
"violations": [
{
"field": [
"expectedRevision"
],
"type": "missing"
}
]
}{
"code": "knowledge_fs_invalid_request",
"failure": {
"category": "validation",
"code": "KNOWLEDGE_FS_INVALID_REQUEST",
"message": "The Agent Knowledge Base request is invalid.",
"retryPolicy": "never",
"traceId": "9b7d3e1a-4c2f-4a8e-b6d0-5f1e2c3d4a5b"
},
"message": "The Agent Knowledge Base request is invalid.",
"status": 400
}{
"code": "knowledge_fs_invalid_credential",
"message": "Invalid Agent Knowledge Base service credential.",
"status": 401
}{
"code": "unauthorized",
"message": "Authorization header must be provided and start with 'Bearer'",
"status": 401
}{
"code": "unauthorized",
"message": "Access token is invalid",
"status": 401
}{
"code": "forbidden",
"message": "Sorry, you have reached the knowledge base request rate limit of your subscription.",
"status": 403
}{
"code": "knowledge_fs_access_denied",
"message": "Agent Knowledge Base operation is not allowed.",
"status": 403
}{
"code": "knowledge_fs_resource_not_found",
"failure": {
"category": "not_found",
"code": "KNOWLEDGE_FS_NOT_FOUND",
"message": "The requested Agent Knowledge Base resource was not found.",
"retryPolicy": "never",
"traceId": "9b7d3e1a-4c2f-4a8e-b6d0-5f1e2c3d4a5b"
},
"message": "The requested Agent Knowledge Base resource was not found.",
"status": 404
}{
"code": "not_found",
"message": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.",
"status": 404
}{
"code": "knowledge_fs_conflict",
"failure": {
"action": "retry",
"category": "conflict",
"code": "KNOWLEDGE_FS_CONFLICT",
"message": "The Agent Knowledge Base operation conflicts with the current resource state.",
"retryPolicy": "manual",
"traceId": "9b7d3e1a-4c2f-4a8e-b6d0-5f1e2c3d4a5b"
},
"message": "The Agent Knowledge Base operation conflicts with the current resource state.",
"status": 409
}{
"code": "knowledge_fs_conflict",
"failure": {
"action": "retry",
"category": "conflict",
"code": "KNOWLEDGE_SPACE_SETTINGS_REVISION_CONFLICT",
"message": "Knowledge space settings have changed. Reload the latest settings and review your changes before saving again.",
"retryPolicy": "manual",
"traceId": "5e2a9c17-3b4d-4f60-8a1b-2c3d4e5f6a7b"
},
"message": "Knowledge space settings have changed. Reload the latest settings and review your changes before saving again.",
"status": 409
}{
"code": "knowledge_fs_request_rejected",
"message": "Agent Knowledge Base request was rejected.",
"status": 422
}{
"code": "knowledge_fs_upstream_unavailable",
"message": "Agent Knowledge Base is unavailable.",
"status": 502
}{
"code": "knowledge_fs_upstream_unavailable",
"failure": {
"action": "contact_admin",
"category": "internal",
"code": "KNOWLEDGE_FS_INTERNAL_ERROR",
"message": "Agent Knowledge Base could not complete the operation. Try again, or contact an administrator with the error reference.",
"retryPolicy": "manual",
"traceId": "9b7d3e1a-4c2f-4a8e-b6d0-5f1e2c3d4a5b"
},
"message": "Agent Knowledge Base could not complete the operation. Try again, or contact an administrator with the error reference.",
"status": 502
}{
"code": "knowledge_fs_operation_unavailable",
"message": "Agent Knowledge Base operation is not available.",
"status": 503
}{
"code": "knowledge_fs_operation_unavailable",
"failure": {
"action": "retry",
"category": "dependency",
"code": "KNOWLEDGE_FS_UNAVAILABLE",
"message": "A service required by Agent Knowledge Base is temporarily unavailable.",
"retryPolicy": "manual",
"traceId": "5e2a9c17-3b4d-4f60-8a1b-2c3d4e5f6a7b"
},
"message": "A service required by Agent Knowledge Base is temporarily unavailable.",
"status": 503
}patch/knowledge-fs/spaces/{knowledge_base_id}/settings
Authorization
Path parameters
知识库 ID:即知识库 API 访问 对话框中所示服务 API 端点的最后一段(
…/knowledge-fs/spaces/<knowledge base ID>),也是地址栏中 /datasets/new/ 之后的那一段。Body
application/jsonResponses
application/json
未启动迁移:设置已保存为待生效状态,或模型已生效且此更改无需迁移。
settings 的结构与 获取知识库设置 相同,下次更新时发送其中的 revision。设置处于待生效状态期间,active_profile_available 保持为 false,capabilities.query 也保持为 false。此处始终为
null:未启动迁移。Show child attributesHide child attributes
嵌入模型和检索设置均已生效时为
true,首个文档完成索引后即会如此。已生效模型的修订版本。首个文档完成索引前均为
null。配置生效后,通过 更新知识库设置 进行的更改会作为设置迁移执行。已发布设置的就绪情况。其中三个标志对应检索深度,query 对应 fast。
要检查某一深度是否就绪,显式传入该深度作为 mode,并查看对应的标志。查询未指定 mode 时,不要根据待生效的 retrieval.default_mode 判断其深度。
已存储嵌入模型和完整的检索设置(含已启用的重排序模型)时为
active,缺少任一项时为 setup-required,首个文档索引期间待生效设置未通过校验时为 validation-failed。issues 列出未通过的设置项。嵌入模型。若已存储待生效的选择,返回该选择,否则返回已生效的模型。待生效的选择可能与当前查询所用的模型不同。未设置时为 null。
其中的 dimension、revision 和 vector_space_id 仅供参考,没有任何操作接收这些值。
导致知识库未就绪的问题。没有问题时为空。
Show child attributesHide child attributes
该设置项的问题:
missing:未选择,或未启用重排序。validation_failed、unavailable或incompatible:待生效设置未通过校验。遇到incompatible时,检查模型支持的任务、嵌入维度,以及供应商是否返回了所选模型。binding_missing:已发布的内容尚未准备好使用所配置的模型。可在 Dify 中查看索引进度。publication项为unavailable:已发布的内容尚未对所有深度就绪。
涉及的设置项:
embedding、reasoning、rerank 或 publication(已发布的内容)。是否无需更改设置,只需等待并重试即可解决该问题。
检索设置。若已存储待生效的选择,返回该选择,否则返回已生效的设置。待生效的选择可能与当前查询所用的设置不同。未设置时为
null。Show child attributesHide child attributes
返回的检索设置中的默认深度:
fast、deep 或 research。查询未指定 mode 时使用已发布的默认值;如果返回的是待生效设置,该默认值可能与此值不同。系统推理模型。其
dimension、revision 和 vector_space_id 始终为 null。重排序模型。其
model 对象使用 camelCase 键 pluginId,与此响应的其余部分不同。已生效检索设置的修订版本。设置待生效期间为
null。分数阈值,用于舍弃得分较低的分段。
每次检索最多返回的分段数。
此更改启动的迁移。通过 获取设置迁移 跟踪。
Show child attributesHide child attributes
内部字段,跟踪迁移时无需使用。
本次更改涉及的部分:
embedding 或 retrieval。已到达的最后一步:
queued、candidate-built、evaluated 或 activated。要判断迁移何时结束,读取 run_state。迁移结束(
succeeded、failed 或 canceled)的时间,ISO 8601 格式。运行期间为 null。迁移开始时间,ISO 8601 格式。
最近一次失败的错误码,例如
PROFILE_MIGRATION_ATTEMPTS_EXHAUSTED 或 VECTOR_SPACE_QUOTA_EXCEEDED。没有失败时为 null。为该迁移记录的结果(扁平键值映射)。跟踪迁移时不需要此字段。未记录时为
null。知识库的内部 ID,并非路径中的知识库 ID。
迁移重建的内容:
full-vector-space:更换嵌入模型,重新嵌入所有文档。clone-publication:更改任何检索设置,都复用当前索引。full-page-index-summary-outline:已弃用。较早的迁移可能仍返回此值;更换推理模型时返回的是clone-publication。
迁移进度:
queued、running:进行中。succeeded:新设置已生效。failed:已停止,原因见error_code。再次尝试更改前,先通过 获取知识库设置 检查模型。canceled:此迁移尚未完成时,同类的新更改取代了它。改为跟踪新的迁移。
迁移最后变更时间,ISO 8601 格式。
Show child attributesHide child attributes
嵌入模型和检索设置均已生效时为
true,首个文档完成索引后即会如此。已生效模型的修订版本。首个文档完成索引前均为
null。配置生效后,通过 更新知识库设置 进行的更改会作为设置迁移执行。已发布设置的就绪情况。其中三个标志对应检索深度,query 对应 fast。
要检查某一深度是否就绪,显式传入该深度作为 mode,并查看对应的标志。查询未指定 mode 时,不要根据待生效的 retrieval.default_mode 判断其深度。
已存储嵌入模型和完整的检索设置(含已启用的重排序模型)时为
active,缺少任一项时为 setup-required,首个文档索引期间待生效设置未通过校验时为 validation-failed。issues 列出未通过的设置项。嵌入模型。若已存储待生效的选择,返回该选择,否则返回已生效的模型。待生效的选择可能与当前查询所用的模型不同。未设置时为 null。
其中的 dimension、revision 和 vector_space_id 仅供参考,没有任何操作接收这些值。
导致知识库未就绪的问题。没有问题时为空。
Show child attributesHide child attributes
该设置项的问题:
missing:未选择,或未启用重排序。validation_failed、unavailable或incompatible:待生效设置未通过校验。遇到incompatible时,检查模型支持的任务、嵌入维度,以及供应商是否返回了所选模型。binding_missing:已发布的内容尚未准备好使用所配置的模型。可在 Dify 中查看索引进度。publication项为unavailable:已发布的内容尚未对所有深度就绪。
涉及的设置项:
embedding、reasoning、rerank 或 publication(已发布的内容)。是否无需更改设置,只需等待并重试即可解决该问题。
检索设置。若已存储待生效的选择,返回该选择,否则返回已生效的设置。待生效的选择可能与当前查询所用的设置不同。未设置时为
null。Show child attributesHide child attributes
返回的检索设置中的默认深度:
fast、deep 或 research。查询未指定 mode 时使用已发布的默认值;如果返回的是待生效设置,该默认值可能与此值不同。系统推理模型。其
dimension、revision 和 vector_space_id 始终为 null。重排序模型。其
model 对象使用 camelCase 键 pluginId,与此响应的其余部分不同。已生效检索设置的修订版本。设置待生效期间为
null。分数阈值,用于舍弃得分较低的分段。
每次检索最多返回的分段数。