跳到内容
CADCAMFUN
文档

文档

人工智能助手

项目范围的对话、键入的 CAD/CAM 操作、显式权限以及由应用程序管理的提供商凭据。

从英文自动翻译。 查看英文原文

助理服务

@cadcamfun/ai 提供模型访问、对话事件、操作目录、提示、技能、上下文组装和主机集成。默认的对话引擎是嵌入的nikcli; AI SDK v7 提供直接文本、流式传输和结构化输出调用。 sidecar 注入项目突变、库、历史和应用程序存储的处理程序。

聊天可以通过注册的操作检查和更改项目。无状态标题生成、设计分析、参数建议、G代码优化和设计建议摘要返回建议或结构化输出;这些服务方法不会保存项目编辑。在依赖之前,通过确定性 CAM 和验证查看生成的加工建议。

对话和会话控制

POST /api/ai/chat/stream 发出文本、推理、转弯/步骤状态、工具调用和结果、诊断、问题、权限请求、重试、上下文更改、目标、完成和错误的键入事件。客户端会话标识符绑定到主机会话并根据其项目进行检查。保留会话 ID 以继续相同的对话。

POST /api/ai/sessions/state 在断开流后恢复繁忙状态、累积文本和任务信息。 /api/ai/chat/queue 承认正在进行的对话的后续行动; /api/ai/chat/abort 停止转弯及其相关工作人员。删除会话会在删除主机会话之前取消并加入其子会话。

/api/ai/sessions/control 支持状态、详细上下文检查、压缩、内存整合、任务取消、权限决策以及回答或拒绝待决问题。根据父会话及其承认的子会话检查请求。不再悬而未决的问题无法通过重用其旧标识符来回答。

直接模型调用重试瞬态提供程序故障,其曲线与 nikcli 相同:第一次延迟为 2 秒,每次尝试加倍,这是提供程序自己的延迟 retry-after header is honoured, and without such a header the delay never exceeds 30 seconds. By default a request makes at most five calls, including the first;这 retryAttempts 设置可以覆盖这个(packages/ai/src/retry.ts, direct-model.ts)。当模型连接在中途断开时,聊天循环会以相同的 2–30 秒退避恢复最多五次,并要求模型继续,而不重复已完成的步骤。

提供者和凭证

GET /api/ai/providers 列出提供程序元数据和配置状态; GET /api/ai/models 公开模型选择器目录,可选 configuredOnly=true。嵌入式主机目录读取会缓存一分钟。配置和策略会影响列出和可用的提供程序。

设置凭据 PUT /api/ai/credentials 并删除它们 DELETE /api/ai/credentials/:provider。键必须非空,并且提供的基本 URL 必须是 HTTP 或 HTTPS。直接模型工厂支持 Anthropic、OpenAI、MiniMax 和 AI 网关。其他提供商 ID 需要 OpenAI 兼容的基本 URL 才能直接调用。嵌入式主机使用自己的提供者目录和路由。

sidecar 将凭证保存在 <dataDir>/ai/credentials.json 使用临时文件、仅限所有者模式 0600 并重命名。丢失或损坏的文件读取为空。失败的持久性写入会使密钥对当前进程可用,但不能保证它在重新启动后仍然存在。状态响应公开配置状态而不是原始密钥。

凭证表示为 Redacted 内部服务并通过作用域凭证接收器传播到主机。关闭范围会清除主机的副本。凭证更改会更新用于区分缓存的无状态结果的修订版。

默认模型层是 balanced,MiniMax 请求转到 https://api.minimax.io/v1 除非 CADCAMFUN_AI_MINIMAX_BASE_URL 覆盖它(packages/ai/src/models.ts)。模型目录来自公众 https://models.dev/api.json 仅当缓存文件丢失且允许网络访问时才端点;不发送任何凭证,响应的上限为 8 MiB,并且列出少于 20 个提供者的正文将因被截断而被拒绝。

操作和权限

动作目录声明每个动作标识符、参数模式、效果和执行路径。工具将所需的相关操作分组 action 场地。主机验证工具输入,而 sidecar 处理程序在持久更改之前执行域验证和资源访问检查。

权限模式有 approve, ask, 和 auto。它们影响普通工具调用的接受方式;包含破坏性行为的工具在每种模式下都保留了人类批准规则。输入标志,例如 confirm: true 不取代该权限请求。主机不会公开不受限制的 shell 或文件编辑工具来替代应用程序操作。

政策 <dataDir>/ai/policy.json 限制提供商的使用、工具的使用和桥接访问。它们由服务配置加载;不要假设编辑文件会更新已经运行的服务。项目范围的临时目录和独立的 nikcli 配置使嵌入式主机与用户的独立代理状态分开。

技能提供 CAD/CAM 手册和用户编写的说明。他们指导现有工具的使用;添加技能不会添加新的突变 API。技能 HTTP 端点列出、保存和删除支持的用户技能内容。

注册工具组

内置组是 cad, cad_edit, cam, cam_edit, library, parts, library_edit, memory, memory_edit, research, vcs, vcs_edit, 和 agent. cam_verify 公开验证者角色所需的生成和验证子集,而无需授予完整的 CAM 编辑工具。

工具分组保留了效果边界。只读几何检查、库查找和内存调用与对这些资源的更改是分开的。注入的注册表还可以接纳扩展工具;重复的标识符被拒绝。

发现当前目录

GET /api/ai/actions 为外部调用者返回工具描述、操作名称和类型以及 JSON 参数模式。使用它来发现正在运行的应用程序的操作,而不是将静态列表复制到客户端。 POST /api/ai/actions/invoke 接受项目 ID、工具 ID 和包含操作鉴别器的输入。

内置目录条目维护在 packages/ai/src/actions。示例包括 CAD 检查和参数检查、CAD 编辑、CAM 规划和制造、库查找和更新、项目内存、研究和 VCS 建议。当主机未提供其处理程序时,需要应用程序服务的贡献将返回不可用的结果。

公共集成 API

ACTION_CATALOGUE, ACTION_TOOL_IDS, EXPOSED_TOOL_IDS, actionById, toolKind, 和 runAction 支持目录消费者。 ToolHandlers 是 sidecar 集成合约; ToolRegistry 组成内置和扩展工具。 AiService 提供对话、模型元数据、一次性调用和会话操作。

assembleContext 使用 24,000 个字符的默认总预算组成回合上下文。它对长期需求、当前观察结果、UI 快照、内存和支持参考进行排序,按身份和内容进行重复数据删除,并记录遗漏或截断的来源。此上下文预算与模型的完整令牌窗口和主机压缩阈值分开。

背景工作和证据

运行时调度程序允许四个活动后台任务和十六个排队任务。任务由项目和父会话拥有。取消保留主动所有权,直到工人停止;停止或删除父级也会停止其关联的工作。读取工作者的恢复仅限于两次尝试,而中断的编辑工作则被标记为不确定而不是盲目重播。

辅助工具的成功是要检验的结果。 CAD 操作可以返回部分几何诊断; CAM 工件有自己的声明和发布级别;历史服务强制执行受保护的分支。对话文本、标记为完成的任务以及几何验证结果描述了不同的证据。

发送到模型的项目上下文是经过预算的:存储的项目上下文文档最多可容纳 8,000 个字符,其中 2,000 个字符到达提示,每个字符为 1,500 个字符用于项目内存和用户习惯。当会话稳定时,项目上下文未引用的早于 90 天的项目注释将被删除(packages/ai/src/project-context.ts).

运行时选择

CADCAMFUN_AI_HOST 选择 nikcli 默认情况下或 direct。直接路径使用 AI SDK 调用,无需嵌入式主机的持久代理工具循环和专业调度程序。即使启用了嵌入式主机,无状态操作也使用直接模型服务。

主机的 XDG 目录和可选的主目录覆盖根植于 <dataDir>/ai/nikcli。在 SDK 导入之前,项目配置加载和不相关的继承代理设置将被禁用或清除。它的工作空间是每个项目应用程序的临时目录,而不是用户的源目录。

独立 nikcli 访问

@cadcamfunv2/cadcamfun-nikcli-plugin 将独立的 nikcli 连接到正在运行的应用程序。配置其 url, token,和默认的 projectId,或使用 CADCAMFUN_URL, CADCAMFUN_TOKEN, 和 CADCAMFUN_PROJECT。提供应用程序颁发的范围桥令牌以供外部访问。

桥接令牌仅限于一个项目和只读或读/写操作。它们默认为 30 天,允许 1–365 天,可以列出和撤销,并且仅在发布时才透露其秘密。他们只承认两条行动桥路线。政策可以进一步缩小可见的工具和行动的范围。

该插件从应用程序中获取目录并将其架构转换为 nikcli 工具参数。即使有确认标志,破坏性操作也会被拒绝,并且正在进行的操作 agent 委托工具被排除在外。可写的插件扩展工具不会通过此外部桥公开。 HTTP 401 报告拒绝的令牌;操作拒绝返回可读的失败结果。

实施图

service.ts 拥有面向应用程序的人工智能操作; direct-model.ts 拥有AI SDK调用; credentials.ts 拥有关键状态; nikcli/ 拥有隔离、会话、策略、上下文和工作人员; actions/ 和 tools/ 自己的能力定义和适配器。边车 services/ai.ts 电线项目处理程序和存储。 packages/nikcli-plugin 拥有外部 HTTP 客户端。

开始和恢复对话

通过正在运行的 sidecar 和配置的模型,此请求将打开一个对话,而无需注入存储的工作区上下文。放 CADCAMFUN_URL 到发现的环回基本 URL 和 CADCAMFUN_TOKEN 为其当前的应用程序令牌。下面的会话标识符是客户端选择的;保留以供后续处理。

串流一圈
curl --no-buffer --fail-with-body \
  -H "Authorization: Bearer $CADCAMFUN_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"message":"Explain the difference between G0 and G1.","sessionId":"inspection-demo","includeContext":false,"mode":"gcode"}' \
  "$CADCAMFUN_URL/api/ai/chat/stream"

对于项目转向,还提供其真实的 projectId,以及可选的 drawingId 属于该项目。该绘图将转弯的工具绑定到该绘图。拒绝在另一个项目或帐户下重用会话。

重新连接后恢复状态
curl --fail-with-body \
  -H "Authorization: Bearer $CADCAMFUN_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"sessionId":"inspection-demo"}' \
  "$CADCAMFUN_URL/api/ai/sessions/state"

返回的 busy, text, 选修的 events, 和 tasks 重建视图;重放这些存储的事件不会再次执行工具。要停止工作,请发送显式中止。单独关闭流不会加入对话的工作人员。

来源: packages/api/src/groups/ai.ts, apps/sidecar/src/http/ai.ts, 和 packages/ai/src/service.ts.

处理事件而不丢失状态

事件消费者行为
delta / reasoning附加 text 到匹配会话的文本或推理通道。
tool_call / tool_result关联方式 callId;检查 ok 并独立于助手文本保留诊断信息。
permission_request显示请求并回复其请求/会话 ID 以及 once, always, 或者 reject.
question_request保留其请求 ID 和问题;通过会话控制为每个问题发送一个答案数组。
done使用最终的 text 以及可选用法作为完整的响应;不要将整个最终文本附加到已经积累的增量中。
error展示 message 和 config, provider, aborted, 或者 internal 分类。
heartbeat保持连接处于活动状态,而不添加内容或声明回合完成。

会话控件仅接受该对话或其子会话中待处理的权限/问题 ID。问题需要非空答案;单选问题拒绝多个选定值,而不允许自定义答案的问题仅接受其列出的选项标签。

来源: packages/api/src/ai-events.ts, packages/ai/src/nikcli/session-controls.ts, 和 packages/ai/src/heartbeat.ts.

附件和用户技能

每个聊天请求最多接受五个附件。支持的图像有 PNG、JPEG、WebP 和 GIF,每个图像的限制为 5 MiB; PDF 的限制为 10 MiB。文本附件最多接受 2、000、000 个字符,最多还包含 6、000 个字符的内嵌文本。不受支持的文件会产生拒绝原因,而不是默默消失。

文本附件保存在导入工具的项目范围内存存储中:每个项目最多 32 个名称和 8、000、000 个字符,最多 32 个存储项目中的 000、000、64 个字符。重复使用名称会替换其以前的文本。重新启动服务不会保留此附件存储。 PDF 功能不匹配由提供者转换报告给模型。

用户技能名称是由连字符连接的小写字母/数字单词,最多 64 个字符。描述和正文限制分别为 300 和 20,000 个字符;最多可以加载 50 个用户技能。无法通过用户技能 API 删除内置技能。已保存的技能 live result表示主机重载是否生效。

来源: packages/ai/src/attachments.ts, packages/ai/src/skills/user.ts, 和 apps/sidecar/src/http/ai.ts.

诊断助手故障

  • 未配置型号: 检查 /api/ai/status 和 /api/ai/providers,然后为列出的提供商设置密钥。配置的标志证明存储的密钥存在,而不是供应商接受它。
  • 未知的提供商或无效的 URL: 使用公布的提供商 ID 和 HTTP(S) 基本 URL。非内置直接提供程序除了其密钥之外还需要兼容的端点。
  • 会话无法访问: 使用原始项目/帐户/会话身份进行恢复。不要为现有的主持人会话创建替换项目 ID。
  • 一个回合无限期地等待: 在重试重复提示之前检查会话控制状态是否有待处理的权限或问题。使用显式中止来取消轮次并加入其工作人员。
  • 一个工具部分改变了模型: 检查其 tool_diagnostic, 包括 mutationApplied,然后读取当前绘图。在不检查其结果的情况下重试编辑操作可能会重复几何图形。

工具结果和类型化的失败保留失败的阶段。成功的工具后的提供者错误不会回滚这些项目突变。确定性 CAM 和历史检查仍然可以与模型答案分开使用。

助理端点参考

所有辅助路线都位于 /api/ai 并需要应用程序不记名令牌。独立 nikcli 的桥接令牌仅打开操作列表和调用路线,并且仅针对其项目。

desktop/app发布 /api/ai/chat/stream 语境集会尼克克主机+ 型号 行动 /工具 SSE 事件:delta、tool_call、tool_result、done …
路线目的
POST /api/ai/chat/stream开始流转;响应是辅助事件的 SSE 流。
POST /api/ai/chat/queue将繁忙会话的后续消息排队。
POST /api/ai/chat/abort中止正在运行的会话。
POST /api/ai/permission/reply回答权限请求: once, always, 或者 reject.
POST /api/ai/sessions/state, /sessions/control, /sessions/remove读取会话状态、控制会话、删除会话。
GET /api/ai/status, /models, /providers, /agents, /prompts发现:准备情况、模型目录、提供者及其配置状态、专家代理、及时建议。
PUT /api/ai/credentials, DELETE /api/ai/credentials/:provider存储或清除提供商凭据。
GET/PUT /api/ai/skills, DELETE /api/ai/skills/:name列出、保存和删除用户技能。
GET /api/ai/actions, POST /api/ai/actions/invoke操作目录和直接调用(也由 nikcli 桥使用)。
GET/POST /api/ai/bridge/tokens, DELETE /api/ai/bridge/tokens/:id发布、列出和撤销作用域桥接令牌。
POST /api/ai/completion单次完成: prompt, systemPrompt, model, temperature;回报 text 和 model.
POST /api/ai/title对话摘录的标题。
POST /api/ai/design-analysis建议与 confidence, priority (低/中/高),以及 kind (优化/警告/严重)。
POST /api/ai/machining-parametersCutting speed (m/min), feed (mm/min), depth of cut (mm), stepover (%), coolant (flood/mist/none), engagement (conventional/climb), and warnings.
POST /api/ai/gcode-optimization优化的 G 代码,包含每行更改和原因、预计时间和刀具寿命节省以及注释。
POST /api/ai/design-suggestions下一步建议,包括标题、理由和下一步。
POST /api/ai/analyze-gcode问题(代码、行和消息的错误/警告/信息)和统计数据:行、快速和剪切移动、工具更改和边界。
POST /api/ai/gcode, /toolpath-analysis, /feedback, /proxyG 代码操作、刀具路径见解、反馈和提供者代理。

模型支持的分析回复是类型化形状的模型输出。诸如加工参数之类的值是针对刀具数据和机器限制进行审查的建议,而不是经过验证的切削数据。

流媒体请求字段

场地价值观Effect
message细绳本轮用户的消息。
sessionId细绳继续现有会话;省略开始一个新的。
projectId细绳项目轮次使用其上下文和工具。
drawingId细绳本轮可能会作用的图画。在允许转弯之前,会根据项目对其进行检查,并且转弯的工具仅作用于该绘图,而不作用于其他任何东西。
modegeneral, cad, cam, gcode, toolpath回合焦点。
permissionModeauto, ask, approve如何请求工具权限。
agent细绳专业代理名称来自 /api/ai/agents.
attachments[{ name, mime?, data, encoding?: "base64" | "text" }]最多 5 个附件:图片最多为 5 MB,PDF 最多为 10 MB,文本最多为 2、000、000 个字符(最多 6、000 个字符的文本文件也会写入邮件中)。
context, includeContext字符串、布尔值额外的上下文文本以及是否包含组装的项目上下文。
model型号选择器覆盖本回合的配置模型。

限制和默认值

限制价值
组装上下文预算24,000 个字符;不适合的块将被标记截断,而将被剪切到低于 400 个字符的块将被省略
项目背景文件最多 8,000 个存储字符,2,000 发送到模型
项目记忆/用户习惯每个 1,500 个字符
项目笔记当项目上下文未引用时,90 天后进行修剪
工具输出发送到模型24,000 个字符
每次调用创建的元素40
输出代币32,000 最大
心跳直播期间每 5 秒一次
精确的几何动作60秒预算;准确报告 1.5 秒
内核职位120秒截止时间,包括工作人员开始时间
后台任务4 个处于活动状态,16 个已排队,2 个读取工作线程尝试,已解决的任务保留 7 天
自动延续每个请求 50; 5 连接恢复,延迟时间为 2–30 秒
直接调用重试5 调用,包括第一个调用; 2 s 加倍为 30 s,尊重 retry-after
用户技能50 技能;名称最多为 64 个字符(小写单词由连字符连接),描述最多为 300,正文最多为 20,000
网络搜索获取每个响应 256 KB
桥接代币默认为 30 天,最多 365 天

阅读结果,而不是文字

工具的结果是 tool_result 和 tool_diagnostic 事件。在相信助理对其所做操作的总结之前,请先检查是否应用了突变。

完整的动作目录

助理通过 83 个系列中的 13 声明的操作进行操作。每个操作都声明其结果模式及其 效果:除了阅读打开的文档之外,它会改变或达到什么目的。阅读家庭(cad, cam, library, memory, research, vcs) 大多没有影响;他们的 _edit 对应方改变持久状态。效果列在括号中。

家庭数数动作(效果)
cad20describe, check, relations, grep, vision (界面), inspect_elements, inspect_layers, inspect_search, inspect_property, drawing, parametric_validate, parametric_inspect, parametric_test, parametric_dfm, parametric_exact, exact, assembly, parametric_fastener, parametric_recipe, parametric_from_element
cad_edit12add (绘画), add_entities (绘画), modify (绘画), transform (绘画), group (绘画), delete (绘画), editor (界面+绘图), import (绘画), parametric_create (绘画), parametric_update (绘画), parametric_recipe_create (绘画), parametric_convert (绘画)
cam14plan_check, review, machine, operations, suggest, compare_setups, analyze, stock, vision (界面), chain_suggest, materials, cutting_data, manufacture, chain_status
cam_edit6manufacture (操作+程序), create (手术), update (手术), generate (程序), verify (报告), stock_set (库存)
library5component_list, lookup_component, lookup_material, lookup_tool, lookup_machine_config
parts3save (成分), insert (绘画), delete (成分)
library_edit5upsert_material (图书馆), upsert_tool (图书馆), upsert_machine_config (图书馆), set_default (图书馆), delete (图书馆)
memory2recall, context_read
memory_edit2remember (记忆), context_update (语境)
research2search (外部的), read_attachment
vcs3status, diff, list_pull_requests
vcs_edit5start_change (历史), commit (历史), restore (历史+图画), open_pull_request (历史), run_workflows (工作流程)
agent4start (任务), list, read, cancel (任务)
Effect意义
drawing, component, operation, program, stock, report持久的设计或制造数据
library, memory, context图书馆记录、项目内存、工作空间上下文
history, workflow版本控制和工作流程运行
task委托调度程序(后台代理)
interface屏幕上的编辑器或视口;不执着
external网络(网络研究)

读取操作可能只有 interface 或 external;每一篇文章都至少有一个持久的效果。效果是根据每个操作声明的,并且永远不会从实现它的工具中推断出来。

行动呼吁如何结束

结果什么时候
succeeded该操作执行了所要求的操作。包括具有负面结果的读取,例如失败的检查。
partial部分答案或批次: complete: false, omitted > 0,非空 skipped,或一个 nextOffset 到页面
refused什么也没做: ok: false 有错误或标签(无效输入、被拒绝、不可用、无事可做)
conflict该文件继续说道: ActionConflict 或状态 stale/conflict。重试之前再次检查。
cancelledActionInterrupted
uncertainActionUncertain:写入可能已提交,但无法读取其答案。通过检查进行核对;切勿盲目重试。

写入与绘图修订绑定在一起。提交的写入返回一个 ActionCommitted 收据与 previousRevision 和 revision;写反对陈旧的 expectedRevision 回报 ActionConflict 与两者 expectedRevision 和 actualRevision。同一分类(actionOutcome)由主机、代码模式、桌面和桥共享。

返回的冲突
{
  "ok": false,
  "_tag": "ActionConflict",
  "actionId": "cad_edit.modify",
  "projectId": "…", "drawingId": "…",
  "expectedRevision": 41, "actualRevision": 42,
  "message": "…"
}

在 3D

AI 包所在的位置 拖动进行轨道旋转·滚动进行缩放·右键拖动进行平移
来自 package.json 文件的所有 13 工作区包;每行都是一个工作空间:* 依赖项(总共 17)。行是依赖项深度:前面没有工作区依赖项的包,后面是依赖于其中 8 的 sidecar。橙色框是应用程序。重点强调:ai依赖于api和core,由sidecar使用。