From 3507f70e114be94913c72aa9e70eb6f9455cd86d Mon Sep 17 00:00:00 2001 From: brother7 <7brother7@gmail.com> Date: Sat, 12 Sep 2026 20:35:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=8C=E5=96=84=E7=9F=A5=E8=AF=86?= =?UTF-8?q?=E5=BA=93=E5=90=91=E9=87=8F=E6=A8=A1=E5=9E=8B=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E4=B8=8E=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20260912-kb-embedding-ml-6f8a21dc.md | 44 ++++++++++ README.md | 3 + src/pages/CloudAgents/CloudKnowledge.tsx | 38 ++++++-- tests/e2e/cloud-agents.spec.ts | 19 +++- tests/unit/cloud-knowledge-catalog.test.tsx | 86 +++++++++++++++++++ 5 files changed, 181 insertions(+), 9 deletions(-) create mode 100644 .project-docs/30-worklog/tasks/20260912-kb-embedding-ml-6f8a21dc.md create mode 100644 tests/unit/cloud-knowledge-catalog.test.tsx diff --git a/.project-docs/30-worklog/tasks/20260912-kb-embedding-ml-6f8a21dc.md b/.project-docs/30-worklog/tasks/20260912-kb-embedding-ml-6f8a21dc.md new file mode 100644 index 0000000..c7c4912 --- /dev/null +++ b/.project-docs/30-worklog/tasks/20260912-kb-embedding-ml-6f8a21dc.md @@ -0,0 +1,44 @@ +# Task: 排查知识库向量模型目录与配置入口 + +## Identity + +- Task ID: 20260912-kb-embedding-ml-6f8a21dc +- Mode: Feature +- Branch: codex/20260912-kb-embedding-ml-6f8a21dc-kb-embedding +- Worktree: D:\Datas\OthersProjects\.codex-worktrees\makelore\20260912-kb-embedding-ml-6f8a21dc +- Base commit: a0b869a333b12d28bfd96dcd89e8bc03ad47647d +- Owner: codex +- Status: Ready for Integration + +## Scope + +- 排查创建知识库的空向量模型下拉框,补齐云端配置说明、加载/失败/空状态及原地刷新,保留知识库名称和未确认创建请求。 + +## Intent And Constraints + +- 已加载 maintain-project-docs 与 diagnosing-bugs;bundled check/start/status 验证独立 feature 任务、分支、绝对工作树及主线基线一致,Concurrent/Planning Gates Passed。已读入口、本人记录、项目记忆、已接受个人云智能体决策、架构与相关证据/反思/承诺;peer 作用域已核对,历史占位保持未知但无具体语义依赖。 +- 不创建子智能体,不读取/写入线上模型凭据、部署配置或用户数据,不调用真实收费模型,不修改主目录或 canonical memory。WS 管理可用模型和账本,Yuxi 管理向量模型定义/维度及知识执行,客户端只消费 Main Host API。 +- 截图只证明空下拉框,未读取用户线上目录响应及模型配置;不把本地替身输入当作已确认生产根因。 + +## Outcome + +- CloudKnowledge 显式区分加载、失败、空目录;增加刷新知识库与模型按钮、平台管理员说明及可折叠的 Yuxi/WS/one-api 配置步骤。成功刷新清除目录错误,保留输入名称;已下线模型不能用于新创建,未知创建结果仍复用原 operation_id/name/model。 +- README 同步配置入口;新增五个组件行为回归,扩展既有真实 Electron fixture 覆盖空状态、管理员说明、刷新恢复和名称保留。 + +## Verification + +- pnpm 10.33.4 install --frozen-lockfile --offline 通过,未修改 lockfile。 +- pnpm exec vitest run tests/unit/cloud-knowledge-catalog.test.tsx --maxWorkers=1:修复前四项因缺少说明/加载状态/刷新入口失败,修复后通过;追加未知创建重试案例后,连同四个既有云模块测试文件共 50 tests passed。 +- pnpm run typecheck 与 scoped ESLint(CloudKnowledge、新单测、cloud-agents.spec)通过,无诊断。 +- pnpm run build:vite 四个目标成功,保留既有 chunk/混合导入/Browserslist 提示。 +- pnpm exec playwright test tests/e2e/cloud-agents.spec.ts --workers=1 --reporter=list:真实 Windows Electron 1 passed;回读 knowledge-empty.png,配置区独立滚动、提示与操作可见。Host API 为 fixture,无线上模型调用。 +- git diff --check 与 task-aware 文档检查通过。 + +## Follow-ups + +- 需要平台管理员在现有云端配置入口核对并接入模型;当前安装版配置完成后离开智能体再进入以重新加载目录。新增原地刷新与说明需后续合并/打包才能进入安装版。 +- 本次无主分支合并、推送、部署或安装包发布。线上具体配置缺口及真实向量收费调用仍未验证。 + +## Promotion Candidates + +- Target: 集成 current-state/云智能体客户端记录。Proposal: 记录知识模型配置由平台管理员在 Yuxi/WS 完成,客户端提供明确目录状态、刷新及恢复语义。Evidence: 当前 Owner 代码、五项组件回归和 Electron 验证。Impact: 后续配置体验沿用现有目录与凭据边界。Conflict: 无产品方向冲突。Human confirmation: 无新产品决定,canonical 提升由后续 Integration Gate 执行。 diff --git a/README.md b/README.md index 217ad04..74e4ccd 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,9 @@ Makelore 是一个面向软件、视觉创作、智能机器人与个人云智 - `Makelore Code|AI 编程`:管理本地项目、项目智能体、对话、文件上下文、代码变更和运行时。 - `Makelore Agents|AI 智能体`:配置个人云智能体并试聊,发布后正式对话、按账号分享或创建应用 API Key。支持流式回复、审批、排队请求、附件与产物、自动任务和活动历史;重新进入时恢复最近智能体与对话,未确认操作可按原输入重试。聊天可提出日程建议,由创建者核对能力、时间和费用后启用。知识库支持上传、索引、替换、删除及导入本人会话附件;个人 MCP 凭据、Skills、子智能体可自助管理。支持智能体和会话归档、发布版本比较及恢复为草稿。所有模型调用由创建者个人词元点数支付,可按智能体设置每次任务和每日上限,费用按时间、来源、应用分页统计;分享/API 调用者保有自己的内容空间。Main 管理云会话和本机文件,Renderer 通过 Host API 操作。配套服务接入见 [Yuxi MakeLore 说明](https://xerrors.github.io/Yuxi/advanced/makelore-agents.html)。 编辑采用全高桌面分栏,支持拖动调整与展开、独立滚动、小窗口配置/试用切换。配置分为指令、能力、知识、限制;草稿明确保存(Ctrl/⌘+S),保存与切换页面保留当前试用及未发送文字,新试用明确使用最新保存版本。费用上限在限制中独立保存。Enter 发送、Shift+Enter 换行,F6 切换面板焦点、Esc 恢复分栏。 + + 云知识库的向量模型由平台管理员配置:Yuxi 后台「智能体管理 → 模型供应商」启用 embedding 模型并填写实际维度;Works Square 运营后台「模型管理」从 one-api 刷新并激活相同模型 ID。one-api 必须支持该模型的向量接口。客户端区分目录加载中、加载失败与无可用模型,空状态提供管理员配置说明;「刷新知识库与模型」保留未提交名称,未确认的创建请求沿用原操作身份。 + - `Makelore Canvas|AI 绘画`:每个设计项目(Workspace)维护一份从创建起就存在的 Living Form。左侧项目栏负责新建、切换和管理 Workspace,并在桌面设计模式下以 256px 宽度常驻展开;中央沿用 AI 编程的安静对话画布、自然消息流和底部悬浮输入器,AI 整理出的制作方案作为对话内的轻量可编辑稿持续更新;桌面端右侧同为 256px 的全高历史作品栏集中展示当前项目的制作记录与生成结果。紧凑窗口通过左侧抽屉访问项目列表,历史记录保留在时间线中。参考图从本地上传后以 `@图片N` 绑定,具体用法只写在创作提示词中。 - `Makelore Robot|AI 机器`:管理机器人智能体、设备激活绑定、智能体配置与设备分配;机器人工作台的智能体位于 Robot 全局侧栏,选中后在内容区先查看绑定设备、再查看基础设置,当前智能体通过 URL 参数保持可分享选择;绑定设备时默认先选择“引导配网”或“已有激活码”。在 Windows 与 macOS 的引导路径中,Makelore 可在弹窗内扫描并连接附近开放的 `Xiaozhi-*` 配网热点,失败时仍可通过系统 Wi-Fi 手动连接;后续继续复用机器人现有热点配网页面,不修改固件,也不由 Makelore 接收 Wi-Fi 密码。 diff --git a/src/pages/CloudAgents/CloudKnowledge.tsx b/src/pages/CloudAgents/CloudKnowledge.tsx index 65abcb3..435b12d 100644 --- a/src/pages/CloudAgents/CloudKnowledge.tsx +++ b/src/pages/CloudAgents/CloudKnowledge.tsx @@ -17,6 +17,8 @@ export function CloudKnowledgePanel({ slug, onCreated, onDeleted }: { slug: stri const [name, setName] = useState(''); const [model, setModel] = useState(''); const [error, setError] = useState(''); + const [catalogError, setCatalogError] = useState(''); + const [catalogLoading, setCatalogLoading] = useState(true); const [busy, setBusy] = useState(false); const [refresh, setRefresh] = useState(0); const [creating, setCreating] = useState(false); @@ -32,8 +34,14 @@ export function CloudKnowledgePanel({ slug, onCreated, onDeleted }: { slug: stri useEffect(() => { alive.current = true; return () => { alive.current = false; }; }, []); useEffect(() => { let current = true; - cloudAgentsApi.call('knowledge', { slug }).then(v => { if (current) setCatalog(v); }) - .catch(e => { if (current) setError(String(e.message || e)); }); + setCatalogLoading(true); setCatalogError(''); + cloudAgentsApi.call('knowledge', { slug }).then(v => { + if (!current) return; + setCatalog(v); + if (!createIntent.current) setModel(previous => v.models.some(item => item.id === previous) ? previous : ''); + }) + .catch(e => { if (current) setCatalogError(String(e.message || e)); }) + .finally(() => { if (current) setCatalogLoading(false); }); return () => { current = false; }; }, [slug, refresh]); useEffect(() => { @@ -58,21 +66,35 @@ export function CloudKnowledgePanel({ slug, onCreated, onDeleted }: { slug: stri

上传到知识库的文档可供获准使用此智能体的人检索。解析后建立索引才会生效,向量调用扣除你的词元点数。

{error &&

{error}

} -
- { setKbId(e.target.value); uploadIntent.current = null; setNext(null); }}> {catalog?.databases.map(kb => )} +
{creating &&
setName(e.target.value)} /> - setModel(e.target.value)}> + + {catalog?.models.map(m => )} - {catalog && !catalog.models.length &&

服务端尚未接入可计费的向量模型。

} -