eCan.ai 用户手册
AI 原生、隐私优先的跨平台电商智能体平台 — 在 Windows、macOS、Linux 和 Web 上用 AI 智能体运营您的电商业务。
什么是 eCan.ai?
eCan.ai(电商智能体网络,E-Commerce Agent Network)是一个 AI 原生平台,让电商卖家能够用 AI 智能体自动化业务的每个环节——从商品采购到销售、从营销调研到广告投放、从法律咨询到客户服务——最大程度减少人工干预。
智能体运行在载体(host computer,即主机)上,通过局域网或广域网相互连接。一台电脑充当指挥节点,其他电脑作为承载智能体的载体节点。参谋设备(PC、手机或平板)可通过互联网远程监控和指挥整个智能体网络。
网络化智能体
在多台机器上部署智能体,每个智能体通过 LangGraph 工作流独立执行任务。
可视化技能编辑器
拖拽式流程图画布,构建 LangGraph 工作流,无需编写繁杂样板代码。
多渠道集成
支持 Telegram、Slack、Discord、WhatsApp、钉钉、Messenger、X 及内置网页聊天。
隐私优先
支持本地部署大模型(Ollama、Qwen),您的数据无需离开您的基础设施。
浏览器自动化
集成 Playwright、Selenium、Browser-use 和 Crawl4ai,轻松处理任何网站、验证码及指纹浏览器。
视觉识别 / OCR
eCanOCR 融合 Tesseract + PaddleOCR,实现精准的屏幕文字识别和 CV 引导的自动化操作。
核心概念
智能体(Agent)
智能体是 eCan.ai 中的核心执行者。每个智能体有名称、头像及一组可执行的任务。智能体运行在载体(主机)上,通过渠道与人类或其他智能体进行通信。
任务(Task)与技能(Skill)
任务是分配给智能体的具体工作(例如"每天监控商品价格")。每个任务都需要一个技能——一个基于 LangGraph 的工作流,描述如何完成这项工作。技能可以在技能编辑器中可视化构建,也可以直接用 Python 编写。
任务可以由人工命令触发、按一次性计划执行,或按周期性计划执行(例如每天 08:00)。
载体(Vehicle)
载体是承载一个或多个智能体的任何计算机(桌面电脑、服务器、虚拟机)。载体加入 eCan.ai 网络后,从指挥节点接收任务分配。
技能(Skill)
技能存储在 $SKILL_ROOT/my_skills/ 目录下。图形化表示存放在 diagram_dir 子目录;直接编写的 LangGraph 技能存放在 code_dir。两者可以共存,并可相互转换。
安装
桌面客户端(Windows / macOS)
从 ecan.ai/download 下载最新安装包。安装程序内置了 Python、所有依赖项及 Chromium 浏览器,无需单独安装 Python。
安装完成后,从应用程序目录或开始菜单启动 eCan.ai。首次启动时会提示创建账户或登录。
无界面服务器模式(Linux / Ubuntu)
对于无 GUI 的服务器部署,eCan.ai 以 Web 模式运行——一个通过 WebSocket/REST 接口交互的后端服务器。
安装系统依赖
sudo apt-get update
sudo apt-get install -y python3 python3-venv python3-pip \
libpq-dev gcc libffi-dev tesseract-ocr poppler-utils git
克隆仓库并运行部署脚本
git clone <仓库地址> eCan.ai && cd eCan.ai
chmod +x scripts/deploy-ubuntu.sh
./scripts/deploy-ubuntu.sh setup
配置 API 密钥
# 编辑 .env.web,填入您的大模型提供商密钥:
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
DASHSCOPE_API_KEY=... # 通义千问 / 阿里云
启动服务器
./scripts/deploy-ubuntu.sh start
# 验证:curl http://localhost:8765/health
快速开始
创建智能体
在侧边栏点击 智能体 → 新建智能体,为其命名,并可选择上传头像图片或视频。
构建或加载技能
打开 技能 → 技能编辑器,将节点拖拽到画布并连接,然后点击保存。也可以加载内置的示例技能。
创建任务
进入 任务 → 新建任务,选择智能体、选择技能、设置触发方式(手动、计划或事件触发),然后保存。
运行并对话
点击任务卡片上的运行,智能体开始执行技能。在内置网页聊天面板中与智能体对话(或通过任意已连接的渠道)。
智能体与任务
管理智能体
每个智能体有名称、描述、头像及默认任务分配。您可以创建多个智能体,并将其分配到网络中的不同载体(机器)上。
任务触发方式
| 触发类型 | 说明 |
|---|---|
| 手动 | 点击"运行"后立即执行 |
| 一次性计划 | 在指定日期和时间运行一次 |
| 周期性计划 | 类 Cron 的周期执行(如每天 08:00) |
| 事件触发 | 由传入消息、Webhook 或系统事件触发 |
多智能体 · 多任务
多个智能体可以同时运行,每个智能体在独立线程中并行处理不同任务。智能体之间通过 A2A 协议(Agent-to-Agent)进行通信——这是一个正在成为业界标准的开放式智能体间通信协议。
技能编辑器
技能编辑器是构建 LangGraph 工作流的可视化 IDE。它使用流程图画布,您可以在其中放置并连接节点来描述智能体的行为逻辑。
skill_editor_help.md — 技能编辑器完整指南 mapping-dsl.md — 数据映射 DSL 参考 prompt-variable-resolution.md — Prompt 变量系统画布基础操作
添加节点
在画布空白处右键(或点击工具栏中的节点图标)打开节点选择菜单。选择节点类型后,点击画布上的目标位置放置节点。双击节点可打开其配置面板。
连接节点
从节点的输出端口拖拽到另一节点的输入端口,即可绘制一条边。将边的端点拖到空白处可删除该边;拖到其他输入端口可重新路由。
画布导航
- 平移:按住鼠标中键拖动,或在小地图中拖动视口。
- 缩放:Ctrl + 鼠标滚轮。
- 多选:按住 Shift,拖拽选择矩形框住多个节点。
多页签工作流
复杂的工作流可以拆分到多个页签(Sheet,即画布)上。使用右上角的页签菜单(图层图标)来添加、删除或重命名页签。
sheet-call 节点调用。
跨页签引用
调用另一个页签的逻辑:
- 在被调用页签上添加
sheet-inputs节点(声明输入名称)和sheet-outputs节点(声明输出名称)。 - 在调用方页签上插入
sheet-call节点,从下拉框中选择目标页签。 - 在侧边栏中将每个输入/输出映射到常量或本地节点端口。
多页签工作流会保存为一个 -bundle.json 伴生文件。
数据流转 — 映射 DSL
节点之间通过共享的节点状态对象交换数据。由于每个工作流的状态结构各不相同,eCan.ai 使用基于 JSON 的映射 DSL来描述数据在节点间以及外部事件与节点状态之间的流转方式。
当工作流中断后需要恢复时(例如等待人工输入或定时器到期),相同的 DSL 也用于处理恢复载荷(resume payload)。
mapping-dsl.md — 映射 DSL 完整参考保存与加载
- 在编辑器中创建的技能保存在
$SKILL_ROOT/my_skills/diagram_dir/下。 - 手写的 LangGraph 技能存放在
code_dir/下。 - 数据映射 JSON 文件与这两个目录并列存放。
- 如需将 Python 编写的 LangGraph 技能可视化,调用
langgraph2flowgram()生成流程图文件后即可在编辑器中查看和调试。
运行与调试
调试技能时,它作为特殊的开发任务在测试智能体下运行。如果您的工作流涉及聊天,测试消息需以 dev> 前缀开头,以路由到测试智能体。
断点
打开节点右上角菜单,切换断点开关。执行到断点时,流程在该节点执行前暂停。您可以检查和修改节点状态,然后继续运行。
受控执行
使用工具栏控制按钮:暂停 · 单步 · 继续 · 停止。当前正在执行的节点会显示运行动画。
测试运行
点击测试运行,在隔离环境中执行工作流。在输入面板中提供 JSON 输入;在输出面板中查看每个节点的输出及最终 End 节点的结果。
版本控制
- eCan.ai 云端(付费):在 eCan.ai 的 Git 仓库中对技能进行版本管理,并可选择将技能商业化。
- 本地 Git:技能文件是纯 JSON 格式,直接在技能目录下
git init即可。
节点参考
Start 节点输出初始状态值;End 节点收集并展示工作流的最终输出结果。
内置 Monaco 编辑器,支持 Python、JavaScript 和 TypeScript。可切换语言、重置为模板代码或从磁盘加载文件。
调用语言模型。从下拉框选择提供商和模型。约定:始终要求 LLM 返回结构化 JSON:{"message": "...", "meta_data": {...}}——这会让节点间数据传递更加便捷。
配置出站 HTTP 请求(方法、URL、请求头、参数、请求体、超时、API 密钥)。响应存储在节点状态的 http_response 字段中。
根据对节点状态求值的谓词,将执行流路由到不同分支。
遍历节点状态中的数组,对每个元素执行嵌套的逻辑块。
将相关节点进行视觉分组,提升工作流可读性。不影响执行逻辑。
调用 MCP(模型上下文协议)工具。输入需存放在节点状态的 tool_input 字段中。原始结果(TextContent、ImageContent 或 AudioContent)存储在 tool_result 字段中。
暂停工作流,直到特定事件到达(人工消息、定时器到期、Webhook、SSE 推送等)。i_tag 将中断点与正确的恢复位置绑定。典型用途:人机协作、异步 API 回调、发布/订阅事件。
调用同一项目中另一个页签上定义的工作流,传入映射的输入并接收映射的输出。
浏览器自动化
eCan.ai 集成了多个先进的网页自动化库,能够处理从常规爬取到在反爬电商网站上执行复杂多步骤操作的各类场景。
| 库 | 最适合场景 | 集成方式 |
|---|---|---|
| Browser-use | 基于自然语言指令的 AI 驱动浏览 | 可作为 LangGraph 节点调用 |
| Crawl4ai | 快速、AI 就绪的网页抓取 | 可作为 LangGraph 节点调用 |
| Playwright | 现代无头浏览器自动化 | 浏览器内 MCP 工具(点击、输入、滚动、等待、脚本) |
| Selenium / ChromeDriver | 指纹浏览器(AdsPower 等) | Selenium MCP 工具(点击、输入、滚动、键盘) |
计算机视觉引导操作
当浏览器内自动化不够用时(弹窗、验证码、非标准 UI),eCan.ai 的 eCanOCR 服务提供屏幕理解和 CV 引导的鼠标/键盘操作——让您完全掌控任何桌面窗口或浏览器。
eCanMCP.md — MCP 工具完整参考 BROWSER_EVENT_MONITOR.md — 浏览器事件监控OCR 服务(eCanOCR)
eCanOCR 是一个将屏幕图像转换为结构化文本的 API 服务。它融合了 Tesseract 的速度与改进版 PaddleOCR 引擎的高精度,自动将原始 OCR 输出重组为层级化的段落、行和词语。
核心能力
- 图像转文本,含段落和行分割
- 图标识别(需配置图标模板)
- 基于锚点的内容提取——在页面上定义关键地标,精确定位动态内容
- 表格、日历和边界框区域提取
内容技能文件(.csk)
.csk 文件使用 JSON 指令集描述预期的页面内容。它定义锚点(独特的文本或图标地标)和信息区域(相对于锚点的感兴趣区域)。这使得智能体能够可靠地从重复出现的页面布局中提取结构化数据。
eCanOCR.md — OCR 服务参考MCP 工具
eCan.ai 提供一套可流式传输的 HTTP MCP 工具,任何集成了 LLM 的工作流均可调用。这些工具分为五个类别:
鼠标与键盘
单击、双击、右键、拖放、滚动、文字输入、按键。支持按锚点名称或文本进行 CV 引导定位。
屏幕视觉
屏幕截图、通过 eCanOCR 提取结构化文本、按名称和类型搜索特定元素。
文件与目录
操作系统级文件和目录操作——读取、写入、列出、移动、删除。
浏览器操作
Playwright 和 Selenium 浏览器内工具:点击、输入、滚动、执行脚本、等待元素、键盘组合键。
API 请求
可配置方法、请求头和请求体的通用 HTTP 请求——从工作流中调用任意外部 API。
多渠道集成
渠道系统让 eCan.ai 智能体能够接收并回复来自外部消息平台的消息。每个渠道适配器将入站消息规范化为统一格式,路由到智能体处理管道,再将回复发送回原始平台。
* 需要可公开访问的端点(例如通过 ngrok 或反向代理)。
快速配置
所有渠道配置位于 agent/agent_files/channels.json。启用渠道、填入凭证,重启 eCan.ai 后渠道管理器会自动启动。
{
"channels": {
"telegram": {
"enabled": true,
"bot_token": "您的机器人令牌",
"allowed_chat_ids": [],
"default_agent_id": ""
}
}
}
将 default_agent_id 设置为指定智能体 ID,可将该渠道的消息路由给特定智能体;留空则路由给第一个可用智能体。
Telegram 配置步骤
- 在 Telegram 上与 @BotFather 对话 → 发送
/newbot→ 复制机器人令牌。 - 将令牌填入
channels.json的"telegram"部分。 - 重启 eCan.ai — 机器人立即上线。
Slack 配置步骤
- 在 api.slack.com/apps 创建 Slack 应用。
- 启用 Socket 模式,订阅
message.*事件。 - 将
bot_token和app_token填入channels.json。 - 在频道中邀请机器人:
/invite @您的机器人名称。
WhatsApp / Messenger / X(Twitter)
这些渠道需要公开可访问的 Webhook 端点。开发阶段可使用 ngrok:
ngrok http 8443 # WhatsApp
ngrok http 8444 # Messenger
ngrok http 8445 # X(Twitter)
在各平台的开发者控制台中注册 ngrok URL 为 Webhook 地址,然后在 channels.json 中填入对应凭证。
钉钉配置步骤
- 在钉钉开放平台创建机器人应用。
- 启用 Stream 模式,记录 AppKey(client_id)和 AppSecret(client_secret)。
- 将凭证填入
channels.json的"dingtalk"部分。 - 在群聊中 @ 提及机器人,或通过单聊直接与其对话(单聊无需 @)。
头像系统
每个智能体可以设置静态图片头像或动态视频头像。头像文件存储在本地,并在后台自动同步到 AWS S3。
支持格式
| 类型 | 格式 | 展示方式 |
|---|---|---|
| 图片 | PNG、JPG、GIF、WebP | 静态图片 |
| 视频 | WebM、MP4、MOV、AVI | 循环播放、静音、自动播放 |
S3 云端同步
上传后,文件先保存到本地,然后在后台线程中上传到 AWS S3,不阻塞界面操作。S3 URL 存入数据库,在智能体数据同步到云端时使用。
CLI 命令行参考
eCan.ai CLI 在无界面模式下提供对服务器和所有资源的完整控制,无需 GUI。
python ecan_cli.py --help # 全局帮助
python ecan_cli.py version # 显示版本
python ecan_cli.py status # 系统状态
身份验证
python ecan_cli.py auth login -u 用户名 -p 密码
python ecan_cli.py auth status
python ecan_cli.py auth logout
资源命令
| 资源 | 子命令 |
|---|---|
| agents(智能体) | list · get · add · update · remove · run · stop · monitor |
| tasks(任务) | list · get · add · remove |
| skills(技能) | list · get · add · remove |
| vehicles(载体) | list · get · add · remove |
| knowledge(知识库) | list · get |
| prompts(提示词) | list · get · add · remove |
| tools(工具) | list · get |
| settings(设置) | show · set · reset |
| server(服务器) | start · stop · restart · status · logs |
服务器管理
python ecan_cli.py server start # 后台启动
python ecan_cli.py server start --host 0.0.0.0 --port 8080
python ecan_cli.py server start --foreground # 前台运行(调试用)
python ecan_cli.py server logs --follow # 跟踪日志
python ecan_cli.py server stop
输出格式
大多数列表命令支持 --output table(默认)和 --output json(用于脚本化处理):
python ecan_cli.py agents list --output json | jq '.agents[0].name'
CLI_GUIDE.md — CLI 完整参考
服务器部署
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
ECAN_MODE | web | 无界面模式下必须设为 web |
ECAN_WS_HOST | 0.0.0.0 | WebSocket 绑定地址 |
ECAN_WS_PORT | 8765 | WebSocket 端口 |
ECAN_LOG_LEVEL | INFO | DEBUG / INFO / WARNING / ERROR |
Docker 部署
docker-compose -f docker-compose.web.yml up -d
docker-compose -f docker-compose.web.yml logs -f
Nginx 反向代理(生产环境)
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8765;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
}
Systemd 服务(生产环境)
[Unit]
Description=eCan.ai Web Server
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/eCan.ai
EnvironmentFile=/opt/eCan.ai/.env.web
ExecStart=/opt/eCan.ai/venv/bin/python -m uvicorn web_server:app \
--host 127.0.0.1 --port 8765
Restart=always
[Install]
WantedBy=multi-user.target
Web 模式限制
| 功能 | 桌面模式 | Web / 无界面模式 |
|---|---|---|
| 文件对话框 | ✅ | ❌(使用文件路径代替) |
| 屏幕截图 | ✅ | ❌ |
| 桌面自动化 | ✅ | ❌ |
| 原生通知 | ✅ | ❌ |
代理管理
eCan.ai 内置代理管理系统,支持通过 HTTP/SOCKS 代理路由浏览器自动化流量——这对于需要 IP 轮换或地理位置访问的电商工作流至关重要。
代理可以按智能体或按任务进行配置,自动应用于 Playwright、Selenium 及 HTTP 请求节点。
PROXY_MANAGEMENT_SYSTEM.md — 代理管理完整参考设置与 API 密钥
大模型提供商
为您希望使用的大模型提供商添加 API 密钥。密钥存储在 .env(桌面模式)或 .env.web(服务器模式)中。
| 提供商 | 环境变量 |
|---|---|
| OpenAI(GPT-4o、o1 等) | OPENAI_API_KEY |
| Anthropic(Claude) | ANTHROPIC_API_KEY |
| Google(Gemini) | GOOGLE_API_KEY |
| 阿里云(通义千问 / DashScope) | DASHSCOPE_API_KEY |
| 本地(Ollama) | 无需密钥——在设置中配置 Base URL 即可 |
应用内设置
从侧边栏打开设置,可配置大模型默认选项、浏览器自动化选项、内存限制、更新偏好等。更改无需重启即可生效。
键盘快捷键
技能编辑器
通用快捷键
常见问题与故障排查
技能编辑器无法加载
刷新页面,并确保 eCan.ai 后端服务器正在运行。在桌面模式下,检查系统托盘图标——如果显示错误,请重启应用。
智能体在渠道上无响应
- 确认
channels.json中已设置"enabled": true。 - 确保至少有一个智能体有正在运行的任务,且该任务的技能包含聊天节点或等待事件节点。
- 查看应用日志中的
[ChannelBridge]条目,查找"No agent available"或"dispatch_inbound error"等错误信息。 - 对于 Webhook 类渠道(WhatsApp、Messenger、X):确认 Webhook URL 可公开访问,且验证令牌与配置一致。
服务器无法启动
# 检查端口是否被占用
netstat -an | grep 8765
# 或使用不同端口
./scripts/deploy-ubuntu.sh start -- --port 8080
# 查看日志
./scripts/deploy-ubuntu.sh logs
LLM 调用失败
- 确认
.env/.env.web中的 API 密钥已正确设置且有效。 - 检查提供商的 Token 配额是否充足。
- 对于本地 Ollama:确认模型已下载(
ollama pull <模型名>),且设置中的 Base URL 正确。
浏览器自动化报错
- 运行
playwright install chromium --with-deps,确保内置浏览器存在。 - 对于 Selenium 工具:确认 ChromeDriver 版本与已安装的 Chrome/Chromium 版本匹配。
- 在无界面服务器上:屏幕截图和桌面自动化工具不可用——请改用 Playwright 或 Crawl4ai。
如何在代码节点中切换语言?
使用代码节点编辑器面板中 Monaco 编辑器上方的语言下拉框。支持 Python、JavaScript 和 TypeScript。
全部文档
各子系统的详细参考文档: