---
# System prepended metadata

title: 使用 LangChain 建立 RAG 向量資料庫
tags: [筆記]

---

# 使用 LangChain 建立 RAG 向量資料庫


最近因應建置系統的需求，想使用 RAG（[Retrieval-Augmented Generation](https://en.wikipedia.org/wiki/Retrieval-augmented_generation)）來增強 LLM 知識庫。想要先建立文本的向量資料庫並儲存起來，之後想使用時可以直接載入而無需重新轉換向量。

## 安裝相關套件
```
pip install langchain_community
pip install langchain_openai
pip install langchain_text_splitters
pip install chromadb
```


## 建立向量資料庫並儲存

可以使用 FAISS 或 Chroma 處理向量資料，我這裡採用 Chroma。

```
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_openai.embeddings import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

# OpenAI API Key
API_KEY = "Your API Key"
PERSIST_DIR = "./vectordb"  # 設置儲存向量資料庫的目錄

# 載入文本
loader = TextLoader("./Text.txt", encoding="utf-8")
docs = loader.load()

# 切割文本
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=50,
    separators=["\n\n", "\n", ".", "。", "!", "?", ",", "，", " ", ""]
)
texts = text_splitter.split_documents(docs)

# 嵌入向量資料庫
embeddings_model = OpenAIEmbeddings(openai_api_key=API_KEY, model="text-embedding-3-large")
# 建立向量資料庫
vectordb = Chroma.from_documents(
    documents=texts,
    embedding=embeddings_model,
    persist_directory=PERSIST_DIR  # 設置持久化目錄
)

# 儲存向量資料庫
vectordb.persist()  # 使用 persist 方法將向量資料庫寫入目錄
```


## 載入向量資料庫

之後想使用時直接載入向量資料庫檢索
```
from langchain_community.vectorstores import Chroma
from langchain_openai.embeddings import OpenAIEmbeddings


API_KEY = "Your API Key"
PERSIST_DIR = "./vectordb"


# 加載嵌入模型
embeddings_model = OpenAIEmbeddings(openai_api_key=API_KEY, model="text-embedding-3-large")
# 載入向量資料庫
vectordb = Chroma(persist_directory=PERSIST_DIR, embedding_function=embeddings_model)

# 建立文檔檢索器
retriever = vectordb.as_retriever()

retrieved_docs = retriever.invoke("檢索文字")

print(retrieved_docs[0].page_content)
```


## References
* [AI大模型應用開發(7)：讓語言模型訪問外部資料庫](https://blog.raven.tw/AI-7-11a021a1715c8083814aee3b2560a9a6)
* [[LangChain-01] RAG實戰第一站](https://medium.com/jimmy-wang/langchain-rag%E5%AF%A6%E6%88%B0%E7%AC%AC%E4%B8%80%E7%AB%99-efe975f4c3bd)



