Skip to content

dakjdakd/openwiki

Repository files navigation

English

OpenWiki Logo

OpenWiki 🧭


面向 GitHub 仓库理解的 AI 技术 Wiki 平台。

OpenWiki 将一个公开 GitHub 仓库转化为可浏览、可追问、可复用的技术工作区:从代码摘要、文件脉络、架构图,到学习路线、业务分析和最终报告,帮助开发者更快建立项目全貌。

Node.js React TypeScript Vite Tailwind CSS Mermaid AI License

OpenWiki Platform Preview


项目概览 🧩

OpenWiki 是一个 AI 驱动的 GitHub 仓库分析工具。用户粘贴仓库地址后,系统会读取仓库元数据、README、技术栈、文件树和关键源码样本,并生成结构化的技术 Wiki。

它适合开发者、技术写作者、学生、团队新人、开源项目维护者和产品评估者。相比只读 README 或手动翻目录,OpenWiki 更强调“带证据的理解”:它会展示哪些文件被采样、为什么重要,以及这些文件如何支撑最终分析。

Tip
如果你只想最快跑起来,请直接查看“快速开始”。如果你想理解系统如何分析仓库,请从“工作原理”和“技术架构”开始。


为什么做这个 💡

理解一个陌生仓库通常很慢:README 只讲入口,文件树缺少语义,架构关系需要自己拼接,业务价值也很难从代码中直接看出来。

OpenWiki 试图把这段探索过程压缩成一个稳定流程:

常见问题 OpenWiki 的处理方式
不知道项目从哪里读起 生成入口文件、核心模块和推荐阅读路径
看不清系统如何连接 输出 Mermaid 架构图,并提供交互式查看
README 和真实代码不完全一致 采样关键源码,把采样证据展示给用户
新人学习缺少节奏 生成分步骤课程、问题和练习
需要判断项目价值 生成定位、用户、风险、增长和竞品分析
想沉淀结果 生成可复制的项目报告

核心功能 ✅

  • 源码感知分析:不只总结 README,还会获取仓库元数据、package 信息、递归文件树,并用启发式规则采样关键源码。
  • 结构化技术 Wiki:生成项目摘要、目标用户、核心功能、数据流、模块说明、文件解释和学习路线。
  • 交互式架构图:AI 输出 Mermaid,前端提供渲染、拖拽、缩放、复制、重新生成和 SVG 导出。
  • AI Tutor 问答:根据当前查看的文件、模块或课程上下文回答问题,适合边读边问。
  • 业务分析视角:从产品定位、用户痛点、核心价值、竞品、商业模式、风险和增长方向审视仓库。
  • 最终报告页:将技术与业务分析整理成更适合分享的报告,并支持复制为 Markdown。
  • 分析证据面板:展示采样文件、采样原因、字符数和跳过文件,让分析过程更透明。

效果展示 📸

OpenWiki Home

首页聚焦一个动作:输入 GitHub 仓库地址并开始分析。

OpenWiki Analyzing Repository

分析页通过 Server-Sent Events 展示实时进度,让用户知道系统正在获取元数据、采样文件或调用 AI。

OpenWiki Overview

Overview 工作区集中展示项目摘要、文件树、采样证据、源码预览和 AI Tutor。

OpenWiki Architecture

Architecture 页面将 Mermaid 图渲染为可拖拽、可缩放、可导出的架构画布。

OpenWiki Learn

Learn 页面将仓库转成学习路线,包含目标、阅读文件、关注点、问题和练习。

OpenWiki Business

Business 页面从产品和市场角度重新组织开源项目的信息。

OpenWiki Report

Report 页面沉淀最终分析结果,适合复盘、分享或继续编辑。


工作原理 ⚙️

flowchart TD
    A[用户输入 GitHub 仓库 URL] --> B[解析 owner 和 repo]
    B --> C[获取仓库元数据]
    C --> D[读取 README]
    D --> E[识别语言与 package 技术栈]
    E --> F[获取递归文件树]
    F --> G[评分并选择关键源码文件]
    G --> H[拉取源码样本]
    H --> I[构造结构化 AI Prompt]
    I --> J[调用 OpenAI 兼容模型]
    J --> K[校验并归一化 JSON]
    K --> L[写入内存项目存储]
    L --> M[通过 SSE 返回进度和结果]
    M --> N[前端渲染 Wiki 工作区]
Loading

当前采样策略优先选择 README、package.json、应用入口、路由、服务层、状态管理、页面、组件和配置文件。生成目录、构建产物、二进制资源和过大的文件会被跳过。

限制项 当前行为
关键文件数量 最多 18 个
单文件内容 最多 4,000 字符
总采样预算 约 25,000 字符
README 片段 最多 3,000 字符
文件树片段 前 500 个文件路径

快速开始 🚀

环境要求

  • Node.js 20 或更高版本
  • npm
  • DeepSeek 或其他 OpenAI 兼容模型服务的 API Key
  • 可选但推荐:GitHub Personal Access Token

安装

git clone https://github.com/dakjdakd/openwiki.git
cd openwiki
npm install

配置

在项目根目录创建 .env

OPENAI_API_KEY=sk-your-api-key
OPENAI_BASE_URL=https://api.deepseek.com
GITHUB_TOKEN=github_pat_your-token-here

GITHUB_TOKEN 不是必填项,但匿名 GitHub API 有较低频率限制;如果需要连续分析多个仓库,建议配置。

启动

npm run dev

打开:

http://localhost:3000

输入一个公开 GitHub 仓库地址,例如:

https://github.com/vercel/next.js

使用方式 🛠️

分析一个仓库

  1. 打开首页。
  2. 粘贴公开 GitHub 仓库 URL。
  3. 等待分析流程完成。
  4. 进入工作区查看 Overview、Architecture、Learn、Business 和 Report。

查看架构图

  1. 打开工作区的 Architecture 页面。
  2. 点击 RENDER ARCHITECTURE 渲染已有图。
  3. 拖拽画布平移,滚轮缩放。
  4. 使用工具栏复制 Mermaid、重新生成或导出 SVG。

向 AI Tutor 提问

  1. 在 Overview 中选择一个文件,或在 Learn 中查看一节课程。
  2. 右侧 AI Tutor 会自动获得当前上下文。
  3. 输入问题,例如“我应该先读哪个文件?”或“这个模块和 API 路由是什么关系?”。

常用命令

命令 说明
npm run dev 启动 Express + Vite 开发服务器,默认端口 3000
npm run build 构建 Vite 前端,并用 esbuild 打包服务端
npm run start dist/server.cjs 启动生产服务
npm run lint 使用 tsc --noEmit 执行 TypeScript 检查
npm run preview 启动 Vite preview

配置说明 🧰

配置项 必填 默认值 作用
OPENAI_API_KEY 调用 OpenAI 兼容模型服务
OPENAI_BASE_URL https://api.deepseek.com 指定模型服务地址
GITHUB_TOKEN 提高 GitHub API 额度,降低请求失败概率

当前分析模型在 server/services/analyzer.ts 中配置为:

model: "deepseek-v4-flash"

后端通过 OpenAI SDK 访问兼容接口,并在 JSON 模式下请求结构化结果。项目分析结果目前保存在内存中,服务重启后会清空。


技术架构 🧱

OpenWiki 由 React 前端、Express 后端、内存项目存储、GitHub 服务和 AI 服务组成。整体设计偏轻量,便于继续扩展持久化、OAuth、报告导出和更多分析模板。

openwiki/
|-- server/
|   |-- index.ts                 # Express 应用、Vite 中间件、路由挂载
|   |-- routes/
|   |   |-- analyze.ts            # GET /api/analyze,SSE 分析流
|   |   `-- project.ts            # 项目读取、业务分析再生成、Tutor 路由
|   |-- services/
|   |   |-- analyzer.ts           # GitHub 获取、文件评分、采样、AI 编排
|   |   |-- ai.ts                 # OpenAI 兼容客户端、JSON 模式、重试逻辑
|   |   `-- github.ts             # GitHub URL 解析与 token 注入 fetch
|   |-- store/
|   |   `-- projectStore.ts       # 内存项目缓存
|   `-- types/
|       `-- index.ts              # 共享类型
|-- src/
|   |-- App.tsx                   # React Router 路由
|   |-- main.tsx                  # React 入口
|   |-- pages/
|   |   |-- Home.tsx              # 首页与仓库输入
|   |   |-- analyze/Loading.tsx   # SSE 驱动的分析进度页
|   |   `-- workspace/
|   |       |-- Layout.tsx         # 工作区外壳
|   |       |-- Overview.tsx       # 摘要、证据、文件树、Tutor
|   |       |-- Architecture.tsx   # Mermaid 渲染、平移、缩放、导出
|   |       |-- Learn.tsx          # 学习路线
|   |       |-- Business.tsx       # 业务分析
|   |       `-- Report.tsx         # 最终报告
|   |-- components/
|   |-- store/workspaceStore.ts   # Zustand 工作区状态
|   `-- mock/data.ts              # Demo 数据
|-- public/                       # Logo 与产品截图
|-- package.json
|-- tsconfig.json
`-- vite.config.ts

主要技术栈

层级 技术
前端 React 19、React Router 7、Tailwind CSS 4、Zustand、Mermaid、Lucide React
后端 Express 4、TypeScript、tsx、esbuild
AI OpenAI SDK、OpenAI 兼容接口、JSON mode
数据来源 GitHub REST API、raw.githubusercontent.com
状态存储 浏览器 Zustand + 服务端内存缓存

API

接口 方法 说明
/api/analyze?url= GET 通过 SSE 运行完整仓库分析
/api/project/:id GET 获取已缓存项目数据
/api/project/:id/status GET 获取分析状态
/api/project/:id/business POST 重新生成业务分析
/api/tutor POST 基于上下文向 AI Tutor 提问
/api/health GET 服务健康检查

路线图 🗺️

已完成:

  • GitHub 仓库元数据、README、文件树和关键源码采样
  • 基于 SSE 的分析进度流
  • AI 生成摘要、模块、课程、架构图和业务分析
  • Mermaid 架构图渲染、复制、重新生成和 SVG 导出
  • Overview 文件树、源码预览和分析证据面板
  • AI Tutor 问答
  • 最终报告页

计划中:

  • 报告 PDF 导出
  • 分析结果持久化存储
  • 缓存与增量重新分析
  • 更强的 Mermaid 校验和修复
  • GitHub OAuth 与私有仓库支持
  • 分支、提交或 PR 之间的差异分析
  • 多仓库对比
  • Docker 与部署指南

常见问题 ❓

为什么需要 OPENAI_API_KEY

OpenWiki 的核心分析由 OpenAI 兼容模型生成。没有 API Key 时,后端无法完成仓库分析、业务分析再生成和 Tutor 问答。

可以分析私有仓库吗?

当前主要面向公开 GitHub 仓库。私有仓库需要 OAuth 或更完整的 token 权限流程,属于后续路线图。

为什么建议配置 GITHUB_TOKEN

匿名 GitHub API 请求额度较低,连续分析多个仓库时容易触发限制。配置 token 可以显著提高稳定性。

Mermaid 图渲染失败怎么办?

AI 可能偶尔生成不合法的 Mermaid。可以先点击重新生成,也可以复制 Mermaid 文本手动检查;代码中的 sanitizeMermaid() 已处理部分常见格式问题。

分析结果为什么不够深?

当前采样策略为了控制上下文长度和请求成本,会限制文件数量和字符数。可以在 server/services/analyzer.ts 中调整 MAX_TOTAL_CHARSMAX_FILE_CHARS 和采样数量。


贡献指南 🤝

欢迎围绕真实使用体验改进 OpenWiki。比较适合入手的方向包括:

  • 改进 server/services/analyzer.ts 中的文件评分和采样策略
  • 增强 src/pages/workspace/Architecture.tsx 的 Mermaid 清洗与渲染稳定性
  • 为 GitHub URL 解析、分析结果归一化和 API 错误处理补测试
  • 增加持久化存储、报告导出和更清晰的错误状态
  • 改进英文文案、截图、使用示例和部署文档

建议提交前执行:

npm run lint
npm run build

许可证 📄

[License]

当前仓库没有独立的 LICENSE 文件。发布前建议补充明确许可证;代码文件中存在 Apache-2.0 SPDX 标记,但项目级授权仍应以仓库根目录许可证文件为准。


维护者信息 📬

项目 信息
仓库 dakjdakd/openwiki
维护者 [Maintainer]
文档 [Docs URL]
社区 [Community URL]

OpenWiki 让读懂一个仓库,从猜测变成有证据的探索。

About

An AI-powered repository analysis tool that transforms any GitHub repo into an interactive technical Wiki with architecture diagrams, learning paths, and project reports.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages