MicroFish/README-ZH.md

14 KiB
Raw Blame History

MiroFish Logo

666ghj%2FMiroFish | Trendshift

简洁通用的群体智能引擎,预测万物
A Simple and Universal Swarm Intelligence Engine, Predicting Anything

666ghj%2MiroFish | Shanda

GitHub Stars GitHub Watchers GitHub Forks Docker Ask DeepWiki

Discord X Instagram

English | 中文文档

项目概述

MiroFish 是一款基于多智能体技术的新一代 AI 预测引擎。通过提取现实世界的种子信息(如突发新闻、政策草案、金融信号),自动构建出高保真的平行数字世界。在此空间内,成千上万个具备独立人格、长期记忆与行为逻辑的智能体进行自由交互与社会演化。你可透过「上帝视角」动态注入变量,精准推演未来走向——让未来在数字沙盘中预演,助决策在百战模拟后胜出

你只需:上传种子材料(数据分析报告或者有趣的小说故事),并用自然语言描述预测需求
MiroFish 将返回:一份详尽的预测报告,以及一个可深度交互的高保真数字世界

我们的愿景

MiroFish 致力于打造映射现实的群体智能镜像,通过捕捉个体互动引发的群体涌现,突破传统预测的局限:

  • 于宏观:我们是决策者的预演实验室,让政策与公关在零风险中试错
  • 于微观:我们是个人用户的创意沙盘,无论是推演小说结局还是探索脑洞,皆可有趣、好玩、触手可及

从严肃预测到趣味仿真,我们让每一个如果都能看见结果,让预测万物成为可能。

🌐 在线体验

欢迎访问在线 Demo 演示环境,体验我们为你准备的一次关于热点舆情事件的推演预测:mirofish-live-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. 配置环境变量

# 复制示例配置文件
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
  • 后端 APIhttp://localhost:5001

单独启动:

npm run backend   # 仅启动后端
npm run frontend  # 仅启动前端

本地模型运行与参数

MiroFish 不再依赖 Zep Cloud。本地图谱模块会把图数据存入 SQLite并使用你提供的 OpenAI-compatible embedding 接口。Reranker 是可选项,只在图谱搜索请求 cross_encoder 时用于重排候选结果;未配置时会自动回退到本地 hybrid ranking / RRF。

本地端点示例:

# 主 LLMllama.cpp 示例
llama-server \
  -m /path/to/model.gguf \
  --alias Qwen3.5-9B-VL \
  --host 127.0.0.1 \
  --port 8000 \
  -c 16384 \
  --jinja

# EmbeddingsvLLM 示例
vllm serve /path/to/Qwen3-Embedding-0.6B \
  --host 127.0.0.1 \
  --port 8001 \
  --runner pooling \
  --max-model-len 8192

# 可选 rerankervLLM 示例
vllm serve /path/to/Qwen3-Reranker-0.6B \
  --host 127.0.0.1 \
  --port 8002 \
  --runner pooling \
  --max-model-len 8192

已验证可用于 24GB 显存 GPURTX 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 端点建议使用 20484096
  • 单个 llama.cpp/vLLM 主端点建议 LLM_MAX_CONCURRENCY=1,除非确认服务端可以稳定并发处理 chat completions。
  • Embedding 维度不需要手动配置。本地图谱会记录模型返回的向量;同一个图谱数据库应保持使用同一个 embedding 模型。
  • Reranker 与 embedding 是不同模型。Embedding 负责图谱索引和语义检索reranker 只负责对候选搜索结果重排。
  • .envstart.shvenv/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 servetailscale 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 中已通过注释提供加速镜像地址,可按需替换

📬 更多交流

QQ交流群

 

MiroFish团队长期招募全职/实习如果你对多Agent应用感兴趣欢迎投递简历至mirofish@shanda.com

📄 致谢

MiroFish 得到了盛大集团的战略支持和孵化!

MiroFish 的仿真引擎由 OASIS 驱动,我们衷心感谢 CAMEL-AI 团队的开源贡献!

📈 项目统计

Star History Chart