
如何高效爬取全球新聞網站 – 整合Scrapy、Selenium與Mediastack API實現自動化新聞采集
在處理表格豐富的文檔時,傳統RAG實現經常遇到以下問題:
為了解決上述問題,我們提出了一個完整的優化方案,包含四個關鍵步驟:
使用專業的文檔解析工具進行表格提取是第一步。以下是具體實現代碼:
!apt-get -qq install poppler-utils tesseract-ocr
%pip install -q --user --upgrade pillow
%pip install -q --upgrade unstructured["all-docs"]
%pip install langchain-openai
%pip install langchain
from unstructured.partition.pdf import partition_pdf
elements = partition_pdf('./doc.pdf',
strategy="hi_res",
chunking_strategy="by_title",
max_characters=2500,
new_after_n_chars=2300)
為每個表格生成語義豐富的描述,增加檢索時的上下文信息:
def get_table_description(table_content, document_context):
prompt = f"""
Given the following table and its context from the original document,
provide a detailed description of the table. Then, include the table in markdown format.
Original Document Context:
{document_context}
Table Content:
{table_content}
"""
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a helpful assistant that describes tables and formats them in markdown."},
{"role": "user", "content": prompt}
]
)
return response.choices[0].message.content
將處理后的表格內容進行向量化存儲:
# 創建嵌入
embedding_encoder = OpenAIEmbeddingEncoder(
config=OpenAIEmbeddingConfig(
api_key=os.getenv("OPENAI_API_KEY"),
model_name="text-embedding-3-small"
)
)
elements = embedding_encoder.embed_documents(elements=elements)
# 存儲到向量數據庫
schema = {
'columns': [
{'name': 'id', 'pytype': 'str'},
{'name': 'text', 'pytype': 'str'},
{'name': 'metadata', 'pytype': 'dict'},
{'name': 'embedding', 'vectorIndex': {
'dims': 1536,
'type': 'flat',
'metric': 'L2'
}}
]
}
構建高效的檢索鏈條:
# 設置檢索鏈
qabot = RetrievalQA.from_chain_type(
chain_type="stuff",
llm=ChatOpenAI(model="gpt-4"),
retriever=vecdb_kdbai.as_retriever(search_kwargs=dict(k=5)),
return_source_documents=True
)
def RAG(query):
return qabot.invoke(dict(query=query))["result"]
通過實際案例測試,優化后的RAG系統在以下方面表現出顯著提升:
示例查詢:
RAG("what is the three month costs and expenses for 2023?")
# 輸出:2023年第二季度的成本和支出為226.07億美元。
在實際應用中,為實現RAG的高效搜索定位,建議注意以下幾點:
通過實施上述優化方案,我們成功實現了RAG的高效搜索定位,特別是在處理表格豐富的文檔時。該方案不僅提高了檢索準確率,還顯著改善了系統的響應質量。隨著技術的不斷發展,這種優化方案將繼續演進,為更多應用場景提供更好的支持。
未來,我們還可以探索更多優化方向,如:
通過這些持續的優化努力,RAG技術將在文檔處理和信息檢索領域發揮更大的作用。