国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

RAG系列:基于 DeepSeek + Chroma + LangChain 開發(fā)一個(gè)簡(jiǎn)單 RAG 系統(tǒng)

人工智能
相信看過(guò)我之前文章的同學(xué),已經(jīng)了解了什么是 RAG 以及技術(shù)實(shí)現(xiàn),也學(xué)會(huì)了如何本地搭建基于 Ollama、DeepSeek、Chroma、LangChain.js 和 Next.js 的全棧 AI 應(yīng)用開發(fā)框架。本文我們基于這一套全棧 AI 應(yīng)用開發(fā)框架開發(fā)一個(gè)簡(jiǎn)單的 RAG 系統(tǒng)。

創(chuàng)建 Next 項(xiàng)目

首先,使用 npx create-next-app@latest 根據(jù)提示完成 Next 項(xiàng)目的創(chuàng)建:

# 創(chuàng)建 Next 項(xiàng)目
npx create-next-app@latest

創(chuàng)建好項(xiàng)目之后,在 src/app 目錄下新建 rag 目錄,本次 demo 的代碼都將放在這里。

知識(shí)庫(kù)構(gòu)建

接下來(lái),我們將構(gòu)建知識(shí)庫(kù),主要目標(biāo)是將準(zhǔn)備好的 pdf 通過(guò)向量化存到向量數(shù)據(jù)庫(kù)中,以便后續(xù)的檢索。

由于本次 RAG 系統(tǒng)的開發(fā)都要依賴 LangChain 框架,所以我們先在項(xiàng)目中安裝 LangChain 框架和核心依賴:

# LangChain 框架和核心依賴
npm install langchain @langchain/core

文檔加載

LangChain 的 DocumentLoaders[1] 提供了種類豐富的文檔加載器,可加載文件系統(tǒng)的文件也可以加載線上文件,包括 csv、docx、pdf、pptx、html、github、youtube等等。

現(xiàn)在我們使用 PDFLoader[2] 來(lái)實(shí)現(xiàn) pdf 的數(shù)據(jù)加載。

先安裝所需的依賴包:

# @langchain/community:包含第三方集成,這些集成實(shí)現(xiàn)了 LangChain Core 中定義的基本接口,如:文檔加載、文檔嵌入、向量數(shù)據(jù)庫(kù)等等
# pdf-parse:讀取 pdf 文本
npm install @langchain/community pdf-parse

然后添加加載 pdf 的代碼:

import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';

const loader = new PDFLoader('public/example.pdf', { splitPages: false });
const docs = await loader.load();

文檔分割

加載完成后,由于加載的文檔可能過(guò)長(zhǎng),不適合模型的上下文窗口,需要將文檔分割成合適的大小。

LangChain 提供了 TextSplitter[3] 組件來(lái)實(shí)現(xiàn)文檔分割:

import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter';

// chunkSize:分割文檔的長(zhǎng)度
// chunkOverlap:分割文檔間的重疊長(zhǎng)度
const textSplitter = new RecursiveCharacterTextSplitter({
    chunkSize: 1000,
    chunkOverlap: 200,
});
const texts = await textSplitter.splitDocuments(docs);

文檔向量嵌入

接下來(lái)我們需要對(duì)分割后的文本塊進(jìn)行向量嵌入,然后使用 Chroma 向量數(shù)據(jù)庫(kù)存儲(chǔ)。

向量模型使用 ollama 安裝的 nomic-embed-text 模型,可用 ollama run nomic-embed-text進(jìn)行下載和運(yùn)行,完整的代碼如下:

import {
Chroma,
ChromaLibArgs,
} from'@langchain/community/vectorstores/chroma';
import { ChatOllama, OllamaEmbeddings } from'@langchain/ollama';
import { EmbeddingsInterface } from'@langchain/core/embeddings';

// 初始化 embeddings 函數(shù)
exportfunctioninitOllamaEmbeddings(model = 'nomic-embed-text') {
returnnewOllamaEmbeddings({ model });
}

// 初始化向量數(shù)據(jù)庫(kù)
exportfunctioninitChroma(
  embeddings: EmbeddingsInterface = initOllamaEmbeddings(),
  args: ChromaLibArgs = {
    collectionName: 'rag_collection',
    url: 'http://localhost:8000',
  }
) {
returnnewChroma(embeddings, args);
}

// 初始化向量數(shù)據(jù)庫(kù)
const chromadb = initChroma();
// 保存文本塊
const documents = await chromadb.addDocuments(texts);

到此就構(gòu)建好了一個(gè)簡(jiǎn)單的知識(shí)庫(kù)。

RAG 系統(tǒng)構(gòu)建

在創(chuàng)建好知識(shí)庫(kù)之后,接下來(lái)就可以開始構(gòu)建一個(gè)基礎(chǔ)的 RAG 系統(tǒng)。該系統(tǒng)包括檢索器與生成器兩部分,具體工作流程如下:對(duì)于用戶輸入的問(wèn)題,檢索器先搜索與該問(wèn)題相關(guān)的文檔,接著將檢索到的文檔與初始問(wèn)題一起傳遞給生成器,即大語(yǔ)言模型,最后將模型生成的答案返回給用戶。

檢索器創(chuàng)建

我們先基于 VectorStoreRetriever 創(chuàng)建檢索器,利用向量相似度進(jìn)行檢索。

// 初始化向量數(shù)據(jù)庫(kù)
  const chromadb = initChroma();
  // 創(chuàng)建檢索器
  const retriever = chromadb.asRetriever();

生成器創(chuàng)建

接下來(lái)我們創(chuàng)建生成器,這里我們使用 Ollama 安裝的 deepseek-r1:14b 大模型作為生成器。

import { ChatOllama } from '@langchain/ollama';

export function initOllamaLLM(model = 'deepseek-r1:14b') {
  return new ChatOllama({ model });
}

// 創(chuàng)建生成器(初始化大模型)
const ollamaLLM = initOllamaLLM()

然后再設(shè)置提示模版:

// 設(shè)置提示模版
  const prompt = PromptTemplate.fromTemplate(
    '你是負(fù)責(zé)回答問(wèn)題的助手。使用以下檢索到的上下文片段來(lái)回答問(wèn)題。如果你不知道答案,就說(shuō)你不知道。\n\n上下文:{context}\n\n問(wèn)題:{question}\n\n回答:'
  );

RAG 鏈生成答案

最后我們通過(guò) RAG 鏈將檢索器和生成器整合在一起,這里可以使用 LangChain 表達(dá)式語(yǔ)言(LangChain Execution Language,LCEL)來(lái)方便快捷地構(gòu)建一個(gè)鏈,將檢索到的文檔、構(gòu)建的輸入 Prompt 以及模型的輸出組合起來(lái)。

// 使用 LCEL 構(gòu)建 RAG 鏈
const ragChain = RunnableSequence.from([
    {
      context: retriever.pipe((docs) => {
        // 文檔列表使用 \n\n 拼接為字符串
        return docs.map((doc) => doc.pageContent).join('\n\n');
      }),
      question: newRunnablePassthrough(),
    },
    prompt,
    ollamaLLM,
    newStringOutputParser(),
  ]);

// 使用 RAG 鏈生成答案
const answer = await ragChain.invoke(question);

項(xiàng)目代碼

代碼:https://github.com/laixiangran/ai-learn

啟動(dòng)項(xiàng)目之后在瀏覽器輸入 http://localhost:3000/rag 即可訪問(wèn)該 RAG 系統(tǒng),然后在輸入框輸入問(wèn)題:互聯(lián)網(wǎng)的人才缺口有哪些

圖片

也可以通過(guò)訪問(wèn) http://localhost:3000/rag/generate?questinotallow=互聯(lián)網(wǎng)的人才缺口有哪些

圖片

通過(guò)以上步驟,我們就完成了一個(gè)基礎(chǔ) RAG 系統(tǒng)的搭建,其中借助于 LangChain 提供了一系列強(qiáng)大的工具和組件,使得構(gòu)建和整合檢索與生成過(guò)程變得簡(jiǎn)單而高效。而借助 Ollama 我們也能夠在本地部署大語(yǔ)言模型和向量模型,這讓我們可以以較小的資源進(jìn)行 AI 的開發(fā)學(xué)習(xí)實(shí)踐。

引用鏈接

[1] DocumentLoaders: https://js.langchain.com/docs/concepts/document_loaders

[2] PDFLoader: https://v03.api.js.langchain.com/classes/_langchain_community.document_loaders_fs_pdf.PDFLoader.html

[3] TextSplitter: https://js.langchain.com/docs/concepts/text_splitters

責(zé)任編輯:龐桂玉 來(lái)源: 燃哥講AI
相關(guān)推薦

2024-05-22 09:38:25

2025-05-22 02:00:00

AI人工智能前端

2024-06-24 14:32:33

2025-02-10 11:27:37

2025-05-26 09:57:46

2024-09-02 08:17:53

RAG聊天機(jī)器人人工智能

2024-12-06 09:58:09

2024-06-03 09:33:28

2025-05-23 06:00:00

RAGAI人工智能

2025-02-14 00:00:35

2024-02-05 14:12:37

大模型RAG架構(gòu)

2025-02-06 08:26:21

2025-05-22 06:23:48

2025-02-03 00:00:55

DeepSeekRAG系統(tǒng)

2024-03-26 00:00:07

2025-02-06 13:50:06

2025-06-10 04:30:00

2025-02-24 08:39:08

2025-06-24 09:51:10

2025-11-04 07:15:00

LangChain大模型AI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美三级免费观看| 欧美午夜激情视频| 国产日韩欧美一区二区| av在线亚洲一区| 亚洲国产欧美一区二区三区同亚洲 | 日韩一区二区三区电影| 欧美风狂大伦交xxxx| 欧美激情一区二区三区在线| 日韩精品一区二区免费| 看片的网站亚洲| 日韩欧美激情一区二区| 性娇小13――14欧美| 国产一区视频观看| 亚洲精品激情| 久久久久综合一区二区三区| 亚洲一级淫片| 国产欧美在线一区二区| 亚洲免费精品| 日本一区网站| 久久99精品国产| 路边理发店露脸熟妇泻火| 国产资源精品在线观看| 男人草女人视频| 不卡视频一二三| 国产三级三级看三级| 自拍偷拍亚洲激情| 污黄色在线观看| 欧美精品在线观看播放| 国产后进白嫩翘臀在线观看视频| 精品国产一区二区在线观看| 国产精品偷拍| 上原亚衣av一区二区三区| 成人97精品毛片免费看| 91干在线观看| 欧美老女人另类| 国产成人一区二区三区免费看| 亚洲图片在线| 宅男一区二区三区| 久久精品夜色噜噜亚洲a∨| 免费高清成人| 色婷婷国产精品久久包臀| 最新超碰在线| 久久久精品2019中文字幕神马| 日韩精品导航| 久久五月天婷婷| av在线这里只有精品| 婷婷综合影院| 精品久久久影院| 日韩视频1区| 91网在线免费观看| 久久精品国产久精国产| 女人扒开屁股爽桶30分钟| 樱花影视一区二区| 免费a级人成a大片在线观看| 亚洲激情小视频| 成人激情视屏| 国产日韩专区在线| 日本中文字幕一区二区视频| 久久久免费视频网站| 午夜私人影院久久久久| 老牛影视精品| 尤物视频在线免费观看| 精品国产凹凸成av人导航| 亚洲欧美在线人成swag| 国产色婷婷国产综合在线理论片a| 欧美成人嫩草网站| 久久人妻无码一区二区| 伊人性伊人情综合网| 羞羞污视频在线观看| 69av视频在线播放| 美女精品自拍一二三四| av一级二级| 精品夜色国产国偷在线| 精品国产一区一区二区三亚瑟| 日本不卡二区| 亚洲一区二区三区四区五区黄 | 欧美性jizz18性欧美| 国产精品专区免费| 国产精品久久一区| 国产黄色精品视频| 三级国产在线观看| 成人羞羞视频播放网站| 992tv成人免费观看| 大荫蒂欧美视频另类xxxx| 成人激情视屏| 农村寡妇一区二区三区| 日韩美女精品在线| 欧美xo影院| 久久99导航| 亚洲成人av一区二区三区| 美女视频一区| 日本电影一区二区三区| 亚洲激情av在线| 久久人体av| 亚洲一区二区三区精品动漫| 亚洲一区二区美女| 亚洲第一二区| 99视频精品全部免费看| 欧美网站大全在线观看| 天天躁日日躁成人字幕aⅴ| 人人妻人人澡人人爽欧美一区双 | 亚洲精品成人av| 国产91大片| 影音先锋日韩有码| 亚洲伦伦在线| 一二三四中文在线| 欧美精品免费在线观看| 国产一区二区三区免费在线观看| av网页在线| 国产欧美一区二区三区在线看| 久久精品网站免费观看| 欧美日韩国产网站| 午夜啪啪福利视频| 精品美女在线播放| 国产亚洲精品自拍| yes4444视频在线观看| 91精品国产自产在线观看永久| 久久九九99视频| 996久久国产精品线观看| 免费观看亚洲视频| 日韩精品极品在线观看| 天堂va蜜桃一区二区三区漫画版| 日韩伦理在线观看| 久久99精品久久久久久秒播放器| 大伊人狠狠躁夜夜躁av一区| 欧美成免费一区二区视频| 蜜臀一区二区三区| 91精品国产综合久久香蕉922| 亚洲综合免费观看高清完整版| 欧美一级大片在线视频| 男人透女人免费视频| 欧美wwwxxxx| 国产午夜精品一区二区三区嫩草| 欧美一区二区三区婷婷| 亚洲高清久久网| 亚洲成人观看| 国产91露脸中文字幕在线| 国产精品电影一区二区三区| 欧美国产中文高清| 久久久久久久久久久久91| 91国内免费在线视频| 亚洲四区在线观看| 青青草97国产精品麻豆| 一二三四社区在线视频6| 成人免费黄色网| 欧美日本在线视频| 麻豆高清免费国产一区| 日韩三级影视| 亚洲第一中文av| 国产美女久久久| 欧美日韩在线播放一区| 日av在线不卡| 成人自拍视频| 色老板视频在线观看| 国产高清一区视频| 日韩成人激情视频| 久久久国产午夜精品| 狠狠色丁香婷婷综合影院| 国产51人人成人人人人爽色哟哟| 日韩av高清| 中文字幕在线看视频国产欧美在线看完整| 99精品视频中文字幕| 竹菊久久久久久久| 91精彩在线视频| 欧美少妇在线观看| 国内精品久久久久影院 日本资源| 亚洲不卡av一区二区三区| 在线精品一区| 丁香婷婷久久| 中文字幕在线影院| 亚洲欧美国产精品桃花| 九色91av视频| 欧美四级电影在线观看| 国产一区日韩二区欧美三区| 久久夜色精品国产噜噜av小说| 国产在线观看黄| 男人天堂手机在线视频| 日韩av色综合| 亚洲国产精品悠悠久久琪琪| 亚洲国产精品成人综合| 亚洲伦伦在线| 久久9999免费视频| av资源网站在线观看| 免费av手机在线观看| 国产视频福利一区| 亚洲片av在线| 午夜成人在线视频| 成人网男人的天堂| 欧美freesex交免费视频| 日本欧美不卡| 天堂视频中文在线| 阿v天堂2017| 国产一区二区不卡视频| 久久在线免费视频| 欧美一区二区三区视频免费播放 | 亚洲精品国精品久久99热| 欧美激情中文字幕| 免费观看在线综合色| 国产精品中文字幕亚洲欧美| 日产福利视频在线观看|