news 2026/5/1 11:43:31

基于 FastGPT 的 LangChain.js + RAG 系统实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 FastGPT 的 LangChain.js + RAG 系统实现

基于 FastGPT 的 RAG 系统实现

系统概述

本文介绍如何基于 FastGPT 构建的知识库实现 LangChain.js + RAG 系统。

核心流程

FastGPT 文档处理 向量存储 PostgreSQL MongoDB RAG系统 用户问答

FastGPT 的作用

FastGPT 负责:

  • • 文档管理:上传、切分、向量化文档

  • • QA 生成:自动从文档生成问答对

  • • 数据存储:向量存储在 PostgreSQL,文本存储在 MongoDB

  • • 可视化管理:Web 界面管理知识库

LangChain.js + RAG 系统负责:

  • • 读取数据:从 FastGPT 的数据库读取知识

  • • 向量检索:找到相关的 QA 对

  • • 增强生成:基于检索结果回答用户问题

为什么要使用 LangChain.js + RAG

既然 FastGPT 已经提供了完整的知识库管理和问答能力,为什么还需要构建 LangChain.js + RAG 系统?

核心优势

1. 深度定制化

  • • FastGPT:提示词和交互逻辑固定,难以深度定制

  • • LangChain.js + RAG:完全控制提示词、Agent 行为、响应格式

2. 工具生态集成

  • • FastGPT:也可以集成工具,但集成方式有限

  • • LangChain.js + RAG:更方便地集成 MCP 工具、自定义 API、数据库操作、业务系统等

3. Agent 编排能力

  • • FastGPT:简单的问答交互

  • • LangChain.js + RAG:使用 LangGraph 构建复杂 Agent 工作流,支持多步推理、工具链、条件分支等

4. 可扩展性

  • • FastGPT:功能受限于 FastGPT 的更新节奏

  • • LangChain.js + RAG:随时集成最新的 AI 能力和工具,快速响应业务需求


系统架构

整体架构

LangChainRAG Storage FastGPT 文档上传 文档切分 QA生成 向量化 PostgreSQL MongoDB 读取知识库 向量检索 生成回答

数据流转

FastGPT 到 LangChain.js + RAG 系统的完整流程:

阶段 1:知识库构建(FastGPT 负责)
  1. 1. 用户通过 FastGPT Web 界面上传文档

  2. 2. FastGPT 自动将文档切分为小段落

  3. 3. 为每个段落生成对应的问答对

  4. 4. 调用 OpenAI Embedding API 将问题向量化

  5. 5. 向量存储到 PostgreSQL,QA 对存储到 MongoDB

阶段 2:知识检索(LangChain.js + RAG 负责)
  1. 6. 用户在 LangChain.js + RAG 系统中提问

  2. 7. LangChain.js + RAG 系统读取问题,向量化后查询 PostgreSQL

  3. 8. PostgreSQL 返回最相似的向量 ID

  4. 9. LangChain.js + RAG 系统用向量 ID 从 MongoDB 读取完整 QA 对

  5. 10. LangChain.js + RAG 系统将 QA 内容作为上下文,发送给 AI 模型生成回答


FastGPT 数据结构

PostgreSQL 向量表

FastGPT 使用 PostgreSQL 存储文档的向量表示:

-- FastGPT 创建的向量表 CREATE TABLE modeldata ( id BIGSERIAL PRIMARY KEY, vector VECTOR(1536) NOT NULL, team_id VARCHAR(50) NOT NULL, dataset_id VARCHAR(50) NOT NULL, collection_id VARCHAR(50) NOT NULL, createtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 向量相似度索引 CREATE INDEX ON modeldata USING ivfflat (embedding vector_cosine_ops);

关键字段说明:

字段

类型

说明

id

BIGSERIAL

向量唯一 ID

vector

VECTOR(1536)

1536 维向量

dataset_id

VARCHAR(50)

知识库 ID

collection_id

VARCHAR(50)

集合 ID

MongoDB QA 表

FastGPT 使用 MongoDB 存储问答对和元数据:

// FastGPT 的数据集数据集合 { "_id": ObjectId("..."), "q": "如何配置环境变量?", "a": "可以通过项目的 .env 文件配置...", "indexes": [ { "dataId": "vector_id_123", "text": "环境变量配置包括 API 密钥..." } ], "datasetId": "683eab4063699a9c20d35ebb", "createTime": ISODate("2026-01-08T10:00:00Z") }

数据关联流程

用户问题 Embedding API 问题向量 PostgreSQL向量搜索 获取向量 ID MongoDB查询QA 问答对内容

LangChain.js + RAG 系统实现

技术栈

本项目使用LangChain.js框架实现 RAG 系统。

系统分工:

  • FastGPT:负责知识库管理(文档上传、切分、向量化、存储)

  • LangChain.js + RAG:负责从 FastGPT 数据库读取和检索

1. 读取 FastGPT 知识库

连接数据库

LangChain.js + RAG 系统需要同时连接 FastGPT 使用的 PostgreSQL 和 MongoDB:

// 连接 FastGPT 数据库 const pgPool = new Pool({ connectionString: 'postgresql://host:5432/fastgpt' }); const mongoClient = new MongoClient('mongodb://host:27017/fastgpt'); const datasetCollection = mongoClient.db('fastgpt').collection('dataset_datas');
查询知识库
// 搜索知识库 async function searchFastGPTKnowledge(datasetId, query, limit = 5) { // Step 1: 向量化问题 queryVector = await getEmbedding(query); // Step 2: 在 PostgreSQL 中搜索相似向量 vectorResults = await searchVectors(datasetId, queryVector, limit); // Step 3: 从 MongoDB 获取 QA 内容 qaPairs = await getQAPairs(datasetId, vectorResults.map(r => r.id)); // Step 4: 合并结果 return vectorResults.map(vectorResult => { const qaPair = qaPairs.find(qa => qa.indexes.some(idx => idx.dataId === vectorResult.id) ); return { question: qaPair?.q || '', answer: qaPair?.a || '', similarity: vectorResult.score }; }); }

2. 向量检索

PostgreSQL 向量搜索
// 向量相似度搜索 async function searchVectors(datasetId, queryVector, limit = 5) { const query = ` SELECT id::text, collection_id, (vector <=> $1::vector) * -1 AS score FROM modeldata WHERE dataset_id = $2 ORDER BY vector <=> $1::vector LIMIT $3 `; return await pgPool.query(query, [ JSON.stringify(queryVector), datasetId, limit ]); }

查询说明:

  • vector <=> $1::vector:计算余弦距离

  • * -1:转换为相似度分数

  • ORDER BY:按相似度降序排列

MongoDB QA 查询
// 获取 QA 对 async function getQAPairs(datasetId, vectorIds) { return await datasetCollection.find({ datasetId: datasetId, 'indexes.dataId': { $in: vectorIds } }).toArray(); }

3. Embedding 服务

// 获取向量 async function getEmbedding(text) { const response = await openai.embeddings.create({ model: 'text-embedding-3-large', input: text }); return response.data[0].embedding; }

LangChain.js 集成

为什么使用 LangChain.js?

LangChain.js 的优势:

  • • 工具封装:将知识库检索封装为 LangChain Tool

  • • Agent 编排:自动决定何时使用知识库

  • • 提示词管理:自动构建包含检索结果的提示词

  • • 多工具组合:知识库 + MCP 工具 + 其他工具

创建 LangChain Tool

// 创建知识库工具 function createFastGPTKnowledgeTool(datasetId) { return new StructuredTool({ name: 'search_fastgpt_knowledge', description: '从 FastGPT 知识库搜索相关信息', func: async ({ query }) => { // 调用 FastGPT 检索 const results = await searchFastGPTKnowledge(datasetId, query, 5); // 格式化输出 return results.map((result, index) => ` 【来源 ${index + 1}】相似度: ${(result.similarity * 100).toFixed(1)}% 问题:${result.question} 答案:${result.answer} `).join('\n\n'); } }); }

创建 LangChain Agent

// 创建 Agent async function createAgent() { const DATASET_ID = '683eab4063699a9c20d35ebb'; // 创建知识库工具 const knowledgeTool = createFastGPTKnowledgeTool(DATASET_ID); // 创建 AI 模型 const model = new ChatOpenAI({ model: 'gpt-4o', apiKey: process.env.OPENAI_API_KEY }); // 创建 LangChain Agent const agent = await createReactAgent({ name: 'fastgpt-rag-agent', model, tools: [knowledgeTool], systemPrompt: `你是一个技术支持助手。 ## 工作流程 1. 用户提问时,首先使用知识库工具检索相关信息 2. 基于检索结果提供准确答案 3. 引用信息来源和相似度分数` }); return agent; }

LangChain 工作流程

LLMFastGPT DBKnowledge ToolLangChain Agent用户LLMFastGPT DBKnowledge ToolLangChain Agent用户提问分析问题,决定使用工具调用知识库工具查询向量查询 QA返回结果返回 QA 内容构建提示词发送到 LLM生成回答返回答案 + 来源

总结

本系统通过结合 FastGPT 的知识库管理能力和 LangChain.js 的灵活编排能力,构建了一个可深度定制、易扩展的 RAG 系统。这种架构允许我们:

  1. 1. 利用 FastGPT 的可视化界面管理知识库

  2. 2. 通过 LangChain.js 实现复杂的 Agent 工作流

  3. 3. 灵活集成各种工具和 API

  4. 4. 完全控制提示词和响应格式

适用于需要深度定制化、复杂业务逻辑集成的企业级应用场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 10:02:34

Cursor Pro智能破解:零成本免费激活高级编程权限

Cursor Pro智能破解&#xff1a;零成本免费激活高级编程权限 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial re…

作者头像 李华
网站建设 2026/4/8 13:52:58

如何快速获取国家中小学电子课本:智能下载工具完整使用指南

如何快速获取国家中小学电子课本&#xff1a;智能下载工具完整使用指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为在线查阅教材而烦恼&#xff1f;每次…

作者头像 李华
网站建设 2026/5/1 10:50:36

突破性百度网盘提速方案:Mac端革命性性能优化指南

突破性百度网盘提速方案&#xff1a;Mac端革命性性能优化指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘的龟速下载而烦恼吗&#…

作者头像 李华
网站建设 2026/4/18 12:50:28

百度文库免费获取完整文档终极指南:三步解决付费限制

百度文库免费获取完整文档终极指南&#xff1a;三步解决付费限制 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 还在为百度文库的付费内容发愁吗&#xff1f;想要免费获取完整文档却无从下手&…

作者头像 李华
网站建设 2026/5/1 9:46:42

磁力链接转换新体验:从链接到种子的智能蜕变

磁力链接转换新体验&#xff1a;从链接到种子的智能蜕变 【免费下载链接】Magnet2Torrent This will convert a magnet link into a .torrent file 项目地址: https://gitcode.com/gh_mirrors/ma/Magnet2Torrent 还在为磁力链接的下载管理而头疼吗&#xff1f;每天面对一…

作者头像 李华
网站建设 2026/5/1 5:44:55

m3u8下载神器:从入门到精通的完整使用手册

m3u8下载神器&#xff1a;从入门到精通的完整使用手册 【免费下载链接】m3u8-downloader m3u8 视频在线提取工具 流媒体下载 m3u8下载 桌面客户端 windows mac 项目地址: https://gitcode.com/gh_mirrors/m3u8/m3u8-downloader 还在为无法保存在线视频而烦恼吗&#xff…

作者头像 李华