MorningStar0

[开源] graphrag-ts:用纯 TypeScript 实现的 Lightweight GraphRAG 框架

  •  
  •   MorningStar0 · 2 days ago · 285 views

    仓库地址:https://github.com/sadofriod/graphrag-ts

    我最近做了一个纯 TypeScript 的 GraphRAG 实现,核心目标很简单:不想再为了一个知识图谱 / 文档问答系统,额外维护 Python 环境,也不想被某个框架绑死。

    如果你常用 Node.js / Bun / TypeScript 做后端,或者想把知识库、Markdown 文档、企业文档分析做成一个更“结构化”的 RAG 服务,这个项目会比较贴近你们的场景。


    为什么我会做这个

    传统向量 RAG 很强,但它天然有个问题:相似度召回很容易把“信息找出来”,却不一定能把“关系、跨文档连接、宏观结构”保留下来。

    微软的 GraphRAG 在这方面确实很厉害,但主流实现基本都在 Python 生态里。对很多 TS 团队来说,痛点就是:

    1. 额外维护 Python 环境 / 微服务,部署成本高
    2. 很难自然接到 Node.js 后端栈里
    3. TypeScript 生态里缺少一个真正能拿来做工程落地的 GraphRAG 参考实现

    所以我就想试着做一个:

    • 100% TypeScript
    • 零 Python 依赖
    • 面向 Markdown 知识库
    • 可配合 Prisma 、PostgreSQL 、Node/Bun 生产环境使用
    • 做的是工程实现,不是只放几个 demo

    这个库目前做了什么

    从仓库实现看,核心链路已经比较完整:

    • Markdown 文档 ingest / chunking
    • 实体、边、claim 抽取
    • 图谱构建
    • community detection
    • community summary
    • hybrid retrieval ( vector + keyword + graph signal )
    • evidence-grounded answer generation
    • namespace 隔离 / 多租户 / 多语料场景支持

    也就是说,它不是“把 GraphRAG 论文里的概念翻译成一份示例代码”,而是更像一个可继续扩展的 TypeScript 参考实现。


    伪代码大概长这样

    import {
      injectGraphRAG,
      GraphRAGRetrievalService,
      startBuild,
      createBuildRegistry,
    } from '@ashes_born/graph-rag-ts';
    import { PrismaClient } from '@prisma/client';
    
    await injectGraphRAG({
      database: {
        client: new PrismaClient({ datasourceUrl: process.env.DATABASE_URL }),
      },
      models: [
        {
          type: 'slice',
          baseURL: process.env.RAG_SLICE_BASE_URL!,
          model: process.env.RAG_SLICE_MODEL!,
          apiKey: process.env.RAG_SLICE_API_KEY!,
        },
        {
          type: 'judge',
          baseURL: process.env.RAG_JUDGE_BASE_URL!,
          model: process.env.RAG_JUDGE_MODEL!,
          apiKey: process.env.RAG_JUDGE_API_KEY!,
        },
        {
          type: 'embedding',
          baseURL: process.env.RAG_EMBED_BASE_URL!,
          model: process.env.RAG_EMBED_MODEL!,
          apiKey: process.env.RAG_EMBED_API_KEY!,
        },
      ],
    });
    
    const registry = createBuildRegistry();
    const buildId = startBuild(
      [{ title: 'sample.md', content: 'Alice works with Bob at Acme Corp.' }],
      registry,
      'demo-namespace',
    );
    
    const service = new GraphRAGRetrievalService();
    const result = await service.retrieve({
      query: 'Who works with Alice?',
      topK: 5,
    });
    
    console.log(result.answer);
    

    这个项目的定位

    我觉得它更偏“工程化”的 GraphRAG:

    • 适合 Markdown 文档知识库
    • 适合企业文档、知识图谱、研发文档整理
    • 适合 Node/Bun 运行环境
    • 适合需要保留结构化证据链的 RAG 系统

    不是那种只会写几段伪代码、看起来很炫但实际没法落地的项目。

    我现在的目标是把它做成一个 TypeScript 生态里比较有参考价值的 GraphRAG 基线,后续继续扩展数据库、召回、社区总结和查询质量。


    公开链接

    如果你也在做文档知识库、企业知识图谱、或者想把 GraphRAG 做成真正可部署的 TS 服务,这个方向我觉得还是有点意思的。

    欢迎试用、提 issue 、提 PR 。

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2646 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:58 · PVG 23:58 · LAX 08:58 · JFK 11:58
    ♥ Do have faith in what you're doing.