Files
agent-skills/sn-image-base/README_CN.md
Hermes Agent ccc63d1e70 first commit
2026-05-10 13:52:46 +08:00

240 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sn-image-base
该技能属于 [SenseNova-Skills](https://github.com/OpenSenseNova/SenseNova-Skills) 项目提供图像生成、图像识别VLM和文本优化LLM的底层 API 能力。
完整行为请见 [SKILL.md](SKILL.md)。
本文档主要介绍该技能的详细配置。
概览与技能安装、使用方法请参考项目根目录下的 [README.md](../../README.md)(中文可见 [README_CN.md](../../README_CN.md));详细配置以本文档为准。
## 概览
该技能提供以下子命令:
- `sn-image-generate`:图像生成
- `sn-image-recognize`图像识别VLM
- `sn-text-optimize`文本优化LLM
支持的模型服务如下:
- 图像生成:
- [SenseNova](https://platform.sensenova.cn/)
- Nano Banana API
- OpenAI 图像生成 API例如 GPT-Image-2
- 文本与视觉 Chat
- [SenseNova](https://platform.sensenova.cn/)
- 通过 Anthropic Messages API 接入的模型(例如 Claude Sonnet 4.6
- 通过 OpenAI Chat Completion API 接入的模型(例如 GPT、Gemini/Qwen 等 OpenAI 兼容格式模型)
## 配置
### 快速开始
推荐使用 [SenseNova Token Plan](https://platform.sensenova.cn/token-plan)。
前往 <https://platform.sensenova.cn/token-plan/> 注册免费账号,并获取可用于图像生成和 chat 调用的 API Key。
将以下环境变量写入 `~/.openclaw/.env`OpenClaw`~/.hermes/.env`Hermes
```ini
# 如果所有能力都走同一个网关,只需要配置这两个变量。
SN_BASE_URL="https://token.sensenova.cn/v1"
SN_API_KEY="<sensenova-token-plan-api-key>"
# 可选模型覆盖
SN_IMAGE_GEN_MODEL="sensenova-u1-fast" # 或 Token Plan 中可用的其他图像生成模型
SN_CHAT_MODEL="sensenova-6.7-flash-lite"
```
**注意:不要将 `.env` 文件或 API key 提交到 git。**
### 详细配置
完成 [快速开始](#快速开始) 后即可使用本技能。
若需更进一步配置(例如使用不同模型、修改 base URL 等),请参考以下内容。
支持多重配置来源,优先级(从高到低)如下:
- (推荐)`~/.openclaw/.env`OpenClaw`~/.hermes/.env`Hermes
- 当前工作目录 `.env`(不一定存在,取决于 agent 运行技能的方式)
- 进程环境变量
> 进阶开发者可查看 [configs.py](scripts/sn_image_base/configs.py) 获取完整变量与默认值。
>
> 便于快速追踪行为的关键符号:
>
> - `prepare_env()``.env` 加载顺序
> - `Field.resolve()`:环境变量回退顺序(“第一个已设置值优先”)
> - `Configs`:默认值与环境变量映射
#### 图像生成
环境变量解析优先级为:专用变量 > 领域共享变量 > 全局变量。
| 能力 | API key fallback | Base URL fallback |
| ---- | ---------------- | ----------------- |
| 文本模型 | `SN_TEXT_API_KEY` -> `SN_CHAT_API_KEY` -> `SN_API_KEY` | `SN_TEXT_BASE_URL` -> `SN_CHAT_BASE_URL` -> `SN_BASE_URL` |
| 视觉模型 | `SN_VISION_API_KEY` -> `SN_CHAT_API_KEY` -> `SN_API_KEY` | `SN_VISION_BASE_URL` -> `SN_CHAT_BASE_URL` -> `SN_BASE_URL` |
| 图像生成 | `SN_IMAGE_GEN_API_KEY` -> `SN_API_KEY` | `SN_IMAGE_GEN_BASE_URL` -> `SN_BASE_URL` |
图像生成完整配置如下:
| 配置键 | 说明 | 默认值 |
| ------ | ---- | ------ |
| `SN_API_KEY` | 所有能力共用的全局 API Key | `""` |
| `SN_BASE_URL` | 所有能力共用的全局基础 URL | `""` |
| `SN_IMAGE_GEN_API_KEY` | 可选的图像生成专用 API key 覆盖 | `SN_API_KEY` |
| `SN_IMAGE_GEN_MODEL_TYPE` | 图像生成模型类型 | `"sensenova"` |
| `SN_IMAGE_GEN_MODEL` | 图像生成模型名 | `"sensenova-u1-fast"` |
| `SN_IMAGE_GEN_BASE_URL` | 图像生成 API 的基础 URL | `SN_BASE_URL`,然后 `"https://token.sensenova.cn/v1"` |
默认值适用于 [SenseNova](https://platform.sensenova.cn/)。
如果所有能力走同一个网关,只需要设置 `SN_BASE_URL``SN_API_KEY`
仅当图像生成需要不同 provider 时,再设置 `SN_IMAGE_GEN_*`
如需使用非默认图像生成模型,请按以下步骤:
1. 设置 `SN_IMAGE_GEN_MODEL_TYPE` 为对应模型类型,可选值如下:
```ini
# (默认)用于 [SenseNova](https://platform.sensenova.cn/)
SN_IMAGE_GEN_MODEL_TYPE="sensenova"
# 用于 Google Nano Banana 模型 API
SN_IMAGE_GEN_MODEL_TYPE="nano-banana"
# 用于 OpenAI 图像生成 API
SN_IMAGE_GEN_MODEL_TYPE="openai-image"
```
2. 设置 `SN_IMAGE_GEN_BASE_URL` 为图像生成 API 的基础 URL例如
```ini
# (默认)用于 [SenseNova](https://platform.sensenova.cn/)
SN_IMAGE_GEN_BASE_URL="https://token.sensenova.cn/v1"
# 用于 Google Nano Banana 模型 API
SN_IMAGE_GEN_BASE_URL="https://generativelanguage.googleapis.com"
# 用于 OpenAI 图像生成 API
SN_IMAGE_GEN_BASE_URL="https://api.openai.com/v1"
```
3. 设置 `SN_IMAGE_GEN_MODEL` 为对应类型下的模型名,例如:
```ini
# (默认)用于 [SenseNova](https://platform.sensenova.cn/)
SN_IMAGE_GEN_MODEL="sensenova-u1-fast"
# 用于 Google Nano Banana 模型 API
SN_IMAGE_GEN_MODEL="gemini-3.1-flash-image-preview"
# 用于 OpenAI 图像生成 API
SN_IMAGE_GEN_MODEL="gpt-image-2"
```
4. 如果图像生成使用不同于全局 key 的密钥,再设置 `SN_IMAGE_GEN_API_KEY`。如果 `SN_API_KEY` 已可用于图像生成,则无需设置。
```ini
SN_IMAGE_GEN_API_KEY="sk-your-image-generation-api-key"
```
#### 文本与视觉 Chat
##### 配置共享 Chat Runtime
文本优化和图像识别现在共享一套 chat runtime。协议、endpoint、API key 与默认模型配置一次,仅在需要时分别覆盖文本或视觉模型:
| 配置键 | 说明 | 默认值 |
| ------ | ---- | ------ |
| `SN_CHAT_API_KEY` | text/vision chat 调用共用 API key | `SN_API_KEY` |
| `SN_CHAT_BASE_URL` | 共享 Chat API 基础 URL | `SN_BASE_URL`,然后 `"https://token.sensenova.cn/v1"` |
| `SN_CHAT_TYPE` | 共享 Chat 协议类型 | `"openai-completions"` |
| `SN_CHAT_MODEL` | text/vision chat 调用共用默认模型 | `"sensenova-6.7-flash-lite"` |
| `SN_TEXT_API_KEY` | 可选文本 provider API key | `SN_CHAT_API_KEY` -> `SN_API_KEY` |
| `SN_TEXT_BASE_URL` | 可选文本 provider 基础 URL | `SN_CHAT_BASE_URL` -> `SN_BASE_URL` |
| `SN_TEXT_TYPE` | 可选文本协议类型 | `SN_CHAT_TYPE` |
| `SN_TEXT_MODEL` | 可选的 `sn-text-optimize` 模型覆盖 | `SN_CHAT_MODEL` |
| `SN_VISION_API_KEY` | 可选视觉 provider API key | `SN_CHAT_API_KEY` -> `SN_API_KEY` |
| `SN_VISION_BASE_URL` | 可选视觉 provider 基础 URL | `SN_CHAT_BASE_URL` -> `SN_BASE_URL` |
| `SN_VISION_TYPE` | 可选视觉协议类型 | `SN_CHAT_TYPE` |
| `SN_VISION_MODEL` | 可选的 `sn-image-recognize` 视觉模型覆盖 | `SN_CHAT_MODEL` |
默认值适用于 [SenseNova](https://platform.sensenova.cn/)。
仅当文本或视觉命令需要使用不同 provider 时,才需要配置 `SN_TEXT_*` 或 `SN_VISION_*`。
对于 chat 调用runner 也兼容不带路径的 host-only base URL例如
`https://token.sensenova.cn`:如果 URL 中没有 path会先补上 API 版本路径再追加具体接口。
为保持和内置默认值一致,建议优先使用带版本路径的 base URL例如
`https://token.sensenova.cn/v1`。
如需使用非默认 chat 设置,请按以下步骤:
1. 按 chat API 协议设置 `SN_CHAT_TYPE`。可选值如下:
```ini
# 默认OpenAI 兼容 `/chat/completions` 接口(最常见)
SN_CHAT_TYPE="openai-completions"
# Anthropic Messages `/messages` 接口
SN_CHAT_TYPE="anthropic-messages"
```
2. 将 `SN_CHAT_BASE_URL` 设置为共享 chat endpoint 的基础 URL例如
```ini
# (默认)用于 [SenseNova](https://platform.sensenova.cn/)
SN_CHAT_BASE_URL="https://token.sensenova.cn/v1"
# 用于 Anthropic Messages API
SN_CHAT_BASE_URL="https://api.anthropic.com/v1"
# 用于 OpenAI Chat Completion API
SN_CHAT_BASE_URL="https://api.openai.com/v1"
# 用于 Google Gemini APIOpenAI 兼容)
SN_CHAT_BASE_URL="https://generativelanguage.googleapis.com/v1beta/openai/"
```
3. 设置 `SN_CHAT_MODEL`,仅在文本或视觉命令需要不同模型时再设置 `SN_TEXT_MODEL` / `SN_VISION_MODEL`
```ini
# 默认SenseNova 6.7 Flash Lite
SN_CHAT_MODEL="sensenova-6.7-flash-lite"
# Anthropic Claude Sonnet 4.6
SN_VISION_MODEL="claude-sonnet-4-6"
# Google Gemini 3 Flash Preview
SN_VISION_MODEL="gemini-3-flash-preview"
# OpenAI GPT 5.5
SN_TEXT_MODEL="gpt-5.5"
```
4. 设置 `SN_CHAT_API_KEY` 为共享 chat endpoint 的 API key或使用全局 `SN_API_KEY`
```ini
SN_CHAT_API_KEY="sk-your-api-key"
```
## 故障排查
### 缺少 API key
- 现象:报错包含 "required but not set"、"missing api key" 或请求未授权。
- 处理:如果所有能力使用同一个 key设置全局 `SN_API_KEY` 即可。不要重复设置 `SN_IMAGE_GEN_API_KEY`,除非图像生成需要不同 provider 或 key仅当 chat/text/vision 需要不同 provider 时,再设置 `SN_CHAT_API_KEY`、`SN_TEXT_API_KEY` 或 `SN_VISION_API_KEY`。
### base URL 配置错误
- 现象:请求立即失败,或出现 URL 校验 / endpoint 相关错误。
- 处理:检查 `SN_BASE_URL` 或能力专用 base URL 是否为完整基础 URL包含 scheme + host例如 `https://token.sensenova.cn/v1`。
### 模型名不支持
- 现象provider 返回 HTTP 404 / model-not-found / bad request。
- 处理:确认 `*_MODEL_TYPE` / `*_TYPE` 与 `*_MODEL` 来自同一 provider且模型在当前账号下可用。
### 鉴权 / 权限错误
- 现象HTTP 401/403、"permission denied"、"forbidden"。
- 处理:确认密钥与所选 provider endpoint 匹配,检查账号配额/权限,并使用已知可用模型重试。
## 安全说明
- **不要**将 `.env` 文件或 API key 提交到 git。
- 若密钥泄露,请立即轮换并更新本地环境变量文件。
- 优先使用本地密钥管理(`~/.openclaw/.env` 或 `~/.hermes/.env`),避免在脚本或提示词中硬编码密钥。