选择处理方式。
Mac:在设置 → undefined配置服务商,或在本地 AI管理下载的模型。iPhone/iPad:在设置选择undefined、本地 AI Beta或Mac 本地 AI。
设置 Mac、iPhone、iPad 和 Apple Watch 上的聊天,连接 Mac 本地 AI,或使用兼容的自定义服务器。
了解 Apple Watch 的 HRV 测量结果,以及 WatchMuse 如何根据个人基线估算压力。你也可以用示例数值试算。
云端 AI 需要联网,部分服务需要 API 密钥。已下载且受支持的模型可在运行它的设备上推理,不请求云端 AI。使用 Mac 本地 AI 时,仍需能连接到 Mac。下载模型需要网络。
在 Mac、iPhone 和 iPad 上使用核心聊天功能,不需要 Apple Watch。Mac 不包含 Mood 和天气。
Mac:在设置 → undefined配置服务商,或在本地 AI管理下载的模型。iPhone/iPad:在设置选择undefined、本地 AI Beta或Mac 本地 AI。
只填写所选服务需要的信息。Mac 的自定义服务器使用兼容的 HTTPS 地址,不需要密钥或模型字段。内置千问是单独的在线服务,有用量限制。
在聊天中选好服务,先发送文字。附图需要服务和模型支持;Mac 设备连接目前仅支持文字。
Mac 功能预览 · 根据 2026 年 10 月 4 日的当前代码核对,不代表 Mac 构建已在 TestFlight 开放。
模型下载并运行在 Mac 上。iPhone 或 iPad 把本次请求,以及聊天设置包含的上下文交给 Mac;Mac 生成回答后返回。模型文件不会因此下载到其他设备。
使用同一局域网,或你已正确配置、能访问 Mac 的私人 VPN。WatchMuse 不会自动提供公网中转。设备连接采用带认证的 TCP/TLS,不是 HTTP API。
配对码包含连接地址、端口和认证密钥,请像密码一样保管,只交给自己的设备。正常配对通常无需手动填写端口。
修改端口前,先在 Mac 关闭设备连接,保存 1024–65535 范围内的端口,再重新开启。复制新配对码,为每台设备重新配对。
不要将端口转发到公网,也不要关闭认证或加密。如果私人 VPN 无法解析 .local 名称,可在Mac 连接的高级连接设置中填写可访问的 Mac 私网地址。
登录同一 Apple ID 不代表已建立连接。iCloud 聊天同步与 Mac AI 配对是两回事。
Mac 需要开机、保持唤醒,并运行 WatchMuse。关闭窗口后,设备连接仍可在菜单栏中运行;完全退出 App 会停止服务。
App 会记住设备访问开关,下次打开时尝试恢复服务。退出后没有独立后台服务继续运行。重启或启动失败后,都应再次检查就绪状态。
这条连接目前只处理文字,包括按聊天设置整理的文字上下文。Mac 本机能处理图片,不代表远程连接能发送图片。连接失败不会自动转用云端 AI。
一次只运行一个本地生成任务。下载、校验或其他本地回答可能让 Mac 忙碌;新请求可能被拒绝,而不是排队。耗时过长的请求也会超时。
速度取决于硬件、模型大小、可用内存和当前负载。内存建议不是流畅运行保证;资源紧张时,先尝试较小的受支持模型。
Mac 的设置 → 通用 → 通过 iCloud 同步聊天是可选项,使用共享聊天归档。其他设备也需开启聊天备份;Mac 构建必须具备有效签名、iCloud 能力及可用的 iCloud 账户。
归档包含已保存的消息,以及随消息保存的附件、引用和文档提取文字。不包含模型文件、API 密钥或 Mac 配对密钥,这些需要在各设备单独设置。
关闭同步会停止后续同步,不会自动删除已经存入云端的数据。聊天不保证实时同步,也不能代替设备到 Mac 的网络连接。
先接受 App 使用条款,开启设备连接并查看状态。监听服务就绪后才会出现配对码。启动失败时,检查本地网络权限、端口占用和钥匙串访问。签名或应用身份改变可能影响旧凭据的读取,请使用预期的已签名版本。
配对只保存连接信息,并不等于网络测试成功。确认 Mac 已唤醒、App 正在运行、服务已就绪,且两端在局域网或私人 VPN 上互通。检查该 App 的本地网络及防火墙权限,不要关闭整个防火墙。重新核对地址和端口;如果已经改变,用新配对码配对。
唤醒 Mac,重新打开 WatchMuse,等设备服务就绪后重试。关闭窗口和完全退出 App 不同。
关闭设备连接、保存新端口、重新开启,再用新配对码为每台设备配对。旧配对码仍包含旧端口。
等下载、校验和生成任务结束。确认当前 LocalAI 目录包含全部必需文件,并已接受适用的模型条款,然后点击使用此模型。按页面错误提示排查;下载完成不等于已切换。
先确认打开的是预期签名和应用身份的 App。不同标识可能使用不同的容器、偏好和钥匙串权限。在 Mac 的设置 → 通用中,当前代码提供“Recover Previous Data”“Import Downloaded Models…”和“Import Previous Settings…”,这些入口可能仍显示英文。选择旧 LocalAI 文件夹或偏好文件;模型会校验并复制,不会搬走原文件。密码和权限不会导入,导入设置后需重启。不要先删除旧数据。
等待当前本地回答、下载或校验完成,避免多台设备连续重试。若请求超时,改用简短问题或较小模型。
先在配对的 iPhone 上测试文字提问,确认 Mac 配对和手表访问开关。再在 Watch 刷新模型信息,选择 Mac,或跟随 iPhone 的 Mac 路径。保持 iPhone 在附近;后台转发中断时,重新打开它上面的 WatchMuse。无需给手表下载模型。
下面是云端服务的设置方式,本地 AI 请看上方指南。只有要求密钥的服务才需要填写。模型可能因平台和版本不同而变化,请以 App 内列表为准。
| AI 服务 | 设置方法 | App 默认模型 / 可选模型 |
|---|---|---|
| 千问 AI Qwen AI | 为 WatchMuse 提供的在线服务,有单独的访问条件与用量限制。与可下载的千问模型是两回事。 | 由 WatchMuse 服务器决定。 |
| OpenAI | 按照 OpenAI 官方指南创建 API 密钥,再填入 App。OpenAI 密钥指南 | 请查看 App 内的模型选项;Mac 与移动端的默认值可能不同。 |
| Gemini | 在 Google AI Studio 创建 API 密钥,再填入 App。Gemini 密钥指南 | 请查看 App 内的模型选项;Mac 与移动端的默认值可能不同。 |
| DeepSeek | 在 DeepSeek 开放平台申请 API 密钥,再填入 App。DeepSeek 密钥指南 | 请查看 App 内的模型选项;Mac 与移动端的默认值可能不同。 |
| Claude | 在 Claude Console 创建 API 密钥,再填入 App。Claude 密钥指南 | 请查看 App 内的模型选项;Mac 与移动端的默认值可能不同。 |
| Perplexity Sonar | 在 Perplexity API Console 创建 API 密钥,再填入 App。Sonar 密钥指南 | 请查看 App 内的模型选项;Mac 与移动端的默认值可能不同。 |
| OpenRouter | 创建一个 OpenRouter API 密钥,然后从 App 的模型列表中选择模型,无需为其他平台逐一添加密钥。OpenRouter 密钥指南 | 请查看 App 内的模型选项;Mac 与移动端的默认值可能不同。 |
| 自定义服务器 | 填写完整的 HTTPS 接口 URL。该接口必须接收 App 发出的请求,并返回规定格式的响应,普通网页地址无法使用。查看接口格式 | 由你自己的服务器决定。 |
模型是否可用、是否支持图片,以及用量限制和费用,取决于所选服务、模型和账户。请以 App 中的模型列表及服务商的最新文档为准。密钥只需填入 App,本网站不会要求你提交 API 密钥。
APPLE WATCH
问题排查点开问题,快速找到解决方法。
请在“设置 → AI 与聊天”中保持“回复通知”开启。网络请求和后台任务能持续多久由 watchOS 决定;App 被挂起或终止后,无法保证每个耗时较长的请求都能完成。重新打开对话,可查看已保存的内容。
请为 WatchMuse 开启定位服务,再试一次“更新当前位置”。Apple 天气暂时不可用时,如果已开启备用服务,WatchMuse 可以改用 Open-Meteo。你也可以手动填写城市。
请允许读取健康数据,并确认 Apple Watch 最近有记录 HRV。WatchMuse 读取的是 Apple Watch 已保存的最新测量结果,无法强制进行新的 HRV 测量。身心状态分级仅供参考,不属于医学诊断。
安装或更新后,先打开一次 WatchMuse,确认相应的心情、压力或天气功能已开启,再等待 watchOS 刷新时间线。必要时,可从表盘移除该复杂功能后重新添加。
请在 watchOS 设置中检查通知权限,并确认 WatchMuse 内对应的提醒已开启。睡眠保护可能会主动暂停心情提醒;watchOS 也可能为节省电量而延后后台任务。
通过一个兼容的 HTTPS 接口,WatchMuse 即可连接 Ollama、自部署模型或云端模型。你的服务器负责将 WatchMuse 的简单请求转换为模型所需的格式。
使用兼容的 HTTPS 接口。Mac 的这个选项无需填写 API Key 或选择模型,由服务器决定模型。它与 Mac 设备连接不是同一功能。
请填写接口本身的 URL,而不是 Ollama 控制台或模型页面的地址。WatchMuse 以 UTF-8 编码的 JSON 发送 HTTP POST 请求,问题放在 message 中。未附图时,服务器应同时接受图片字段为 null 或未提供的情况。
接口必须在请求超时前返回成功的 2xx 状态码、Content-Type: application/json,以及一个非空的 reply 字符串。
{
"message": "Hello",
"imageBase64": null,
"mimeType": null
}
{
"reply": "Hello from your model."
}
在支持附图的聊天界面,选择图片并输入问题即可,App 会处理编码。不要把一长串 Base64 粘贴到普通聊天输入框里。下面的说明用于开发或测试自定义服务器接口。
Base64 把图片文件的二进制数据转成文字,便于放进 JSON;它不是图片网址,也不是文件路径。
{
"message": "这张图片里有什么?",
"imageBase64": "REPLACE_WITH_FULL_BASE64",
"mimeType": "image/jpeg"
}REPLACE_WITH_FULL_BASE64 是占位文字,发送前必须替换为图片的完整 Base64。不要直接发送这段占位文字。
以下命令只读取本地图片并输出编码,不会上传文件。把路径换成自己的图片路径,再将输出填入 imageBase64。
base64 -i "/path/to/photo.jpg" | tr -d '\r\n'[Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\path\to\photo.jpg"))下方 Ollama 网关中的 qwen2.5 是文字模型示例。测试图片时,需要换成已安装、支持图片输入的模型。 Ollama 图片输入文档 ↗
Base64 不是加密。请使用 HTTPS;私密图片建议在本机编码,不要上传到不信任的在线转换网站。
curl -X POST "https://your-domain.example/watch-ai" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"message": "Reply with the word ready.",
"imageBase64": null,
"mimeType": null
}'
{ "reply": "ready" }
import express from "express";
const app = express();
app.use(express.json({ limit: "20mb" }));
app.post("/watch-ai", async (request, response) => {
const { message, imageBase64, mimeType } = request.body ?? {};
if (typeof message !== "string" || !message.trim()) {
return response.status(400).json({ error: "message is required" });
}
const userMessage = { role: "user", content: message };
if (imageBase64 && mimeType?.startsWith("image/")) {
userMessage.images = [imageBase64];
}
try {
const ollamaResponse = await fetch("http://127.0.0.1:11434/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
model: "qwen2.5",
messages: [userMessage],
stream: false
})
});
if (!ollamaResponse.ok) {
return response.status(502).json({ error: "Model request failed" });
}
const result = await ollamaResponse.json();
const reply = result?.message?.content?.trim();
if (!reply) {
return response.status(502).json({ error: "Model returned no answer" });
}
return response.json({ reply });
} catch {
return response.status(503).json({ error: "Model is unavailable" });
}
});
app.listen(3000, "127.0.0.1");
请提供 App 版本、设备、系统版本、所选 AI 方式和完整错误提示。连接 Mac 时,也请说明服务是否显示已就绪。不要发送配对码、密钥或私人对话内容。
[email protected]