first commit
This commit is contained in:
239
sn-image-base/README_CN.md
Normal file
239
sn-image-base/README_CN.md
Normal file
@@ -0,0 +1,239 @@
|
||||
# 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 API(OpenAI 兼容)
|
||||
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`),避免在脚本或提示词中硬编码密钥。
|
||||
Reference in New Issue
Block a user