# sensemore **Repository Path**: opencode-plugin/sensemore ## Basic Information - **Project Name**: sensemore - **Description**: 商汤-支持多key轮询 - **Primary Language**: TypeScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-15 - **Last Updated**: 2026-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SenseNova OpenCode Provider Plugin **提供商 ID**: `sensemore` | **显示名称**: SenseNova | **Base URL**: `https://token.sensenova.cn/v1` OpenCode 插件,集成商汤 SenseNova 平台,支持 API Key 多密钥轮询以缓解速率限制。 ## 功能 - **多 Key 轮询** — 输入多个 API Key(逗号分隔),自动循环切换,减缓 `429` 速率限制 - **错误容错** — 单个 Key 连续错误 3 次自动跳过,全部不可用时重置计数 - **模型支持** — 内置 `sensenova-6.7-flash-lite`(多模态视觉)和 `deepseek-v4-flash`(推理/思考模式) - **请求头注入** — 自动设置 `User-Agent` 和 `Accept` 头,避免 403 - **调试日志** — `~/.sensemore/debug.log`,由环境变量控制开关 - **凭证存储** — API Key 持久化到 `~/.sensemore/auth.json` ## 安装 ### 前提 - Node.js 22+ - OpenCode ### 步骤 ```bash # 1. 进入项目 cd sensemore # 2. 安装依赖 npm install # 3. 构建 npm run build ``` ## 配置 ### 1. 添加凭据 在 OpenCode 中执行 `/connect` 命令,选择 **SenseNova**: ``` ┌ 创建 API Key: https://platform.sensenova.cn/console/keys │ │ 商汤-日日新-tokenplan订阅,公测期间免费 │ (1500次调用/5小时/模型/apikey) │ │ 输入 API Keys(多key用逗号分隔) │ ──────────────────────────────── │ sk-key1,sk-key2,sk-key3 └ enter ``` > 多个 Key 用逗号分隔,插件会自动轮询使用。 ### 2. 配置 opencode.json ```json { "provider": { "sensemore": { "name": "SenseNova", "options": { "baseURL": "https://token.sensenova.cn/v1" } } } } ``` ### 3. 选择模型 执行 `/models` 命令,选择可用模型: | Model ID | 描述 | 上下文 | 特性 | |----------|------|--------|------| | `sensenova-6.7-flash-lite` | 轻量多模态智能体模型 | 256K | 文本+图像输入 | | `deepseek-v4-flash` | 高性能对话模型 | 1M | 思考模式、工具调用 | | `sensenova-u1-fast` | 信息图(Infographics)生成 | 4K | 文本到图像 | ## 图像参数请求头 其他 OpenCode 插件(如智能体编排插件)可通过 `chat.headers` 钩子注入自定义请求头, 控制图像生成的输出参数。插件在 `auth.loader` 的自定义 `fetch` 中自动读取并应用。 | 请求头 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `X-Image-Size` | string | `2752x1536` | 输出尺寸,支持 11 种宽高比(见下表) | | `X-Image-N` / `X-Image-Count` | number | `1` | 生成图片数量 | ### 支持的尺寸 | 尺寸 | 宽高比 | |------|--------| | `1664x2496` | 2:3 | | `2496x1664` | 3:2 | | `1760x2368` | 3:4 | | `2368x1760` | 4:3 | | `1824x2272` | 4:5 | | `2272x1824` | 5:4 | | `2048x2048` | 1:1 | | `2752x1536` | 16:9(默认) | | `1536x2752` | 9:16 | | `3072x1376` | 21:9 | | `1344x3136` | 9:21 | ### 注入示例 外部插件的 `chat.headers` 钩子: ```typescript 'chat.headers': async (input, output) => { if (input.model.modelID === 'sensenova-u1-fast') { output.headers['X-Image-Size'] = '2048x2048' // 1:1 方形 output.headers['X-Image-N'] = '2' // 生成 2 张 } } ``` ## 多 Key 轮询机制 ``` 请求 → loader → KeyManager.getNextKey() ↓ ┌──────────────┐ │ key1 ← 首次 │ │ key2 ← 下次 │ │ key3 ← 再下次 │ └──────────────┘ ↓ 返回 apiKey → 发起 API 请求 ``` - 循环轮询:`key1 → key2 → key3 → key1 → ...` - 错误追踪:每个 Key 连续失败 3 次后跳过 - 自动恢复:所有 Key 都被跳过时重置计数 ## 调试日志 通过环境变量开启调试日志: ```bash # 方式一:全局 DEBUG DEBUG=1 opencode # 方式二:仅 SenseNova OPENCODE_SENSEMORE_DEBUG=1 opencode ``` 日志位置:`%USERPROFILE%\.sensemore\debug.log` ## 项目结构 ``` sensemore/ ├── package.json ├── tsconfig.json ├── src/ │ ├── index.ts # 主入口:auth hook + config hook + chat.headers │ ├── constants.ts # 提供商配置、模型定义 │ ├── plugin/ │ │ ├── auth.ts # 凭证读写 ~/.sensemore/auth.json │ │ └── key-manager.ts # 多 Key 轮询算法 │ └── utils/ │ └── debug-logger.ts # 文件日志(无 console.error) └── dist/ # 构建产物 ``` ## 开发 ```bash # 构建 npm run build # 类型检查 npm run typecheck ``` ## 许可 Apache 2.0