14 KiB
简洁通用的群体智能引擎,预测万物
A Simple and Universal Swarm Intelligence Engine, Predicting Anything
⚡ 项目概述
MiroFish 是一款基于多智能体技术的新一代 AI 预测引擎。通过提取现实世界的种子信息(如突发新闻、政策草案、金融信号),自动构建出高保真的平行数字世界。在此空间内,成千上万个具备独立人格、长期记忆与行为逻辑的智能体进行自由交互与社会演化。你可透过「上帝视角」动态注入变量,精准推演未来走向——让未来在数字沙盘中预演,助决策在百战模拟后胜出。
你只需:上传种子材料(数据分析报告或者有趣的小说故事),并用自然语言描述预测需求
MiroFish 将返回:一份详尽的预测报告,以及一个可深度交互的高保真数字世界
我们的愿景
MiroFish 致力于打造映射现实的群体智能镜像,通过捕捉个体互动引发的群体涌现,突破传统预测的局限:
- 于宏观:我们是决策者的预演实验室,让政策与公关在零风险中试错
- 于微观:我们是个人用户的创意沙盘,无论是推演小说结局还是探索脑洞,皆可有趣、好玩、触手可及
从严肃预测到趣味仿真,我们让每一个如果都能看见结果,让预测万物成为可能。
🌐 在线体验
欢迎访问在线 Demo 演示环境,体验我们为你准备的一次关于热点舆情事件的推演预测:mirofish-live-demo
📸 系统截图
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
🎬 演示视频
1. 武汉大学舆情推演预测 + MiroFish项目讲解
2. 《红楼梦》失传结局推演预测
金融方向推演预测、时政要闻推演预测等示例陆续更新中...
🔄 工作流程
- 图谱构建:现实种子提取 & 个体与群体记忆注入 & GraphRAG构建
- 环境搭建:实体关系抽取 & 人设生成 & 环境配置Agent注入仿真参数
- 开始模拟:双平台并行模拟 & 自动解析预测需求 & 动态更新时序记忆
- 报告生成:ReportAgent拥有丰富的工具集与模拟后环境进行深度交互
- 深度互动:与模拟世界中的任意一位进行对话 & 与ReportAgent进行对话
🚀 快速开始
一、源码部署(推荐)
前置要求
| 工具 | 版本要求 | 说明 | 安装检查 |
|---|---|---|---|
| Node.js | 18+ | 前端运行环境,包含 npm | node -v |
| Python | ≥3.11 | 后端运行环境。API 与本地图谱后端支持 Python 3.13。 | python --version |
| Python 3.11 | 3.11.x | 可选但推荐给 OASIS/CAMEL 使用,因为 camel-oasis==0.2.5 声明 Python <3.12。 |
python3.11 --version |
1. 配置环境变量
# 复制示例配置文件
cp .env.example .env
# 编辑 .env 文件,填入必要的 API 密钥
必需的环境变量:
# LLM API配置(支持 OpenAI SDK 格式的任意 LLM API)
# 推荐使用阿里百炼平台qwen-plus模型:https://bailian.console.aliyun.com/
# 注意消耗较大,可先进行小于40轮的模拟尝试
LLM_API_KEY=your_api_key
LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
LLM_MODEL_NAME=qwen-plus
LLM_CONTEXT_WINDOW=8192
LLM_MAX_CONCURRENCY=1
LLM_JSON_MAX_RETRIES=2
ONTOLOGY_MAX_OUTPUT_TOKENS=2048
ONTOLOGY_PROMPT_MARGIN_TOKENS=512
LOCAL_ZEP_EXTRACT_MAX_OUTPUT_TOKENS=2048
LOCAL_ZEP_EXTRACT_MAX_RETRIES=2
# 本地图谱 / Embeddings 配置
# 使用 OpenAI-compatible embeddings 接口,推荐优先接 vLLM
EMBEDDING_API_KEY=local-embedding-key
EMBEDDING_BASE_URL=http://localhost:8001/v1
EMBEDDING_MODEL_NAME=your_embedding_model
# 可选 cross-encoder reranker 接口;不配置时本地图谱搜索自动回退到 RRF
RERANKER_API_KEY=local-reranker-key
RERANKER_BASE_URL=http://localhost:8002/v1
RERANKER_MODEL_NAME=your_reranker_model
LOCAL_ZEP_RERANK_TOP_K=50
# 可选:本地图谱 SQLite 存储路径
LOCAL_ZEP_DB_PATH=backend/data/local_zep.sqlite3
# 可选:为原版 OASIS/CAMEL 脚本指定独立 Python 3.11 venv
OASIS_PYTHON=/absolute/path/to/venv11/bin/python
2. 安装依赖
# 一键安装所有依赖(根目录 + 前端 + 后端)
npm run setup:all
或者分步安装:
# 安装 Node 依赖(根目录 + 前端)
npm run setup
# 安装 Python 依赖(后端,自动创建虚拟环境)
npm run setup:backend
如果系统默认 python3 低于 3.11,可以手动用目标解释器创建后端 venv:
python3.13 -m venv venv
./venv/bin/python -m pip install --upgrade pip
./venv/bin/python -m pip install -r backend/requirements.txt
如果需要运行原版 OASIS/CAMEL 模拟引擎,建议单独创建 Python 3.11 venv,并在 .env 中设置 OASIS_PYTHON:
python3.11 -m venv venv11
./venv11/bin/python -m pip install --upgrade pip
./venv11/bin/python -m pip install -r backend/requirements.txt
echo "OASIS_PYTHON=$(pwd)/venv11/bin/python" >> .env
3. 启动服务
# 同时启动前后端(在项目根目录执行)
npm run dev
服务地址:
- 前端:
http://localhost:3000 - 后端 API:
http://localhost:5001
单独启动:
npm run backend # 仅启动后端
npm run frontend # 仅启动前端
本地模型运行与参数
MiroFish 不再依赖 Zep Cloud。本地图谱模块会把图数据存入 SQLite,并使用你提供的 OpenAI-compatible embedding 接口。Reranker 是可选项,只在图谱搜索请求 cross_encoder 时用于重排候选结果;未配置时会自动回退到本地 hybrid ranking / RRF。
本地端点示例:
# 主 LLM,llama.cpp 示例
llama-server \
-m /path/to/model.gguf \
--alias Qwen3.5-9B-VL \
--host 127.0.0.1 \
--port 8000 \
-c 16384 \
--jinja
# Embeddings,vLLM 示例
vllm serve /path/to/Qwen3-Embedding-0.6B \
--host 127.0.0.1 \
--port 8001 \
--runner pooling \
--max-model-len 8192
# 可选 reranker,vLLM 示例
vllm serve /path/to/Qwen3-Reranker-0.6B \
--host 127.0.0.1 \
--port 8002 \
--runner pooling \
--max-model-len 8192
已验证可用于 24GB 显存 GPU(RTX 3090 / RTX 4090 级别)的配置。路径已做匿名化处理:
# 主 llama.cpp LLM 端点
./llama-server \
--mmproj /path/to/models/Qwen3.5-9B-gguf/mmproj-Qwen3.5-9B-BF16.gguf \
--alias Qwen3.5-9B-VL \
--host 127.0.0.1 \
--port 8000 \
-c 280000 \
-ngl auto \
--temp 0.7 \
--top-p 0.8 \
--top-k 20 \
--min-p 0.0 \
--jinja \
-m /path/to/models/Qwen3.5-9B-gguf/Qwen3.5-9B-Q6_K.gguf
# Embedding 端点,实测峰值约 2-3GB 显存
vllm serve /path/to/models/embedding/Qwen3-Embedding-0.6B \
--host 127.0.0.1 \
--port 8001 \
--runner pooling \
--gpu-memory-utilization 0.08 \
--max-model-len 8192 \
--quantization fp8 \
--kv-cache-dtype fp8
# Reranker 端点,实测峰值约 2-3GB 显存
vllm serve /path/to/models/embedding/Qwen3-Reranker-0.6B \
--host 127.0.0.1 \
--port 8002 \
--runner pooling \
--gpu-memory-utilization 0.09 \
--max-model-len 8192 \
--quantization fp8 \
--kv-cache-dtype fp8
对应 .env:
LLM_BASE_URL=http://127.0.0.1:8000/v1
LLM_MODEL_NAME=Qwen3.5-9B-VL
LLM_CONTEXT_WINDOW=280000
LLM_MAX_CONCURRENCY=1
ONTOLOGY_MAX_OUTPUT_TOKENS=8192
LOCAL_ZEP_EXTRACT_MAX_OUTPUT_TOKENS=8192
EMBEDDING_BASE_URL=http://127.0.0.1:8001/v1
EMBEDDING_MODEL_NAME=/path/to/Qwen3-Embedding-0.6B
RERANKER_BASE_URL=http://127.0.0.1:8002/v1
RERANKER_MODEL_NAME=/path/to/Qwen3-Reranker-0.6B
LOCAL_ZEP_RERANK_TOP_K=50
参数规则:
LLM_CONTEXT_WINDOW必须和主 LLM 服务暴露的上下文长度一致,确保prompt tokens + max output tokens <= LLM_CONTEXT_WINDOW。- 使用上面的 24GB 配置时,
LLM_CONTEXT_WINDOW=280000应与-c 280000保持一致。16k 上下文模型建议ONTOLOGY_MAX_OUTPUT_TOKENS=8192,大约保留一半窗口给输出;8k 端点建议使用2048到4096。 - 单个 llama.cpp/vLLM 主端点建议
LLM_MAX_CONCURRENCY=1,除非确认服务端可以稳定并发处理 chat completions。 - Embedding 维度不需要手动配置。本地图谱会记录模型返回的向量;同一个图谱数据库应保持使用同一个 embedding 模型。
- Reranker 与 embedding 是不同模型。Embedding 负责图谱索引和语义检索;reranker 只负责对候选搜索结果重排。
.env、start.sh、venv/、venv11/、上传的模拟数据和本地图谱数据库都会被 git 忽略。
Tailscale 访问
发布说明:Tailscale 支持主要面向源码/开发部署,即后端和 Vite 代理运行在同一台主机上。它不会自动公开本地 LLM、embedding 或 reranker 端点;除非你明确需要暴露,否则建议这些模型端点继续绑定在 127.0.0.1。
前端现在默认走同源 /api,不再默认写死 http://localhost:5001。因此你从另一台 Tailscale 设备访问 Vite 开发服务器时,前端请求会继续命中宿主机后端,而不会错误地访问调用方自己的 localhost。
建议在项目根目录 .env 中加入:
VITE_DEV_HOST=0.0.0.0
VITE_DEV_PORT=3000
VITE_DEV_PROXY_TARGET=http://127.0.0.1:5001
VITE_ALLOWED_HOSTS=localhost,127.0.0.1,.ts.net,.beta.tailscale.net
FLASK_HOST=0.0.0.0
FLASK_PORT=5001
然后从另一台 Tailscale 设备访问:
- 前端:
http://<你的 tailnet 主机名>:3000 - 后端:
http://<你的 tailnet 主机名>:5001
如果你通过 tailscale serve 或 tailscale funnel 暴露后端,建议设置 ENABLE_PROXY_FIX=true。如果通过 MagicDNS 访问时 HMR 连接不稳定,再额外设置 VITE_HMR_HOST 为你的 Tailscale 主机名。
二、Docker 部署
发布限制:Docker 部署属于旧路径,目前未针对本地 Zep 替代、外部 vLLM/llama.cpp 端点、以及拆分的 Python 3.11 OASIS 运行时做完整验证。需要本地优先工作流时,请使用源码部署。
# 1. 配置环境变量(同源码部署)
cp .env.example .env
# 2. 拉取镜像并启动
docker compose up -d
默认会读取根目录下的 .env,并映射端口 3000(前端)/5001(后端)
在
docker-compose.yml中已通过注释提供加速镜像地址,可按需替换
📬 更多交流
MiroFish团队长期招募全职/实习,如果你对多Agent应用感兴趣,欢迎投递简历至:mirofish@shanda.com
📄 致谢
MiroFish 得到了盛大集团的战略支持和孵化!
MiroFish 的仿真引擎由 OASIS 驱动,我们衷心感谢 CAMEL-AI 团队的开源贡献!







