Files
Gemini_Draw/API图片修改-Agent.md
2026-05-09 17:39:18 +08:00

234 lines
6.0 KiB
Markdown
Raw 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.
# API 图片修改 Agent 调用说明
本服务提供一个本地 HTTP API用于让其他 Agent、脚本或自动化系统上传已有图片/文档,并按文字指令生成或修改图片。
默认地址:
- 本机:`http://localhost:3002`
- 局域网:`http://192.168.31.204:3002`
## 必须携带 API 访问密钥
所有受保护接口都需要 API 访问密钥。这个密钥不是 Gemini API Key而是本服务自己的调用密钥用来防止局域网内其他人随意调用你的接口。
在服务端 `.env.local` 中配置:
```env
API_AUTH_TOKEN="YOUR_LONG_RANDOM_API_TOKEN"
```
调用时二选一携带:
```txt
Authorization: Bearer YOUR_LONG_RANDOM_API_TOKEN
```
或:
```txt
x-api-key: YOUR_LONG_RANDOM_API_TOKEN
```
如果没有配置 `API_AUTH_TOKEN``/api/generate``/api/edit-image``/api/analyze-document``/api/config/*` 等接口会拒绝请求。只在本机临时开发时,才可以设置:
```env
API_AUTH_DISABLED="true"
```
## Gemini API Key
Gemini API Key 有三种传入方式,按优先级从高到低:
1. 单次请求 Header`x-gemini-api-key: YOUR_GEMINI_API_KEY`
2. 单次请求 JSON/Form 字段:`apiKey=YOUR_GEMINI_API_KEY`
3. 服务端环境变量:`.env.local` 中的 `GEMINI_API_KEY`
运行中更新服务端 Gemini Key
```bash
curl -X POST http://localhost:3002/api/config/api-key \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_LONG_RANDOM_API_TOKEN" \
-d "{\"apiKey\":\"YOUR_GEMINI_API_KEY\",\"persist\":true}"
```
`persist:true` 会写入本项目的 `.env.local`,该文件不会提交到 git。
## 健康检查
```bash
curl http://localhost:3002/api/health
```
返回示例:
```json
{
"ok": true,
"apiPort": 3002,
"hasGeminiApiKey": true,
"authEnabled": true,
"authRequired": true,
"acceptsPerRequestApiKey": true
}
```
## 修改已有图片
使用 `multipart/form-data` 上传图片,字段名可以叫 `files``image` 或任意名称;服务会读取所有上传文件。
```bash
curl -X POST http://localhost:3002/api/edit-image \
-H "Authorization: Bearer YOUR_LONG_RANDOM_API_TOKEN" \
-H "x-gemini-api-key: YOUR_GEMINI_API_KEY" \
-F "prompt=保留主体不变,把背景改成干净的白色摄影棚,增强产品质感" \
-F "imageSize=1K" \
-F "aspectRatio=1:1" \
-F "files=@input.png"
```
支持的图片常见格式:
- `image/png`
- `image/jpeg`
- `image/webp`
可选参数:
- `prompt``instruction`:修改指令,必填
- `imageSize``1K``2K``4K`,默认 `1K`
- `aspectRatio``1:1``4:3``3:4``16:9``9:16`,默认 `1:1`
- `model`:默认 `gemini-3.1-flash-image-preview`
- `apiKey`:单次调用使用的 Gemini API Key
成功响应示例:
```json
{
"ok": true,
"model": "gemini-3.1-flash-image-preview",
"images": [
{
"mimeType": "image/png",
"data": "BASE64_IMAGE_DATA",
"dataUrl": "data:image/png;base64,BASE64_IMAGE_DATA"
}
],
"texts": []
}
```
调用方可以直接使用 `images[0].dataUrl` 预览图片,或把 `images[0].data` 解码保存为 PNG 文件。
## JSON/Base64 方式修改图片
如果 Agent 已经拿到了图片 base64可以不用 multipart
```bash
curl -X POST http://localhost:3002/api/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_LONG_RANDOM_API_TOKEN" \
-H "x-gemini-api-key: YOUR_GEMINI_API_KEY" \
-d "{
\"prompt\":\"把这张图改成赛博朋克夜景风格,但保留人物脸部特征\",
\"imageSize\":\"1K\",
\"aspectRatio\":\"1:1\",
\"images\":[
{
\"mimeType\":\"image/png\",
\"base64\":\"BASE64_IMAGE_DATA\"
}
]
}"
```
也可以传 `dataUrl`
```json
{
"prompt": "把背景改成浅灰色",
"images": [
{
"dataUrl": "data:image/png;base64,BASE64_IMAGE_DATA"
}
]
}
```
或传公开可访问 URL
```json
{
"prompt": "生成一张更适合电商首图的版本",
"images": [
{
"url": "https://example.com/input.png"
}
]
}
```
## 上传文档分析
用于 PDF、Word 转出的文本文件、图片文档等分析任务。这个接口默认使用文本模型。
```bash
curl -X POST http://localhost:3002/api/analyze-document \
-H "Authorization: Bearer YOUR_LONG_RANDOM_API_TOKEN" \
-H "x-gemini-api-key: YOUR_GEMINI_API_KEY" \
-F "prompt=用中文总结这份文档,提取关键结论和待办事项" \
-F "files=@report.pdf"
```
响应中的 `texts` 是模型返回的文字结果:
```json
{
"ok": true,
"model": "gemini-2.5-flash",
"texts": ["文档总结内容..."],
"images": []
}
```
## 多文件输入
一个请求可以同时上传多张图片或多个文档:
```bash
curl -X POST http://localhost:3002/api/edit-image \
-H "Authorization: Bearer YOUR_LONG_RANDOM_API_TOKEN" \
-H "x-gemini-api-key: YOUR_GEMINI_API_KEY" \
-F "prompt=参考第二张图的色调,修改第一张图" \
-F "files=@source.png" \
-F "files=@style-reference.jpg"
```
## 错误格式
失败时统一返回:
```json
{
"ok": false,
"error": "错误原因"
}
```
常见错误:
- `Unauthorized. Send Authorization: Bearer YOUR_API_AUTH_TOKEN or x-api-key.`:缺少 API 访问密钥
- `API_AUTH_TOKEN is required.`:服务端没有配置 API 访问密钥
- `prompt or instruction is required.`:缺少修改指令
- `Gemini API key is required.`:没有配置或传入 Gemini API Key
- `Remote file is too large.`URL 文件超过大小限制
## Agent 调用建议
1. 每次调用都必须带 `Authorization: Bearer YOUR_LONG_RANDOM_API_TOKEN``x-api-key`
2. Gemini Key 建议用 `x-gemini-api-key` 单次传入,避免依赖服务端环境。
3. 优先使用 `POST /api/edit-image` + multipart 上传真实图片文件。
4. 如果图片已经是 base64使用 `POST /api/generate``images[].base64`
5. 取返回的 `images[0].dataUrl` 给用户预览;保存文件时解码 `images[0].data`
6. 修改指令尽量包含保留内容、需要改变的内容、输出用途和画幅比例。