MicroFish/README-ZH.md

238 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MiroFish Neo4j 二开版
[English](./README.md) | 中文
<a href="https://trendshift.io/repositories/16144" target="_blank"><img src="https://trendshift.io/api/badge/repositories/16144" alt="MiroFish | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
本项目基于原始开源仓库 [666ghj/MiroFish](https://github.com/666ghj/MiroFish) 进行二次开发。
本版本的核心改动是:将原项目中的 Zep Cloud 图谱记忆与检索依赖替换为本地 Neo4j 后端,使项目可以使用本地图数据库完成实体关系存储、图谱检索、报告工具调用和模拟后的记忆更新,同时保留原 MiroFish 的多智能体模拟流程。
本项目遵守原仓库一致的开源协议:**AGPL-3.0**。
## 主要改动
- 使用本地 Neo4j 替代 Zep Cloud 图谱存储与检索。
- 新增 Neo4j 图谱构建、实体读取、记忆更新和搜索服务。
- 新增图数据库后端工厂,支持按配置切换图谱后端。
- 修复并增强报告工具输出:
- Deep Insight
- Panorama Search
- Quick Search
- 新增 LLM 429 限流等待与重试逻辑。
- 新增足球场景的比分概率计算与报告注入。
- 新增本地 Neo4j Docker Compose 配置。
## 功能说明
- 上传种子文档并抽取实体关系。
- 将抽取结果写入本地 Neo4j 图谱。
- 生成模拟 Agent 和社交行为配置。
- 运行双平台社交模拟。
- 基于图谱检索生成预测报告。
- 在足球比赛场景中输出胜平负概率、最可能比分、期望进球和比分矩阵。
## 项目结构
```text
frontend/ Vue + Vite 前端
backend/ Flask 后端
backend/app/services/ 模拟、报告、图谱与适配服务
backend/app/services/adapters/
Neo4j 图谱适配实现
backend/app/utils/neo4j/ Neo4j 驱动与 Schema 工具
locales/ 多语言文案
static/ 静态图片资源
```
## 环境要求
- Node.js 18+
- Python 3.11 - 3.12
- uv
- Docker用于快速启动 Neo4j
- 一个兼容 OpenAI SDK 格式的 LLM API Key
## 环境变量配置
复制示例文件:
```bash
cp .env.example .env
```
最小本地配置示例:
```env
LLM_API_KEY=your_api_key_here
LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
LLM_MODEL_NAME=qwen-plus
GRAPH_BACKEND=neo4j
NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
NEO4J_DATABASE=neo4j
```
可选的 LLM 限流重试配置:
```env
LLM_RATE_LIMIT_MAX_ATTEMPTS=20
LLM_RATE_LIMIT_INITIAL_DELAY=30
LLM_RATE_LIMIT_MAX_DELAY=180
LLM_RATE_LIMIT_BACKOFF_FACTOR=1.5
```
## 启动 Neo4j
项目提供了本地 Neo4j 的 Docker Compose 文件:
```bash
docker compose -f docker-compose.neo4j.yml up -d
```
默认地址:
- Neo4j Browser`http://localhost:7474`
- Bolt URI`bolt://localhost:7687`
- 默认账号:`neo4j / password`
请确保 `.env` 中的 `NEO4J_PASSWORD` 与 Docker Compose 中配置的密码一致。
## 安装依赖
一次性安装前后端依赖:
```bash
npm run setup:all
```
也可以分开安装:
```bash
npm run setup
npm run setup:backend
```
## 运行项目
同时启动前端和后端:
```bash
npm run dev
```
服务地址:
- 前端:`http://localhost:3000`
- 后端 API`http://localhost:5001`
单独启动:
```bash
npm run backend
npm run frontend
```
## Docker 运行
根目录的 `docker-compose.yml` 可用于启动应用容器。若使用本地 Neo4j 图谱后端,建议先启动 Neo4j
```bash
docker compose -f docker-compose.neo4j.yml up -d
```
再启动应用:
```bash
docker compose up -d
```
默认会读取根目录下的 `.env`,并映射端口 `3000前端/5001后端`
## 基本使用流程
1. 启动 Neo4j。
2. 启动后端和前端。
3. 打开 `http://localhost:3000`
4. 创建或打开项目。
5. 上传种子文档。
6. 构建图谱。
7. 生成模拟配置。
8. 启动模拟。
9. 生成预测报告。
## 报告检索工具
报告 Agent 可以调用以下图谱检索工具:
- **Deep Insight**:将问题拆解为多个子问题,并收集相关事实、实体和关系链。
- **Panorama Search**:返回图谱中的全景实体和事实。
- **Quick Search**:对图谱事实、节点名称和节点摘要进行轻量关键词搜索。
- **Interview Agents**:结合模拟或图谱上下文生成面向 Agent 的回答。
在 Neo4j 二开版中,检索工具会输出前端可直接解析的文本结构,因此报告时间线能够展示事实、实体和关系链,而不是空白 JSON。
## 足球比分概率报告
当模拟需求或种子数据包含足球、比分、泊松、lambda、xG、expected goals 等信号时,后端会尝试抽取:
- `lambda_home`
- `lambda_away`
- xG / expected goals
- 主客队信息
并生成:
- 主胜 / 平局 / 客胜概率
- 最可能比分 Top Scorelines
- 期望进球
- 比分概率矩阵
该部分会作为确定性计算结果注入报告,避免报告只停留在 LLM 的泛化描述。
## 日志位置
常用本地日志:
```text
log/backend-restart.out.log
log/backend-restart.err.log
log/frontend-direct.out.log
log/frontend-direct.err.log
backend/uploads/reports/<report_id>/agent_log.jsonl
backend/uploads/reports/<report_id>/console_log.txt
```
## 常见问题
### Neo4j 连接失败
确认 Neo4j 已启动,并检查 `.env` 中的 Neo4j 配置是否与 Docker Compose 一致。
```bash
docker compose -f docker-compose.neo4j.yml ps
```
### LLM 返回 429
后端已内置限流重试逻辑。遇到 429 时会根据 `LLM_RATE_LIMIT_*` 配置等待后继续重试。
### Deep Insight / Panorama Search / Quick Search 内容为空
请确认项目已经成功构建图谱。Neo4j 检索会搜索关系事实、节点名称和节点摘要;如果图谱本身没有内容,工具也无法返回有效结果。
### 报告缺少比分预测
请确认模拟需求或种子数据包含足球相关关键词,并提供可抽取的 `lambda_home`、`lambda_away`、xG 或 expected goals 信息。
## 开源协议
本项目继承原仓库协议,使用 **AGPL-3.0**
如果你部署、分发,或通过网络提供该软件服务,请遵守 AGPL-3.0 的相关要求。
## 致谢
本项目基于 [666ghj/MiroFish](https://github.com/666ghj/MiroFish) 进行二次开发。感谢原作者及所有贡献者的开源工作。