---
title: 配置云端 LLM：核对提供方、地址与真实摘要
description: 按 ChatCrystal 提供方注册表设置远端生成，区分原生接口与兼容网关，检查持久化配置、凭证和短测试的边界。
image: "https://zengliangyi.com/og/blog/cloud-llm-configuration.png"
---

从本地模型切换到远端服务，不能只改一个 provider 名称。旧地址、旧模型或已保存的密钥仍可能留在配置中；请求能返回一句话，也不代表真实会话能生成合格笔记。

本文按 [ChatCrystal 提供方注册表](https://github.com/ZengLiangYi/ChatCrystal/blob/764276814e5c5a33ecbfeae63754f74b9261a3a8/server/src/services/providers.ts) 提交 [`7642768`](https://github.com/ZengLiangYi/ChatCrystal/tree/764276814e5c5a33ecbfeae63754f74b9261a3a8) 说明配置。选型没有跨模型实测排名，也不沿用固定的单条笔记费用估算；模型可用性、价格与账户额度应在使用时核对。

## 先确认应用选择了哪条调用路径

当前注册表包括 `ollama`、`openai`、`orcarouter`、`anthropic`、`google`、`azure`、`custom`。其中远端生成的路径各有区别：

- OpenAI 使用对应 SDK 工厂，传入地址、密钥和模型，不应假定所有生成都调用 Chat Completions。

- Anthropic、Google 使用各自原生工厂；本版本这两条生成路径传入密钥和模型，没有使用应用的 `baseURL` 字段覆盖地址。

- Azure 使用 Azure 工厂，需要把地址与模型标识对应到所用 SDK 和实际部署，不能直接把资源主页当作任意调用的完整接口前缀。

- Custom 使用 OpenAI 工厂的默认模型调用路径。某个网关只兼容 Chat Completions，不足以证明它兼容这条路径和结构化输出。

- OrcaRouter 使用注册表中的固定网关地址；本版本不通过配置的 `baseURL` 改写它。

这些是当前应用的能力，不是对供应商所有产品的评价。Anthropic、OrcaRouter 注册项没有向量工厂；检索需另选支持 Embedding 的配置，见 [两类模型职责](/blog/llm-and-embedding-separation)。

## 切换时同时检查地址与模型

例如选择 OpenAI 原生服务，默认本机连接上的非敏感设置可以这样更新：



```bash
crystal   config   set   llm.provider   openai  
  crystal   config   set   llm.baseURL   https://api.openai.com/v1
```



再填写当前账户实际可用的模型 ID 与服务端密钥。模型设置的命令形状如下，尖括号部分必须替换：



```text
crystal config set llm.model <available-model-id>
```



[OpenAI 官方 API 说明](https://developers.openai.com/api/reference/overview)描述了认证与服务端凭证要求，接口例子见 [官方入门文档](https://developers.openai.com/api/docs/quickstart)。不要把密钥写入公开文章、浏览器代码或仓库。若已有可用的桌面或前端设置入口，可以在那里配置；npm CLI 包与界面产物的区别见 [入门指南](/blog/chatcrystal-getting-started)。

切换到 Anthropic 或 Google 时，同样更新 `llm.provider`、`llm.model` 与 `llm.apiKey`，使用对应服务的真实标识。对 Azure 和 Custom，额外核对实际调用地址与 SDK 协议。不要依赖一份通用模型名称表保证账户可访问。

## 核对最终加载的配置

[配置实现](https://github.com/ZengLiangYi/ChatCrystal/blob/764276814e5c5a33ecbfeae63754f74b9261a3a8/server/src/config.ts) 使用环境变量提供默认值，已保存的模型配置随后覆盖它们。为首次启动设置 `LLM_PROVIDER`、`LLM_MODEL`、`LLM_API_KEY`、`LLM_BASE_URL`，不等于覆盖已有 `config.json`。



```bash
crystal   config   get  
  crystal   config   test
```



检查实际 provider、model、baseURL 与密钥是否已设置。原生工厂没有使用的地址字段即使显示存在，也不能据此判断请求发往那里；要结合注册表读取。配置文件中的凭证也不因界面只显示“已设置”而变成加密存储。

## 把短测试与业务验收分开

连接测试分别请求简短生成与向量，需读取每项结果。HTTP 或命令退出成功不能替代 `connected` 状态；授权、地址、模型访问、超时等错误应按实际信息定位。

然后选一条非演示的真实会话，核对输入长度、生成的标题摘要、关键结论与适用条件。能输出短文本的模型仍可能无法处理长输入或所需结构。摘要、关系发现和向量请求也会分别产生用量，不应只凭笔记数量推算费用。

## 说明切换的影响与数据流

只改变生成配置通常不要求重新导入历史，但已有笔记不会因此自动改写；再次 summarize 已有笔记也可能直接返回原 ID。配置变更时若有任务运行，应用会给出确认提示；先读提示，而不是机械追加 `--confirm`。

远端生成会接收为该任务准备的材料。即使 Embedding 留在本机，也不代表摘要与关系发现的数据不出机器。按照 [数据边界说明](/blog/local-first-ai-data-boundaries) 检查实际路径，再用 [找回调试方案](/blog/recover-debugging-notes) 验证笔记是否真正可用。

分享：

##  相关文章

[##  摘要模型怎么比较：固定输入、核对证据，再算成本

用相同转录、字段评分和失败记录比较本地与云端摘要模型，区分质量评测和 ChatCrystal 的实际处理链路。          曾亮懿       2026年10月4日      阅读约 4 分钟

#ChatCrystal

#LLM

#评测](/blog/llm-summary-evaluation)    [##  AI 对话格式差异：事件、快照与跨库消息定位

对照五个固定适配器，区分 JSONL 容器、事件语义与 SQLite 键布局，用两个内存数据库观察消息索引、孤立数据和未知版本。          曾亮懿       2026年10月7日      阅读约 4 分钟

#ChatCrystal

#Node.js

#SQLite](/blog/ai-conversation-format-divergence)    [##  AI 对话管理方案：四种存储路径与迁移验收

比较 Claude Code、Cursor、Copilot、Trae 的固定适配器输入，区分原始副本、可读导出与知识库，并用合成清单验证身份和信息保留。          曾亮懿       2026年10月7日      阅读约 4 分钟

#ChatCrystal

#Node.js

#SQLite](/blog/ai-conversation-management-options)

##  从文章到代码

到我的 GitHub 看看 ChatCrystal、开发者工具和日常学习记录，欢迎交流实现细节。

[访问我的 GitHub](https://github.com/ZengLiangYi)

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "ZengLiangYi Blog",
  "alternateName": [
    "Zeng Liangyi",
    "ZengLiangYi",
    "zengliangyi.com"
  ],
  "url": "https://zengliangyi.com",
  "description": "曾亮懿的个人网站。记录 AI Native 探索、开发者工具与全栈产品实践。"
}
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "配置云端 LLM：核对提供方、地址与真实摘要",
  "description": "按 ChatCrystal 提供方注册表设置远端生成，区分原生接口与兼容网关，检查持久化配置、凭证和短测试的边界。",
  "url": "https://zengliangyi.com/blog/cloud-llm-configuration/",
  "image": "https://zengliangyi.com/images/blog/cloud-llm-configuration.svg",
  "datePublished": "2026-10-03T00:00:00.000Z",
  "dateModified": "2026-10-03T00:00:00.000Z",
  "author": {
    "@type": "Person",
    "name": "曾亮懿",
    "url": "https://zengliangyi.com/about"
  },
  "publisher": {
    "@type": "Organization",
    "name": "ZengLiangYi Blog",
    "logo": {
      "@type": "ImageObject",
      "url": "https://zengliangyi.com/favicon-96x96.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://zengliangyi.com/blog/cloud-llm-configuration/"
  }
}
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "首页",
      "item": "https://zengliangyi.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "文章",
      "item": "https://zengliangyi.com/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "配置云端 LLM：核对提供方、地址与真实摘要",
      "item": "https://zengliangyi.com/blog/cloud-llm-configuration/"
    }
  ]
}
```
