RAGFlow自動化腳本套件:自定義解析+回答質量評估+參數自動調優
最近 MCP(大模型上下文協議)比較火,花了點時間研究了下和 RAG 的協作架構,后續整理出心得后再發出。
言歸正傳,之前文章里詳細介紹了 RAGFlow 的 Python api 用法,今天結合幾篇法律法規文檔來給大家做個簡單演示,拋磚引玉。這篇主要介紹三個腳本示例,分別是:數據處理與系統配置,系統測試,參數優化腳本。這套自動化腳本相比 RAGFlow 的 Web 界面提供了三個關鍵優勢:
自動化與效率:將需要人工數小時完成的操作縮減為幾分鐘的全自動流程
系統化與可重復:確保測試和優化過程的客觀性、系統性和可重復性
可編程與可擴展:可以根據具體需求調整配置、測試方法和優化策略
這種類型的腳本可以被視為 RAGFlow 的"增強配套工具",通過代碼方式擴展了基礎平臺的能力,做深度業務場景適配時會靈活些。
1、數據處理與系統配置腳本
1.1相比 web 界面優勢
自動化流程處理
一鍵式配置:從數據集創建、文檔上傳到聊天助手配置的全流程自動化
批量處理能力:可以一次性處理整個目錄的文檔
流程控制:自動等待文檔解析完成后再創建聊天助手,確保流程順序合理
靈活性與可定制性
靈活參數調整:可以在代碼中直接調整各種參數而無需在界面中逐一點擊
條件處理:可以添加邏輯判斷,根據不同情況執行不同操作
錯誤處理:內置錯誤處理機制,出現問題時提供更詳細的信息
可復用性
環境復制:可以在不同環境中復用相同的配置腳本
版本控制:配置可以納入代碼版本控制系統,便于跟蹤變更
標準化部署:確保不同實例使用完全相同的配置
集成能力
可與其他系統集成:作為更大工作流的一部分
計劃任務:可以作為定時任務自動運行
與測試腳本銜接:可與測試腳本無縫銜接,自動完成配置和測試
1.2目前實現的靈活配置
數據集配置:
自定義數據集名稱和描述
配置使用的嵌入模型(BAAI/bge-m3)
使用專為法律文檔設計的分塊方法(chunk_method="laws")
文檔處理:
支持多種文檔格式(docx, doc, pdf, txt)的自動處理
批量上傳文檔
異步解析文檔并監控進度
聊天助手配置:
自定義助手名稱
關聯到創建的法律法規數據集
1.3可添加的其他配置選項
數據集高級配置
def create_legal_dataset(rag_object, dataset_name="法規知識庫"):
# 添加更多高級配置
dataset = rag_object.create_dataset(
name=dataset_name,
descriptinotallow="包含生物安全法等法律法規文檔",
embedding_model="BAAI/bge-m3",
chunk_method="laws",
permissinotallow="team", # 設置為團隊可訪問
parser_cnotallow={
"raptor": {"user_raptor": False}
} # 為法律文檔添加特定的解析器配置
)
return dataset
文檔元數據配置
def upload_documents_with_metadata(dataset, docs_path):
documents = []
for filename in os.listdir(docs_path):
if filename.endswith(('.docx', '.doc', '.pdf', '.txt')):
file_path = os.path.join(docs_path, filename)
with open(file_path, "rb") as f:
blob = f.read()
# 添加元數據
documents.append({
"display_name": filename,
"blob": blob,
"meta_fields": {
"法律類型": "行政法規" if "條例" in filename else "法律",
"頒布年份": filename.split("(")[1].split(")")[0] if "(" in filename else "未知",
"效力級別": "國家級"
}
})
dataset.upload_documents(documents)
文檔解析自定義配置
def customize_document_parsing(dataset, doc_ids):
# 獲取文檔并更新解析配置
for doc_id in doc_ids:
docs = dataset.list_documents(id=doc_id)
if docs:
doc = docs[0]
# 更新文檔解析配置
doc.update({
"chunk_method": "laws",
"parser_config": {
"raptor": {"user_raptor": True}
}
})
# 然后解析文檔
dataset.async_parse_documents(doc_ids)
聊天助手高級配置
def create_legal_assistant(rag_object, dataset_id, assistant_name="法規助手"):
# 創建具有高級配置的聊天助手
assistant = rag_object.create_chat(
name=assistant_name,
dataset_ids=[dataset_id],
llm={
"model_name": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
"temperature": 0.1,
"top_p": 0.3,
"presence_penalty": 0.2,
"frequency_penalty": 0.7,
"max_token": 1024
},
prompt={
"similarity_threshold": 0.2, # 設置相似度閾值
"keywords_similarity_weight": 0.7, # 關鍵詞相似度權重
"top_n": 8, # 檢索topN文檔
"rerank_model": "BAAI/bge-reranker-v2-m3", # 使用重排序模型
"prompt": """你是一位專業的法律顧問,精通中國法律法規,尤其是生物安全法等相關法規。
請基于檢索到的法律條文,準確回答用戶的問題。
回答時請:
1. 引用具體的法律條款編號
2. 解釋法律條文的含義
3. 如有必要,說明條文之間的關聯
4. 保持客觀,不要添加個人觀點
5. 如果檢索結果不足以回答問題,請明確說明
{knowledge}
"""
}
)
return assistant
多數據關聯與權限管理
def setup_multiple_datasets(rag_object):
# 創建多個專題數據集
datasets = []
topics = ["生物安全法", "傳染病防治法", "野生動物保護法"]
for topic in topics:
dataset = rag_object.create_dataset(
name=f"{topic}知識庫",
descriptinotallow=f"專門針對{topic}的法律法規解析",
embedding_model="BAAI/bge-m3",
chunk_method="laws",
permissinotallow="team" # 團隊共享
)
datasets.append(dataset)
# 創建綜合法律助手,關聯所有數據集
dataset_ids = [dataset.id for dataset in datasets]
assistant = create_legal_assistant(rag_object, dataset_ids, "綜合法律法規顧問")
return datasets, assistant
上述這些高級配置可以根據實際需求進行組合和調整,不必拘泥于我的寫法
2、系統測試腳本
自動生成不同類型的測試問題、收集系統回答、使用大模型評估回答質量、生成詳細評估報告。
支持四種典型法律問題類型(直接引用類、概念解釋類、場景應用類、跨條款關聯類)的系統化測試。相比 Web 界面提供了更加好全面、客觀的自動化測試與評估工具。
2.1測試問題分類
設計了四種類型的測試問題:
直接引用類:詢問特定條款的內容
概念解釋類:詢問法律中的概念定義
場景應用類:提出實際場景,詢問適用的法律條款
跨條款關聯類:需要綜合多個條款回答的問題
2.2評估指標
從五個維度評估回答質量:
準確性:回答是否引用了正確的法律條款
完整性:是否包含了所有相關條款
解釋質量:對法律條文的解釋是否清晰、準確
引用格式:是否正確引用了條款編號
總體評分:綜合以上幾點的總體評價
3、參數優化腳本
自動測試多種參數組合、創建臨時測試助手、評估每種組合的性能、識別最佳配置方案。具體來說,大家可以試下初步探索相似度閾值、關鍵詞權重、返回文檔數量等不同的組合效果。
Web 界面相對而言,只能手動調整一組參數后進行主觀評估,而使用這種類型的腳本可以自動比較多組參數效果。需要說明的是,這里列出的參數優化方案只是示例,大家可以根據具體業務需求進行靈活調整。
使用網格搜索方法,測試不同參數組合:
相似度閾值:[0.1, 0.15, 0.2, 0.25]
關鍵詞權重:[0.6, 0.7, 0.8, 0.9]
返回條文數量:[8, 10, 12, 15]
4、其他
除了上述提到的參考技巧外,還可以測試不同的嵌入模型和重排序模型,以及結合自動評估和人工評估。
Anyway,設計一個符合特定文檔結構特點以及業務目標的腳本組合,總是多快好省的。