MiroFish Logo 666ghj%2FMiroFish | Trendshift 简洁通用的群体智能引擎,预测万物
A Simple and Universal Swarm Intelligence Engine, Predicting Anything 666ghj%2MiroFish | Shanda [![GitHub Stars](https://img.shields.io/github/stars/666ghj/MiroFish?style=flat-square&color=DAA520)](https://github.com/666ghj/MiroFish/stargazers) [![GitHub Watchers](https://img.shields.io/github/watchers/666ghj/MiroFish?style=flat-square)](https://github.com/666ghj/MiroFish/watchers) [![GitHub Forks](https://img.shields.io/github/forks/666ghj/MiroFish?style=flat-square)](https://github.com/666ghj/MiroFish/network) [![Docker](https://img.shields.io/badge/Docker-Build-2496ED?style=flat-square&logo=docker&logoColor=white)](https://hub.docker.com/) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/666ghj/MiroFish) [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?style=flat-square&logo=discord&logoColor=white)](http://discord.gg/ePf5aPaHnA) [![X](https://img.shields.io/badge/X-Follow-000000?style=flat-square&logo=x&logoColor=white)](https://x.com/mirofish_ai) [![Instagram](https://img.shields.io/badge/Instagram-Follow-E4405F?style=flat-square&logo=instagram&logoColor=white)](https://www.instagram.com/mirofish_ai/) [English](./README.md) | [中文文档](./README-ZH.md)
## ⚡ 项目概述 **MiroFish** 是一款基于多智能体技术的新一代 AI 预测引擎。通过提取现实世界的种子信息(如突发新闻、政策草案、金融信号),自动构建出高保真的平行数字世界。在此空间内,成千上万个具备独立人格、长期记忆与行为逻辑的智能体进行自由交互与社会演化。你可透过「上帝视角」动态注入变量,精准推演未来走向——**让未来在数字沙盘中预演,助决策在百战模拟后胜出**。 > 你只需:上传种子材料(数据分析报告或者有趣的小说故事),并用自然语言描述预测需求
> MiroFish 将返回:一份详尽的预测报告,以及一个可深度交互的高保真数字世界 ### 我们的愿景 MiroFish 致力于打造映射现实的群体智能镜像,通过捕捉个体互动引发的群体涌现,突破传统预测的局限: - **于宏观**:我们是决策者的预演实验室,让政策与公关在零风险中试错 - **于微观**:我们是个人用户的创意沙盘,无论是推演小说结局还是探索脑洞,皆可有趣、好玩、触手可及 从严肃预测到趣味仿真,我们让每一个如果都能看见结果,让预测万物成为可能。 ## 🌐 在线体验 欢迎访问在线 Demo 演示环境,体验我们为你准备的一次关于热点舆情事件的推演预测:[mirofish-live-demo](https://666ghj.github.io/mirofish-demo/) ## 📸 系统截图
截图1 截图2
截图3 截图4
截图5 截图6
## 🎬 演示视频 ### 1. 武汉大学舆情推演预测 + MiroFish项目讲解
MiroFish Demo Video 点击图片查看使用微舆BettaFish生成的《武大舆情报告》进行预测的完整演示视频
### 2. 《红楼梦》失传结局推演预测
MiroFish Demo Video 点击图片查看基于《红楼梦》前80回数十万字,MiroFish深度预测失传结局
> **金融方向推演预测**、**时政要闻推演预测**等示例陆续更新中... ## 🔄 工作流程 1. **图谱构建**:现实种子提取 & 个体与群体记忆注入 & GraphRAG构建 2. **环境搭建**:实体关系抽取 & 人设生成 & 环境配置Agent注入仿真参数 3. **开始模拟**:双平台并行模拟 & 自动解析预测需求 & 动态更新时序记忆 4. **报告生成**:ReportAgent拥有丰富的工具集与模拟后环境进行深度交互 5. **深度互动**:与模拟世界中的任意一位进行对话 & 与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. 配置环境变量 ```bash # 复制示例配置文件 cp .env.example .env # 编辑 .env 文件,填入必要的 API 密钥 ``` **必需的环境变量:** ```env # 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. 安装依赖 ```bash # 一键安装所有依赖(根目录 + 前端 + 后端) npm run setup:all ``` 或者分步安装: ```bash # 安装 Node 依赖(根目录 + 前端) npm run setup # 安装 Python 依赖(后端,自动创建虚拟环境) npm run setup:backend ``` 如果系统默认 `python3` 低于 3.11,可以手动用目标解释器创建后端 venv: ```bash 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`: ```bash 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. 启动服务 ```bash # 同时启动前后端(在项目根目录执行) npm run dev ``` **服务地址:** - 前端:`http://localhost:3000` - 后端 API:`http://localhost:5001` **单独启动:** ```bash npm run backend # 仅启动后端 npm run frontend # 仅启动前端 ``` ### 本地模型运行与参数 MiroFish 不再依赖 Zep Cloud。本地图谱模块会把图数据存入 SQLite,并使用你提供的 OpenAI-compatible embedding 接口。Reranker 是可选项,只在图谱搜索请求 `cross_encoder` 时用于重排候选结果;未配置时会自动回退到本地 hybrid ranking / RRF。 本地端点示例: ```bash # 主 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 级别)的配置。路径已做匿名化处理: ```bash # 主 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`: ```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 访问 前端现在默认走同源 `/api`,不再默认写死 `http://localhost:5001`。因此你从另一台 Tailscale 设备访问 Vite 开发服务器时,前端请求会继续命中宿主机后端,而不会错误地访问调用方自己的 localhost。 建议在项目根目录 `.env` 中加入: ```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 部署 ```bash # 1. 配置环境变量(同源码部署) cp .env.example .env # 2. 拉取镜像并启动 docker compose up -d ``` 默认会读取根目录下的 `.env`,并映射端口 `3000(前端)/5001(后端)` > 在 `docker-compose.yml` 中已通过注释提供加速镜像地址,可按需替换 ## 📬 更多交流
QQ交流群
  MiroFish团队长期招募全职/实习,如果你对多Agent应用感兴趣,欢迎投递简历至:**mirofish@shanda.com** ## 📄 致谢 **MiroFish 得到了盛大集团的战略支持和孵化!** MiroFish 的仿真引擎由 **[OASIS](https://github.com/camel-ai/oasis)** 驱动,我们衷心感谢 CAMEL-AI 团队的开源贡献! ## 📈 项目统计 Star History Chart