Skip to content

在 Nimi App 中完成第一次 AI 调用

使用 App 已绑定宿主的 SDK client,发起一次真实文本生成。Nimi Home 建立 App 会话,Runtime 在执行时读取该 App 已保存的 AI 配置并选择实现。

本页承接创建 Nimi App中的 --features studio-create 示例,使用公开 App Tools 0.2.7。保留生成的 SDK/Kit 绑定;App 渲染进程不需要自行取得 gRPC 地址、账号 ID、会话 token 或指定调用者身份。

调用前准备

  1. 在兼容的 Nimi Home 开发环境中运行项目的 pnpm dev,使用它启动的受管 Electron 窗口,不要直接用浏览器打开渲染页面。
  2. 确认生成的 nimi.app.yaml 已包含 runtime.consume,再通过宿主完成 App 所需的访问授权。选择 studio-create 会生成这项声明,但不会自动授予访问能力。
  3. 在 App 的 AI 设置或 Nimi Home 的 App 设置中配置 text.generate。本地路线使用这台机器当前选择的模型;云端路线需要相应的连接器和目标配置。保存配置不等于生成已经成功。

环境要求见开发环境与当前可用范围,共享设置和宿主接入见在 App 中使用 Kit

如果生成的 manifest 是 app_access: [],说明项目创建时没有选择本例需要的功能。请按创建指南在空目录中建立 AI 示例,不要手改受管 manifest 或其锁定记录。sync 会保持原有功能选择,不会补加这项权限。

发起文本生成

默认模板已在 src/shell/auth/local-app-client.ts 中导出 getNimiLocalAppClient(),直接复用即可。已有 App 的文件布局不同时,使用该项目对应的、已绑定宿主的 client。

ts
// src/first-ai-call.ts in the default App Tools 0.2.7 starter
import { getNimiLocalAppClient } from './shell/auth/local-app-client.js';

export async function generateText(prompt: string) {
  const client = getNimiLocalAppClient();
  return await client.ai.text.generateCandidate({
    messages: [{ role: 'user', text: prompt }],
  });
}

从 App 的实际操作中调用 generateText(),展示返回的 text。等待时显示加载状态;失败时展示实际错误和可行的恢复动作,不能用示例回答冒充 Runtime 输出。

请求传入对话内容,不自行选择模型、连接器、执行地址、fallback 或机器绑定。Runtime 从受保护宿主会话确定 App 身份,再使用当前本地或云端配置。提供商凭据仍由 Runtime 管理。

处理第一次失败

失败情况下一步
App 会话未建立或访问被拒绝回到受管启动与宿主授权流程,不要换成直连 Node/gRPC client,也不要自行传入身份。
AI_CONFIG_NOT_FOUND 或缺少 text.generate 意图在该 App 的 AI 设置中保存能力意图,再重试实际调用。
本地模型或云端配置不可用检查该 App 当前设置,以及 Runtime 所选模型或连接器状态。保留真实错误;路线已配置不能证明执行成功。
Runtime 已断开恢复原有 Nimi Home/Runtime 开发实例,必要时重新打开受管 App,再重试同一操作。
请求发出后执行失败查看 typed error 及其可用的原因、行动提示,不在客户端伪造 fallback 或悄悄切换提供商。

排查接入时,同一个 client 提供 auth.status()aiConfig.get()。它们只读取当前状态,不能代替一次实际生成。其他环境问题见排错指南

确认结果

运行 App 仓库已有的检查,再在实际受管窗口中通过它自己的 client 完成一次请求。分别确认等待、成功和实际遇到的失败。成功返回一句问候,可以证明首次能力调用已经完成,不能据此宣称完整产品旅程或公开分发已就绪。

第三方 App 不需要把 Nimi 主仓的 SDK/Lab 全量测试复制成先修步骤;应使用该项目实际声明的 scripts。

来源依据

Nimi 文档:可安装、开源、本地优先的个人 AI 产品。