- 基于 OpenClaw + Vue3 的多智能体科研协作平台
- 基于 Vue 3 + Vite + TypeScript + Pinia 构建的多智能体科研协作系统前端。
本项目构建了一个面向 AI/ML 研究人员的多智能体科研协作系统,集成 5 个专业智能体,覆盖从文献调研到论文审稿的完整科研工作流。
- 🤖 5 个专业 Agent:唐僧、孙悟空、猪八戒、沙僧、白龙马
- 🤖 唐 僧:科研战略与方向规划 Agent
- 🤖 孙悟空:算法开发与编程实现 Agent
- 🤖 猪八戒:学术写作与项目申报 Agent
- 🤖 沙 僧:文献管理与知识整合 Agent
- 🤖 白龙马:数据工程与流程自动化 Agent
- 🌊 会话分页:可以根据不同的任务需求与同一个 Agent 建立分页对话
- 📝 动态输入:在与 Agent 对话过程中,可以随时停止当前任务
- 💬 独立会话:每个 Agent 维护独立的对话历史
- 🎨 现代 UI:深色主题科研工作室界面
浏览器 (ui) OpenClaw Gateway
┌──────────────┐ HTTP/SSE ┌──────────────────────┐
│ Vue3 SPA │ ──────────── │ :18789 │
│ :8001 (dev) │ /v1/chat/ │ ┌──────────────────┐ │
│ :8080 (prod) │ completions │ │ sanzang (唐僧) │ │
│ │ │ │ wukong (孙悟空) │ │
│ NavBar │ Headers: │ │ wuneng (猪八戒) │ │
│ AgentChat │ Agent-Id │ │ wujing (沙僧) │ │
│ GroupChat │ Session-Key │ │ horse (白龙马) │ │
│ ChatInput │ Bearer xxx │ │ coordinator │ │
└──────────────┘ └──────────────────────┘
- Node.js >= 18
- npm >= 9
- OpenClaw 已安装 (
openclaw命令可用)
| Agent | 名称 | 功能 | @提及 |
|---|---|---|---|
| 📚 | 唐僧 | 定义研究问题与科学目标、制定阶段性计划 | @讨论 @discussion @dis |
| 🧪 | 孙悟空 | 实验设计、模型训练、超参调优 | @实验 @experiment @exp |
| ✍️ | 猪八戒 | 论文撰写、LaTeX、学术润色 | @写作 @writer @wrt |
| 🔍 | 沙僧 | 检索文献、领域综述、定时总结 | @文献 @literature @lit |
| 📊 | 白龙马 | 数据清洗、特征工程、可视化 | @数据 @data @dat |
将 openclaw_config/openclaw.json 中的配置合并到你的 ~/.openclaw/openclaw.json。
关键配置项:
openclaw gateway start验证 Gateway 是否正常运行:
curl -s http://localhost:18789/v1/models \
-H "Authorization: Bearer <你的token>" | head -20cd ./WestOdyssey
# 安装依赖
npm install
# 启动开发服务器
npm run devVite 开发服务器已在 vite.config.ts 中配置代理,/v1/* 请求自动转发到 http://localhost:18789(Gateway),无需额外配置跨域。
在 ui/ 目录创建 .env 文件:
VITE_OPENCLAW_AUTH_TOKEN=<你的 token>如不配置,将使用 useStream.ts 中的默认值。
cd ./WestOdyssey
npm run build产出 dist/ 目录。
server {
listen 8080;
server_name localhost;
root /path/to/WestOdyssey/dist;
index index.html;
# SPA 路由回退
location / {
try_files $uri $uri/ /index.html;
}
# 反向代理 Gateway API
location /v1/ {
proxy_pass http://127.0.0.1:18789;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off; # SSE 流式响应必需
proxy_cache off;
chunked_transfer_encoding on;
}
}# 测试并重载 Nginx
nginx -t && nginx -s reloadproxy_buffering off是 SSE 流式响应的必需配置,否则会出现消息延迟- 如果 Gateway 和 Nginx 不在同一台机器,将
127.0.0.1改为 Gateway 实际 IP
cd ./WestOdyssey
npm run build
npm run preview # 默认端口 4173注意:preview 模式不带 API 代理,需配合 Nginx 或将 Gateway 配置为允许跨域。
如果 ui 和 Gateway 分别部署在不同机器:
- Gateway 端:修改
openclaw.json中gateway.bind为"0.0.0.0"或具体 IP - ui 端:修改
vite.config.ts中 proxy target 或 Nginx 中proxy_pass为远程 Gateway 地址
// ~/.openclaw/openclaw.json
{
"gateway": {
"bind": "0.0.0.0" // 允许远程连接(注意安全性)
}
}ui 通过标准 OpenAI 兼容 HTTP API 与 Gateway 通信:
POST /v1/chat/completions
Headers:
Content-Type: application/json
Authorization: Bearer <token>
X-OpenClaw-Agent-Id: sanzang # 路由到指定 Agent
X-OpenClaw-Session-Key: agent:sanzang:main:webchat-user:default:<session-id>
Body:
{
"model": "openclaw:sanzang",
"messages": [{"role":"user","content":"..."}],
"stream": true
}
X-OpenClaw-Agent-Id决定消息由哪个 Agent 处理X-OpenClaw-Session-Key保证会话隔离stream: true启用 SSE 流式输出
WestOdyssey/
├── index.html # 入口 HTML
├── package.json
├── vite.config.ts # Vite 配置(含 Gateway 代理)
├── tsconfig.json
├── src/
│ ├── main.ts # Vue 应用入口
│ ├── App.vue # 主布局(NavBar + 视图切换)
│ ├── stores/
│ │ ├── agents.ts # Agent 定义(5+1 角色)
│ │ └── chat.ts # Pinia 状态管理
│ ├── composables/
│ │ └── useStream.ts # SSE 流式请求封装
│ ├── views/
│ │ ├── AgentChat.vue # 单 Agent 聊天页
│ │ └── GroupChat.vue # 学术讨论空间页
│ ├── components/
│ │ ├── NavBar.vue # 左侧导航栏
│ │ ├── ChatMessage.vue # 消息气泡(Markdown 渲染)
│ │ ├── ChatInput.vue # 输入框
│ │ └── SessionList.vue # 会话列表面板
│ └── styles/
│ └── global.css # 全局暖色调样式
└── dist/ # 构建产物(npm run build 后生成)
| 问题 | 原因 | 解决 |
|---|---|---|
| 消息发送后无响应 | Gateway 未启动或 token 错误 | 检查 openclaw gateway start 状态及 token |
| 流式输出一次性返回 | Nginx 未关闭 buffering | 添加 proxy_buffering off |
| 页面白屏 | 构建产物路径配置错误 | 检查 Nginx root 路径 |
| Agent 返回 404 | openclaw.json 中 agent id 不匹配 |
确保 id 为 sanzang/wukong/wuneng/wujing/horse/coordinator |
| 跨域错误 | 生产环境未配置反向代理 | 使用 Nginx 代理 /v1/ 到 Gateway |
# 1. 启动 Gateway
openclaw gateway start
# 2. 安装依赖并启动 ui
cd ./WestOdyssey
npm install
npm run dev
# 3. 打开浏览器
open http://localhost:8001

{ "agents": { "list": [ { "id": "sanzang", "name": "唐僧", "workspace": "..." }, { "id": "wukong", "name": "孙悟空", "workspace": "..." }, { "id": "wuneng", "name": "猪八戒", "workspace": "..." }, { "id": "wujing", "name": "沙僧", "workspace": "..." }, { "id": "horse", "name": "白龙马", "workspace": "..." }, { "id": "coordinator", "name": "学术讨论空间", "workspace": "..." } ] }, "gateway": { "port": 18789, "auth": { "mode": "token", "token": "<你的 token>" // ui 需要用这个 token 连接 }, "http": { "endpoints": { "chatCompletions": { "enabled": true } // 必须开启 } } } }