基于 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. 完全控制提示词和响应格式

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1133619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模型协作:CSANMT与其他NLP模型联用

多模型协作&#xff1a;CSANMT与其他NLP模型联用 &#x1f310; AI 智能中英翻译服务 (WebUI API) 从单一翻译到多模型协同的演进路径 在当前自然语言处理&#xff08;NLP&#xff09;技术快速发展的背景下&#xff0c;机器翻译已不再是孤立的功能模块。以达摩院推出的 CSANMT…

国家中小学智慧教育平台电子课本下载全攻略:三步实现教材资源本地化

国家中小学智慧教育平台电子课本下载全攻略&#xff1a;三步实现教材资源本地化 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为网络不稳定影响备课而烦恼&…

基于Java的实体店园艺景观智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 实体店园艺景观智慧管理系统结合客户管理、会员管理、员工管理和植物养护等多功能模块&#xff0c;为用户提供全面的企业级解决方案。相比传统选题&#xff0c;本系统设计独特&#xff0c;具有创新性和实用性&#xff0c;能够显著提升工作…

Python Flask构建OCR WebUI:从零到一键部署

Python Flask构建OCR WebUI&#xff1a;从零到一键部署 &#x1f441;️ 高精度通用 OCR 文字识别服务 (CRNN版) &#x1f4d6; 项目简介 本镜像基于 ModelScope 经典的 CRNN (卷积循环神经网络) 模型构建。 相比于普通的轻量级模型&#xff0c;CRNN 在复杂背景和中文手写体识别…

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…

WebUI+API双模式:快速集成智能翻译服务指南

WebUIAPI双模式&#xff1a;快速集成智能翻译服务指南 &#x1f310; AI 智能中英翻译服务 (WebUI API) 项目背景与技术演进 随着全球化进程加速&#xff0c;跨语言沟通需求激增。传统翻译工具虽已普及&#xff0c;但在语义连贯性、表达自然度和上下文理解方面仍存在明显短板。…

智能翻译服务异常处理与恢复机制

智能翻译服务异常处理与恢复机制 &#x1f4cc; 引言&#xff1a;AI 智能中英翻译服务的稳定性挑战 随着自然语言处理技术的快速发展&#xff0c;AI 驱动的智能翻译服务已广泛应用于跨语言交流、内容本地化和国际化业务场景。基于 ModelScope 平台构建的 CSANMT&#xff08;C…

基于Java的实地勘测智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 告别“烂大街”选题&#xff0c;本系统以实地勘测智慧管理为核心&#xff0c;结合项目管理和数据分析两大模块&#xff0c;实现从任务分配、数据记录到质量检测的全流程自动化。对比传统毕设题目&#xff0c;此选择更具创新性和实用性&am…

Windows系统终极优化指南:RyTuneX完整配置与实战技巧

Windows系统终极优化指南&#xff1a;RyTuneX完整配置与实战技巧 【免费下载链接】RyTuneX An optimizer made using the WinUI 3 framework 项目地址: https://gitcode.com/gh_mirrors/ry/RyTuneX 想要让Windows系统运行如飞&#xff1f;RyTuneX这款专业的Windows系统优…

PiliPlus:重新定义你的B站第三方客户端体验

PiliPlus&#xff1a;重新定义你的B站第三方客户端体验 【免费下载链接】PiliPlus PiliPlus 项目地址: https://gitcode.com/gh_mirrors/pi/PiliPlus 在追求极致视频播放优化的今天&#xff0c;PiliPlus作为一款基于Flutter开发的B站第三方客户端&#xff0c;通过深度定…

Blender建筑生成插件building_tools技术深度解析

Blender建筑生成插件building_tools技术深度解析 【免费下载链接】building_tools Building generation addon for blender 项目地址: https://gitcode.com/gh_mirrors/bu/building_tools 作为Blender生态中专注于建筑生成的专业工具&#xff0c;building_tools插件通过…

翻译服务成本控制:CSANMT CPU版资源占用优化指南

翻译服务成本控制&#xff1a;CSANMT CPU版资源占用优化指南 &#x1f4d6; 项目背景与核心挑战 随着AI翻译技术的普及&#xff0c;越来越多企业开始部署私有化中英翻译服务。然而&#xff0c;GPU推理成本高昂、运维复杂&#xff0c;尤其对于中小规模应用场景&#xff08;如文档…

ROFL-Player:英雄联盟回放数据分析终极工具

ROFL-Player&#xff1a;英雄联盟回放数据分析终极工具 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为无法深入分析英雄联盟回放…

基于Java的实时温度监测智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 毕设小白的福音&#xff01;基于Java的实时温度监测智慧管理系统的设计与实现全方位解析&#xff1a;附源代码毕设论文&#xff0c;摆脱“烂大街”选题。该系统主要功能模块包括会员管理、设备管理、温度数据采集管理等10余个子模块&…

5个理由告诉你为什么Fiddler中文版是网络调试的最佳选择

5个理由告诉你为什么Fiddler中文版是网络调试的最佳选择 【免费下载链接】zh-fiddler Fiddler Web Debugger 中文版 项目地址: https://gitcode.com/gh_mirrors/zh/zh-fiddler 还在为复杂的网络调试而头疼吗&#xff1f;&#x1f914; Fiddler中文版作为专业的HTTP/HTTP…

英雄联盟LCU接口自动化工具深度解析:从数据抓取到智能决策的技术实现

英雄联盟LCU接口自动化工具深度解析&#xff1a;从数据抓取到智能决策的技术实现 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …

Windows视频播放器终极配置:3步完成专业级MPV优化

Windows视频播放器终极配置&#xff1a;3步完成专业级MPV优化 【免费下载链接】MPV_lazy &#x1f504; mpv player 播放器折腾记录 windows conf &#xff1b; 中文注释配置 快速帮助入门 &#xff1b; mpv-lazy 懒人包 win10 x64 config 项目地址: https://gitcode.com/gh_…

基于Java的实用新型维护智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 实用新型维护智慧管理系统旨在提供一套全面的解决方案&#xff0c;涵盖会员管理、设备管理和库存物品管理等多个功能模块。相较于传统选题&#xff0c;该系统具有显著优势&#xff1a;首先&#xff0c;在实用性方面&#xff0c;它能够大幅…

健康160自动挂号脚本终极指南:5分钟告别抢号烦恼

健康160自动挂号脚本终极指南&#xff1a;5分钟告别抢号烦恼 【免费下载链接】health160 健康160自动挂号脚本&#xff0c;用魔法对抗魔法&#xff0c;禁止商用&#x1f596; 项目地址: https://gitcode.com/gh_mirrors/he/health160 还在为健康160平台抢号难而头疼吗&a…

终极文献管理革命:告别手动下载PDF的智能解决方案

终极文献管理革命&#xff1a;告别手动下载PDF的智能解决方案 【免费下载链接】zotero-scihub A plugin that will automatically download PDFs of zotero items from sci-hub 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scihub 想象一下&#xff0c;当你沉浸…