fix: 修复 refs 在部分场景下显示错误的问题
This commit is contained in:
parent
e5553f1bfc
commit
d19264bf77
@ -59,7 +59,7 @@
|
||||
- 重构知识库共享权限:`share_config` 改为全局共享、部门共享、指定人可访问三档,部门共享必须包含当前用户部门,指定人可访问必须包含当前用户,并补充权限过滤测试。
|
||||
- 移除知识库沙盒文件系统映射:不再通过 `/home/gem/kbs` 暴露知识库文件树,Agent 继续使用 `query_kb` 与 `open_kb_document` 访问知识库内容。
|
||||
- 规范 Agent 知识库 Search/Find/Open 工具协议:`resource_id` 统一表示知识库 `kb_id`,Search 返回结构化 `resource_id/file_id/chunk` 结果,新增 `find_kb_document` 在已知文件内做关键词或正则定位,Open 默认窗口扩大到 1800 行。
|
||||
- 收敛知识库分块配置:分块预设仅表达策略选择,通用分块参数统一通过 `chunk_parser_config` 传递;移除 `chunk_size`、`chunk_overlap`、`qa_separator` 等旧 root 字段兼容。
|
||||
- 收敛知识库分块配置:分块预设仅表达策略选择,通用分块参数统一通过 `chunk_parser_config` 传递;移除 `chunk_size`、`chunk_overlap`、`qa_separator` 等旧 root 字段兼容;Book 分块补充输出 token 上限保护,避免层级合并后生成超长 chunk 导致 embedding 400;General 分块硬切支持显式 hard limit,默认 512 token 目标下允许到 768 再切分并合并短尾巴。
|
||||
- 收敛知识库文件解析参数:文件级 `processing_params` 统一保存 `ocr_engine` 与 `ocr_engine_config`,解析阶段直接使用该结构并保留分块参数快照。
|
||||
- 修复知识库文件大小显示为 0 的问题:文件上传时 `file_sizes` 参数未正确传播或历史数据缺失导致 DB 中 `file_size` 为 `None`;新增 `MinIOClient.stat_file/astat_file` 获取文件大小方法,`add_file_record` 在 `size` 缺失时从 MinIO 回补,`_load_metadata` 加载元数据后自动为缺少 `size` 的文件从 MinIO 补全并持久化。
|
||||
- 优化评估基准自动生成:生成任务支持配置队列并发数,默认 10,范围 1-20。
|
||||
@ -67,7 +67,7 @@
|
||||
- 扩展知识库上传来源:添加“从工作区上传”模式,后端将当前用户工作区文件预处理上传到 MinIO,前端沿用现有 `addDocuments` 入库链路提交 MinIO URL、内容哈希和文件大小。
|
||||
- 重构知识库详情页布局:`DatabaseInfo` 改为顶部详情 header + 左侧功能 tab 侧边栏 + 右侧内容区,Milvus 默认进入文件管理,并将检索测试、知识图谱、知识导图、检索配置、RAG 评估和评估基准统一纳入侧边栏导航;只读连接器保留检索测试与检索配置。
|
||||
- 整合知识导图接口:移除独立 mindmap router 与前端 API 模块,思维导图生成、查询和文件列表接口统一收敛到知识库 API 下。
|
||||
- 收敛独立模型配置模块运行时:运行时 chat / embedding / rerank 均统一从 provider 模块与模型缓存读取 `provider_id:model_id`;旧版静态模型配置、v1 slash spec、旧模型列表接口和 Ollama 适配已移除;内置 provider 模板补充 XiaomiMiMo、XiaomiMiMo Token Plan CN 与 Kimi Code(`kimi-for-coding`)。
|
||||
- 收敛独立模型配置模块运行时:运行时 chat / embedding / rerank 均统一从 provider 模块与模型缓存读取 `provider_id:model_id`;旧版静态模型配置、v1 slash spec、旧模型列表接口和 Ollama 适配已移除;内置 provider 模板补充 XiaomiMiMo、XiaomiMiMo Token Plan CN 与 Kimi Code(`kimi-for-coding`);Embedding 请求对 429 限流执行最多 10 次退避重试,对 5xx/网络临时错误执行短重试。
|
||||
- 调整智能体配置归属与字段权限:`AgentConfig` 从部门共享改为按 `uid` 隔离,所有登录用户可管理自己的配置;`BaseContext` 支持字段级 `auth` 元数据,后端按用户角色过滤可见与可保存的配置项。
|
||||
- 新增用户级沙盒环境变量:增加 `agent_envs` 表与 `/api/user/agent-env` 接口,设置面板支持当前用户维护 Agent 沙盒环境变量;创建新沙盒时与全局 `sandbox.env` 合并注入,用户变量优先。
|
||||
- 收敛用户身份命名:原业务登录标识统一改为 `uid`,Agent/LangGraph runtime、conversation、agent_run、sandbox 路径和前端用户态均使用字符串 `uid`;`user_id` 仅保留给外部响应中的数值 `users.id` 或真实外键场景。
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
v-if="displayItem.type === 'message'"
|
||||
:message="displayItem.message"
|
||||
:is-processing="isDisplayMessageProcessing(row.conv, displayItem)"
|
||||
:show-refs="showMsgRefs(displayItem.message)"
|
||||
:show-refs="showMsgRefs(displayItem.message, row.conv)"
|
||||
:hide-tool-calls="true"
|
||||
:mention="mentionConfig"
|
||||
@retry="retryMessage(displayItem.message)"
|
||||
@ -972,20 +972,28 @@ const shouldSuppressRefsForApproval = () =>
|
||||
isProcessing.value
|
||||
)
|
||||
|
||||
// 判断某轮对话是否已「收尾」,即可以展示 refs(来源/操作栏):
|
||||
// - 后面紧跟的下一轮以 human message 开头(即用户开启了新一轮)→ 已收尾;
|
||||
// - 它是最后一轮,且当前没有正在生成回复 → 已收尾。
|
||||
// 反之(后面跟的是没有 human message 的 AI 续写,如 resume 续写;或仍在生成中)→ 未收尾,不展示。
|
||||
const isConversationSettled = (conv) => {
|
||||
const convs = conversations.value
|
||||
const idx = convs.indexOf(conv)
|
||||
if (idx === -1) return false
|
||||
const next = convs[idx + 1]
|
||||
if (next) {
|
||||
return next.messages?.[0]?.type === 'human'
|
||||
}
|
||||
return !(isProcessing.value || isReplyLoading.value)
|
||||
}
|
||||
|
||||
// 计算是否显示Refs组件的条件
|
||||
const shouldShowRefs = computed(() => {
|
||||
const convs = conversations.value
|
||||
const lastConv = convs.length ? convs[convs.length - 1] : null
|
||||
return (conv) => {
|
||||
if (!getLastMessage(conv) || conv.status === 'streaming' || shouldSuppressRefsForApproval()) {
|
||||
return false
|
||||
}
|
||||
// 回复生成中(含 resume 续写的空窗期)抑制最后一个对话的 refs,避免过早出现操作栏。
|
||||
// 同时看 isReplyLoading:切换/重连时 isStreaming 可能已置 false,但「正在生成回复」仍在显示。
|
||||
if (conv === lastConv && (isProcessing.value || isReplyLoading.value)) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
return isConversationSettled(conv)
|
||||
}
|
||||
})
|
||||
|
||||
@ -2254,14 +2262,13 @@ const getLastMessage = (conv) => {
|
||||
return null
|
||||
}
|
||||
|
||||
const showMsgRefs = (msg) => {
|
||||
const showMsgRefs = (msg, conv) => {
|
||||
if (shouldSuppressRefsForApproval()) {
|
||||
return false
|
||||
}
|
||||
|
||||
// 回复生成中(含 resume 续写的空窗期)不在最后一条消息上过早显示操作栏/来源。
|
||||
// isReplyLoading 兜底:切换/重连时 isStreaming 可能已置 false,但回复仍在生成。
|
||||
if (msg.isLast && (isProcessing.value || isReplyLoading.value)) {
|
||||
// 该消息所在对话未收尾(后面跟的是没有 human message 的 AI 续写,或仍在生成)时不展示
|
||||
if (!isConversationSettled(conv)) {
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user