mcpField
E
each-sense

each-sense

github.com/eachlabs创意与媒体44200 次安装今天更新
代码仓库

关于 each-sense

each::sense 是面向创意工作者的生成式媒体 AI Agent,可通过统一接口调用多种模型生成图像、视频、音频和 3D 内容。它也支持网页搜索、对话记忆与多步骤工作流。

主要功能

  1. 01生成图像、视频、音频和 3D 内容
  2. 02统一调度多种 AI 模型
  3. 03构建多步骤工作流
  4. 04支持会话记忆与迭代
  5. 05提供执行计划或澄清提问

适用场景

  1. 01制作营销素材和广告创意
  2. 02生成电商产品图像
  3. 03创作社交媒体视频内容
  4. 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"
}
参数详情
参数类型默认值描述
messagesarray必填包含 role 和 content 的聊天消息
modelstring"eachsense/beta"模型标识符
streambooleantrue启用 SSE 流式传输
session_idstringnull用于对话历史的会话 ID。用于继续之前的聊天、处理澄清事项并迭代优化输出
modestring"max"max = 最佳质量(高级模型),eco = 速度最快/成本最低
behaviorstring"agent"agent = 自动执行,plan = 先显示计划,ask = 先澄清
image_urlsarraynull要处理/编辑的图像 URL(最多 4 个)
workflow_idstringnull执行指定的工作流
version_idstringnull工作流版本,与 workflow_id 配合使用
web_searchbooleantrue允许搜索网络以获取信息
enable_safety_checkerbooleantrue设置为 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 分钟
会话 TTL30 天
每个会话的消息数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_neededAI 需要更多信息(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 Maxflux-2-max
Flux Proflux-2-pro
Flux Editflux-2-edit
Flux Fillflux-fill-pro
Flux Kontextflux-kontext-pro
Imagen 4gemini-imagen-4
Veo 3veo-3
Kling 3kling-3-0
Sorasora-2-pro
ElevenLabselevenlabs-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
  }'

速率限制

套餐每分钟请求数并发数
Free102
Pro6010
Enterprise30050

速率限制响应头: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 条消息

最佳实践

  1. 使用 session_id 进行多轮对话,以保持上下文
  2. 使用 ECO 模式进行原型设计和成本敏感型应用
  3. 处理澄清事件——在同一会话中提供所请求的信息
  4. 提供清晰的提示词——明确说明风格、氛围和构图
  5. 监控 SSE 事件——使用 thinking_delta 查看进度,使用 generation_response 获取输出
  6. 使用 OpenAI SDK 简化集成——只需将基础 URL 指向 each::sense
  7. 实现重试逻辑——对暂时性错误使用指数退避

评论

支持 Markdown