关于 each-sense
each::sense 是面向创意工作者的生成式媒体 AI Agent,可通过统一接口调用多种模型生成图像、视频、音频和 3D 内容。它也支持网页搜索、对话记忆与多步骤工作流。
主要功能
- 01生成图像、视频、音频和 3D 内容
- 02统一调度多种 AI 模型
- 03构建多步骤工作流
- 04支持会话记忆与迭代
- 05提供执行计划或澄清提问
适用场景
- 01制作营销素材和广告创意
- 02生成电商产品图像
- 03创作社交媒体视频内容
- 04组合多个模型完成创意工作流
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ eachlabs/ skills --skill each-sense安装后在 Claude Code 中输入/each-sense确认已加载。
附带文件references/SSE-EVENTS.md
详细介绍
each::sense - 生成式媒体智能层
each::sense 是一个兼容 OpenAI 的 AI Agent,可生成图像、视频、音频和 3D 模型,构建工作流、搜索网络并进行对话交互。它通过一个统一接口调度 500 多个 AI 模型。
each::sense 本身完全免费。你只需为它使用的模型付费。
在用户需要以下内容时使用 each::sense:
- 营销素材和广告创意
- 产品图片和电商视觉内容
- 视频内容(广告、UGC、社交媒体)
- 音频和音乐生成
- 任意创意内容生成
- 结合多个 AI 模型的多步骤工作流
身份验证
Header: X-API-Key: <your-api-key>
也支持与 OpenAI SDK 兼容的身份验证:
Header: Authorization: Bearer <your-api-key>
在 eachlabs.ai 获取 API 密钥。
设置 EACHLABS_API_KEY 环境变量。
基础 URL
https://eachsense-agent.core.eachlabs.run
端点
| 方法 | 路径 | 用途 |
|---|---|---|
| POST | /v1/chat/completions | 主要聊天端点 |
| POST | /workflow | 工作流构建器 |
| GET | /v1/models | 列出可用模型 |
| GET | /memory?session_id={id} | 检索会话记忆 |
| DELETE | /memory?session_id={id} | 清除会话记忆 |
| GET | /sessions | 列出所有会话 |
快速开始
使用 curl
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Generate a portrait of a woman with golden hour lighting"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
使用 Python(OpenAI SDK)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_EACHLABS_API_KEY",
base_url="https://eachsense-agent.core.eachlabs.run/v1"
)
# Non-streaming
response = client.chat.completions.create(
model="eachsense/beta",
messages=[{"role": "user", "content": "Generate a sunset landscape"}],
stream=False
)
print(response.generations) # List of media URLs
# Streaming
stream = client.chat.completions.create(
model="eachsense/beta",
messages=[{"role": "user", "content": "Generate a sunset landscape"}],
stream=True
)
for chunk in stream:
eachlabs_data = chunk.model_extra.get("eachlabs")
if eachlabs_data:
event_type = eachlabs_data.get("type")
if event_type == "generation_response":
print(eachlabs_data["generations"])
使用 JavaScript(OpenAI SDK)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_EACHLABS_API_KEY",
baseURL: "https://eachsense-agent.core.eachlabs.run/v1"
});
// Non-streaming
const response = await client.chat.completions.create({
model: "eachsense/beta",
messages: [{ role: "user", content: "Generate a sunset landscape" }],
stream: false
});
console.log(response.generations);
// Streaming
const stream = await client.chat.completions.create({
model: "eachsense/beta",
messages: [{ role: "user", content: "Generate a sunset landscape" }],
stream: true
});
for await (const chunk of stream) {
const eachlabs = chunk.eachlabs;
if (eachlabs?.type === "generation_response") {
console.log(eachlabs.generations);
}
}
请求架构
{
"messages": [{"role": "user", "content": "string (required) - User's request"}],
"model": "string (optional, default: 'eachsense/beta')",
"stream": "boolean (optional, default: true) - Enable SSE streaming",
"session_id": "string (optional) - Session ID for conversation history and multi-turn chats",
"mode": "string (optional, default: 'max') - Quality mode: 'max' or 'eco'",
"behavior": "string (optional, default: 'agent') - Behavior: 'agent', 'plan', or 'ask'",
"image_urls": "array[string] (optional) - Image URLs for editing/processing (max 4)",
"workflow_id": "string (optional) - Execute specific workflow",
"version_id": "string (optional) - Workflow version",
"web_search": "boolean (optional, default: true) - Enable/disable web search",
"enable_safety_checker": "boolean (optional, default: true) - Set to false to allow NSFW content generation"
}
参数详情
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
messages | array | 必填 | 包含 role 和 content 的聊天消息 |
model | string | "eachsense/beta" | 模型标识符 |
stream | boolean | true | 启用 SSE 流式传输 |
session_id | string | null | 用于对话历史的会话 ID。用于继续之前的聊天、处理澄清事项并迭代优化输出 |
mode | string | "max" | max = 最佳质量(高级模型),eco = 速度最快/成本最低 |
behavior | string | "agent" | agent = 自动执行,plan = 先显示计划,ask = 先澄清 |
image_urls | array | null | 要处理/编辑的图像 URL(最多 4 个) |
workflow_id | string | null | 执行指定的工作流 |
version_id | string | null | 工作流版本,与 workflow_id 配合使用 |
web_search | boolean | true | 允许搜索网络以获取信息 |
enable_safety_checker | boolean | true | 设置为 false 以允许生成 NSFW 内容 |
**OpenAI SDK 额外参数:**使用 OpenAI SDK 时,通过 extra_body 传递非标准参数:
response = client.chat.completions.create(
model="eachsense/beta",
messages=[{"role": "user", "content": "Generate a quick sketch"}],
extra_body={"mode": "eco", "session_id": "my-session"},
stream=False
)
非流式响应
{
"id": "chatcmpl-123",
"object": "chat.completion",
"choices": [{"message": {"role": "assistant", "content": "Here's your image..."}}],
"generations": ["https://cdn.example.com/image.png"],
"task_id": "task-456",
"session_id": "my-session"
}
模式
MAX 模式(默认)
使用高质量模型(flux-2-max、veo-3 等)。适用于最终输出、面向客户的工作,以及质量至关重要的场景。处理时间:10-300 秒。
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a product shot"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
ECO 模式
使用快速且经济高效的模型(flux-2-pro、veo3-1-fast 等)。适用于原型制作、草稿和大批量生成。处理时间:5-180 秒。
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a product shot"}],
"model": "eachsense/beta",
"stream": true,
"mode": "eco"
}'
行为模式
Agent(默认)
自动执行请求,选择最佳模型并立即生成输出。
{
"messages": [{"role": "user", "content": "Generate a sunset video"}],
"model": "eachsense/beta",
"behavior": "agent"
}
计划
在执行前显示包含时间/成本估算的执行计划。适用于希望先审查方案的复杂请求。
{
"messages": [{"role": "user", "content": "Create a marketing video for my bakery"}],
"model": "eachsense/beta",
"behavior": "plan"
}
询问
继续操作前始终先提出澄清问题。适用于希望进行最大程度控制的场景。
{
"messages": [{"role": "user", "content": "Generate a portrait"}],
"model": "eachsense/beta",
"behavior": "ask"
}
会话管理
使用 session_id 在多次请求之间保留对话历史和上下文。这可实现:
- 多轮对话:无需重复上下文即可跟进之前的请求
- 迭代优化:要求修改之前生成的内容
- 澄清流程:响应
clarification_needed事件并继续对话 - 上下文感知:AI 会记住之前的生成内容、偏好和指示
会话限制
| 指标 | 限制 |
|---|---|
| 空闲超时 | 15 分钟 |
| 会话 TTL | 30 天 |
| 每个会话的消息数 | 50 |
会话按 API 密钥 + session_id 组合进行隔离。不同的 API 密钥无法访问彼此的会话。
会话管理端点
# Retrieve session memory
curl https://eachsense-agent.core.eachlabs.run/memory?session_id=my-session \
-H "X-API-Key: $EACHLABS_API_KEY"
# Clear session memory
curl -X DELETE https://eachsense-agent.core.eachlabs.run/memory?session_id=my-session \
-H "X-API-Key: $EACHLABS_API_KEY"
# List all sessions
curl https://eachsense-agent.core.eachlabs.run/sessions \
-H "X-API-Key: $EACHLABS_API_KEY"
示例:迭代生成
# First request - generate initial image
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Generate a logo for a coffee shop called Brew Lab"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "logo-project-001"
}'
# Follow-up - modify the result (same session_id)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Make it more minimalist and change the color to dark green"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "logo-project-001"
}'
# Another follow-up - request variation (same session_id)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create 3 variations of this logo"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "logo-project-001"
}'
示例:处理澄清请求
# Ambiguous request - AI will ask for clarification
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Edit this image"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "edit-task-001",
"image_urls": ["https://example.com/photo.jpg"]
}'
# Response: clarification_needed event asking what edit to make
# Respond to clarification (same session_id)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Remove the background and make it transparent"}],
"model": "eachsense/beta",
"stream": true,
"session_id": "edit-task-001",
"image_urls": ["https://example.com/photo.jpg"]
}'
用例示例
1. 图像生成
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Generate a professional headshot of a business executive, studio lighting"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
2. 视频生成
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 5 second video of a sunset over the ocean"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
3. 图像编辑(使用上传的图像)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Remove the background from this image"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/my-photo.jpg"]
}'
4. 图像转视频动画
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Animate this image with gentle camera movement"}],
"model": "eachsense/beta",
"stream": true,
"image_urls": ["https://example.com/landscape.jpg"]
}'
5. 产品摄影
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Generate a product shot of a coffee mug on a wooden table with morning light"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
6. 营销素材
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a social media ad for a fitness app, show someone working out with energetic vibes"}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
7. 复杂工作流(UGC 视频)
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a 30 second UGC video with a consistent presenter explaining why fitness is important. The presenter is a 30-year-old fit woman with brown hair in workout clothes, gym background."}],
"model": "eachsense/beta",
"stream": true,
"mode": "max"
}'
8. 工作流构建器
curl -X POST https://eachsense-agent.core.eachlabs.run/workflow \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-d '{
"message": "Create a workflow that generates an image and then upscales it",
"stream": true,
"session_id": "my-session"
}'
SSE 响应格式
该端点返回服务器发送事件(SSE),并封装在 OpenAI chat.completion.chunk 格式中,其中包含一个 eachlabs 扩展字段。
每个事件的格式为:
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","choices":[{"delta":{"content":""}}],"eachlabs":{"type":"event_type",...}}\n\n
流以以下内容结束:
data: [DONE]\n\n
事件类型(共 18 种)
AI 推理:
| 事件 | 描述 |
|---|---|
thinking_delta | 实时 AI 推理 |
text_response | 文本内容(解释、回答) |
工具操作:
| 事件 | 描述 |
|---|---|
status | 当前正在执行的操作(包含 tool_name、parameters) |
tool_call | 正在调用的工具详情 |
message | 信息性消息 |
progress | 包含 percent 的进度更新 |
生成:
| 事件 | 描述 |
|---|---|
generation_response | 已生成的媒体 URL(url、generations[]、model、execution_time_ms) |
交互:
| 事件 | 描述 |
|---|---|
clarification_needed | AI 需要更多信息(question、options[]、context) |
网页搜索:
| 事件 | 描述 |
|---|---|
web_search_query | 正在执行网页搜索 |
web_search_citations | 包含 title、url、snippet 的引用 |
工作流:
| 事件 | 描述 |
|---|---|
workflow_created | 已创建新工作流 |
workflow_fetched | 已加载现有工作流 |
workflow_built | 已构建工作流定义 |
workflow_updated | 工作流已推送到 API |
执行:
| 事件 | 描述 |
|---|---|
execution_started | 工作流执行已开始 |
execution_progress | 步骤进度(step_id、completed_steps、total_steps) |
execution_completed | 工作流已完成(output、all_outputs、total_time_ms) |
终止事件:
| 事件 | 描述 |
|---|---|
complete | 任务已完成(status:ok/error/clarification_needed,generations[]) |
error | 发生错误(message、error_code) |
典型事件流程
thinking_delta → status → status → text_response → generation_response → complete → [DONE]
关键事件示例
generation_response
{
"type": "generation_response",
"url": "https://storage.eachlabs.ai/outputs/abc123.png",
"generations": ["https://storage.eachlabs.ai/outputs/abc123.png"],
"model": "flux-2-max",
"execution_time_ms": 8500
}
clarification_needed
{
"type": "clarification_needed",
"question": "What type of edit would you like to make to this image?",
"options": ["Remove the background", "Apply a style transfer", "Upscale to higher resolution"],
"context": "I can see your image but need to know the specific edit you want."
}
complete
{
"type": "complete",
"task_id": "chat_1708345678901",
"status": "ok",
"generations": ["https://storage.eachlabs.ai/outputs/abc123.png"],
"model": "flux-2-max"
}
Agent 工具
| 工具 | 类型 | 用途 |
|---|---|---|
search_models | 非终止 | 按用例查找模型 |
get_model_details | 非终止 | 获取模型输入架构 |
web_search | 非终止 | 网页搜索 |
vision_preprocessor | 非终止 | 分析图像内容 |
execute_model | 终止 | 运行模型预测 |
generate_text | 终止 | 生成文本回答 |
create_workflow | 非终止 | 创建工作流 |
trigger_workflow | 非终止 | 执行工作流 |
build_workflow | 非终止 | 构建工作流定义 |
check_execution | 非终止 | 检查执行状态 |
ask_clarification | 终止 | 请求澄清 |
模型速查
| 用例 | 模型标识 | 速度 |
|---|---|---|
| 最佳图像质量 | flux-2-max | 中等 |
| 快速生成图像 | flux-2-pro | 快 |
| 图像中的文字/徽标 | flux-kontext-pro | 快 |
| 快速原型设计 | nano-banana-pro | 非常快 |
| 照片级写实图像 | gemini-imagen-4 | 中等 |
| 艺术/创意 | seedream-v4-5 | 中等 |
| 最佳视频(含音频) | veo-3 | 慢 |
| 快速生成视频 | veo3-1-fast | 快 |
| 高质量视频 | kling-3-0 | 中等 |
| 图像转视频 | kling-2-1-image-to-video | 中等 |
| 指令编辑 | flux-2-edit | 快 |
| 移除背景 | eachlabs-bg-remover-v1 | 非常快 |
| 图像放大 | topaz-upscale-image | 快 |
| 换脸 | kling-face-swap | 快 |
| 文本转语音 | elevenlabs-tts | 非常快 |
| 音乐生成 | mureka-generate-music | 中等 |
模型别名
会自动解析的常见简称:
| 别名 | 解析为 |
|---|---|
| Flux Max | flux-2-max |
| Flux Pro | flux-2-pro |
| Flux Edit | flux-2-edit |
| Flux Fill | flux-fill-pro |
| Flux Kontext | flux-kontext-pro |
| Imagen 4 | gemini-imagen-4 |
| Veo 3 | veo-3 |
| Kling 3 | kling-3-0 |
| Sora | sora-2-pro |
| ElevenLabs | elevenlabs-tts |
错误处理
HTTP 错误
| 代码 | 响应 | 原因 |
|---|---|---|
| 401 | {"error": "Invalid or missing API key"} | 缺少或无效的 API 密钥 |
| 422 | {"error": "..."} | 缺少必填字段或参数无效 |
| 429 | {"error": "..."} | 请求频率受限——请实现指数退避 |
| 500 | {"error": "..."} | 服务器内部错误——请通过退避策略重试 |
流式传输错误
{"type": "error", "message": "Failed to execute model: Invalid parameters", "error_code": "..."}
| 错误消息 | 原因 | 解决方案 |
|---|---|---|
Model execution failed | 底层模型错误 | 检查模型参数 |
Session not found | 会话无效或已过期 | 创建新会话 |
Workflow execution timeout | 超过 15 分钟的时限 | 将工作流拆分为更小的部分 |
重试策略: 对于 429 和 500 错误,请使用指数退避。等待 2^attempt 秒,最多重试 3 次。
超时
客户端超时建议: 将 HTTP 客户端超时设置为至少 10 分钟。复杂用例可能需要依次运行多个 AI 模型(例如,为 UGC 视频执行 10 次以上模型)。
| 操作 | 超时 |
|---|---|
| HTTP 请求 | 300 秒 |
| 流式传输空闲 | 15 分钟 |
| 图像生成 | 10-60 秒 |
| 视频生成 | 60-600 秒 |
| 工作流执行 | 15 分钟 |
# curl example with 10 minute timeout
curl --max-time 600 -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-API-Key: $EACHLABS_API_KEY" \
-H "Accept: text/event-stream" \
-d '{
"messages": [{"role": "user", "content": "Create a complex UGC video..."}],
"model": "eachsense/beta",
"stream": true
}'
速率限制
| 套餐 | 每分钟请求数 | 并发数 |
|---|---|---|
| Free | 10 | 2 |
| Pro | 60 | 10 |
| Enterprise | 300 | 50 |
速率限制响应头:X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset
输入验证限制
| 输入类型 | 限制 |
|---|---|
| 每次请求的图像数 | 最多 4 张 |
| 图像格式 | JPEG、PNG、WebP、GIF |
| 图像大小 | 最大 20MB,64-8192px |
| 视频格式 | MP4、WebM、MOV |
| 视频大小 | 最大 500MB,10 分钟 |
| 音频格式 | MP3、WAV、M4A、OGG |
| 音频大小 | 最大 50MB,5 分钟 |
| 提示词长度 | 最多 10,000 个字符 |
| 会话记忆 | 最多 50 条消息 |
最佳实践
- 使用 session_id 进行多轮对话,以保持上下文
- 使用 ECO 模式进行原型设计和成本敏感型应用
- 处理澄清事件——在同一会话中提供所请求的信息
- 提供清晰的提示词——明确说明风格、氛围和构图
- 监控 SSE 事件——使用
thinking_delta查看进度,使用generation_response获取输出 - 使用 OpenAI SDK 简化集成——只需将基础 URL 指向 each::sense
- 实现重试逻辑——对暂时性错误使用指数退避