戰(zhàn))
在實(shí)際的向量數(shù)據(jù)庫和檢索增強(qiáng)生成RAG應(yīng)用開發(fā)中我們經(jīng)常需要處理非結(jié)構(gòu)化的文本數(shù)據(jù)例如演唱會記錄、新聞文章或技術(shù)文檔并將它們轉(zhuǎn)化為機(jī)器可理解的向量表示。這個過程的核心在于如何將一段文本如“金圣圭 2026 演唱會”通過嵌入模型Embedding Model轉(zhuǎn)換為高維空間中的一個點(diǎn)即向量并利用向量數(shù)據(jù)庫進(jìn)行高效的相似性檢索。本文將以一個虛構(gòu)的演唱會記錄場景為例深入講解從文本到向量Text-to-Vector的完整工程化流程涵蓋本地環(huán)境搭建、嵌入模型選擇與調(diào)用、向量化實(shí)踐、以及最終通過向量數(shù)據(jù)庫完成語義檢索的全過程。無論你是希望為內(nèi)容平臺構(gòu)建智能搜索還是為自己的知識庫添加語義理解能力這套方法都能提供清晰的路徑。本文假設(shè)你已具備基本的 Python 編程知識并對機(jī)器學(xué)習(xí)概念有初步了解。我們將使用 Sentence Transformers 作為本地嵌入模型Chroma 作為輕量級向量數(shù)據(jù)庫通過一個具體的“演唱會信息管理”案例展示如何將文本描述轉(zhuǎn)化為向量并實(shí)現(xiàn)基于語義的相似內(nèi)容查找。1. 理解文本向量化的核心嵌入模型與向量數(shù)據(jù)庫在開始寫代碼之前必須理清幾個核心概念否則后續(xù)的配置和調(diào)試會困難重重。1.1 什么是文本嵌入文本嵌入Text Embedding是將一段文本一個詞、一句話或一個段落映射為一個固定長度的數(shù)值向量的過程。這個向量捕獲了文本的語義信息。語義相似的文本其向量在空間中的距離通常用余弦相似度衡量也更近。例如“金圣圭在釜山舉辦演唱會”“歌手金圣圭在釜山進(jìn)行現(xiàn)場演出” 這兩句話表述不同但語義高度相似它們的向量表示在向量空間中的夾角會很小余弦相似度接近 1。1.2 為什么需要向量數(shù)據(jù)庫傳統(tǒng)數(shù)據(jù)庫如 MySQL擅長基于關(guān)鍵詞的精確匹配WHERE title ‘xxx’但無法理解語義。向量數(shù)據(jù)庫專門為存儲和檢索高維向量而設(shè)計核心能力是近似最近鄰搜索。給定一個查詢向量它能快速從海量向量中找到最相似的 Top K 個結(jié)果。工作流程可以概括為預(yù)處理收集原始文本如演唱會標(biāo)題、描述。向量化使用嵌入模型將文本轉(zhuǎn)化為向量。存儲將(文本, 向量, 元數(shù)據(jù))存入向量數(shù)據(jù)庫。檢索將查詢問題向量化在數(shù)據(jù)庫中搜索相似向量返回對應(yīng)的原始文本。1.3 技術(shù)選型Sentence Transformers 與 Chroma對于本地開發(fā)和中小型項(xiàng)目我們選擇以下組合嵌入模型Sentence Transformers。它是一個基于 PyTorch 的框架封裝了各種預(yù)訓(xùn)練的 Transformer 模型如 BERT, RoBERTa專門用于生成句子和段落級別的嵌入。它模型豐富調(diào)用簡單無需GPU也能運(yùn)行速度較慢。向量數(shù)據(jù)庫Chroma。一個輕量級、開源、嵌入優(yōu)先的向量數(shù)據(jù)庫API 簡單支持持久化非常適合入門和原型開發(fā)。下表對比了學(xué)習(xí)環(huán)境與生產(chǎn)環(huán)境可能的不同選型考慮組件學(xué)習(xí)/開發(fā)環(huán)境選型生產(chǎn)環(huán)境考慮嵌入模型Sentence Transformers (本地 CPU)可能需專用GPU服務(wù)器、使用模型API如OpenAI text-embedding-ada-002或部署優(yōu)化后的ONNX模型向量數(shù)據(jù)庫Chroma (本地持久化)考慮規(guī)模、并發(fā)、高可用可能選用 Pinecone, Weaviate, Qdrant 或 Milvus 集群運(yùn)行環(huán)境本地Python環(huán)境Docker容器化Kubernetes編排配置資源限制與健康檢查2. 環(huán)境準(zhǔn)備與項(xiàng)目初始化我們將創(chuàng)建一個獨(dú)立的 Python 項(xiàng)目來管理所有代碼和依賴這是避免環(huán)境沖突的最佳實(shí)踐。2.1 創(chuàng)建項(xiàng)目目錄與虛擬環(huán)境打開終端執(zhí)行以下命令# 創(chuàng)建項(xiàng)目目錄 mkdir concert_vector_search cd concert_vector_search # 創(chuàng)建Python虛擬環(huán)境推薦使用Python 3.8 python -m venv venv # 激活虛擬環(huán)境 # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate激活后終端提示符前應(yīng)顯示(venv)表示你已在虛擬環(huán)境中。2.2 安裝核心依賴在項(xiàng)目根目錄下創(chuàng)建requirements.txt文件并填入以下內(nèi)容sentence-transformers2.2.2 chromadb0.4.22 langchain0.1.0 # 可選用于簡化流程本文會部分使用 pandas2.0.3 # 可選用于數(shù)據(jù)處理然后安裝它們pip install -r requirements.txt注意sentence-transformers和chromadb的版本較新API 可能發(fā)生變化。如果遇到問題可以嘗試指定稍舊的穩(wěn)定版本或查閱其官方文檔。2.3 準(zhǔn)備示例數(shù)據(jù)為了模擬“金圣圭 x [RECAP] 2026 KIMSUNGKYU LIVE [LV4: LEAP TO VECTOR] Final in Busan”這樣的場景我們創(chuàng)建一個data.py文件來生成一些虛構(gòu)的演唱會數(shù)據(jù)。在實(shí)際項(xiàng)目中這部分?jǐn)?shù)據(jù)可能來自數(shù)據(jù)庫、CSV文件或API。# data.py concerts_data [ { id: 1, title: 金圣圭 2026 演唱會 ‘LV4: LEAP TO VECTOR’ 釜山終場, description: 這是金圣圭2026年個人巡演的最終場在釜山舉行主題為LV4寓意向向量飛躍。演唱會包含多首個人代表作和特別舞臺。, artist: 金圣圭, city: Busan, year: 2026 }, { id: 2, title: 金圣圭 2025 首爾演唱會 ‘LV3: MOMENT’, description: 金圣圭2025年在首爾舉辦的個人演唱會主題為LV3聚焦于重要時刻。, artist: 金圣圭, city: Seoul, year: 2025 }, { id: 3, title: 2024 無限組合INFINITE團(tuán)體演唱會 ‘那年夏天’, description: 無限組合全體成員參與的懷舊主題演唱會重溫經(jīng)典夏日曲目。, artist: INFINITE, city: Incheon, year: 2024 }, { id: 4, title: 歌手A 2026 釜山音樂節(jié)特別演出, description: 歌手A作為特邀嘉賓在釜山國際音樂節(jié)上的表演。, artist: 歌手A, city: Busan, year: 2026 }, { id: 5, title: 金圣圭 粉絲見面會 ‘Beyond the Stage’ 東京場, description: 金圣圭在日本東京舉辦的親密粉絲見面會包含談話、游戲和迷你Live。, artist: 金圣圭, city: Tokyo, year: 2025 } ]3. 構(gòu)建文本向量化與存儲管道接下來我們將實(shí)現(xiàn)核心流程加載模型、生成向量、創(chuàng)建向量數(shù)據(jù)庫集合并存入數(shù)據(jù)。3.1 初始化嵌入模型與Chroma客戶端創(chuàng)建一個名為build_vector_db.py的腳本。首先導(dǎo)入必要的庫并初始化關(guān)鍵組件。# build_vector_db.py import chromadb from chromadb.config import Settings from sentence_transformers import SentenceTransformer import pandas as pd from data import concerts_data # 導(dǎo)入剛才準(zhǔn)備的數(shù)據(jù) import uuid import os # 1. 初始化嵌入模型 # 我們選用 all-MiniLM-L6-v2 模型它是一個在速度和效果間取得平衡的輕量級模型生成384維的向量。 print(正在加載嵌入模型...) embed_model SentenceTransformer(all-MiniLM-L6-v2) print(模型加載完畢。) # 2. 初始化Chroma客戶端并設(shè)置持久化目錄 # persist_directory 指定數(shù)據(jù)庫文件存儲的位置 persist_directory ./chroma_db chroma_client chromadb.PersistentClient(pathpersist_directory) # 3. 創(chuàng)建一個集合Collection類似于數(shù)據(jù)庫中的表 # 如果集合已存在get_or_create_collection 會獲取它否則創(chuàng)建新的。 collection_name concerts_collection collection chroma_client.get_or_create_collection( namecollection_name, metadata{hnsw:space: cosine} # 使用余弦相似度作為距離度量 ) print(f集合 {collection_name} 準(zhǔn)備就緒。)關(guān)鍵解釋all-MiniLM-L6-v2這是一個非常流行的句子嵌入模型由 SBERT 訓(xùn)練在通用語義相似度任務(wù)上表現(xiàn)良好且模型尺寸小適合本地CPU運(yùn)行。首次運(yùn)行時會自動從 Hugging Face 下載模型。PersistentClient將數(shù)據(jù)持久化到本地磁盤下次啟動程序時數(shù)據(jù)依然存在。hnsw:space: “cosine”指定使用余弦相似度進(jìn)行向量比較。這是文本相似度搜索中最常用的度量方式。3.2 準(zhǔn)備數(shù)據(jù)并生成向量我們需要將每場演唱會的“文本信息”組合成一個字符串用于生成向量。通常我們會將標(biāo)題、描述、藝術(shù)家等字段拼接起來。# build_vector_db.py (續(xù)) # 4. 準(zhǔn)備數(shù)據(jù) documents [] metadatas [] ids [] for item in concerts_data: # 將相關(guān)字段組合成一段文本用于編碼 text_to_embed fTitle: {item[title]}. Description: {item[description]}. Artist: {item[artist]}. City: {item[city]}. documents.append(text_to_embed) # 元數(shù)據(jù)存儲原始字段便于后續(xù)過濾和展示 metadata { title: item[title], artist: item[artist], city: item[city], year: item[year], source_id: item[id] } metadatas.append(metadata) # 為每個文檔生成唯一ID ids.append(str(uuid.uuid4())) # 5. 使用嵌入模型批量生成向量 print(正在為文檔生成向量...) embeddings embed_model.encode(documents).tolist() # 轉(zhuǎn)換為list of lists print(f已為 {len(embeddings)} 個文檔生成向量維度{len(embeddings[0])}。)關(guān)鍵解釋text_to_embed構(gòu)造用于生成向量的文本。這里采用了一種簡單的模板化拼接。在實(shí)際應(yīng)用中你可能需要根據(jù)數(shù)據(jù)特點(diǎn)調(diào)整拼接策略或?qū)ξ谋具M(jìn)行清洗如去除停用詞、標(biāo)準(zhǔn)化。embed_model.encode()這是核心方法接收一個字符串列表返回一個 numpy 數(shù)組的列表每個數(shù)組就是一個文本的向量。.tolist()將其轉(zhuǎn)換為 Chroma 接受的 Python 列表格式。元數(shù)據(jù)Metadata向量數(shù)據(jù)庫不僅存儲向量和原始文本還可以存儲額外的結(jié)構(gòu)化數(shù)據(jù)如年份、城市。這在后續(xù)的混合搜索中非常有用可以先按元數(shù)據(jù)過濾再在子集中進(jìn)行向量搜索。3.3 將數(shù)據(jù)存入向量數(shù)據(jù)庫現(xiàn)在我們將向量、文本、元數(shù)據(jù)和ID一起添加到 Chroma 集合中。# build_vector_db.py (續(xù)) # 6. 將數(shù)據(jù)添加到集合中 print(正在將數(shù)據(jù)添加到向量數(shù)據(jù)庫...) collection.add( embeddingsembeddings, documentsdocuments, # 存儲原始拼接文本 metadatasmetadatas, # 存儲結(jié)構(gòu)化元數(shù)據(jù) idsids ) print(f成功將 {len(ids)} 條記錄存入向量數(shù)據(jù)庫持久化路徑{os.path.abspath(persist_directory)})運(yùn)行這個腳本python build_vector_db.py如果一切順利你將在項(xiàng)目根目錄下看到一個名為chroma_db的文件夾里面存儲了所有的向量和索引數(shù)據(jù)。4. 實(shí)現(xiàn)語義搜索與查詢數(shù)據(jù)庫構(gòu)建完成后我們來編寫查詢腳本。創(chuàng)建一個query_vector_db.py文件。4.1 基礎(chǔ)語義查詢最基本的查詢是給定一個自然語言問題找到語義上最相似的演唱會記錄。# query_vector_db.py import chromadb from sentence_transformers import SentenceTransformer # 初始化使用與構(gòu)建時相同的模型和持久化路徑 embed_model SentenceTransformer(all-MiniLM-L6-v2) chroma_client chromadb.PersistentClient(path./chroma_db) collection chroma_client.get_collection(nameconcerts_collection) def simple_semantic_search(query_text, n_results3): 執(zhí)行簡單的語義搜索 :param query_text: 查詢字符串 :param n_results: 返回的結(jié)果數(shù)量 print(f\n查詢{query_text}) # 1. 將查詢文本向量化 query_embedding embed_model.encode(query_text).tolist() # 2. 查詢向量數(shù)據(jù)庫 results collection.query( query_embeddings[query_embedding], n_resultsn_results, include[documents, metadatas, distances] # 指定返回的內(nèi)容 ) # 3. 打印結(jié)果 if results[documents]: for i, (doc, meta, dist) in enumerate(zip(results[documents][0], results[metadatas][0], results[distances][0])): # 距離越小相似度越高。余弦相似度 1 - 距離 similarity_score 1 - dist print(f\n--- 結(jié)果 {i1} (相似度: {similarity_score:.4f}) ---) print(f標(biāo)題{meta[title]}) print(f藝術(shù)家{meta[artist]}) print(f城市/年份{meta[city]} / {meta[year]}) # print(f原始文檔{doc}) # 調(diào)試時可查看 else: print(未找到相關(guān)結(jié)果。) # 測試幾個查詢 if __name__ __main__: # 查詢1尋找金圣圭在釜山的活動 simple_semantic_search(金圣圭 釜山 演唱會) # 查詢2尋找2026年的演唱會 simple_semantic_search(2026年的音樂演出) # 查詢3一個更泛化的查詢 simple_semantic_search(韓國歌手的現(xiàn)場表演)運(yùn)行此腳本python query_vector_db.py你應(yīng)該能看到類似以下的輸出查詢金圣圭 釜山 演唱會 --- 結(jié)果 1 (相似度: 0.8321) --- 標(biāo)題金圣圭 2026 演唱會 ‘LV4: LEAP TO VECTOR’ 釜山終場 藝術(shù)家金圣圭 城市/年份Busan / 2026 --- 結(jié)果 2 (相似度: 0.6154) --- 標(biāo)題歌手A 2026 釜山音樂節(jié)特別演出 藝術(shù)家歌手A 城市/年份Busan / 2026 --- 結(jié)果 3 (相似度: 0.6012) --- 標(biāo)題金圣圭 2025 首爾演唱會 ‘LV3: MOMENT’ 藝術(shù)家金圣圭 城市/年份Seoul / 2025結(jié)果分析結(jié)果1 準(zhǔn)確匹配了“金圣圭”、“釜山”、“演唱會”所有關(guān)鍵詞相似度最高。結(jié)果2 匹配了“釜山”和“2026”雖然藝術(shù)家不同但語義上仍有部分關(guān)聯(lián)。結(jié)果3 匹配了“金圣圭”和“演唱會”但城市不匹配因此排名第三。 這證明了向量搜索是基于語義的而非單純的關(guān)鍵詞匹配。4.2 進(jìn)階帶過濾條件的混合搜索在實(shí)際應(yīng)用中我們經(jīng)常需要在特定范圍內(nèi)進(jìn)行搜索。例如“找出金圣圭在2025年之后舉辦的所有活動”。這需要結(jié)合元數(shù)據(jù)過濾和向量搜索。# query_vector_db.py (續(xù)) def hybrid_search_with_filter(query_text, filter_dictNone, n_results3): 帶元數(shù)據(jù)過濾的混合搜索 :param query_text: 查詢字符串 :param filter_dict: Chroma過濾字典例如 {artist: {$eq: 金圣圭}, year: {$gte: 2025}} :param n_results: 返回的結(jié)果數(shù)量 print(f\n混合查詢{query_text}) print(f過濾條件{filter_dict}) query_embedding embed_model.encode(query_text).tolist() results collection.query( query_embeddings[query_embedding], n_resultsn_results, wherefilter_dict, # 應(yīng)用元數(shù)據(jù)過濾 include[documents, metadatas, distances] ) # ... 結(jié)果打印邏輯與 simple_semantic_search 相同 ... if results[documents]: for i, (doc, meta, dist) in enumerate(zip(results[documents][0], results[metadatas][0], results[distances][0])): similarity_score 1 - dist print(f\n--- 結(jié)果 {i1} (相似度: {similarity_score:.4f}) ---) print(f標(biāo)題{meta[title]}) print(f藝術(shù)家{meta[artist]}) print(f城市/年份{meta[city]} / {meta[year]}) else: print(未找到符合過濾條件的結(jié)果。) if __name__ __main__: # ... 之前的測試 ... # 混合搜索示例查找金圣圭2025年及以后的活動 print(\n *50) hybrid_search_with_filter( query_text演唱會, filter_dict{artist: {$eq: 金圣圭}, year: {$gte: 2025}} )Chroma 的過濾語法類似 MongoDB。常用操作符包括$eq: 等于$ne: 不等于$gt,$gte: 大于大于等于$lt,$lte: 小于小于等于$in,$nin: 在列表中不在列表中5. 常見問題、排查與優(yōu)化實(shí)踐在實(shí)際操作中你可能會遇到以下問題。這里提供排查思路和解決方案。5.1 模型下載失敗或速度慢現(xiàn)象運(yùn)行腳本時卡在loading sentence transformer model或報網(wǎng)絡(luò)錯誤。原因Sentence Transformers 默認(rèn)從 Hugging Face 下載模型國內(nèi)網(wǎng)絡(luò)可能不穩(wěn)定。解決方案使用鏡像源設(shè)置環(huán)境變量。# Linux/Mac export HF_ENDPOINThttps://hf-mirror.com # Windows (PowerShell) $env:HF_ENDPOINThttps://hf-mirror.com然后在原終端中重新運(yùn)行腳本。手動下載前往 Hugging Face 網(wǎng)站或鏡像站搜索模型如sentence-transformers/all-MiniLM-L6-v2下載所有文件到本地目錄./local_models/all-MiniLM-L6-v2然后加載時指定路徑embed_model SentenceTransformer(‘./local_models/all-MiniLM-L6-v2’)5.2 Chroma 集合已存在或版本沖突現(xiàn)象Client has already created a collection with name ‘xxx‘或Collection ‘xxx‘ already exists。原因重復(fù)運(yùn)行g(shù)et_or_create_collection或舊版本數(shù)據(jù)庫不兼容。解決方案刪除重建開發(fā)環(huán)境直接刪除./chroma_db文件夾重新運(yùn)行構(gòu)建腳本。編程式處理在構(gòu)建腳本中先檢查后刪除。try: chroma_client.delete_collection(namecollection_name) print(f“已刪除舊集合: {collection_name}“) except ValueError: print(f“集合 {collection_name} 不存在將創(chuàng)建新集合?!? collection chroma_client.get_or_create_collection(...)5.3 查詢結(jié)果不相關(guān)或質(zhì)量差現(xiàn)象輸入的查詢語句明明很相關(guān)但返回的結(jié)果相似度很低或完全無關(guān)。原因與排查嵌入模型不匹配all-MiniLM-L6-v2是通用英文模型對中文支持尚可但非最優(yōu)。如果主要處理中文應(yīng)選用針對中文優(yōu)化的模型如paraphrase-multilingual-MiniLM-L12-v2或text2vec系列中文模型。檢查嘗試用英文查詢看結(jié)果是否改善。解決更換模型。例如embed_model SentenceTransformer(‘paraphrase-multilingual-MiniLM-L12-v2’)注意更換模型后必須重新構(gòu)建向量數(shù)據(jù)庫因?yàn)椴煌P蜕傻南蛄靠臻g不同。文本預(yù)處理不當(dāng)用于生成向量的文本text_to_embed質(zhì)量差。檢查打印出documents列表看拼接后的文本是否清晰、包含關(guān)鍵信息。解決優(yōu)化文本拼接策略。例如給不同字段賦予不同權(quán)重或只選擇最重要的字段。數(shù)據(jù)量太少向量搜索在數(shù)據(jù)量較大時優(yōu)勢更明顯。只有幾條數(shù)據(jù)時語義區(qū)分度可能不夠。解決增加更多樣化的數(shù)據(jù)。5.4 性能問題現(xiàn)象生成向量或查詢速度很慢。原因與優(yōu)化CPU運(yùn)行Sentence Transformers 在 CPU 上運(yùn)行較大模型時較慢。優(yōu)化如果擁有 NVIDIA GPU 并安裝了 CUDAPyTorch 通常會自動利用 GPU??梢源_認(rèn)import torch print(torch.cuda.is_available()) # 輸出 True 則表示可用批量處理encode函數(shù)支持批量輸入一次性處理多條文本比循環(huán)調(diào)用更高效。確保像示例中一樣將文檔列表documents一次性傳入encode。Chroma 索引對于海量數(shù)據(jù)數(shù)十萬以上確保 Chroma 使用了合適的索引如 HNSW。示例中已默認(rèn)使用。6. 生產(chǎn)環(huán)境部署與最佳實(shí)踐將本地的原型系統(tǒng)部署到生產(chǎn)環(huán)境需要考慮更多因素。以下是一份檢查清單方面學(xué)習(xí)/開發(fā)環(huán)境做法生產(chǎn)環(huán)境建議模型管理本地直接加載將模型文件放入鏡像或?qū)ο蟠鎯紤]使用模型服務(wù)如Triton進(jìn)行API化部署評估商用嵌入API的成本與效果。向量數(shù)據(jù)庫Chroma 單機(jī)持久化評估規(guī)模- 小規(guī)模/起步Chroma 服務(wù)化模式。- 中大規(guī)模部署專業(yè)的向量數(shù)據(jù)庫集群如 Qdrant, Weaviate。- 云服務(wù)直接使用 Pinecone 等托管服務(wù)。數(shù)據(jù)管道一次性腳本構(gòu)建可重跑、冪等的數(shù)據(jù)管道。處理增量更新定期將新數(shù)據(jù)向量化并upsert到數(shù)據(jù)庫。記錄數(shù)據(jù)版本。服務(wù)封裝直接運(yùn)行Python腳本將搜索功能封裝為 RESTful API使用 FastAPI/Flask或 gRPC 服務(wù)。添加身份認(rèn)證、限流、監(jiān)控。監(jiān)控與日志print語句集成結(jié)構(gòu)化日志如 JSON 格式記錄查詢詞、返回結(jié)果數(shù)、耗時、模型版本。監(jiān)控服務(wù)健康度、QPS 和延遲。錯誤處理簡單異常捕獲對模型調(diào)用、數(shù)據(jù)庫查詢做健壯的異常處理、重試和降級策略如查詢失敗時退回關(guān)鍵詞匹配。版本控制無對嵌入模型、向量數(shù)據(jù)庫 schema、數(shù)據(jù)管道代碼進(jìn)行版本控制。確保能回滾。一個關(guān)鍵的實(shí)踐向量歸一化為了更準(zhǔn)確地進(jìn)行余弦相似度計算最好在存儲和查詢前對向量進(jìn)行 L2 歸一化。Sentence Transformers 的encode方法默認(rèn)可能不歸一化。你可以# 構(gòu)建時 embeddings embed_model.encode(documents, normalize_embeddingsTrue).tolist() # 查詢時 query_embedding embed_model.encode(query_text, normalize_embeddingsTrue).tolist()Chroma 使用cosine距離時內(nèi)部可能會處理歸一化但顯式指定是一個好習(xí)慣。通過以上步驟我們完成了一個從文本到向量存儲與檢索的完整閉環(huán)。這個案例雖然以演唱會信息為背景但其技術(shù)框架可以無縫遷移到產(chǎn)品描述搜索、文檔知識庫、內(nèi)容推薦等眾多需要語義理解能力的場景。下一步你可以嘗試集成到真實(shí)的 Web 應(yīng)用中或者探索更復(fù)雜的 RAG 架構(gòu)將向量檢索與大語言模型結(jié)合構(gòu)建能夠回答深層問題的智能系統(tǒng)。