Replies: 3 comments
|
补充两个同类缺陷(错误处理不健壮),与主贴同主题,一次汇总: 缺陷 2:未知工具名触发前端崩溃(而非"tool not found")复现:Web UI 会话中让 agent 调用一个不存在的工具名(例如 实际:agent 发起 Tool call 后,会话立即报错: 预期:工具调度器应返回"tool not found"类错误,由 agent 修正工具名重试;模型在 agent 日志中也看不到"该工具不存在"的明确反馈。 影响:工具名一个字符之差(单/双下划线)就导致整个会话前端状态崩溃,且崩溃后该会话历史残缺(见缺陷 3),需要新建会话。 缺陷 3:并行工具调用中断 → 会话历史永久残缺 → 后续请求永远 INVALID_REQUEST复现:
实际:之后该会话的任何请求都失败: 根因:被中断的轮次在会话日志中留下了带 影响:这是预览版最伤体验的问题——一个并行调用失败就废掉整个会话,且错误信息(INVALID_REQUEST)对用户毫无提示性。 建议:
规避(供其他用户参考): |
|
The symbol is The seam is keyed by settings namespace, not by provider route — registerModelDiscovery(
settingsNs: string,
discover: (request: LlmModelDiscoveryRequest) => Promise<readonly LlmDiscoveredModel[]>,
): () => void {The one caller is ctx.llm.registerModelDiscovery(NS, request => discoverModels(request, () => storedApiKey(request.provider)))(
const discover = this.discoveries.get(settingsNs)
if (discover === undefined) {
throw new LlmError(`no model discovery is registered for "${settingsNs}"`, 'NO_DISCOVERY')
}So: Fetch models works for routes under the |
|
@udsy19 那条更正是决定性的(符号是 缺陷 3 值得单独开一帖,它不是"错误处理不健壮"
这条的定性应该是**"一次工具调用中断导致会话永久损坏"**,而不是"错误处理不健壮"。前者是数据损失,后者听起来像文案问题——装在哪个标题里,得到的优先级会差很多。 而且它有一大群同类。这个形状我这两天数到第五个了:
每一条的检查/投影本身都是对的,每一条的后果都比它防住的东西更糟。 共同缺的是同一样:不一致被发现之后,除了"停"以外还能做什么。 值得一提的是 replay-state 那一族已经有了官方修复,而它的做法恰好印证了这个视角——不是去消灭不一致,而是给不一致加一条降级路径(错位的 replay state 退回 provider-neutral 重放,而不是永久弄坏会话)。你这条的对应做法就是你自己建议的那个:中断时要么把 tool 消息补全,要么把那条残缺的 assistant 消息一起丢掉,别让它进入之后每一次请求。 如果你去单独开帖,我建议把这张表引上——一个失败模式有五份独立复现,比任何单帖都更能说明它是结构性的,而且能把诉求从"修我这一处"提到"投影层遇到不一致时的通用处置"。 缺陷 2:那个报错串至少有两个来源,值得留个心眼
同样这串报错在 #3751 里有一个完全不同的根因: 我没法判断你遇到的是哪一个(你的复现是故意写错工具名,指向"工具查找返回 undefined";#3751 指向"调度器本身是 undefined")。但这件事本身就值得说:同一串报错对应至少两个成因,而报错文本不区分它们。 如果你还能复现,值得留意一下换个正确的工具名会不会也炸——如果也炸,那你踩的是 #3751 那个,和你的假设完全不同。 (顺带说,你这条的诉求同样属于上面那张表:模型在 agent 日志里看不到"该工具不存在"的明确反馈,于是它没有任何据以纠正的信息。#3568 里模型 17 步重发同一个坏参数,是一模一样的机制。) 边界与利益相关我们不修 DSH 自家组件—— 利益相关:我维护 pi2dsh(Pi 生态兼容层)。这条不推销——会话历史一旦残缺,装任何第三方插件都不会让它重新合法。 |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Issue 草稿(中文版):
llm.discoverModels始终失败:NO_DISCOVERY— 仓库中registerDiscovery无任何调用点标题
llm.discoverModelsalways fails: "no model discovery is registered" —registerDiscoveryhas no callers in the repo描述
环境: dsh v0.1 开发者预览版(
@deepseek-ai/dsh最新版,2026-08-14),Windows 10,web profile(dsh web),默认standardagent preset。复现步骤
dsh web,打开http://127.0.0.1:3080。预期行为
应获取并列出当前激活 provider(
deepseek-official)的模型目录(V4 Flash / V4 Pro 已存在于dsh-llm-deepseek的DEFAULT_MODELS中)。实际行为
UI 显示
Failed to fetch (internal)。后端返回:底层错误是
LlmService.discoverModels抛出的LlmError(..., "NO_DISCOVERY")(packages/llm/llm/src/index.ts):根因
registerDiscovery(同样位于packages/llm/llm)在仓库中没有任何包调用它——全仓库搜索registerDiscovery返回零调用点。Web UI 暴露了发现流程(api.llm.discoverModels,dsh-client-ui-settings-models中的 fetch 按钮),但没有任何 provider(包括随发行版提供的默认 providerdsh-llm-deepseek)注册 discovery 实现,因此该功能永远无法成功。影响
listModels可用,llm.providers健康),这属于 UX/功能缺口而非硬阻塞——在 discovery 实现落地之前,值得先提供一个优雅的"不支持"UI 状态。建议修复(二选一)
dsh-llm-deepseek中实现 discovery(例如使用配置的apiKeyEnv调用 DeepSeek 模型列表端点),或环境
@deepseek-ai/dsh最新版(2026-08-14)deepseek-official(apiKeyEnvDEEPSEEK_API_KEY)All reactions