最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從零帶你使用Python實(shí)現(xiàn)RAG(檢索增強(qiáng)生成)系統(tǒng)

 更新時(shí)間:2026年04月12日 09:22:04   作者:Halcyon.平安  
檢索增強(qiáng)生成(Retrieval-Augmented Generation, RAG)是當(dāng)下最熱門的 AI 應(yīng)用架構(gòu)之一,本文將帶你從零開始,用 Python 完整實(shí)現(xiàn)一個(gè) RAG 系統(tǒng),涵蓋文檔加載,文本分塊,向量嵌入,語(yǔ)義檢索與生成回答的完整鏈路

一、什么是 RAG?

RAG 的核心思想:讓大語(yǔ)言模型(LLM)在回答問(wèn)題時(shí),先從外部知識(shí)庫(kù)中檢索相關(guān)內(nèi)容,再基于檢索結(jié)果生成回答。 這有效解決了 LLM 的幻覺問(wèn)題和知識(shí)時(shí)效性問(wèn)題。

RAG vs 純 LLM 對(duì)比

維度純 LLMRAG
知識(shí)來(lái)源訓(xùn)練數(shù)據(jù)(靜態(tài))外部知識(shí)庫(kù)(動(dòng)態(tài))
幻覺問(wèn)題嚴(yán)重顯著降低
數(shù)據(jù)更新需重新訓(xùn)練增量更新索引即可
私有數(shù)據(jù)無(wú)法使用完美支持

二、RAG 系統(tǒng)架構(gòu)總覽

┌─────────────────────────────────────────────────────────┐
│                     RAG 系統(tǒng)架構(gòu)                         │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌──────────┐    ┌──────────┐    ┌──────────────────┐  │
│  │ 文檔加載  │───?│ 文本分塊  │───?│ 向量嵌入(Embed)  │  │
│  └──────────┘    └──────────┘    └────────┬─────────┘  │
│                                           │             │
│                                           ▼             │
│                                   ┌──────────────┐     │
│              離線階段             │  向量數(shù)據(jù)庫(kù)    │     │
│  ─────────────────────────────  │  (Vector DB)  │     │
│              在線階段             └──────┬───────┘     │
│                                           │             │
│  ┌──────────┐         ┌──────────┐        │             │
│  │ 用戶提問(wèn)  │───?     │ Query    │───? 檢索相似文檔  │  │
│  └──────────┘         │ Embedding│        │             │
│                       └──────────┘        │             │
│                                           ▼             │
│                   ┌──────────┐    ┌──────────────┐     │
│                   │ LLM 生成  │?───│ 拼接 Prompt  │     │
│                   └─────┬────┘    └──────────────┘     │
│                         │                               │
│                         ▼                               │
│                   ┌──────────┐                          │
│                   │ 最終回答  │                          │
│                   └──────────┘                          │
└─────────────────────────────────────────────────────────┘

三、環(huán)境準(zhǔn)備

3.1 安裝依賴

pip install langchain langchain-community \
             chromadb sentence-transformers \
             pypdf unstructured \
             openai tiktoken

3.2 項(xiàng)目結(jié)構(gòu)

rag-project/
├── data/                  # 存放原始文檔(PDF、TXT、MD 等)
├── vector_db/             # 向量數(shù)據(jù)庫(kù)持久化目錄
├── main.py                # 主程序
└── config.py              # 配置文件

四、Step 1 —— 文檔加載

文檔加載是 RAG 的起點(diǎn)。實(shí)際場(chǎng)景中,知識(shí)庫(kù)可能包含 PDF、Word、Markdown、網(wǎng)頁(yè)等多種格式。

4.1 加載 PDF 文件

from langchain_community.document_loaders import PyPDFLoader

def load_pdf(file_path: str):
    """加載 PDF 文件,返回 Document 列表"""
    loader = PyPDFLoader(file_path)
    pages = loader.load()
    print(f"成功加載 {len(pages)} 頁(yè)")
    return pages

# 每個(gè)Document對(duì)象包含:
# - page_content: 文本內(nèi)容
# - metadata: 元數(shù)據(jù)(頁(yè)碼、來(lái)源等)

4.2 加載 Markdown 文件

from langchain_community.document_loaders import UnstructuredMarkdownLoader

def load_markdown(file_path: str):
    """加載 Markdown 文件"""
    loader = UnstructuredMarkdownLoader(file_path)
    docs = loader.load()
    print(f"成功加載 Markdown: {len(docs)} 段")
    return docs

4.3 批量加載目錄下所有文檔

from langchain_community.document_loaders import DirectoryLoader

def load_directory(dir_path: str, glob_pattern: str = "**/*.pdf"):
    """批量加載目錄中的文檔"""
    loader = DirectoryLoader(
        dir_path,
        glob=glob_pattern,
        show_progress=True,
        use_multithreading=True
    )
    documents = loader.load()
    print(f"從 {dir_path} 加載了 {len(documents)} 個(gè)文檔")
    return documents

五、Step 2 —— 文本分塊(Chunking)

大文檔不能整篇丟給模型,需要切分成合適大小的片段。

5.1 為什么需要分塊

原始文檔(可能 100+ 頁(yè))
        │
        ▼ 切分
┌──────┐┌──────┐┌──────┐┌──────┐
│Chunk1││Chunk2││Chunk3││Chunk4│  ...  每塊 500~1000 tokens
└──────┘└──────┘└──────┘└──────┘
   │        │        │        │
   ▼        ▼        ▼        ▼
 向量化   向量化   向量化   向量化   → 存入向量數(shù)據(jù)庫(kù)

5.2 遞歸字符分塊器(推薦)

from langchain.text_splitter import RecursiveCharacterTextSplitter

def split_documents(documents, chunk_size=500, chunk_overlap=50):
    """
    遞歸字符分塊器 —— 按段落、句子邊界智能切分

    參數(shù):
        chunk_size: 每塊最大字符數(shù)
        chunk_overlap: 相鄰塊重疊字符數(shù)(保持上下文連貫)
    """
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=chunk_size,
        chunk_overlap=chunk_overlap,
        separators=["\n\n", "\n", "。", "!", "?", ".", " ", ""],
        length_function=len
    )
    chunks = text_splitter.split_documents(documents)
    print(f"文檔被切分為 {len(chunks)} 個(gè)文本塊")
    return chunks

5.3 分塊策略選擇指南

┌─────────────────────────────────────────────────┐
│              分塊策略選擇                          │
├─────────────────┬───────────────────────────────┤
│ 策略             │ 適用場(chǎng)景                       │
├─────────────────┼───────────────────────────────┤
│ 固定大小分塊      │ 通用場(chǎng)景,簡(jiǎn)單快速              │
│ 遞歸字符分塊      │ ? 推薦,兼顧語(yǔ)義與效率         │
│ 按語(yǔ)義分塊       │ 對(duì)語(yǔ)義完整性要求高              │
│ 按文檔結(jié)構(gòu)分塊    │ Markdown / HTML 等結(jié)構(gòu)化文檔   │
└─────────────────┴───────────────────────────────┘

六、Step 3 —— 向量嵌入(Embedding)

將文本塊轉(zhuǎn)換為高維向量,使其可被計(jì)算機(jī)進(jìn)行相似度計(jì)算。

6.1 使用本地開源模型(免費(fèi))

from langchain_community.embeddings import HuggingFaceEmbeddings

def get_embedding_model():
    """使用本地 Sentence Transformer 模型"""
    model = HuggingFaceEmbeddings(
        model_name="BAAI/bge-small-zh-v1.5",  # 中文優(yōu)秀模型
        model_kwargs={"device": "cpu"},
        encode_kwargs={"normalize_embeddings": True}
    )
    return model

# 測(cè)試嵌入效果
model = get_embedding_model()
vector = model.embed_query("什么是機(jī)器學(xué)習(xí)?")
print(f"向量維度: {len(vector)}")  # 輸出: 向量維度: 384

6.2 使用 OpenAI Embedding(付費(fèi),效果好)

from langchain_community.embeddings import OpenAIEmbeddings

def get_openai_embedding():
    """使用 OpenAI text-embedding-3-small"""
    return OpenAIEmbeddings(
        model="text-embedding-3-small",
        openai_api_key="your-api-key"
    )

七、Step 4 —— 構(gòu)建向量數(shù)據(jù)庫(kù)

7.1 使用 Chroma(輕量級(jí)本地向量數(shù)據(jù)庫(kù))

from langchain_community.vectorstores import Chroma

def build_vector_store(chunks, embedding_model, persist_directory="./vector_db"):
    """
    構(gòu)建向量數(shù)據(jù)庫(kù)并持久化

    流程: 文本塊 → Embedding → 存入 Chroma
    """
    vectorstore = Chroma.from_documents(
        documents=chunks,
        embedding=embedding_model,
        persist_directory=persist_directory
    )
    vectorstore.persist()
    print(f"向量數(shù)據(jù)庫(kù)構(gòu)建完成,共 {vectorstore._collection.count()} 條記錄")
    return vectorstore

def load_vector_store(embedding_model, persist_directory="./vector_db"):
    """加載已有的向量數(shù)據(jù)庫(kù)"""
    vectorstore = Chroma(
        persist_directory=persist_directory,
        embedding_function=embedding_model
    )
    return vectorstore

7.2 向量數(shù)據(jù)庫(kù)選型對(duì)比

┌────────────┬──────────┬───────────┬──────────────────────┐
│  數(shù)據(jù)庫(kù)     │ 部署方式  │ 適合場(chǎng)景   │ 特點(diǎn)                  │
├────────────┼──────────┼───────────┼──────────────────────┤
│ Chroma     │ 本地     │ 開發(fā)/小項(xiàng)目 │ 輕量,Python 原生      │
│ FAISS      │ 本地     │ 高性能檢索 │ Meta 開源,速度快      │
│ Milvus     │ 分布式   │ 生產(chǎn)環(huán)境   │ 可擴(kuò)展,支持億級(jí)向量   │
│ Pinecone   │ 云服務(wù)   │ 免運(yùn)維     │ 全托管,按量付費(fèi)       │
│ Qdrant     │ 獨(dú)立部署  │ 中大型項(xiàng)目 │ Rust 編寫,性能優(yōu)秀    │
└────────────┴──────────┴───────────┴──────────────────────┘

八、Step 5 —— 語(yǔ)義檢索

8.1 基礎(chǔ)相似度檢索

def similarity_search(vectorstore, query: str, k: int = 4):
    """
    基礎(chǔ)語(yǔ)義檢索 —— 返回最相似的 k 個(gè)文本塊

    原理: 將 query 向量化 → 與數(shù)據(jù)庫(kù)中所有向量計(jì)算余弦相似度 → 返回 Top-K
    """
    results = vectorstore.similarity_search(
        query=query,
        k=k
    )
    for i, doc in enumerate(results, 1):
        print(f"\n--- 檢索結(jié)果 {i} ---")
        print(f"內(nèi)容: {doc.page_content[:200]}...")
        print(f"來(lái)源: {doc.metadata.get('source', '未知')}")
    return results

8.2 帶分?jǐn)?shù)的相似度檢索(MMR 多樣性檢索)

def mmr_search(vectorstore, query: str, k: int = 4, fetch_k: int = 20):
    """
    MMR(最大邊際相關(guān)性)檢索
    在保證相關(guān)性的同時(shí),盡量減少結(jié)果之間的冗余

    相比普通檢索:
    - 普通檢索可能返回內(nèi)容高度重復(fù)的多個(gè)結(jié)果
    - MMR 檢索能返回既相關(guān)又多樣化的結(jié)果
    """
    results = vectorstore.max_marginal_relevance_search(
        query=query,
        k=k,
        fetch_k=fetch_k
    )
    return results

8.3 檢索策略對(duì)比

# ===== 三種檢索方式對(duì)比 =====

# 1. 純相似度檢索 —— 最簡(jiǎn)單,可能冗余
docs1 = vectorstore.similarity_search("什么是深度學(xué)習(xí)?", k=4)

# 2. 相似度 + 分?jǐn)?shù) —— 可按閾值過(guò)濾
docs2 = vectorstore.similarity_search_with_relevance_scores(
    "什么是深度學(xué)習(xí)?", k=4
)
for doc, score in docs2:
    print(f"分?jǐn)?shù): {score:.4f} | {doc.page_content[:80]}")

# 3. MMR 檢索 —— 相關(guān)性 + 多樣性兼顧(推薦)
docs3 = vectorstore.max_marginal_relevance_search(
    "什么是深度學(xué)習(xí)?", k=4, fetch_k=20
)

九、Step 6 —— 拼接 Prompt 并調(diào)用 LLM 生成回答

9.1 構(gòu)建 RAG Prompt 模板

from langchain.prompts import ChatPromptTemplate

RAG_PROMPT_TEMPLATE = """你是一個(gè)專業(yè)的知識(shí)助手。請(qǐng)根據(jù)以下檢索到的參考資料來(lái)回答用戶的問(wèn)題。

要求:
- 只基于參考資料回答,不要編造信息
- 如果參考資料中沒有相關(guān)內(nèi)容,請(qǐng)誠(chéng)實(shí)說(shuō)明
- 回答要條理清晰,必要時(shí)使用列表或分點(diǎn)說(shuō)明

參考資料:
{context}

用戶問(wèn)題:{question}

請(qǐng)給出你的回答:"""

def build_rag_prompt(query: str, retrieved_docs: list) -> str:
    """將檢索到的文檔拼接為 context,構(gòu)建完整 Prompt"""
    context = "\n\n".join([
        f"[來(lái)源 {i+1}]: {doc.page_content}"
        for i, doc in enumerate(retrieved_docs)
    ])
    prompt = ChatPromptTemplate.from_template(RAG_PROMPT_TEMPLATE)
    return prompt.format(context=context, question=query)

9.2 調(diào)用 LLM 生成回答

from langchain_community.chat_models import ChatOpenAI

def generate_answer(query: str, retrieved_docs: list, llm=None):
    """調(diào)用 LLM 生成最終回答"""
    if llm is None:
        llm = ChatOpenAI(
            model="gpt-4o-mini",
            temperature=0,
            openai_api_key="your-api-key"
        )

    prompt = build_rag_prompt(query, retrieved_docs)
    response = llm.invoke(prompt)
    return response.content

十、完整 RAG 流程整合

"""
完整的 RAG 系統(tǒng) —— 從文檔到問(wèn)答
"""
from langchain_community.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOpenAI


class SimpleRAG:
    """一個(gè)簡(jiǎn)單但完整的 RAG 系統(tǒng)"""

    def __init__(self, docs_dir: str = "./data", db_dir: str = "./vector_db"):
        self.docs_dir = docs_dir
        self.db_dir = db_dir
        self.embedding_model = HuggingFaceEmbeddings(
            model_name="BAAI/bge-small-zh-v1.5",
            encode_kwargs={"normalize_embeddings": True}
        )
        self.vectorstore = None
        self.llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

    # ---------- 離線階段:構(gòu)建知識(shí)庫(kù) ----------

    def build_index(self):
        """Step 1~4: 加載文檔 → 分塊 → 嵌入 → 存入向量數(shù)據(jù)庫(kù)"""
        print("=" * 50)
        print("Step 1: 加載文檔...")
        loader = DirectoryLoader(self.docs_dir, glob="**/*.pdf", show_progress=True)
        documents = loader.load()
        print(f"  加載了 {len(documents)} 個(gè)文檔")

        print("Step 2: 文本分塊...")
        splitter = RecursiveCharacterTextSplitter(
            chunk_size=500, chunk_overlap=50,
            separators=["\n\n", "\n", "。", ".", " ", ""]
        )
        chunks = splitter.split_documents(documents)
        print(f"  切分為 {len(chunks)} 個(gè)文本塊")

        print("Step 3~4: 向量嵌入并存儲(chǔ)...")
        self.vectorstore = Chroma.from_documents(
            documents=chunks,
            embedding=self.embedding_model,
            persist_directory=self.db_dir
        )
        self.vectorstore.persist()
        print(f"  向量數(shù)據(jù)庫(kù)構(gòu)建完成!")
        print("=" * 50)

    def load_index(self):
        """加載已有的向量數(shù)據(jù)庫(kù)"""
        self.vectorstore = Chroma(
            persist_directory=self.db_dir,
            embedding_function=self.embedding_model
        )
        print("已加載向量數(shù)據(jù)庫(kù)")

    # ---------- 在線階段:檢索 + 生成 ----------

    def query(self, question: str, k: int = 4) -> str:
        """完整 RAG 問(wèn)答流程"""
        # Step 5: 語(yǔ)義檢索
        retrieved = self.vectorstore.max_marginal_relevance_search(
            query=question, k=k, fetch_k=k*5
        )

        # Step 6: 拼接 Prompt + LLM 生成
        context = "\n\n".join([
            f"[來(lái)源 {i+1}]: {doc.page_content}"
            for i, doc in enumerate(retrieved)
        ])

        prompt = f"""基于以下參考資料回答問(wèn)題。如果資料中沒有答案,請(qǐng)說(shuō)明。

參考資料:
{context}

問(wèn)題:{question}"""

        response = self.llm.invoke(prompt)
        return response.content


# ===== 使用示例 =====
if __name__ == "__main__":
    rag = SimpleRAG(docs_dir="./data", db_dir="./vector_db")

    # 首次運(yùn)行:構(gòu)建索引
    # rag.build_index()

    # 后續(xù)運(yùn)行:直接加載
    rag.load_index()

    # 提問(wèn)
    answer = rag.query("什么是深度學(xué)習(xí)?它有哪些主要應(yīng)用?")
    print(f"\n回答:\n{answer}")

十一、完整數(shù)據(jù)流圖

用戶提問(wèn): "什么是深度學(xué)習(xí)?"
         │
         ▼
┌──────────────────┐
│  Query Embedding  │  "什么是深度學(xué)習(xí)?" → [0.023, -0.045, 0.078, ...]
└────────┬─────────┘
         │
         ▼
┌──────────────────────────────────────────────┐
│              向量數(shù)據(jù)庫(kù) (Chroma)               │
│                                              │
│  Doc1: "深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的分支..."  → [0.02, -0.04, 0.08, ...]  ? 相似度 0.92
│  Doc2: "神經(jīng)網(wǎng)絡(luò)通過(guò)反向傳播..."      → [0.01, -0.03, 0.06, ...]  ? 相似度 0.87
│  Doc3: "CNN 在圖像識(shí)別中..."          → [0.03, -0.02, 0.05, ...]  ? 相似度 0.84
│  Doc4: "Python 是一種編程語(yǔ)言..."     → [0.01,  0.05, -0.02, ...] ? 相似度 0.31
│  ...                                         │
└──────────────────────────────────────────────┘
         │
         │  Top-K 檢索結(jié)果 (k=3)
         ▼
┌──────────────────────────────────────────┐
│            拼接 Prompt                    │
│                                          │
│  System: 你是一個(gè)知識(shí)助手...              │
│                                          │
│  Context:                                │
│    [來(lái)源1]: 深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的分支...    │
│    [來(lái)源2]: 神經(jīng)網(wǎng)絡(luò)通過(guò)反向傳播...        │
│    [來(lái)源3]: CNN 在圖像識(shí)別中...           │
│                                          │
│  Question: 什么是深度學(xué)習(xí)?               │
└────────────────┬─────────────────────────┘
                 │
                 ▼
┌────────────────────────┐
│     LLM (GPT-4o-mini)  │
└────────────────┬───────┘
                 │
                 ▼
┌────────────────────────────────────────────────────┐
│  回答:                                              │
│  深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)重要分支,基于人工神經(jīng)網(wǎng)絡(luò)...│
│  主要應(yīng)用包括:                                      │
│  1. 圖像識(shí)別(CNN)                                 │
│  2. 自然語(yǔ)言處理(Transformer)                     │
│  3. 語(yǔ)音識(shí)別 ...                                    │
└────────────────────────────────────────────────────┘

十二、進(jìn)階優(yōu)化方向

構(gòu)建完基礎(chǔ) RAG 后,可以從以下方向持續(xù)優(yōu)化:

┌─────────────────────────────────────────────────────┐
│                 RAG 優(yōu)化路線圖                        │
│                                                     │
│  基礎(chǔ) RAG ──? 優(yōu)化檢索 ──? 優(yōu)化生成 ──? 高級(jí)架構(gòu)    │
│                                                     │
│  ?? 文檔處理優(yōu)化                                     │
│  ├── 更智能的分塊策略(語(yǔ)義分塊)                      │
│  ├── 表格 / 圖片內(nèi)容提取                              │
│  └── OCR 處理掃描件                                  │
│                                                     │
│  ?? 檢索優(yōu)化                                         │
│  ├── 混合檢索(向量 + 關(guān)鍵詞 BM25)                   │
│  ├── 重排序(Reranker / Cross-Encoder)              │
│  ├── Query 改寫與擴(kuò)展                                │
│  └── 元數(shù)據(jù)過(guò)濾                                      │
│                                                     │
│  ?? 生成優(yōu)化                                         │
│  ├── 更好的 Prompt 工程                              │
│  ├── 引用溯源(標(biāo)注來(lái)源段落)                         │
│  └── 自適應(yīng)溫度參數(shù)                                  │
│                                                     │
│  ??? 高級(jí)架構(gòu)                                        │
│  ├── Agentic RAG(帶工具調(diào)用的智能體)                │
│  ├── Multi-modal RAG(圖文混合)                     │
│  ├── GraphRAG(知識(shí)圖譜增強(qiáng))                        │
│  └── 評(píng)估框架(RAGAS)                               │
└─────────────────────────────────────────────────────┘

12.1 混合檢索示例

from langchain.retrievers import BM25Retriever, EnsembleRetriever

def build_hybrid_retriever(chunks, vectorstore, k=4):
    """
    混合檢索 = 向量檢索(語(yǔ)義) + BM25檢索(關(guān)鍵詞)
    取長(zhǎng)補(bǔ)短,效果優(yōu)于單一檢索
    """
    # 關(guān)鍵詞檢索(BM25)
    bm25_retriever = BM25Retriever.from_documents(chunks)
    bm25_retriever.k = k

    # 語(yǔ)義檢索(向量)
    vector_retriever = vectorstore.as_retriever(
        search_kwargs={"k": k}
    )

    # 混合檢索器(各占 50% 權(quán)重)
    ensemble_retriever = EnsembleRetriever(
        retrievers=[bm25_retriever, vector_retriever],
        weights=[0.5, 0.5]
    )
    return ensemble_retriever

12.2 檢索結(jié)果重排序

from sentence_transformers import CrossEncoder

def rerank_results(query: str, documents: list, top_k: int = 4) -> list:
    """
    使用 Cross-Encoder 對(duì)檢索結(jié)果重排序
    Cross-Encoder 比 Bi-Encoder 更精確,但速度較慢
    適合對(duì) Top-K 候選做精排
    """
    reranker = CrossEncoder("BAAI/bge-reranker-base")

    pairs = [[query, doc.page_content] for doc in documents]
    scores = reranker.predict(pairs)

    # 按分?jǐn)?shù)降序排列
    ranked = sorted(
        zip(documents, scores),
        key=lambda x: x[1],
        reverse=True
    )
    return [doc for doc, score in ranked[:top_k]]

十三、總結(jié)

本文完整實(shí)現(xiàn)了一個(gè) RAG 系統(tǒng),核心流程回顧:

?? 文檔加載 → ?? 文本分塊 → ?? 向量嵌入 → ?? 存入向量庫(kù)
                                              │
?? 用戶提問(wèn) → ?? 語(yǔ)義檢索 → ?? 拼接Prompt → ?? LLM生成回答

關(guān)鍵要點(diǎn):

  • 分塊質(zhì)量決定檢索上限 —— 注意 chunk_size 和 overlap 的調(diào)參
  • Embedding 模型決定語(yǔ)義理解質(zhì)量 —— 中文場(chǎng)景推薦 bge 系列
  • 檢索策略影響召回率 —— 推薦混合檢索 + 重排序
  • Prompt 工程影響最終輸出質(zhì)量 —— 明確指令,約束幻覺

到此這篇關(guān)于從零帶你使用Python實(shí)現(xiàn)RAG(檢索增強(qiáng)生成)系統(tǒng)的文章就介紹到這了,更多相關(guān)Python RAG語(yǔ)義檢索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • APIStar:一個(gè)專為Python3設(shè)計(jì)的API框架

    APIStar:一個(gè)專為Python3設(shè)計(jì)的API框架

    今天小編就為大家分享一篇關(guān)于一個(gè)專為Python3設(shè)計(jì)的API框架:APIStar,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-09-09
  • Pyqt5?Designer構(gòu)建桌面應(yīng)用設(shè)計(jì)及實(shí)現(xiàn)代碼

    Pyqt5?Designer構(gòu)建桌面應(yīng)用設(shè)計(jì)及實(shí)現(xiàn)代碼

    這篇文章主要為大家介紹了Pyqt5?Designer構(gòu)建桌面應(yīng)用設(shè)計(jì)及實(shí)現(xiàn)代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Pytorch框架之one_hot編碼函數(shù)解讀

    Pytorch框架之one_hot編碼函數(shù)解讀

    這篇文章主要介紹了Pytorch框架之one_hot編碼函數(shù)解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python自動(dòng)化辦公之定時(shí)發(fā)送郵件的實(shí)現(xiàn)

    Python自動(dòng)化辦公之定時(shí)發(fā)送郵件的實(shí)現(xiàn)

    python中的schedule模塊可以使我們方便簡(jiǎn)單的使用定時(shí)任務(wù),即在特定的時(shí)間自動(dòng)的執(zhí)行一些任務(wù)的功能,本文將用這一模塊實(shí)現(xiàn)郵件自動(dòng)發(fā)送,需要的可以參考一下
    2022-05-05
  • Django中使用極驗(yàn)Geetest滑動(dòng)驗(yàn)證碼過(guò)程解析

    Django中使用極驗(yàn)Geetest滑動(dòng)驗(yàn)證碼過(guò)程解析

    這篇文章主要介紹了Django中使用極驗(yàn)Geetest滑動(dòng)驗(yàn)證碼過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Windows下安裝Scrapy

    Windows下安裝Scrapy

    今天小編就為大家分享一篇關(guān)于Windows下安裝Scrapy,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • Python零基礎(chǔ)入門學(xué)習(xí)之輸入與輸出

    Python零基礎(chǔ)入門學(xué)習(xí)之輸入與輸出

    在之前的編程中,我們的信息打印,數(shù)據(jù)的展示都是在控制臺(tái)(命令行)直接輸出的,信息都是一次性的沒有辦法復(fù)用和保存以便下次查看,今天我們將學(xué)習(xí)Python的輸入輸出,解決以上問(wèn)題
    2019-04-04
  • Python讀取大型數(shù)據(jù)文件的6種方式匯總

    Python讀取大型數(shù)據(jù)文件的6種方式匯總

    在 Python 中,我們可以使用多種方法讀取大型數(shù)據(jù)文件,本文主要為大家介紹6個(gè)常用的Python讀取大型數(shù)據(jù)文件的方法,希望對(duì)大家有所幫助
    2023-05-05
  • SecureCRTSecure7.0查看連接密碼的步驟

    SecureCRTSecure7.0查看連接密碼的步驟

    SecureCRTSecure7密碼查看的方法大概可以分為兩個(gè)步驟,第一步需要查看系統(tǒng)保存的連接的ini文件,第二步破解加密之后的密碼,具體腳本請(qǐng)參考下本文
    2021-06-06
  • Python opencv相機(jī)標(biāo)定實(shí)現(xiàn)原理及步驟詳解

    Python opencv相機(jī)標(biāo)定實(shí)現(xiàn)原理及步驟詳解

    這篇文章主要介紹了Python opencv相機(jī)標(biāo)定實(shí)現(xiàn)原理及步驟詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論

阿克陶县| 广元市| 平和县| 铅山县| 简阳市| 揭阳市| 太仆寺旗| 蕉岭县| 连云港市| 瓦房店市| 厦门市| 枣庄市| 宜昌市| 顺平县| 铁岭县| 乌兰察布市| 乐山市| 浦东新区| 尚义县| 桐城市| 静乐县| 丰顺县| 红桥区| 山西省| 木里| 舟曲县| 汪清县| 亚东县| 城口县| 宜城市| 施秉县| 云安县| 台南县| 辰溪县| 阳东县| 邵东县| 永修县| 中宁县| 松滋市| 苏尼特左旗| 阳泉市|