Compare commits
10 Commits
3e67e92173
...
d33172c24c
| Author | SHA1 | Date | |
|---|---|---|---|
| d33172c24c | |||
| 01137aec75 | |||
| 8eed4b3e76 | |||
| a992b8c3e5 | |||
| 17170c35ea | |||
| d0e3174c01 | |||
| 3843135eab | |||
| 258c39fa58 | |||
| b0d619f20e | |||
| 6f45a57979 |
+8
-4
@@ -3,9 +3,10 @@ PORT=3300
|
||||
# 客户端调用本代理时使用的唯一密钥
|
||||
PROXY_API_KEY=sk-001
|
||||
|
||||
# 你的真实 DashScope API 密钥,请勿发送给客户端。
|
||||
# 所有密钥共享同一个 MODEL_IDS 模型池,代理会在单个密钥下尝试所有模型,
|
||||
# 全部失败后才会切换到下一个密钥。
|
||||
# 你的阿里云百炼大模型密钥,请勿发送给客户端。
|
||||
# 支持配置多个密钥(逗号分隔),实现多账号兜底:
|
||||
# 当前账号所有模型额度用尽后,自动切换到下一个账号。
|
||||
# 每个账号下共享同一个 MODEL_IDS 模型池,代理会逐个尝试模型。
|
||||
DASHSCOPE_API_KEYS=sk-change-me-1
|
||||
|
||||
# DashScope Anthropic 兼容协议的基础 URL
|
||||
@@ -14,9 +15,12 @@ UPSTREAM_BASE_URL=https://dashscope.aliyuncs.com/apps/anthropic
|
||||
# DashScope OpenAI 兼容协议(Chat Completions)的基础 URL
|
||||
OPENAI_UPSTREAM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
||||
|
||||
# 逗号分隔的模型池,代理会用其中之一覆盖请求体中的 "model" 字段
|
||||
# 文本模型,逗号分隔的模型池,代理会用其中之一覆盖请求体中的 "model" 字段
|
||||
MODEL_IDS=deepseek-v4-flash,deepseek-v4-pro,qwen3.7-max-2026-06-08,qwen3.7-plus-2026-05-26,qwen3.7-plus,qwen3.7-max-preview,qwen3.7-max-2026-05-17,qwen3.7-max,qwen3.7-max-2026-05-20,qwen3.6-27b,qwen3.6-max-preview,qwen3.6-flash,qwen3.6-35b-a3b,qwen3.6-flash-2026-04-16,qwen3.6-plus,qwen3.6-plus-2026-04-02
|
||||
|
||||
# 图片模型,暂未接入
|
||||
IMAGE_MODEL_IDS=qwen-image-2.0-pro-2026-04-22,wan2.7-image-pro,wan2.7-image
|
||||
|
||||
# 免费额度耗尽后,该密钥+模型组合的禁用时长(秒)。默认 30 天。
|
||||
MODEL_COOLDOWN_SECONDS=2592000
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 阿里云模型代理
|
||||
|
||||
基于 Hono.js 的反向代理服务,同时支持阿里云 DashScope Anthropic 兼容接口和 OpenAI 兼容接口。客户端只需一个代理地址和一个代理密钥,真实 DashScope API Key 和模型池均在服务端隐藏管理。当免费额度耗尽时,代理自动切换模型。
|
||||
基于 Hono.js 的反向代理服务,同时支持阿里云 DashScope Anthropic 兼容接口和 OpenAI 兼容接口。客户端只需一个代理地址和一个代理密钥,阿里云百炼大模型密钥和模型池均在服务端隐藏管理。当免费额度耗尽时,代理自动切换模型。
|
||||
|
||||
> 阿里云 DashScope 每个模型提供 **1000 万免费 tokens**,通过模型池聚合多个模型,可最大化利用免费额度。
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
## 功能
|
||||
|
||||
- 对外只暴露一个 API Key
|
||||
- 隐藏真实 DashScope API Key 和模型池
|
||||
- 隐藏阿里云百炼大模型密钥和模型池
|
||||
- Anthropic 协议 `POST /v1/messages` 代理
|
||||
- OpenAI Chat Completions 协议 `POST /v1/chat/completions` 代理
|
||||
- OpenAI 协议 `GET /v1/models` 返回本地模型池列表
|
||||
@@ -24,19 +24,31 @@
|
||||
## 模型池
|
||||
|
||||
> 截至 2026 年 6 月 11 日,以下模型均提供 **1000 万免费 tokens**,额度用完后代理自动切换至下一个可用模型,客户端无感知。
|
||||
>
|
||||
> 开通地址:[阿里云百炼控制台 - 模型试用](https://bailian.console.aliyun.com/)
|
||||
>
|
||||
> 活动地址:[Qwen3 免费额度活动](https://www.aliyun.com/benefit/client/qwen3)
|
||||
|
||||
**⚠️ 重要:必须开启"用完即停"**
|
||||
|
||||
在百炼控制台为每个模型开启**"用完即停"**(而非"用完转付费")。如果不开启,额度用完后会自动转付费,代理无法检测到额度耗尽,切换机制将失效。
|
||||
|
||||

|
||||
|
||||
当前配置的模型 ID:
|
||||
|
||||
```text
|
||||
deepseek-v4-flash
|
||||
deepseek-v4-pro
|
||||
qwen3.7-max-2026-06-08
|
||||
qwen3.7-plus-2026-05-26
|
||||
qwen3.7-plus
|
||||
qwen3.7-max-preview
|
||||
qwen3.7-max-2026-05-17
|
||||
qwen3.7-max
|
||||
qwen3.7-max-2026-05-20
|
||||
glm-5.1
|
||||
kimi-k2.6
|
||||
qwen3.7-max-2026-05-17
|
||||
deepseek-v4-flash
|
||||
deepseek-v4-pro
|
||||
qwen3.6-27b
|
||||
qwen3.6-max-preview
|
||||
qwen3.6-flash
|
||||
@@ -48,9 +60,11 @@ qwen3.6-plus-2026-04-02
|
||||
|
||||
**自动切换机制**
|
||||
|
||||
- 单个模型额度耗尽时,代理自动切换到下一个模型,客户端无需修改任何配置
|
||||
- 配置多个 `DASHSCOPE_API_KEYS` 可支持多账号,当前账号所有模型额度用尽后自动切换到下一个账号
|
||||
- 所有切换过程对客户端透明,通过统一的 `PROXY_API_KEY` 访问即可
|
||||
`DASHSCOPE_API_KEYS` 是你在阿里云百炼控制台申请的真实 API 密钥(可配置多个,逗号分隔)。代理会基于这些密钥和 `MODEL_IDS` 中的模型,自动进行两层轮换:
|
||||
|
||||
- **多模型轮换**:单个模型额度耗尽时,自动切换到同账号下的下一个模型
|
||||
- **多账号兜底**:当前账号所有模型额度都用尽时,自动切换到下一个账号(即下一个 `DASHSCOPE_API_KEYS`)
|
||||
- 所有切换过程对客户端透明,客户端只需使用 `PROXY_API_KEY` 访问即可,无需关心底层有多少个账号和模型
|
||||
|
||||
**数据安全**
|
||||
|
||||
@@ -61,7 +75,6 @@ qwen3.6-plus-2026-04-02
|
||||
|
||||
- [使用说明](docs/usage.md)
|
||||
- [状态文件说明](docs/state-file.md)
|
||||
- [Q/A 与方案决策记录](docs/qa-and-decisions.md)
|
||||
|
||||
## 快速开始
|
||||
|
||||
@@ -194,8 +207,24 @@ docker build -t dashscope-model-proxy .
|
||||
docker run --env-file .env -p 3300:3300 dashscope-model-proxy
|
||||
```
|
||||
|
||||
## 社区支持
|
||||
|
||||
💬 欢迎到 [linux.do](https://linux.do) 交流、分享和反馈。
|
||||
|
||||
## 说明
|
||||
|
||||
冷却状态保存在 `STATE_PATH` 指定的 JSON 文件中,存储内容包括 Key 哈希、模型 ID、冷却截止时间、失败次数和最近错误信息,不保存明文 DashScope API Key。
|
||||
冷却状态保存在 `STATE_PATH` 指定的 JSON 文件中,存储内容包括 Key 哈希、模型 ID、冷却截止时间、失败次数和最近错误信息,不保存明文阿里云百炼大模型密钥。
|
||||
|
||||
状态文件仅供单进程写入设计。若部署多实例,需各自维护独立状态文件或引入外部协调存储。
|
||||
|
||||
## 免责声明
|
||||
|
||||
本项目仅供学习和研究使用。使用本项目时,请遵守相关法律法规和服务提供商的使用条款。
|
||||
|
||||
- 本项目与阿里云、DashScope、Anthropic、OpenAI 等公司无任何关联
|
||||
- 本项目不存储、不传输任何用户的 API 密钥或敏感数据,所有数据均保存在用户本地
|
||||
- 使用本项目产生的任何费用、损失或法律责任,由使用者自行承担
|
||||
- 本项目作者不对因使用本项目而导致的任何直接或间接损失负责
|
||||
- 请确保您使用本项目的行为符合相关法律法规和服务提供商的使用条款
|
||||
|
||||
如果您发现本项目侵犯了您的权益,请联系作者进行处理。
|
||||
|
||||
@@ -1,455 +0,0 @@
|
||||
# Q/A 与方案决策记录
|
||||
|
||||
本文记录本地 DashScope 反代服务的需求讨论、关键 Q/A、方案选择和最终共识,方便后续继续维护。
|
||||
|
||||
## 1. 初始需求
|
||||
|
||||
用户有多个 DashScope Anthropic 兼容模型 ID,希望对外只暴露一个固定 URL 和一个代理 key。
|
||||
|
||||
上游地址:
|
||||
|
||||
```text
|
||||
https://dashscope.aliyuncs.com/apps/anthropic
|
||||
```
|
||||
|
||||
典型免费额度耗尽错误:
|
||||
|
||||
```json
|
||||
{
|
||||
"request_id": "xxx",
|
||||
"code": "AccessDenied",
|
||||
"message": "The free tier of the model has been exhausted. If you wish to continue access the model on a paid basis, please disable the \"use free tier only\" mode in the management console."
|
||||
}
|
||||
```
|
||||
|
||||
判断条件:
|
||||
|
||||
```text
|
||||
HTTP 状态码 = 403
|
||||
code = AccessDenied
|
||||
message 包含 free tier 和 exhausted
|
||||
```
|
||||
|
||||
最终目标:
|
||||
|
||||
1. 客户端只配置一个本地代理 URL。
|
||||
2. 客户端只使用一个代理 key。
|
||||
3. 真实 DashScope API Key 不暴露给客户端。
|
||||
4. 模型进入冷却时自动切换,不需要手动改 model。
|
||||
|
||||
## 2. 技术选型
|
||||
|
||||
### Q:用什么框架搭建?
|
||||
|
||||
A:用户指定使用 Hono.js。
|
||||
|
||||
最终方案:
|
||||
|
||||
```text
|
||||
Node.js + TypeScript + Hono.js
|
||||
```
|
||||
|
||||
原因:
|
||||
|
||||
- 项目小,Hono 足够轻量。
|
||||
- Node 20+ 原生支持 `fetch` 和 Web Stream。
|
||||
- 适合做 Anthropic 兼容 HTTP 反代。
|
||||
|
||||
## 3. 项目位置
|
||||
|
||||
### Q:放在哪里?
|
||||
|
||||
A:单独新建项目,不放到原 uni-app 项目里。
|
||||
|
||||
最终路径:
|
||||
|
||||
```text
|
||||
proxy-server
|
||||
```
|
||||
|
||||
## 4. 对外接口
|
||||
|
||||
### Q:本地对外 URL 是什么?
|
||||
|
||||
A:默认根据 `.env` 的 `PORT` 决定。
|
||||
|
||||
当前给 Pi CLI 使用的配置:
|
||||
|
||||
```env
|
||||
PORT=3300
|
||||
PROXY_API_KEY=sk-001
|
||||
```
|
||||
|
||||
本地 URL:
|
||||
|
||||
```text
|
||||
http://localhost:3300
|
||||
```
|
||||
|
||||
Anthropic Messages 接口:
|
||||
|
||||
```text
|
||||
http://localhost:3300/v1/messages
|
||||
```
|
||||
|
||||
客户端请求头二选一:
|
||||
|
||||
```http
|
||||
Authorization: Bearer sk-001
|
||||
```
|
||||
|
||||
或:
|
||||
|
||||
```http
|
||||
x-api-key: sk-001
|
||||
```
|
||||
|
||||
## 5. 代理是否修改 Prompt
|
||||
|
||||
### Q:代理有没有加提示词、改 system 或 messages?
|
||||
|
||||
A:没有。
|
||||
|
||||
当前代理只修改请求体里的:
|
||||
|
||||
```json
|
||||
"model"
|
||||
```
|
||||
|
||||
不会修改:
|
||||
|
||||
```text
|
||||
system
|
||||
messages
|
||||
tools
|
||||
tool_choice
|
||||
thinking
|
||||
max_tokens
|
||||
temperature
|
||||
任何 prompt 内容
|
||||
```
|
||||
|
||||
Pi CLI 中模型回答“我是 Claude,由 Anthropic 开发”不代表代理加了提示词。更可能来自:
|
||||
|
||||
1. Pi CLI 自己的系统提示词和代理框架上下文。
|
||||
2. DashScope Anthropic 兼容接口下模型的身份回答习惯。
|
||||
|
||||
## 6. 单个真实 key + 多模型阶段
|
||||
|
||||
### Q:最早版本怎么切换?
|
||||
|
||||
A:最早版本只有一个真实 DashScope key,多个 `MODEL_IDS`。现在即使只有一个真实 key,也统一写在 `DASHSCOPE_API_KEYS` 里。
|
||||
|
||||
配置示例:
|
||||
|
||||
```env
|
||||
DASHSCOPE_API_KEYS=sk-xxx
|
||||
MODEL_IDS=qwen3.7-max,qwen-plus,qwen-max
|
||||
```
|
||||
|
||||
切换逻辑:
|
||||
|
||||
1. 使用当前模型转发。
|
||||
2. 如果命中免费额度耗尽 403,冷却这个模型。
|
||||
3. 同一个请求改用下一个模型重试。
|
||||
4. 所有模型都不可用时返回 `503`。
|
||||
|
||||
## 7. 多 Key + 多模型阶段
|
||||
|
||||
### Q:多 key 的情况下怎么切?
|
||||
|
||||
A:所有 key 共用同一组 `MODEL_IDS`。切换规则是 key 优先。
|
||||
|
||||
最终配置:
|
||||
|
||||
```env
|
||||
DASHSCOPE_API_KEYS=sk-key-1,sk-key-2,sk-key-3
|
||||
MODEL_IDS=model-a,model-b,model-c
|
||||
```
|
||||
|
||||
最终切换规则:
|
||||
|
||||
1. 优先使用当前 key。
|
||||
2. 当前 key 下某个模型触发免费额度耗尽 403,只冷却这个 `key + model` 组合。
|
||||
3. 继续尝试当前 key 下的下一个模型。
|
||||
4. 只有当前 key 下所有模型都不可用,才切换到下一个 key。
|
||||
5. 所有 key+model 组合都不可用时返回 `503`。
|
||||
|
||||
这是本项目最重要的调度共识。
|
||||
|
||||
## 8. 冷却时间
|
||||
|
||||
### Q:冷却多久?
|
||||
|
||||
A:用户确认冷却时间为 1 个月。
|
||||
|
||||
最终配置:
|
||||
|
||||
```env
|
||||
MODEL_COOLDOWN_SECONDS=2592000
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
```text
|
||||
2592000 秒 = 30 天
|
||||
```
|
||||
|
||||
## 9. 状态持久化选择
|
||||
|
||||
### Q:为什么引入持久化状态?
|
||||
|
||||
A:服务重启后不能丢失冷却状态。
|
||||
|
||||
如果只用内存,重启后所有模型都会重新变成可用,可能继续打到已经进入免费额度冷却期的 key+model。
|
||||
|
||||
### Q:选什么存储?
|
||||
|
||||
A:最终选 JSON 状态文件。
|
||||
|
||||
原因:
|
||||
|
||||
- 本地部署,不需要额外安装 MySQL/Postgres/Redis。
|
||||
- 只有冷却状态和调度游标,不需要关系型查询能力。
|
||||
- 一个文件即可持久化,适合本地工具。
|
||||
- 避免 `better-sqlite3` 原生 binding 在 Windows 上安装或打包失败。
|
||||
- 默认路径清晰,方便备份和检查。
|
||||
|
||||
最终配置:
|
||||
|
||||
```env
|
||||
STATE_PATH=./data/proxy-state.json
|
||||
```
|
||||
|
||||
## 10. 状态文件隐私原则
|
||||
|
||||
### Q:状态文件会存真实 DashScope key 吗?
|
||||
|
||||
A:不会。
|
||||
|
||||
状态文件只存:
|
||||
|
||||
```text
|
||||
SHA-256(key)
|
||||
```
|
||||
|
||||
也就是 `key_hash`。
|
||||
|
||||
真实 key 只存在 `.env` 里。
|
||||
|
||||
## 11. 状态文件结构
|
||||
|
||||
### Q:`modelState` 存什么?
|
||||
|
||||
A:每条记录对应一个 DashScope key 与 `MODEL_ID` 组合。
|
||||
|
||||
例如:
|
||||
|
||||
```env
|
||||
DASHSCOPE_API_KEYS=key1,key2
|
||||
MODEL_IDS=modelA,modelB,modelC
|
||||
```
|
||||
|
||||
会生成:
|
||||
|
||||
```text
|
||||
2 * 3 = 6 条 modelState 记录
|
||||
```
|
||||
|
||||
字段详见:
|
||||
|
||||
```text
|
||||
docs/state-file.md
|
||||
```
|
||||
|
||||
### Q:`runtimeState` 存什么?
|
||||
|
||||
A:只存调度游标,不存 key、不存 prompt、不存错误详情。
|
||||
|
||||
当前记录类型:
|
||||
|
||||
```text
|
||||
key_cursor
|
||||
model_cursor:<key_hash>
|
||||
```
|
||||
|
||||
含义:
|
||||
|
||||
- `key_cursor`:当前优先使用 `.env` 里第几个 `DASHSCOPE_API_KEYS` 条目。
|
||||
- `model_cursor:<key_hash>`:某个 key 下当前优先使用 `MODEL_IDS` 里的第几个模型。
|
||||
|
||||
## 12. 游标策略共识
|
||||
|
||||
### Q:为什么 `model_cursor` 不直接存 modelId?
|
||||
|
||||
A:当前版本先按顺序来,使用游标绑定 `.env` 中的配置顺序。
|
||||
|
||||
共识:
|
||||
|
||||
1. 当前版本保持 `key_cursor` 和 `model_cursor:<key_hash>`。
|
||||
2. 它们都依赖 `.env` 中 `DASHSCOPE_API_KEYS` 和 `MODEL_IDS` 的顺序。
|
||||
3. 不要随便调整这两个列表的顺序。
|
||||
4. 如果后续调整顺序,建议同时删除或重置 `data/proxy-state.json`。
|
||||
5. 后续如果需要更稳,再升级为 `current_key_hash` 和 `current_model_id:<key_hash>`。
|
||||
|
||||
## 13. Pi CLI 接入
|
||||
|
||||
### Q:怎么让 Pi CLI 使用本地代理?
|
||||
|
||||
A:在 `~/.pi/agent/models.json` 增加本地 provider。
|
||||
|
||||
Provider 名称:
|
||||
|
||||
```text
|
||||
local-dashscope-proxy
|
||||
```
|
||||
|
||||
Base URL:
|
||||
|
||||
```text
|
||||
http://127.0.0.1:3300
|
||||
```
|
||||
|
||||
API 类型:
|
||||
|
||||
```text
|
||||
anthropic-messages
|
||||
```
|
||||
|
||||
代理 key:
|
||||
|
||||
```text
|
||||
sk-001
|
||||
```
|
||||
|
||||
同时在 `~/.pi/agent/settings.json` 设置默认 provider:
|
||||
|
||||
```text
|
||||
defaultProvider = local-dashscope-proxy
|
||||
defaultModel = qwen3.7-max
|
||||
```
|
||||
|
||||
使用方式:
|
||||
|
||||
```bash
|
||||
pi
|
||||
```
|
||||
|
||||
或:
|
||||
|
||||
```bash
|
||||
pi --provider local-dashscope-proxy --model qwen3.7-max
|
||||
```
|
||||
|
||||
## 14. 清理旧 Pi Provider
|
||||
|
||||
### Q:为什么删除 `dashscope` provider 下的两个模型?
|
||||
|
||||
A:用户希望 Pi CLI 里不再出现旧的直接 DashScope provider:
|
||||
|
||||
```text
|
||||
qwen3.7-max [dashscope]
|
||||
qwen3.7-max[1M] [dashscope]
|
||||
```
|
||||
|
||||
已删除 `~/.pi/agent/models.json` 中的 `dashscope` provider,保留本地代理 provider。
|
||||
|
||||
## 15. 当前模型列表
|
||||
|
||||
当前 `MODEL_IDS` 共 14 个:
|
||||
|
||||
```text
|
||||
qwen3.7-max-2026-06-08
|
||||
qwen3.7-plus-2026-05-26
|
||||
qwen3.7-plus
|
||||
qwen3.7-max-preview
|
||||
qwen3.7-max-2026-05-17
|
||||
qwen3.7-max
|
||||
qwen3.7-max-2026-05-20
|
||||
qwen3.6-27b
|
||||
qwen3.6-max-preview
|
||||
qwen3.6-flash
|
||||
qwen3.6-35b-a3b
|
||||
qwen3.6-flash-2026-04-16
|
||||
qwen3.6-plus
|
||||
qwen3.6-plus-2026-04-02
|
||||
```
|
||||
|
||||
数据库已同步初始化这些模型状态。
|
||||
|
||||
## 16. 请求日志
|
||||
|
||||
### Q:Hono 是否打印请求日志?
|
||||
|
||||
A:已增加统一请求日志中间件。
|
||||
|
||||
日志示例:
|
||||
|
||||
```text
|
||||
[request] GET /health status=200 duration=2ms bytes=- proxyKey=- model=- attempts=- ua="curl/8.7.1"
|
||||
```
|
||||
|
||||
成功代理 `/v1/messages` 时会打印:
|
||||
|
||||
```text
|
||||
proxyKey=<key hash 前缀>
|
||||
model=<实际使用的模型 ID>
|
||||
attempts=<本次请求尝试次数>
|
||||
```
|
||||
|
||||
不会打印:
|
||||
|
||||
```text
|
||||
Authorization
|
||||
x-api-key
|
||||
DASHSCOPE_API_KEYS
|
||||
请求 body
|
||||
messages / prompt
|
||||
```
|
||||
|
||||
## 17. 当前文档
|
||||
|
||||
使用说明:
|
||||
|
||||
```text
|
||||
docs/usage.md
|
||||
```
|
||||
|
||||
状态文件说明:
|
||||
|
||||
```text
|
||||
docs/state-file.md
|
||||
```
|
||||
|
||||
Q/A 与方案决策记录:
|
||||
|
||||
```text
|
||||
docs/qa-and-decisions.md
|
||||
```
|
||||
|
||||
## 18. OpenAI Chat Completions 入口
|
||||
|
||||
### Q:为什么又增加 OpenAI 协议入口?
|
||||
|
||||
A:Pi CLI 的官方 DeepSeek provider 使用 `openai-completions`,说明 Pi 对 OpenAI Chat Completions 兼容链路支持成熟。为了让本地代理也能按同一类方式接入 Qwen,新增:
|
||||
|
||||
```text
|
||||
POST /v1/chat/completions
|
||||
GET /v1/models
|
||||
```
|
||||
|
||||
上游默认使用:
|
||||
|
||||
```text
|
||||
OPENAI_UPSTREAM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
||||
```
|
||||
|
||||
当前保留原有 Anthropic Messages 入口:
|
||||
|
||||
```text
|
||||
POST /v1/messages
|
||||
```
|
||||
|
||||
两条链路共用同一套 DashScope key 池、模型池、冷却状态和免费额度耗尽切换逻辑。
|
||||
|
||||
服务端是反代转发,不需要安装 `openai` SDK;`openai` SDK 只适合客户端调用代理时使用。
|
||||
+204
@@ -0,0 +1,204 @@
|
||||
# 万相2.7
|
||||
> 文生图
|
||||
```curl
|
||||
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
|
||||
--data '{
|
||||
"model": "wan2.7-image-pro",
|
||||
"input": {
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"text": "一间有着精致窗户的花店,漂亮的木质门,摆放着花朵"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"parameters": {
|
||||
"size": "2K",
|
||||
"n": 1,
|
||||
"watermark": false,
|
||||
"thinking_mode": true
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
> 图片编辑
|
||||
```curl
|
||||
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
|
||||
--data '{
|
||||
"model": "wan2.7-image-pro",
|
||||
"input": {
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"},
|
||||
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"},
|
||||
{"text": "把图2的涂鸦喷绘在图1的汽车上"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"parameters": {
|
||||
"size": "2K",
|
||||
"n": 1,
|
||||
"watermark": false
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
> 交互式编辑
|
||||
```curl
|
||||
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
|
||||
--data '{
|
||||
"model": "wan2.7-image-pro",
|
||||
"input": {
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/pjeqdf/car.webp"},
|
||||
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20251229/xsunlm/paint.webp"},
|
||||
{"text": "把图2的涂鸦喷绘在图1的汽车上"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"parameters": {
|
||||
"size": "2K",
|
||||
"n": 1,
|
||||
"watermark": false
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
> 组图生成
|
||||
```curl
|
||||
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
|
||||
--data '{
|
||||
"model": "wan2.7-image-pro",
|
||||
"input": {
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"text": "电影感组图,记录同一只流浪橘猫,特征必须前后一致。第一张:春天,橘猫穿梭在盛开的樱花树下;第二张:夏天,橘猫在老街的树荫下乘凉避暑;第三张:秋天,橘猫踩在满地的金色落叶上;第四张:冬天,橘猫在雪地上走留下足迹。"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"parameters": {
|
||||
"enable_sequential": true,
|
||||
"n": 4,
|
||||
"size": "2K"
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
# 千问图片
|
||||
模型:qwen-image-2.0-pro系列
|
||||
|
||||
## 文生图
|
||||
```curl
|
||||
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
|
||||
--data '{
|
||||
"model": "qwen-image-2.0-pro",
|
||||
"input": {
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{
|
||||
"text": "冬日北京的都市街景,青灰瓦顶、朱红色外墙的两间相邻中式商铺比肩而立,檐下悬挂印有剪纸马的暖光灯笼,在阴天漫射光中投下柔和光晕,映照湿润鹅卵石路面泛起细腻反光。左侧为书法店:靛蓝色老旧的牌匾上以遒劲行书刻着“文字渲染”。店门口的玻璃上挂着一幅字,自上而下,用田英章硬笔写着“专业幻灯片 中英文海报 高级信息图”,落款印章为“1k token”朱砂印。店内的墙上,可以模糊的辨认有三幅竖排的书法作品,第一幅写着“阿里巴巴”,第二幅写着“通义千问”,第三幅写着“图像生成”。一位白发苍苍的老人背对着镜头观赏。右侧为花店,牌匾上以鲜花做成文字“真实质感”;店内多层花架陈列红玫瑰、粉洋牡丹和绿植,门上贴了一个圆形花边标识,标识上写着“2k resolution”,门口摆放了一个彩色霓虹灯,上面写着“细腻刻画 人物 自然 建筑”。两家店中间堆放了一个雪人,举了一老式小黑板,上面用粉笔字写着“Qwen-Image-2.0 正式发布”。街道左侧,年轻情侣依偎在一起,女孩是瘦脸,身穿米白色羊绒大衣,肉色光腿神器。女孩举着心形透明气球,气球印有白色的字:“生图编辑二合一”。里面有一个毛茸茸的卡皮巴拉玩偶。男孩身着剪裁合体的深灰色呢子外套,内搭浅色高领毛衣。街道右侧,一个后背上写着“更小模型,更快速度”的骑手疾驰而过。整条街光影交织、动静相宜。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"parameters": {
|
||||
"negative_prompt": "低分辨率,低画质,肢体畸形,手指畸形,画面过饱和,蜡像感,人脸无细节,过度光滑,画面具有AI感。构图混乱。文字模糊,扭曲。",
|
||||
"prompt_extend": true,
|
||||
"watermark": false,
|
||||
"size": "2048*2048"
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
## 图片编辑
|
||||
> 单图编辑
|
||||
```curl
|
||||
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
|
||||
--data '{
|
||||
"model": "qwen-image-2.0-pro",
|
||||
"input": {
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{
|
||||
"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260310/jiydyi/image+%2818%29-2026-03-10-16-39-59.webp"
|
||||
},
|
||||
{
|
||||
"text": "在画面右下角石板路旁、靠近树干根部的位置,以浅灰墨色手写体题写一首七言绝句,字体为行楷风格,笔触自然流畅、略带飞白,大小适中(约占画面高度1/10),与整体水墨淡雅氛围协调。诗文内容为:“青石桥畔柳风轻, 素手拈花闭目听。 一水碧痕浮旧梦, 半篙烟雨入空舲。”诗句横向排列,四句分两行书写(前两句一行,后两句一行),末句“舲”字右下角钤一枚朱红小印,印文为“江南”二字篆书,尺寸约等于单字高度的1/3。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"parameters": {
|
||||
"n": 1,
|
||||
"negative_prompt": " ",
|
||||
"prompt_extend": true,
|
||||
"watermark": false,
|
||||
"size": "2048*2048"
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
> 多图融合
|
||||
```curl
|
||||
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
|
||||
--data '{
|
||||
"model": "qwen-image-2.0-pro",
|
||||
"input": {
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{
|
||||
"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260310/rdsgaa/image+%2815%29.png"
|
||||
},
|
||||
{
|
||||
"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260310/qokhtl/image+%2816%29.png"
|
||||
},
|
||||
{
|
||||
"text": "使用图一的城市照片作为底图。请勿更改照片中的真实建筑、街道、车辆或人物。保持照片的真实性。三个图二中的卡通形象在建筑物周围,一个趴在建筑物上方,一个从建筑物的右边探出头来,一个坐在建筑物前的空地上。该形象应采用扁平化的图形风格绘制,轮廓清晰,类似于壁画或海报插图。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"parameters": {
|
||||
"n": 1,
|
||||
"negative_prompt": " ",
|
||||
"prompt_extend": true,
|
||||
"watermark": false,
|
||||
"size": "2048*2048"
|
||||
}
|
||||
}'
|
||||
```
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
Reference in New Issue
Block a user