Skip to content

Latest commit

 

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SolveChain

基于第一性原理的个人决策辅助系统

把复杂问题拆成基本事实与假设,构建可视化的决策逻辑链,再让 LLM 帮你发现盲点。


架构演进(重要)

本项目经历过一次架构调整,当前运行的是 v2

v1 v2(当前)
数据存储 PostgreSQL 浏览器 localStorage
后端 Express 服务(REST API + 仓储层) 无常驻后端
LLM 调用 后端服务代理 无状态 Serverless 函数packages/client/api/llm-proxy.ts
部署 需要服务器 + 数据库 纯静态托管

为什么改:这是个人决策工具,数据天然是单人、单机、低频的。 为它维护一台服务器和一个数据库,运维成本远大于收益; 用户也未必愿意把自己的决策草稿存在别人的数据库里。

改成本地存储后,部署成本降到零,隐私问题自然消失。 唯一需要联网的是 LLM 调用,用一个无状态函数代理即可—— 它只转发请求并隐藏 API Key,不持有任何用户数据。

v1 的后端代码保留在 packages/server/,但不参与运行,留作架构演进的记录。 它是一套完整的 Express + PostgreSQL 分层实现(路由 / 仓储 / 服务 / 迁移脚本), 如需回到 client-server 架构可以此为起点。


功能特性

  • 可视化决策图 —— 用节点和边构建决策逻辑链(ReactFlow)
  • 形式化逻辑系统 —— 基于命题逻辑的节点与关系类型
    • 节点:目标、行动、事实、假设、约束、结论
    • 关系:依赖、促成、实现、阻碍、导致、矛盾
  • 状态系统 —— baseStatus(用户设定)与 computedStatus(系统推导)分离
  • 状态传播算法 —— 可插拔推理引擎,自动传播逻辑状态、检测冲突、记录传播历史
  • 权重计算 —— 自动计算各决策选项的综合得分(权重与边强度均为 0.1–2.0)
  • LLM 智能分析 —— 风险分析、下一步建议、逻辑检查、补全建议,以及自由提问
  • 多 LLM 支持 —— 通义千问 / DeepSeek / 任意 OpenAI 兼容接口
  • 智能布局 —— 自动分层与径向布局,切换场景时自动保存
  • 三种主题 —— 经典(静态专业)、暗夜(霓虹发光)、极光(彩虹流光)

快速开始

环境要求

  • Node.js >= 18

不需要数据库,也不需要启动后端。

安装与运行

npm install

# v2 架构无常驻后端,只启动前端即可
npm run dev -w @solvechain/client
# 打开 http://localhost:5173

首次进入会有一个只读示例项目,可直接查看效果。

配置 LLM(可选)

不配置也能使用除 AI 分析外的全部功能。

在应用内「设置」中填入 API Key,密钥保存在浏览器本地,不会上传。

Provider 说明
通义千问(DashScope) 默认
DeepSeek 价格较低
任意 OpenAI 兼容接口 自填 baseURL

部署到 Vercel 时也可改为在服务端配置密钥,由 api/llm-proxy 统一代理, 避免密钥出现在浏览器中。


项目结构

SolveChain/
├── packages/
│   ├── client/                    # ← 当前运行的全部代码
│   │   ├── api/                   # Vercel Serverless 函数(仅 LLM 代理)
│   │   └── src/
│   │       ├── components/        # 组件(决策图、各类面板)
│   │       ├── pages/             # 页面
│   │       ├── store/             # Zustand 状态 + localStorage 持久化
│   │       ├── services/llm/      # LLM 客户端与提示词
│   │       ├── utils/propagation/ # 状态传播引擎
│   │       ├── themes/            # 主题系统
│   │       └── types/
│   │
│   └── server/                    # ← v1 架构存档,不参与运行
│       ├── src/{database,repositories,routes,services}
│       └── schema.sql
│
└── docs/technical-design.md

已知限制

诚实记录当前状态,便于后续接手:

  • 无自动化测试。 约 16,000 行前端代码没有任何测试覆盖,重构风险高。
  • 「分析」面板入口已隐藏。 它依赖 v1 后端的两个接口 (/api/projects/:id/analyze/next-action/analyze/feasibility), v2 架构下这两个接口不存在,点击会 404。 这两个分析(寻找阻塞点、计算可行性)都是纯图计算,不需要数据库, 应当迁移到前端实现,届时把入口放回即可。 代码保留在 components/AnalysisPanel.tsxapi/index.ts
  • 数据仅存于浏览器。 换设备或清除浏览器数据会丢失,需手动导出 / 导入。
  • package.jsondevbuild 脚本仍会带上 server 包, 在没有数据库的环境下会失败,请使用上文的 client 单独启动命令。

更新日志

2024-12-06 (v2.3) - LLM 智能分析模块 & 主题系统增强

LLM 智能分析模块:

  • AI 助手面板 - 集成到项目编辑器工具栏
  • 4 个预设分析功能
    • 风险分析 - 识别潜在问题和风险点
    • 下一步建议 - 基于当前状态推荐行动
    • 逻辑检查 - 验证推理链的完整性
    • 补全建议 - 发现缺失的节点和关系
  • 自由提问 - 支持对当前场景进行任意问答
  • Markdown 渲染 - AI 回复支持富文本格式

三种主题风格:

  • 经典模式 - 简洁专业的静态设计,适合日常工作
  • 暗夜模式 - 毛玻璃质感 + 霓虹发光效果 + 单色扫光动画
  • 极光模式 - 深色背景 + 彩虹流光动画 + 玻璃质感节点

技术改进:

  • 新增 /api/llm/scene/analyze/api/llm/scene/chat API
  • 添加 prompts 模块(场景转文本、分析提示词)
  • 修复水平/垂直线条显示问题(SVG filter 使用 userSpaceOnUse)
  • 优化边线坐标计算(正确的矩形交点算法)

2024-11-30 (v2.2) - baseStatus/computedStatus 分离架构

核心改进:

  • 状态分离架构 - 将节点状态拆分为用户设置的 baseStatus 和系统计算的 computedStatus
  • 每种节点类型独立状态 - 目标(已达成/未达成)、行动(成功/失败/进行中/待执行)、事实(确认/否定/存疑)、假设(假设为真/假设为假/不确定)、约束(已满足/未满足)、结论(成立/不成立/待定)
  • 自动状态传播 - ACHIEVES 关系支持从行动和事实节点自动传播状态到约束/目标节点
  • 权重系统统一 - 节点权重和边强度统一使用 0.1-2.0 范围,默认1.0

Bug修复:

  • 修复节点编辑面板中状态被重置的问题
  • 修复导出功能缺少 baseStatus/autoUpdate 字段的问题
  • 修复文本导出不显示状态的问题

技术变更:

  • 新增 autoUpdate 字段控制是否自动接收状态传播
  • 边强度从 0-100% 改为 0.1-2.0 范围
  • 导出格式版本升级到 2.2

2024-11-28 (v2.1.1) - 状态传播算法

新增功能:

  • 可插拔状态传播引擎 - 基于规则的逻辑状态推理
    • 支持 6 种关系类型的传播规则:DEPENDS, SUPPORTS, ACHIEVES, HINDERS, CAUSES, CONFLICTS
    • 自定义规则:实现 PropagationRule 接口,调用 registerRule() 注册
  • 逻辑状态显示 - 节点右上角显示状态指示器(T=真, F=假, !=冲突)
  • 传播面板 - 显示传播事件历史、冲突警告、统计信息
  • 节点状态编辑 - 在节点编辑面板中手动设置逻辑状态

技术实现:

packages/client/src/utils/propagation/
├── types.ts          # LogicState, PropagationRule 接口
├── engine.ts         # PropagationEngine 核心引擎
├── rules/            # 各关系类型的传播规则
│   ├── depends.ts    # 依赖:A为假 → B为假
│   ├── supports.ts   # 促成:软影响置信度
│   ├── achieves.ts   # 实现:行动满足目标
│   ├── hinders.ts    # 阻碍:降低置信度
│   ├── causes.ts     # 导致:A⇒B 逻辑蕴含
│   └── conflicts.ts  # 矛盾:双向互斥
└── index.ts          # 主入口

2024-11-28 (v2.1) - 形式化逻辑系统重构

重大变更 - 节点和关系类型重构

为支持自动推理和状态传播,将系统从松散的"思维导图"升级为基于命题逻辑的形式化系统。

节点类型变更:

旧类型 新类型 说明
GOAL GOAL 保持不变 - 最终想要达成的状态
DECISION ACTION 重命名 - 可执行的操作
FACT FACT 保持不变 - 可验证的事实
ASSUMPTION ASSUMPTION 保持不变 - 需要验证的假设
INFERENCE CONSTRAINT 新类型 - 必须满足的条件
INFERENCE CONCLUSION 新类型 - 从其他节点推导的命题

关系类型变更:

旧类型 新类型 符号 说明
PREREQUISITE DEPENDS 方向反转:B依赖A
SUPPORTS SUPPORTS 保持 - A促成B成功
- ACHIEVES 新增 - 行动实现约束/目标
OPPOSES HINDERS 重命名 - A阻碍B
LEADS_TO CAUSES 重命名 - A导致B
CONFLICTS CONFLICTS 保持 - 逻辑矛盾
RELATED (删除) - 信息量太低,已移除

数据迁移:

  • 运行 npx tsx packages/server/src/database/migrate-v2.1.ts 自动迁移
  • 所有 DECISION → ACTION, INFERENCE → CONCLUSION
  • PREREQUISITE 关系方向自动反转为 DEPENDS

2024-11-27 (v2)

  • 场景位置独立性修复

    • 每个场景的节点位置完全独立存储
    • 切换场景时自动保存当前场景布局(保存到 scene_nodes.position_x/y
    • 共享节点在不同场景可以有不同位置
  • 聚焦布局算法改进

    • 新的左右展开布局:聚焦节点在中心,上游节点(原因)在左侧,下游节点(结果)在右侧
    • 形成清晰的因果流向:原因 → 聚焦点 → 结果
    • 按连接关系排序减少边交叉
    • 不相连的节点放在下方

2024-11-27

  • 智能布局算法

    • 无聚焦节点时:使用 Dagre 分层布局算法,最小化边交叉
    • 有聚焦节点时:使用聚焦布局(左右展开)
    • 力导向微调优化节点间距
  • 布局自动保存

    • 切换场景时自动保存当前布局
    • Ctrl+S 手动保存布局
    • 首次进入项目自动布局,后续进入使用保存的布局

License

MIT

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages