仓库地址:https://github.com/sadofriod/graphrag-ts
我最近做了一个纯 TypeScript 的 GraphRAG 实现,核心目标很简单:不想再为了一个知识图谱 / 文档问答系统,额外维护 Python 环境,也不想被某个框架绑死。
如果你常用 Node.js / Bun / TypeScript 做后端,或者想把知识库、Markdown 文档、企业文档分析做成一个更“结构化”的 RAG 服务,这个项目会比较贴近你们的场景。
传统向量 RAG 很强,但它天然有个问题:相似度召回很容易把“信息找出来”,却不一定能把“关系、跨文档连接、宏观结构”保留下来。
微软的 GraphRAG 在这方面确实很厉害,但主流实现基本都在 Python 生态里。对很多 TS 团队来说,痛点就是:
所以我就想试着做一个:
从仓库实现看,核心链路已经比较完整:
也就是说,它不是“把 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:
不是那种只会写几段伪代码、看起来很炫但实际没法落地的项目。
我现在的目标是把它做成一个 TypeScript 生态里比较有参考价值的 GraphRAG 基线,后续继续扩展数据库、召回、社区总结和查询质量。
@ashes_born/graph-rag-tsnpm install @ashes_born/graph-rag-ts如果你也在做文档知识库、企业知识图谱、或者想把 GraphRAG 做成真正可部署的 TS 服务,这个方向我觉得还是有点意思的。
欢迎试用、提 issue 、提 PR 。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.