diff --git a/ui/src/api/API_README.md b/ui/src/api/API_README.md index 28d89f830a8..e77b17b531c 100644 --- a/ui/src/api/API_README.md +++ b/ui/src/api/API_README.md @@ -235,6 +235,14 @@ System 不传 Workspace 文件夹条件;System 共享不提供智能体选择 共享工具 API 不提供工作空间文件夹移动或批量接口;复用卡片、Action 和表单接收完整 Workspace 与 System 共享 API 的联合类型,不补造接口以匹配 Workspace 方法集合。 +### 知识库召回测试 + +Workspace、System 资源管理和 System 共享资源均在各自 `knowledge/knowledge.ts` 中提供 +`postKnowledgeHitTest(knowledgeId, payload)`,向知识库的 `/hit_test` 提交 POST,直接返回命中分段数组。 +请求使用 `KnowledgeHitTestPayload`,包含 `query_text`、`image_list`、`top_number`、`similarity` 和 +`search_mode`;检索模式复用 `KNOWLEDGE_SEARCH_MODE`。文本和图片至少提供一项,图片仅支持向量或混合检索。 +结果使用 `KnowledgeHitTestResult`,保留分段、得分及图片命中信息。Workspace 共享暂无对应接口,不回退其他范围。 + ### System 共享知识库 `system/shared-resources/knowledge/knowledge.ts` 使用 `/system/shared/knowledge`,维护分页、详情、 diff --git a/ui/src/api/admin/system/resource-management/knowledge/knowledge.ts b/ui/src/api/admin/system/resource-management/knowledge/knowledge.ts index d3a1b9fb0f8..30125ace20d 100644 --- a/ui/src/api/admin/system/resource-management/knowledge/knowledge.ts +++ b/ui/src/api/admin/system/resource-management/knowledge/knowledge.ts @@ -1,7 +1,15 @@ import { del, get, getExportFile, post, put } from '@/api/admin/core/request' import type LogicFlow from '@logicflow/core' import type { ParamsPage, ResponsePage } from '@/api/admin/core/types' -import type { Dict, KnowledgeDetail, KnowledgeItem, KnowledgeGeneratePayload, KnowledgeSyncType } from '@/api/types' +import type { + KnowledgeHitTestPayload, + KnowledgeHitTestResult, + Dict, + KnowledgeDetail, + KnowledgeItem, + KnowledgeGeneratePayload, + KnowledgeSyncType, +} from '@/api/types' const prefix = '/system/resource/knowledge' @@ -77,7 +85,12 @@ const putKnowledgeKeywordIndex = (knowledgeId: string) => put(` const postTransformWorkflow = (knowledgeId: string, payload: { work_flow: LogicFlow.GraphConfigData }) => post<{ work_flow: LogicFlow.GraphConfigData }, boolean>(`${prefix}/${knowledgeId}/transform_workflow`, payload) +/** 测试知识库检索并返回命中的分段。 */ +const postKnowledgeHitTest = (knowledgeId: string, payload: KnowledgeHitTestPayload) => + post(`${prefix}/${knowledgeId}/hit_test`, payload) + export default { + postKnowledgeHitTest, postTransformWorkflow, putKnowledgeKeywordIndex, exportKnowledgeExcel, diff --git a/ui/src/api/admin/system/shared-resources/knowledge/knowledge.ts b/ui/src/api/admin/system/shared-resources/knowledge/knowledge.ts index 31937bccf85..a2541889ce0 100644 --- a/ui/src/api/admin/system/shared-resources/knowledge/knowledge.ts +++ b/ui/src/api/admin/system/shared-resources/knowledge/knowledge.ts @@ -3,6 +3,8 @@ import type LogicFlow from '@logicflow/core' import type { ParamsPage, ResponsePage } from '@/api/admin/core/types' import type { Dict, + KnowledgeHitTestPayload, + KnowledgeHitTestResult, KnowledgeCreatePayload, KnowledgeDetail, KnowledgeGeneratePayload, @@ -96,7 +98,12 @@ const putKnowledgeKeywordIndex = (knowledgeId: string) => put(` const postTransformWorkflow = (knowledgeId: string, payload: { work_flow: LogicFlow.GraphConfigData }) => post<{ work_flow: LogicFlow.GraphConfigData }, boolean>(`${prefix}/${knowledgeId}/transform_workflow`, payload) +/** 测试知识库检索并返回命中的分段。 */ +const postKnowledgeHitTest = (knowledgeId: string, payload: KnowledgeHitTestPayload) => + post(`${prefix}/${knowledgeId}/hit_test`, payload) + export default { + postKnowledgeHitTest, postTransformWorkflow, deleteKnowledge, exportKnowledge, diff --git a/ui/src/api/admin/workspace/knowledge/knowledge.ts b/ui/src/api/admin/workspace/knowledge/knowledge.ts index 1cf1faaab98..48f70ae5840 100644 --- a/ui/src/api/admin/workspace/knowledge/knowledge.ts +++ b/ui/src/api/admin/workspace/knowledge/knowledge.ts @@ -3,6 +3,8 @@ import type LogicFlow from '@logicflow/core' import type { ParamsPage, ResponsePage } from '../../core/types' import type { Dict, + KnowledgeHitTestPayload, + KnowledgeHitTestResult, KnowledgeDetail, KnowledgeItem, KnowledgeGeneratePayload, @@ -129,7 +131,12 @@ const putKnowledgeKeywordIndex = (knowledgeId: string) => put(` const postTransformWorkflow = (knowledgeId: string, payload: { work_flow: LogicFlow.GraphConfigData }) => post<{ work_flow: LogicFlow.GraphConfigData }, boolean>(`${getPrefix()}/${knowledgeId}/transform_workflow`, payload) +/** 测试知识库检索并返回命中的分段。 */ +const postKnowledgeHitTest = (knowledgeId: string, payload: KnowledgeHitTestPayload) => + post(`${getPrefix()}/${knowledgeId}/hit_test`, payload) + export default { + postKnowledgeHitTest, getKnowledgeMcpConfig, putKnowledgeKeywordIndex, exportKnowledgeExcel, diff --git a/ui/src/api/types/knowledge.ts b/ui/src/api/types/knowledge.ts index 5f7b0bbb0c0..21473b98a2e 100644 --- a/ui/src/api/types/knowledge.ts +++ b/ui/src/api/types/knowledge.ts @@ -1,9 +1,10 @@ /** Workspace 知识库列表和知识库卡片共用的业务类型。 */ import type LogicFlow from '@logicflow/core' -import { KNOWLEDGE_SYNC_TYPE, KNOWLEDGE_TYPE } from '@/api/enums' +import { KNOWLEDGE_SEARCH_MODE, KNOWLEDGE_SYNC_TYPE, KNOWLEDGE_TYPE } from '@/api/enums' import type { DefaultModelSettingPayload } from './model' import type { DocumentTaskState } from './document' +import type { ParagraphItem } from './paragraph' /** 生成关联问题共用的模型与提示词配置。 */ export interface RelatedQuestionsConfig { @@ -153,3 +154,51 @@ export interface KnowledgeWorkflowStoreResponse { additionalProperties: { tags: { key: string; name: string }[] } apps: import('./workflow-template').WorkflowStoreTemplate[] } + +/** 知识库召回测试的检索模式。 */ +export type KnowledgeSearchMode = (typeof KNOWLEDGE_SEARCH_MODE)[keyof typeof KNOWLEDGE_SEARCH_MODE] + +/** 召回测试使用的已上传图片。 */ +export interface KnowledgeHitTestImage { + file_id: string + name?: string + url?: string +} + +/** 召回测试的查询内容与检索参数;文本和图片至少提供一项。 */ +export interface KnowledgeHitTestPayload { + query_text?: string | null + image_list?: KnowledgeHitTestImage[] + top_number: number + similarity: number + search_mode: KnowledgeSearchMode +} + +/** 召回结果命中的图片资产。 */ +export interface KnowledgeHitTestAsset { + id: string + file_id: string + file_name: string + url: string + position: number + caption: string + ocr_text: string + description: string + hit_num: number + last_hit_time: string | null +} + +/** 召回测试返回的分段与命中得分。 */ +export interface KnowledgeHitTestResult extends ParagraphItem { + knowledge_id: string + knowledge_name: string + document_name: string + similarity: number + comprehensive_score: number + source_id: string + source_type: number + hit_unit_type: string + query_unit_type: string | null + query_unit_index: number | null + hit_asset: KnowledgeHitTestAsset | null +} diff --git a/ui/src/assets/empty/hit-test.png b/ui/src/assets/empty/hit-test.png new file mode 100644 index 00000000000..c25303859cb Binary files /dev/null and b/ui/src/assets/empty/hit-test.png differ diff --git a/ui/src/constants/CONSTANT_README.md b/ui/src/constants/CONSTANT_README.md index 2a9406a55e5..41dd156c711 100644 --- a/ui/src/constants/CONSTANT_README.md +++ b/ui/src/constants/CONSTANT_README.md @@ -23,6 +23,9 @@ API 枚举值。例如角色类型和登录方式以 `src/api/enums` 为唯一 `knowledge.ts` 的 `KNOWLEDGE_SYNC_OPTIONS` 统一维护增量同步、替换同步和整体同步的值、文案及说明, 手动同步弹窗与定时同步设置直接复用,日志同步方式标签也从这些选项读取。 +`knowledge.ts` 的 `KNOWLEDGE_SEARCH_MODE_OPTIONS` 统一维护向量、全文和混合检索的值、文案及说明, +召回测试页与工作流知识库检索节点直接复用,选项值引用 `KNOWLEDGE_SEARCH_MODE`。 + `schedule.ts` 的 `SCHEDULE_OPTION` 统一提供触发器、长期记忆与知识库定时同步的周期级联选项, 包含周期文案、执行时间和间隔数值;使用方只读,配置回填与校验仍由各自组件维护。 周期类型统一使用 `api/enums/schedule.ts` 的 `SCHEDULE_TYPE`,经 `@/api/enums` 导入。 diff --git a/ui/src/constants/knowledge.ts b/ui/src/constants/knowledge.ts index 2ca05c6a070..20252df2856 100644 --- a/ui/src/constants/knowledge.ts +++ b/ui/src/constants/knowledge.ts @@ -1,4 +1,4 @@ -import { KNOWLEDGE_TYPE, KNOWLEDGE_SYNC_TYPE } from '@/api/enums' +import { KNOWLEDGE_TYPE, KNOWLEDGE_SYNC_TYPE, KNOWLEDGE_SEARCH_MODE } from '@/api/enums' import type { KnowledgeType } from '@/api/types' /** 前端知识库类型标识。 */ @@ -31,3 +31,22 @@ export const KNOWLEDGE_SYNC_OPTIONS = [ { value: KNOWLEDGE_SYNC_TYPE.REPLACE, label: '替换同步', description: '重新获取来源文档并替换匹配的文档,保留未匹配的旧文档' }, { value: KNOWLEDGE_SYNC_TYPE.COMPLETE, label: '整体同步', description: '重新获取来源文档并重建该来源的文档,保留其他来源的文档' }, ] as const + +/** 召回测试与工作流知识库检索共用的模式选项。 */ +export const KNOWLEDGE_SEARCH_MODE_OPTIONS = [ + { + value: KNOWLEDGE_SEARCH_MODE.EMBEDDING, + label: '向量检索', + description: '向量检索是一种基于向量相似度的检索方式,适用于知识库中的大数据量场景。', + }, + { + value: KNOWLEDGE_SEARCH_MODE.KEYWORDS, + label: '全文检索', + description: '全文检索是一种基于文本相似度的检索方式,适用于知识库中的小数据量场景。', + }, + { + value: KNOWLEDGE_SEARCH_MODE.BLEND, + label: '混合检索', + description: '混合检索是一种基于向量和文本相似度的检索方式,适用于知识库中的中等数据量场景。', + }, +] as const diff --git a/ui/src/router/ROUTE_README.md b/ui/src/router/ROUTE_README.md index b8fbd510561..f944c01739c 100644 --- a/ui/src/router/ROUTE_README.md +++ b/ui/src/router/ROUTE_README.md @@ -241,10 +241,11 @@ Workspace 共享覆盖 resourceScope,保留 Workspace scope 及知识库 activ | ---------- | --------------------------------------------------------------------------------------------------------------------- | | 资料库 | 空 path 分组;document、image、tag;仅 BASE 显示图片 | | 工作流 | workflow-entry;WORKFLOW 类型 beforeEnter 重定向对应全屏画布,其他类型显示转换页 | -| 检索优化 | retrieval/recall、retrieval/question、retrieval/dictionary | +| 检索优化 | retrieval/hit-test、retrieval/question、retrieval/dictionary | | 授权与集成 | integration/chat-user、integration/external-retrieval | | 设置 | BASE 单独 setting;WEB 分组含 setting/base、document-strategy、scheduled-sync;LARK/WORKFLOW 含 base、scheduled-sync | +召回测试子路由通过 `props` 传入资源范围与知识库 ID 组成的 Vue `key`,切换资源时重建该页。 分组不挂 View,直接访问重定向首个子页,保留参数、query、hash。 设置只用 detailMenuVisible 控制菜单类型,不添加类型访问守卫。资料库 View 的目录是 library/tags,URL 仍为 tag。 diff --git a/ui/src/router/admin/system/modules/knowledge-system-resource.ts b/ui/src/router/admin/system/modules/knowledge-system-resource.ts index 84ea9b1fdf1..0fac4343403 100644 --- a/ui/src/router/admin/system/modules/knowledge-system-resource.ts +++ b/ui/src/router/admin/system/modules/knowledge-system-resource.ts @@ -55,13 +55,14 @@ export const systemResourceKnowledgeRoutes: RouteRecordRaw[] = [ { path: 'retrieval', name: 'system-resource-knowledge-retrieval', - redirect: { name: 'system-resource-knowledge-recall-test' }, + redirect: { name: 'system-resource-knowledge-hit-test' }, meta: { title: '检索优化', icon: 'icon_trace_outlined', order: 30 }, children: [ { - path: 'recall', - name: 'system-resource-knowledge-recall-test', - component: () => import('@/views/knowledge-detail/recall-test/index.vue'), + path: 'hit-test', + name: 'system-resource-knowledge-hit-test', + component: () => import('@/views/knowledge-detail/hit-test/index.vue'), + props: (route) => ({ key: `${route.meta.resourceScope}:${route.params.knowledgeId}` }), meta: { title: '召回测试', order: 10 }, }, { diff --git a/ui/src/router/admin/system/modules/knowledge-system-shared.ts b/ui/src/router/admin/system/modules/knowledge-system-shared.ts index 50e79aaa9b7..02b8714dd90 100644 --- a/ui/src/router/admin/system/modules/knowledge-system-shared.ts +++ b/ui/src/router/admin/system/modules/knowledge-system-shared.ts @@ -55,13 +55,14 @@ export const systemSharedKnowledgeRoutes: RouteRecordRaw[] = [ { path: 'retrieval', name: 'system-shared-knowledge-retrieval', - redirect: { name: 'system-shared-knowledge-recall-test' }, + redirect: { name: 'system-shared-knowledge-hit-test' }, meta: { title: '检索优化', icon: 'icon_trace_outlined', order: 30 }, children: [ { - path: 'recall', - name: 'system-shared-knowledge-recall-test', - component: () => import('@/views/knowledge-detail/recall-test/index.vue'), + path: 'hit-test', + name: 'system-shared-knowledge-hit-test', + component: () => import('@/views/knowledge-detail/hit-test/index.vue'), + props: (route) => ({ key: `${route.meta.resourceScope}:${route.params.knowledgeId}` }), meta: { title: '召回测试', order: 10 }, }, { diff --git a/ui/src/router/admin/workspace/modules/knowledge-shared.ts b/ui/src/router/admin/workspace/modules/knowledge-shared.ts index 29570a1eb8b..cd2e15aa973 100644 --- a/ui/src/router/admin/workspace/modules/knowledge-shared.ts +++ b/ui/src/router/admin/workspace/modules/knowledge-shared.ts @@ -55,13 +55,14 @@ export const sharedKnowledgeRoutes: RouteRecordRaw[] = [ { path: 'retrieval', name: 'workspace-shared-knowledge-retrieval', - redirect: { name: 'workspace-shared-knowledge-recall-test' }, + redirect: { name: 'workspace-shared-knowledge-hit-test' }, meta: { title: '检索优化', icon: 'icon_trace_outlined', order: 30 }, children: [ { - path: 'recall', - name: 'workspace-shared-knowledge-recall-test', - component: () => import('@/views/knowledge-detail/recall-test/index.vue'), + path: 'hit-test', + name: 'workspace-shared-knowledge-hit-test', + component: () => import('@/views/knowledge-detail/hit-test/index.vue'), + props: (route) => ({ key: `${route.meta.resourceScope}:${route.params.knowledgeId}` }), meta: { title: '召回测试', order: 10 }, }, { diff --git a/ui/src/router/admin/workspace/modules/knowledge.ts b/ui/src/router/admin/workspace/modules/knowledge.ts index b0e2e183535..6ef4c6f6f11 100644 --- a/ui/src/router/admin/workspace/modules/knowledge.ts +++ b/ui/src/router/admin/workspace/modules/knowledge.ts @@ -67,13 +67,14 @@ export const knowledgeRoutes: RouteRecordRaw[] = [ { path: 'retrieval', name: 'workspace-knowledge-retrieval', - redirect: { name: 'workspace-knowledge-recall-test' }, + redirect: { name: 'workspace-knowledge-hit-test' }, meta: { title: '检索优化', icon: 'icon_trace_outlined', order: 30 }, children: [ { - path: 'recall', - name: 'workspace-knowledge-recall-test', - component: () => import('@/views/knowledge-detail/recall-test/index.vue'), + path: 'hit-test', + name: 'workspace-knowledge-hit-test', + component: () => import('@/views/knowledge-detail/hit-test/index.vue'), + props: (route) => ({ key: `${route.meta.resourceScope}:${route.params.knowledgeId}` }), meta: { title: '召回测试', order: 10 }, }, { diff --git a/ui/src/views/VIEW_README.md b/ui/src/views/VIEW_README.md index 602a02bcbbc..163251ad058 100644 --- a/ui/src/views/VIEW_README.md +++ b/ui/src/views/VIEW_README.md @@ -44,7 +44,8 @@ | `knowledge-detail/` | 四范围知识库详情、菜单与上下文 | | `knowledge-detail/library/document/`、`tags/` | 文档及标签维护 | | `knowledge-detail/library/image/` | 图片列表,复用文档操作 | -| `knowledge-detail/recall-test/`、`question/` | 检索优化占位页 | +| `knowledge-detail/hit-test/` | 召回测试参数、文本/图片查询及结果展示 | +| `knowledge-detail/question/` | 问题管理占位页 | | `knowledge-detail/termbase/` | 知识库自定义分词维护 | | `knowledge-detail/chat-user/`、`external-retrieval/` | 对话授权与外部检索配置 | | `knowledge-detail/setting/base/`、`document-strategy/`、`scheduled-sync/` | 基础设置、文档策略、定时同步与日志 | @@ -105,7 +106,7 @@ `knowledge-detail/context.ts` 仅通过 `provideKnowledgeDetailContext` 和 `useKnowledgeDetailContext` 公开详情、更新能力、ID、来源导航及完整 API。 -`resourceApi.knowledge / scheduledSync / document / image / tags / termbase / chatUser / externalRetrieval` 按当前范围响应式读取,无需 `.value`, +`resourceApi.knowledge / scheduledSync / document / paragraph / image / tags / termbase / chatUser / externalRetrieval` 按当前范围响应式读取,无需 `.value`, 不要在 setup 时解构具体 API。`workflow` 当前仅普通 Workspace 提供,其他范围不回退。 共有查询方法必填,部分范围缺失的方法可选调用;未发请求时不提示成功、不关闭、不刷新或修改快照,loading 正常清理。 不增加查询/维护双入口、接口别名或专属 Context hook,也不以方法存在性新增操作显隐规则。 @@ -132,11 +133,24 @@ 复用周期及同步方式常量,支持日、周、月、间隔和 Cron,间隔至少 5 分钟;完整 Cron 由后台校验。 日志页按需挂载 `SyncLogTable`,传完整 API,仅展示定时任务,不轮询;跳过执行展示原因。 +### 召回测试 + +`hit-test/` 按截图提供参数/输入与结果两栏,复用详情标题栏。通过详情上下文选择 Workspace、 +System 资源管理或 System 共享 Knowledge API 的 `postKnowledgeHitTest`;Workspace 共享缺少对应接口时 +由上下文返回文档页,不回退其他范围。 +默认向量检索、相似度 0.600、TOP K 6;切换全文检索重置相似度为 0,其余模式为 0.6。 +文本和图片至少提供一项,空白文本不可提交;图片存在或上传中时禁选全文检索,全文模式不提供图片入口。 +图片通过 Admin File API 上传为 120 分钟临时文件,最多 10 张、每张 20MB,仅提交上传成功的文件引用; +上传中或存在失败图片时禁测试,移除失败图片后可重试。移除与卸载释放本地预览并取消未完成上传。 +测试期间冻结参数与输入;结果展示提交时的查询、分段、得分、文档名称及命中图片,Markdown 只读。 +初始、无命中与失败分别展示空态,失败保留输入供重试。切换知识库或资源范围通过路由 key 重建召回测试页,隔离查询与结果状态。 + ### 文档列表与导入 `library/document/index.vue` 管理查询、分页、选择、启停及刷新;Action 管理各自请求和浮层。 `library/image/index.vue` 使用独立列表入口,复用 `document/` 的状态、展示组件及 Action, 查询与操作沿用 Document API;图片列表的查询参数差异见 [API 文档](../api/API_README.md#文档与分段)。 +点击图片行通过 `resourceApi.paragraph.getParagraphPage` 查询首个分段,使用 `ParagraphDialog` 展示详情;弹窗按需挂载,关闭动画结束后卸载。 图片上传独立放在 `image/upload-image/`,`ButtonUploadImage` 管理入口与按需挂载, `UploadImageDrawer` 分为上传图片、图片处理两步,复用 `MkDragUpload` 的多文件图片模式暂存文件; `ImageProcessingForm` 管理视觉增强策略及模型/工具选项,不展示文档分段与索引设置。 diff --git a/ui/src/views/knowledge-detail/context.ts b/ui/src/views/knowledge-detail/context.ts index e584f7cdd79..36711cfddcc 100644 --- a/ui/src/views/knowledge-detail/context.ts +++ b/ui/src/views/knowledge-detail/context.ts @@ -13,6 +13,10 @@ import DocumentApi from '@/api/admin/workspace/knowledge/document' import SharedDocumentApi from '@/api/admin/workspace/shared/knowledge/document' import SystemResourceDocumentApi from '@/api/admin/system/resource-management/knowledge/document' import SystemSharedDocumentApi from '@/api/admin/system/shared-resources/knowledge/document' +import ParagraphApi from '@/api/admin/workspace/knowledge/paragraph' +import SharedParagraphApi from '@/api/admin/workspace/shared/knowledge/paragraph' +import SystemResourceParagraphApi from '@/api/admin/system/resource-management/knowledge/paragraph' +import SystemSharedParagraphApi from '@/api/admin/system/shared-resources/knowledge/paragraph' import TagsApi from '@/api/admin/workspace/knowledge/tags' import SharedTagsApi from '@/api/admin/workspace/shared/knowledge/tags' import SystemResourceTagsApi from '@/api/admin/system/resource-management/knowledge/tags' @@ -44,6 +48,9 @@ type OptionalApiMethods = Pick & { } interface KnowledgeResourceApi { + readonly paragraph: OptionalApiMethods< + typeof ParagraphApi | typeof SharedParagraphApi | typeof SystemResourceParagraphApi | typeof SystemSharedParagraphApi + > readonly chatUser: OptionalApiMethods< typeof ChatUserApi | typeof SharedChatUserApi | typeof SystemResourceChatUserApi | typeof SystemSharedChatUserApi > @@ -82,6 +89,7 @@ const resourceConfigs = { scheduledSync: ScheduledSyncApi, externalRetrieval: ExternalRetrievalApi, document: DocumentApi, + paragraph: ParagraphApi, image: ImageApi, tags: TagsApi, termbase: TermbaseApi, @@ -96,6 +104,7 @@ const resourceConfigs = { scheduledSync: SharedScheduledSyncApi, externalRetrieval: SharedExternalRetrievalApi, document: SharedDocumentApi, + paragraph: SharedParagraphApi, tags: SharedTagsApi, termbase: SharedTermbaseApi, }, @@ -108,6 +117,7 @@ const resourceConfigs = { scheduledSync: SystemResourceScheduledSyncApi, externalRetrieval: SystemResourceExternalRetrievalApi, document: SystemResourceDocumentApi, + paragraph: SystemResourceParagraphApi, image: SystemResourceImageApi, tags: SystemResourceTagsApi, termbase: SystemResourceTermbaseApi, @@ -121,6 +131,7 @@ const resourceConfigs = { scheduledSync: SystemSharedScheduledSyncApi, externalRetrieval: SystemSharedExternalRetrievalApi, document: SystemSharedDocumentApi, + paragraph: SystemSharedParagraphApi, tags: SystemSharedTagsApi, termbase: SystemSharedTermbaseApi, }, @@ -163,6 +174,9 @@ function createKnowledgeDetailContext(state: KnowledgeDetailState): KnowledgeDet get document() { return resourceConfig.value.resourceApi.document }, + get paragraph() { + return resourceConfig.value.resourceApi.paragraph + }, get tags() { return resourceConfig.value.resourceApi.tags }, diff --git a/ui/src/views/knowledge-detail/hit-test/components/HitTestInput.vue b/ui/src/views/knowledge-detail/hit-test/components/HitTestInput.vue new file mode 100644 index 00000000000..0d817b4cab7 --- /dev/null +++ b/ui/src/views/knowledge-detail/hit-test/components/HitTestInput.vue @@ -0,0 +1,187 @@ + + + diff --git a/ui/src/views/knowledge-detail/hit-test/components/HitTestResult.vue b/ui/src/views/knowledge-detail/hit-test/components/HitTestResult.vue new file mode 100644 index 00000000000..abf91049607 --- /dev/null +++ b/ui/src/views/knowledge-detail/hit-test/components/HitTestResult.vue @@ -0,0 +1,37 @@ + + + diff --git a/ui/src/views/knowledge-detail/hit-test/index.vue b/ui/src/views/knowledge-detail/hit-test/index.vue new file mode 100644 index 00000000000..01bf6210b9d --- /dev/null +++ b/ui/src/views/knowledge-detail/hit-test/index.vue @@ -0,0 +1,206 @@ + + + diff --git a/ui/src/views/knowledge-detail/library/document/index.vue b/ui/src/views/knowledge-detail/library/document/index.vue index 0053f0aa217..64be20271d5 100644 --- a/ui/src/views/knowledge-detail/library/document/index.vue +++ b/ui/src/views/knowledge-detail/library/document/index.vue @@ -513,11 +513,7 @@ onBeforeUnmount(() => { /> { (file.file_id ? [file.file_id] : [])) if (fileIds.length !== successfulFiles.value.length) { - MsgWarning('文件上传结果缺少文件 ID,请重新上传') + MsgWarning('没有上传成功的文件,请重新上传') return } loading.value = true diff --git a/ui/src/views/knowledge-detail/library/image/index.vue b/ui/src/views/knowledge-detail/library/image/index.vue index 9071a3dda96..65e95f05599 100644 --- a/ui/src/views/knowledge-detail/library/image/index.vue +++ b/ui/src/views/knowledge-detail/library/image/index.vue @@ -1,5 +1,5 @@ - - diff --git a/ui/src/workflow-canvas/WORKFLOW_README.md b/ui/src/workflow-canvas/WORKFLOW_README.md index 0d43dc05679..706bbcaf5d9 100644 --- a/ui/src/workflow-canvas/WORKFLOW_README.md +++ b/ui/src/workflow-canvas/WORKFLOW_README.md @@ -344,7 +344,8 @@ AI 对话、图片理解和视频理解统一复用 `component/ThinkingSetting.v 知识库检索在入口维护范围、参数摘要、问题表单和关联数据;`component/SearchSetting.vue` 封装参数按钮与弹窗,通过 `v-model` 编辑并遵循通用设置弹窗规则。范围引用加入节点表单, 问题引用保留独立有效性检查;移除关联只清理明确取消的 ID,保留当前用户不可见的知识库。 -检索模式协议复用 `KNOWLEDGE_SEARCH_MODE`。 +检索模式协议复用 `KNOWLEDGE_SEARCH_MODE`;模式选项与说明复用知识库常量 `KNOWLEDGE_SEARCH_MODE_OPTIONS`, +见 [常量文档](../constants/CONSTANT_README.md)。 文档内容提取、多路召回和文档标签检索节点使用统一的节点标题、`mk-gray-card`、表单必填标记与 `MkIcon`。多路召回的参数设置按钮与弹窗封装在节点 `component/SearchSetting.vue`,通过 diff --git a/ui/src/workflow-canvas/nodes/search-knowledge-node/component/SearchSetting.vue b/ui/src/workflow-canvas/nodes/search-knowledge-node/component/SearchSetting.vue index 29362cfedd1..6d51096be3e 100644 --- a/ui/src/workflow-canvas/nodes/search-knowledge-node/component/SearchSetting.vue +++ b/ui/src/workflow-canvas/nodes/search-knowledge-node/component/SearchSetting.vue @@ -3,7 +3,8 @@ import { ref, useTemplateRef } from 'vue' import { cloneDeep } from 'lodash' import type { FormInstance } from 'element-plus' import { KNOWLEDGE_SEARCH_MODE } from '@/api/enums' -import { defaultSearchSetting, searchModeOptions } from '../constant' +import { defaultSearchSetting } from '../constant' +import { KNOWLEDGE_SEARCH_MODE_OPTIONS } from '@/constants/knowledge' import type { KnowledgeSearchSetting } from '../types' defineOptions({ name: 'SearchKnowledgeSetting' }) @@ -42,7 +43,7 @@ function resetData() { -