網(wǎng)站怎么添加廣告代碼鄭州競(jìng)價(jià)代運(yùn)營(yíng)公司
重磅推薦專欄:
《大模型AIGC》
《課程大綱》
《知識(shí)星球》
本專欄致力于探索和討論當(dāng)今最前沿的技術(shù)趨勢(shì)和應(yīng)用領(lǐng)域,包括但不限于ChatGPT和Stable Diffusion等。我們將深入研究大型模型的開發(fā)和應(yīng)用,以及與之相關(guān)的人工智能生成內(nèi)容(AIGC)技術(shù)。通過(guò)深入的技術(shù)解析和實(shí)踐經(jīng)驗(yàn)分享,旨在幫助讀者更好地理解和應(yīng)用這些領(lǐng)域的最新進(jìn)展
一、什么是 RAG Agent?
1. 從信息處理到智能生成
在自然語(yǔ)言處理領(lǐng)域,傳統(tǒng)問(wèn)答系統(tǒng)往往面臨兩大難題:如何突破模型知識(shí)邊界?如何保障回答的可信度?RAG(Retrieval-Augmented Generation)架構(gòu)應(yīng)運(yùn)而生。而當(dāng)我們以工程視角實(shí)現(xiàn)RAG時(shí),就需要一個(gè)標(biāo)準(zhǔn)化的載體——RAG Agent。
2. 代碼解構(gòu):RAG Agent的骨骼
觀察示例代碼中的RAGAgent
類,我們可以看到一個(gè)典型實(shí)現(xiàn):
class RAGAgent(BaseAgent):def retrieve(self, query: str, **kwargs) -> Tuple[List[RetrievalResult], int, dict]:# 檢索核心邏輯def query(self, query: str, **kwargs) -> Tuple[str, List[RetrievalResult], int]:# 端到端查詢流程
這個(gè)類繼承自BaseAgent
,體現(xiàn)了面向接口編程思想。兩個(gè)核心方法retrieve
和query
分別對(duì)應(yīng)RAG的兩大階段:
2.1 檢索階段(Retrieve)
? 輸入:自然語(yǔ)言查詢
? 處理:向量數(shù)據(jù)庫(kù)相似度檢索
? 輸出:RetrievalResult
列表(包含文檔片段、相似度分?jǐn)?shù)等)
# 示例返回結(jié)構(gòu)
[RetrievalResult(content="深度學(xué)習(xí)模型...", score=0.92),RetrievalResult(content="神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)...", score=0.88)
]
2.2 生成階段(Generate)
? 輸入:原始查詢 + 檢索結(jié)果
? 處理:LLM融合信息生成最終回答
? 輸出:自然語(yǔ)言回答 + 參考溯源
3. 技術(shù)實(shí)現(xiàn)的三重保障
1. 可觀測(cè)性設(shè)計(jì)
返回元組中的int
類型token計(jì)數(shù)器,為成本監(jiān)控提供基礎(chǔ):
def query(...) -> Tuple[str, List[RetrievalResult], int]:# 最后一個(gè)int即為token消耗總量
2. 擴(kuò)展性架構(gòu)
**kwargs
參數(shù)的設(shè)計(jì)允許靈活接入:
? 檢索參數(shù)控制(top_k、相似度閾值)
? 生成參數(shù)調(diào)節(jié)(temperature、max_length)
? 多路召回?cái)U(kuò)展
3. 類型安全
通過(guò)類型注解確保接口規(guī)范:
? List[RetrievalResult]
保證檢索結(jié)果結(jié)構(gòu)統(tǒng)一
? Tuple
明確約定返回順序
4. RAG Agent的獨(dú)特優(yōu)勢(shì)
對(duì)比傳統(tǒng)問(wèn)答系統(tǒng),該架構(gòu)具有顯著優(yōu)勢(shì):
維度 | 傳統(tǒng)問(wèn)答 | RAG Agent |
---|---|---|
知識(shí)邊界 | 依賴訓(xùn)練數(shù)據(jù) | 動(dòng)態(tài)擴(kuò)展 |
數(shù)據(jù)新鮮度 | 靜態(tài)知識(shí) | 實(shí)時(shí)更新 |
可解釋性 | 黑盒響應(yīng) | 溯源支持 |
維護(hù)成本 | 全量重訓(xùn) | 增量更新 |
5. 典型應(yīng)用場(chǎng)景
-
企業(yè)知識(shí)庫(kù)問(wèn)答
將內(nèi)部文檔庫(kù)作為檢索源,確?;卮鸱掀髽I(yè)規(guī)范 -
學(xué)術(shù)研究助手
連接論文數(shù)據(jù)庫(kù),生成帶文獻(xiàn)引用的綜述 -
智能客服系統(tǒng)
基于最新產(chǎn)品文檔生成準(zhǔn)確話術(shù)
二、揭秘Naive RAG:從代碼實(shí)例看檢索增強(qiáng)生成系統(tǒng)的核心架構(gòu)
1. 智能路由系統(tǒng):知識(shí)庫(kù)的"導(dǎo)航助手"
1.1 路由決策的核心代碼
當(dāng)我們向系統(tǒng)提問(wèn)"如何預(yù)防糖尿病并發(fā)癥"時(shí),路由模塊通過(guò)以下代碼實(shí)現(xiàn)知識(shí)庫(kù)選擇:
# 生成路由提示模板
prompt = """
"QUESTION": 如何預(yù)防糖尿病并發(fā)癥
"COLLECTION_INFO": [{"collection_name": "medical_encyclopedia", "description": "疾病百科全書"},{"collection_name": "drug_database", "description": "藥品說(shuō)明書庫(kù)"}
]
"""# 大模型返回的響應(yīng)示例
model_response = "['medical_encyclopedia']"# 解析模型響應(yīng)
selected_collections = literal_eval(model_response) # 得到['medical_encyclopedia']
1.2 路由異常處理機(jī)制
當(dāng)遇到未描述的知識(shí)庫(kù)時(shí),系統(tǒng)自動(dòng)將其納入檢索范圍:
# 處理無(wú)描述的知識(shí)庫(kù)
for collection in all_collections:if not collection.description:selected_collections.append(collection.name) # 自動(dòng)加入檢索列表# 包含默認(rèn)知識(shí)庫(kù)
if vector_db.default_collection:selected_collections.append("default_medical") # 確保基礎(chǔ)醫(yī)學(xué)庫(kù)被檢索
2. 智能檢索引擎:知識(shí)挖掘的"礦工"
2.1 分布式檢索實(shí)現(xiàn)
當(dāng)選擇3個(gè)知識(shí)庫(kù)且設(shè)置top_k=15時(shí),檢索分配邏輯如下:
top_k_per_collection = 15 // 3 = 5 # 每個(gè)庫(kù)檢索5條
results = []
for collection in selected_collections:res = vector_db.search(query_vector, top_k=5,filter="category=='糖尿病'")results.extend(res)
2.2 上下文擴(kuò)展技術(shù)
原始檢索結(jié)果與擴(kuò)展后對(duì)比:
# 原始文本片段
原始結(jié)果: "血糖監(jiān)測(cè)是糖尿病管理的基礎(chǔ)"# 擴(kuò)展后文本
{"text": "血糖監(jiān)測(cè)是糖尿病管理的基礎(chǔ)","wider_text": "《糖尿病防治指南》第3章指出:患者應(yīng)定期進(jìn)行血糖監(jiān)測(cè)...(完整段落)"
}
3. 答案生成引擎:信息整合的"分析師"
3.1 結(jié)構(gòu)化提示模板
系統(tǒng)將檢索結(jié)果轉(zhuǎn)換為XML格式的輸入:
mini_chunk_str = '''
<chunk_1>
《中國(guó)2型糖尿病防治指南》建議:所有糖尿病患者...
</chunk_1>
<chunk_2>
美國(guó)ADA指南強(qiáng)調(diào):飲食控制需要配合定期運(yùn)動(dòng)...
</chunk_2>'''
3.2 生成過(guò)程示例
最終提交給LLM的提示模板:
您是一位醫(yī)療分析專家,請(qǐng)根據(jù)以下資料回答問(wèn)題:原始問(wèn)題:如何預(yù)防糖尿病并發(fā)癥?相關(guān)文獻(xiàn):
<chunk_1>...糖尿病監(jiān)測(cè)標(biāo)準(zhǔn)...</chunk_1>
<chunk_2>...飲食控制方案...</chunk_2>
4. 核心架構(gòu)設(shè)計(jì)解析
4.1 模塊化設(shè)計(jì)思想
類初始化展現(xiàn)的組件解耦:
class NaiveRAG:def __init__(self, llm, embedding_model, vector_db):self.llm = llm # 可替換GPT-4/Claude等模型self.embedding = embedding # 支持多種文本編碼器self.vector_db = vector_db # 兼容各類向量數(shù)據(jù)庫(kù)
4.2 全鏈路可觀測(cè)性
系統(tǒng)運(yùn)行時(shí)的關(guān)鍵日志輸出:
[SYSTEM] 在[