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

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

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

一、什么是 RAG?

RAG 的核心思想:讓大語言模型(LLM)在回答問題時,先從外部知識庫中檢索相關內容,再基于檢索結果生成回答。 這有效解決了 LLM 的幻覺問題和知識時效性問題。

RAG vs 純 LLM 對比

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

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

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

三、環(huán)境準備

3.1 安裝依賴

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

3.2 項目結構

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

四、Step 1 —— 文檔加載

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

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)} 頁")
    return pages

# 每個Document對象包含:
# - page_content: 文本內容
# - metadata: 元數(shù)據(jù)(頁碼、來源等)

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)} 個文檔")
    return documents

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

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

5.1 為什么需要分塊

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

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)} 個文本塊")
    return chunks

5.3 分塊策略選擇指南

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

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

將文本塊轉換為高維向量,使其可被計算機進行相似度計算。

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

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

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

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

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 —— 構建向量數(shù)據(jù)庫

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

from langchain_community.vectorstores import Chroma

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

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

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

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

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

八、Step 5 —— 語義檢索

8.1 基礎相似度檢索

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

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

8.2 帶分數(shù)的相似度檢索(MMR 多樣性檢索)

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

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

8.3 檢索策略對比

# ===== 三種檢索方式對比 =====

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

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

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

九、Step 6 —— 拼接 Prompt 并調用 LLM 生成回答

9.1 構建 RAG Prompt 模板

from langchain.prompts import ChatPromptTemplate

RAG_PROMPT_TEMPLATE = """你是一個專業(yè)的知識助手。請根據(jù)以下檢索到的參考資料來回答用戶的問題。

要求:
- 只基于參考資料回答,不要編造信息
- 如果參考資料中沒有相關內容,請誠實說明
- 回答要條理清晰,必要時使用列表或分點說明

參考資料:
{context}

用戶問題:{question}

請給出你的回答:"""

def build_rag_prompt(query: str, retrieved_docs: list) -> str:
    """將檢索到的文檔拼接為 context,構建完整 Prompt"""
    context = "\n\n".join([
        f"[來源 {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 調用 LLM 生成回答

from langchain_community.chat_models import ChatOpenAI

def generate_answer(query: str, retrieved_docs: list, llm=None):
    """調用 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) —— 從文檔到問答
"""
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:
    """一個簡單但完整的 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)

    # ---------- 離線階段:構建知識庫 ----------

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

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

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

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

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

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

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

        prompt = f"""基于以下參考資料回答問題。如果資料中沒有答案,請說明。

參考資料:
{context}

問題:{question}"""

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


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

    # 首次運行:構建索引
    # rag.build_index()

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

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

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

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

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

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

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

12.1 混合檢索示例

from langchain.retrievers import BM25Retriever, EnsembleRetriever

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

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

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

12.2 檢索結果重排序

from sentence_transformers import CrossEncoder

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

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

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

十三、總結

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

?? 文檔加載 → ?? 文本分塊 → ?? 向量嵌入 → ?? 存入向量庫
                                              │
?? 用戶提問 → ?? 語義檢索 → ?? 拼接Prompt → ?? LLM生成回答

關鍵要點:

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

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

相關文章

  • APIStar:一個專為Python3設計的API框架

    APIStar:一個專為Python3設計的API框架

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

    Pyqt5?Designer構建桌面應用設計及實現(xiàn)代碼

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

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

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

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

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

    Django中使用極驗Geetest滑動驗證碼過程解析

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

    Windows下安裝Scrapy

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

    Python零基礎入門學習之輸入與輸出

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

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

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

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

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

    Python opencv相機標定實現(xiàn)原理及步驟詳解

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

最新評論

新竹市| 龙陵县| 吕梁市| 沈阳市| 贡山| 南通市| 盐源县| 英山县| 安平县| 华安县| 钦州市| 屏山县| 康马县| 铁岭县| 荔波县| 嵩明县| 永安市| 广东省| 平罗县| 忻州市| 辛集市| 巧家县| 苍山县| 兴和县| 江孜县| 武鸣县| 克山县| 永清县| 基隆市| 郸城县| 崇文区| 泸州市| 涞源县| 吉安市| 临海市| 克东县| 偃师市| 伊宁市| 理塘县| 读书| 南召县|