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