开源战略智能驾驶舱:用证据驱动决策、多智能体辩论、场景推演和可审计推荐。
语言 / Language
| 信号 | 明鉴交付什么 |
|---|---|
| 证据优先 | 每条建议都连接到采集来源、抽取声明和可回放追踪。 |
| 不是独白,而是辩论 | 专门角色会先挑战假设,再返回建议。 |
| 本地主权 | Community 可本地运行,开源代码、本地数据控制、24 小时监控窗口。 |
| 决策记忆 | 会话、推荐版本、刷新、源健康和用户反馈保持同一条链路。 |
明鉴面向需要在不确定性下做重要判断的人:创始人、分析师、运营者、研究者、战略团队,以及任何需要可检查证据而不是盲信答案的团队。
它更像战略智能驾驶舱,而不是聊天框。用户提交决策问题后,明鉴采集证据、执行分析和推演、召集辩论委员会、返回首次建议,并把后续源变化、推荐版本和反馈记录沉淀下来。
| 版本 | 分发方式 | 核心工作流 | 商业层 |
|---|---|---|---|
| Community | Apache 2.0 自托管上游 | 完整公共决策工作流 + 24 小时本地监控 | 无 |
| Cloud | 托管 SaaS 订阅 | Community 公共核心的超集 | 订阅、计量、租户运营 |
| Enterprise | 私有化 / 本地部署 | Community 公共核心的超集 | License、审计、治理、私有连接器 |
本仓库是 Community 版本。它必须保持强开源核心:不加入 Cloud 订阅界面、不加入 Enterprise 专属治理代码,也不把商业移动端作为公开入口,除非后续明确决定开放。
问题
-> 来源发现
-> 证据抽取
-> 分析与推演
-> 角色化辩论
-> 推荐建议
-> 版本时间线
-> 定时 / 源变化刷新
-> 决策记录与结果反馈
| 阶段 | 目的 | 用户可见证明 |
|---|---|---|
| 采集 | 从新闻、代码、社交和公开数据源收集多源证据。 | 来源列表、游标健康、最后检查时间。 |
| 推理 | 将证据转成论点、风险、推演和结构化声明。 | 分析产物、报告章节、辩论轮次。 |
| 辩论 | 让角色化智能体质疑、修正并仲裁决策。 | 支持方、挑战方、仲裁方追踪。 |
| 记忆 | 持久化会话、推荐版本、刷新触发和结果反馈。 | 时间线、推荐历史、反馈记录。 |
| 旧式 AI 分析 | 明鉴 |
|---|---|
| 一个答案,少量上下文。 | 证据链、辩论链、推荐版本。 |
| 单模型盲区。 | 支持、挑战、仲裁多角色批判。 |
| 静态回答。 | 定时刷新和源变化触发更新。 |
| 难以审计。 | 确定性追踪、来源归属、决策记录。 |
| 泛化流程。 | 战略、风险、市场、政策、技术、社会和安全视角。 |
问题: 传统AI工具给您答案却不展示推理过程。
我们的方案: 明鉴将每个决策建立在来自10+数据源的真实世界证据之上。每个声明可追溯,每个决策可审计。
问题: 单一AI模型存在盲点和偏见。
我们的方案: 多个AI模型(GPT、Gemini、Claude、Grok)辩论您的决策,挑战假设并达成有证据支持的结论。
问题: 大多数AI工具是通用的,不理解您的特定领域。
我们的方案: 明鉴支持企业(市场分析、竞争情报)和军事(作战规划、物流)两个领域,具有领域特定的规则和模型。
问题: 您无法解释AI如何得出结论。
我们的方案: 每个模拟产生确定性决策追踪——AI如何得出结论的逐步记录。没有黑箱。
问题: AI输出可能错误,但您往往为时已晚才发现。
我们的方案: 明鉴审查自己的输出,识别弱点,并迭代直到达到质量阈值——全程无需人工干预。
问题: 您等待AI完成,然后得到一个黑箱结果。
我们的方案: 提交分析请求,实时观看AI工作——流式进度事件、来源归属和中间结果。
问题: 单一AI模型存在盲点和偏见。
我们的方案: 明鉴部署9个专业AI智能体——每个都有独特的角色、视角和模型——组成决策委员会:
| 角色 | 智能体 | 功能 |
|---|---|---|
| 🟢 战略支持者 | 核心 | 支持论证,寻找有利证据 |
| 🔴 风险挑战者 | 核心 | 反对论证,寻找反面证据 |
| ⚖️ 首席仲裁官 | 核心 | 基于证据做出最终裁决 |
| 🔍 情报分析师 | 视角 | 评估证据质量 |
| 🌍 地缘政治专家 | 视角 | 地缘政治分析 |
| 💰 经济分析师 | 视角 | 经济/市场分析 |
| ⚔️ 军事战略家 | 视角 | 军事/安全分析 |
| 🔮 技术前瞻者 | 视角 | 技术趋势分析 |
| 👥 社会影响评估师 | 视角 | 社会/舆论分析 |
| 特性 | 明鉴 | Manus | 传统AI | 单代理 | LangChain |
|---|---|---|---|---|---|
| 数据源 | ✅ 10+实时源 | ❌ 手动输入 | |||
| 证据链 | ✅ 完全可追溯 | ❌ 无追踪 | ❌ 无追踪 | ❌ 无追踪 | ❌ 无追踪 |
| 多代理辩论 | ✅ 9智能体对抗 | ❌ 单模型 | ❌ 单模型 | ||
| 决策追踪 | ✅ 确定性 | ❌ 黑箱 | ❌ 黑箱 | ❌ 黑箱 | ❌ 黑箱 |
| 自我修复 | ✅ Jarvis引擎 | ❌ 无 | ❌ 无 | ❌ 无 | |
| 流式分析 | ✅ 实时 | ✅ 实时 | ❌ 仅批量 | ❌ 仅批量 | |
| 持续监控 | ✅ WatchRule+自动更新 | ❌ 一次性任务 | ❌ 无 | ❌ 无 | ❌ 无 |
| 企业领域 | ✅ 完整支持 | ❌ 通用 | ❌ 通用 | ❌ 通用 | |
| 军事领域 | ✅ 完整支持 | ❌ 通用 | ❌ 通用 | ❌ 通用 | |
| 场景分支 | ✅ 束搜索 | ❌ 无 | ❌ 手动 | ❌ 无 | ❌ 无 |
| 知识图谱 | ✅ 嵌入支持 | ❌ 无 | ❌ 无 | ❌ 无 | ❌ 无 |
| 代码执行 | ✅ 完整沙箱VM | ❌ 无 | ❌ 无 | ||
| 数据主权 | ✅ 自部署 | ❌ 仅云端 | ✅ 自部署 | ||
| 开源 | ✅ Apache 2.0 | ❌ 闭源 | ✅ 多样 |
不是通用工具,而是专属参谋团。
AI Agent 时代已经到来。编排层(Orchestrator)协调多个子 Agent 和工具,在沙箱环境中自主完成复杂任务 — 这已经被证明是有效的范式。
明鉴在此基础上更进一步,专注于决策智能:
| 设计原则 | 明鉴的实践 |
|---|---|
| 编排层 > 底层模型 | 9智能体注册中心,按角色分配模型 |
| 实时流式展示建立信任 | 辩论逐轮渲染,用户看到每一步推理 |
| 多工具协同完成任务 | 12个数据源 + 辩论引擎 + 仿真引擎 |
| 动态重规划应对失败 | 辩论失败时自动调整策略重新论证 |
| 维度 | 明鉴 |
|---|---|
| 目标 | 做出更好的决策 |
| 推理方式 | 9个智能体独立论证、交叉质询、仲裁裁决 |
| 证据基础 | 12个数据源结构化采集 → 证据提取 → 知识图谱 |
| 持续性 | WatchRule 持续监控 + 定时更新 + 突发事件检测 |
| 领域深度 | 企业/军事双领域仿真,KPI 追踪,场景分支 |
| 透明度 | 展示推理过程 + 用户可投票质疑 |
| 数据主权 | 自部署,数据完全在本地 |
| 成本 | 自有模型,边际成本趋近于零 |
明鉴的 9 智能体系统借鉴了 Mixture of Experts (MoE) 的核心思想:
用户问题 → 路由器(辩论流程)→ 选择专家组合 → 独立推理 → 加权裁决
就像 DeepSeek-V3 用 256 个专家中只激活少数最相关的,明鉴在 9 个智能体中根据问题类型选择最合适的组合。核心 3 角色(支持方/挑战方/仲裁官)始终激活,视角 6 角色按需参与 — 这就是软件层的稀疏激活。
| 场景 | 说明 | 收益 |
|---|---|---|
| 📊 投资研究 | 分析市场趋势,辩论投资论文 | 更快研究,更好决策 |
| 🏭 企业战略 | 竞争情报,场景规划 | 数据驱动,降低风险 |
| ⚔️ 军事规划 | 作战分析,物流优化 | 战略优势,更好结果 |
| 🛡️ 风险管理 | 多视角风险评估 | 减少不确定性 |
| 📈 市场分析 | 实时市场情报 | 更快洞察,更好定位 |
| 🎯 政策分析 | 多利益相关者影响评估 | 明智政策,更好结果 |
最快的方式是使用 Docker 一键部署脚本。脚本会自动检测 Docker 环境、创建 .env 文件、提示输入 API Key,然后启动全部服务。
前置要求: 安装 Docker Desktop
git clone https://github.com/dashitongzhi/MingJian.git
cd MingJian
chmod +x setup.sh
./setup.sh启动后打开:
| 服务 | URL |
|---|---|
| 前端 | http://localhost:3001 |
| API | http://localhost:8000 |
| MinIO 控制台 | http://localhost:9001 |
停止服务:
docker compose down如果你想在本地直接运行后端和前端进行开发,请按以下步骤操作。
在开始之前,请确保已安装以下软件:
| 要求 | 版本 | 安装方式 |
|---|---|---|
| Python | 3.12+ | python.org |
| Node.js | 18+ | nodejs.org |
| npm | 9+ | 随Node.js一起安装 |
| Git | 2.30+ | git-scm.com |
| PostgreSQL | 14+(可选) | postgresql.org |
| Redis | 7+(可选) | redis.io |
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 2核 | 4+核 |
| 内存 | 4 GB | 8+ GB |
| 存储 | 10 GB | 50+ GB |
| 操作系统 | macOS、Linux、Windows | macOS或Linux |
在项目根目录创建 .env 文件,包含以下变量:
# ═══════════════════════════════════════════════════════════════
# AI 模型配置
# ═══════════════════════════════════════════════════════════════
# 只需一个 API Key 即可启动。
# 系统会自动将同一组凭证填充到全部 7 个模型槽位
# (primary、extraction、x_search、report、debate_advocate、
# debate_challenger、debate_arbitrator),除非你单独覆盖。
PLANAGENT_OPENAI_API_KEY=你的API密钥
# 按需覆盖单个槽位(未覆盖的自动回退到 shared)
# PLANAGENT_OPENAI_PRIMARY_MODEL=gpt-4.1
# PLANAGENT_OPENAI_PRIMARY_API_KEY=sk-...
# PLANAGENT_OPENAI_EXTRACTION_MODEL=gpt-4.1-mini
# PLANAGENT_OPENAI_DEBATE_ADVOCATE_MODEL=claude-sonnet-4-20250514
# PLANAGENT_OPENAI_DEBATE_CHALLENGER_MODEL=gemini-2.5-flash
# PLANAGENT_OPENAI_DEBATE_ARBITRATOR_MODEL=grok-3
# ═══════════════════════════════════════════════════════════════
# 数据库(可选 — 本地开发默认使用 SQLite)
# ═══════════════════════════════════════════════════════════════
# PLANAGENT_DATABASE_URL=postgresql+psycopg://planagent:planagent@localhost:5432/planagent
# ═══════════════════════════════════════════════════════════════
# Redis(可选 — 生产环境用于事件总线)
# ═══════════════════════════════════════════════════════════════
# PLANAGENT_REDIS_URL=redis://localhost:6379/0
# ═══════════════════════════════════════════════════════════════
# MinIO 对象存储(可选)
# ═══════════════════════════════════════════════════════════════
# PLANAGENT_MINIO_ENDPOINT=localhost:9000
# PLANAGENT_MINIO_ACCESS_KEY=minioadmin
# PLANAGENT_MINIO_SECRET_KEY=minioadmin
# ═══════════════════════════════════════════════════════════════
# X / Twitter(可选 — 社交情报数据源)
# ═══════════════════════════════════════════════════════════════
# X_BEARER_TOKEN=你的X平台Bearer Token
# ═══════════════════════════════════════════════════════════════
# 前端
# ═══════════════════════════════════════════════════════════════
NEXT_PUBLIC_API_URL=/api💡 关键提示: 即使你只有一个模型供应商(比如 OpenAI,或任何兼容 OpenAI 接口的服务),也可以用它填满全部 7 个模型槽位。只需设置
PLANAGENT_OPENAI_API_KEY,系统自动完成剩余配置。无需 4 个不同的 API Key 才能启动。
所有槽位均使用 OpenAI 兼容的 /chat/completions 接口,可自由混搭:
| 提供商 | Base URL |
|---|---|
| OpenAI | https://api.openai.com/v1 |
| Anthropic (Claude) | https://api.anthropic.com/v1/openai |
| DeepSeek | https://api.deepseek.com/v1 |
| Google Gemini | https://generativelanguage.googleapis.com/v1beta/openai |
| xAI Grok | https://api.x.ai/v1 |
| 小米 MiMo | https://token-plan-cn.xiaomimimo.com/v1 |
| 智谱 GLM | https://open.bigmodel.cn/api/paas/v4 |
| MiniMax | https://api.minimax.chat/v1 |
| 任意兼容代理 | 你的代理地址 |
# 1. 克隆仓库
git clone https://github.com/dashitongzhi/MingJian.git
cd planagent
# 2. 创建并激活Python虚拟环境
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 3. 安装Python依赖
pip install -e ".[dev]"
# 4. 安装前端依赖
cd frontend-v2
npm install
cd ..
# 5. 配置环境
cp .env.example .env
# 编辑 .env 文件,添加您的API密钥和设置
# 6. 初始化数据库(如果使用PostgreSQL)
# 创建名为 'planagent' 的数据库
# 运行迁移
alembic upgrade head
# 7. 启动后端服务器
uvicorn planagent.main:app --reload --host 127.0.0.1 --port 8000
# 8. 启动前端(在新终端中)
cd frontend-v2
npm run dev
# 打开 http://localhost:3000Community 本地模式仅监听回环地址,并使用部署级本地单用户会话。除非已经设置
PLANAGENT_REMOTE_ACCESS_ENABLED=true,并配置至少 32 字节且可持久化的
PLANAGENT_AUTH_SECRET_KEY,否则不要把 API 绑定到 0.0.0.0 或其他非回环地址。
Community 始终禁用远程自注册;远程模式只开放 bootstrap 管理员 admin 登录。
setup.sh 会把首次远程管理员密码保存到本地 .env 的
PLANAGENT_BOOTSTRAP_ADMIN_PASSWORD;首次
管理员登录后应通过 POST /auth/change-password 立即轮换密码,并同步更新本地 .env。
| 包名 | 版本 | 用途 |
|---|---|---|
| FastAPI | 0.110+ | 高性能异步API框架 |
| SQLAlchemy | 2.0+ | 数据库ORM |
| Alembic | 1.16+ | 数据库迁移 |
| Pydantic | 2.11+ | 数据验证 |
| OpenAI | 2.28+ | OpenAI API客户端 |
| Anthropic | 0.52+ | Anthropic API客户端 |
| Redis | 6.2+ | 事件总线和缓存 |
| pgvector | 0.3+ | 向量相似性搜索 |
| MinIO | 7.2+ | 对象存储 |
| HTTPX | 0.28+ | 异步HTTP客户端 |
| Uvicorn | 0.35+ | ASGI服务器 |
| 包名 | 版本 | 用途 |
|---|---|---|
| Vite | 8+ | 前端构建工具 |
| React | 19+ | UI库 |
| TypeScript | 6.0+ | 类型安全 |
| Tailwind CSS | 4.2+ | 实用优先的CSS |
| React Router | 7+ | 客户端路由 |
| Recharts | 3.8+ | 图表库 |
| 包名 | 版本 | 用途 |
|---|---|---|
| pytest | 8.4+ | 测试框架 |
| pytest-asyncio | 1.1+ | 异步测试支持 |
| Ruff | 0.12+ | Python代码检查 |
| ESLint | 9+ | JavaScript代码检查 |
| Prettier | 3+ | 代码格式化 |
| Vitest | ^4.1.5 | 单元测试框架 |
| @testing-library/react | ^16.x | React组件测试 |
| @testing-library/jest-dom | ^6.x | Jest自定义匹配器 |
graph TB
subgraph "用户界面"
Console[战略控制台]
API[FastAPI控制平面]
end
subgraph "核心服务"
Evidence[证据采集]
Simulation[模拟引擎]
Debate[辩论引擎]
Jarvis[Jarvis集成]
end
subgraph "数据源"
RSS[RSS订阅]
News[Google News]
Reddit[Reddit]
GitHub[GitHub]
X[X/Twitter]
GDELT[GDELT]
end
subgraph "存储"
PostgreSQL[(PostgreSQL)]
Redis[(Redis)]
MinIO[(MinIO)]
end
Console --> API
API --> Evidence
API --> Simulation
API --> Debate
API --> Jarvis
Evidence --> RSS
Evidence --> News
Evidence --> Reddit
Evidence --> GitHub
Evidence --> X
Evidence --> GDELT
后端结构:
src/planagent/
├── config/ # 配置包(原 config.py 527行 → 4个文件)
│ ├── __init__.py
│ ├── base.py # 核心配置(数据库、Redis、Minio)
│ ├── openai.py # 动态OpenAI目标解析
│ └── main.py # 组合式Settings类
├── services/
│ ├── debate/ # 辩论包(原 debate.py 3273行 → 7个模块)
│ │ ├── prompts.py # Agent角色提示词与轮次规划
│ │ ├── rounds.py # 轮次执行逻辑
│ │ ├── llm.py # LLM调用与重试
│ │ ├── adjudication.py # 裁决与建议生成
│ │ ├── revisions.py # 立场修订追踪
│ │ └── triggers.py # 自动触发逻辑
│ ├── simulation/ # 推演包(原 simulation.py 2281行 → 6个模块)
│ │ ├── engine.py # 核心推演引擎
│ │ ├── scenarios.py # 场景生成
│ │ ├── impact.py # 影响评估与评分
│ │ ├── report.py # 报告生成
│ │ └── domain_packs.py # 领域包管理
│ └── ...
├── db.py # 数据库层(已清理,仅用Alembic迁移)
└── ...
前端结构:
frontend-v2/src/
├── components/
│ ├── layout/ # 应用外壳、侧边栏、导航框架
│ └── ui/ # 共享驾驶舱界面和状态组件
├── pages/ # 仪表盘、助手、监控、报告、设置
├── api/ # API 端点辅助函数
├── hooks/ # 主题和应用级 React hooks
└── main.tsx # Vite 入口
后端测试 (pytest)
- 运行所有单元测试(92个,<1秒):
python -m pytest tests/unit/ -v - 运行集成测试:
python -m pytest tests/ -v
前端测试 (Vitest)
cd frontend-v2 && npm run build
压力测试
- 7维压力测试(需要后端运行):
python tests/stress_test.py
最新结果:
- ✅ 后端:92个单元测试通过(0.26秒)
- ✅ 前端:16个组件测试通过(0.55秒)
- ✅ 压力测试:112通过,0失败,2警告
- 🔥 并发:20用户,844 RPS,P50=1ms,零500错误
| 指标 | 数值 |
|---|---|
| 后端单元测试 | 92个通过 |
| 前端组件测试 | 16个通过 |
| 压力测试通过率 | 112/114 (98.2%) |
| 并发负载(20用户) | 844 RPS,零500错误 |
| 响应时间 P50 | 1ms |
| 响应时间 P95 | 11ms |
| API端点测试数 | 82 |
| 最大后端文件 | ~900行(原3273行) |
| 最大前端页面 | ~550行(原1665行) |
我们欢迎贡献!请参阅贡献指南。
# 1. Fork仓库
# 2. 创建功能分支
git checkout -b feature/amazing-feature
# 3. 进行更改
# 4. 运行测试
pytest
# 5. 提交更改
git commit -m "feat: add amazing feature"
# 6. 推送到分支
git push origin feature/amazing-feature
# 7. 打开Pull Request本项目根据Apache License 2.0授权 - 详见LICENSE文件。
- FastAPI - 高性能异步API
- Vite - 前端构建工具
- PostgreSQL + pgvector - 数据库
- Redis Streams - 事件流
- MinIO - 对象存储
- Linux.do - 开源社区支持与交流
如果你对这个项目感兴趣——无论是想合作、提建议,还是单纯想聊聊——欢迎随时联系!
- 📧 邮箱:cajd6876@gmail.com
- 🐛 问题:GitHub Issues
- 💬 讨论:GitHub Discussions