現代的自然語言處理(NLP)應用程序通常需要多步推理、與外部工具互動,以及能夠根據用戶查詢動態調整。Haystack Agents 是由 deepset 開發的 Haystack NLP 框架中的一個創新功能,展示了這一新一波先進 NLP 能力的範例。
Haystack Agents 被設計用來處理以下情況:
- 複雜的多步推理。
- 整合外部工具或 API。
- 超越簡單問答的檢索增強工作流程。
這篇文章將深入探討 Haystack Agents 框架,探索其特點、架構和實際應用。為了提供實用的見解,我們將建立一個使用搜索引擎和計算器等工具的問答代理(QA Agent)。
為什麼選擇 Haystack Agents?
與 LangChain 等通用框架不同,Haystack Agents 深度整合在 Haystack 生態系統中,使其在文件檢索、自訂工具整合和多步推理等專業任務中非常有效。這些代理擅長使用先進的檢索器在大型數據集中進行搜索,通過整合 API 擴展功能,例如計算或數據庫查詢,並處理需要邏輯推理的複雜查詢。作為開源和模組化的工具,Haystack Agents 可以無縫整合流行的機器學習(ML)庫和基礎設施,如 Elasticsearch、Hugging Face 模型和預訓練的變壓器。
Haystack Agents 的架構
Haystack Agents 的結構使用工具驅動的架構。在這裡,工具作為設計用於特定任務的獨立模組,例如文件搜索、計算或 API 互動。代理動態決定使用哪些工具、使用的順序,以及如何結合它們的輸出以生成連貫的回應。架構包括關鍵組件,如執行特定操作提示的工具,這些提示指導代理的決策過程。這些檢索器促進在大型數據集中進行文件搜索,而節點和管道則管理數據處理和工作流程的協調。
使用案例:建立一個使用搜索和計算器工具的問答代理
在這個教程中,我們的問答代理將執行以下操作:
- 從文件庫中檢索事實問題的答案。
- 使用計算器工具進行數學計算。
- 在需要時動態結合結果。
步驟 1:安裝前置條件
在開始實作之前,確保您的環境已設置:
- 安裝 Python 3.8 或更高版本。
- 安裝 Haystack 及所有依賴項:
- 啟動 Elasticsearch,這是我們文件庫的核心:
pip install farm-haystack[all]
docker run -d -p 9200:9200 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.17.1
步驟 2:初始化文件庫和檢索器
文件庫是存儲和查詢文件的中央庫,而檢索器則找到與給定查詢相關的文件。
from haystack.utils import launch_es
from haystack.nodes import EmbeddingRetriever
from haystack.pipelines import DocumentSearchPipeline
from haystack.document_stores import ElasticsearchDocumentStore
# 啟動 Elasticsearch
launch_es()
# 初始化文件庫
document_store = ElasticsearchDocumentStore()
# 將文件添加到庫中
docs = [
{"content": "阿爾伯特·愛因斯坦是一位理論物理學家,他發展了相對論。"},
{"content": "法國的首都是巴黎。"},
{"content": "16 的平方根是 4。"}
]
document_store.write_documents(docs)
# 初始化檢索器
retriever = EmbeddingRetriever(
document_store=document_store,
embedding_model="sentence-transformers/all-MiniLM-L6-v2",
use_gpu=True
)
# 更新嵌入
document_store.update_embeddings(retriever)
步驟 3:定義工具
工具是 Haystack Agents 的基本組件。每個工具都有特定的用途,例如搜索文件或進行計算。
from haystack.agents.base import Tool
# 搜索工具
search_pipeline = DocumentSearchPipeline(retriever)
search_tool = Tool(
name="Search",
pipeline_or_node=search_pipeline,
description="使用此工具回答事實問題,利用文件庫。"
)
# 計算器工具
def calculate(expression: str) -> str:
try:
result = eval(expression)
return str(result)
except Exception as e:
return f"計算錯誤:{e}"
calculator_tool = Tool(
name="Calculator",
pipeline_or_node=calculate,
description="使用此工具進行數學計算。"
)
步驟 4:初始化代理
Haystack 中的代理配置有工具和提示模板,定義它們如何與工具互動。
from haystack.agents import Agent
# 初始化代理
agent = Agent(
tools=[search_tool, calculator_tool],
prompt_template="使用提供的工具回答問題。如有需要,結合結果。"
)
步驟 5:查詢代理
通過提出自然語言查詢與代理互動。
# 事實問題
response = agent.run("誰發展了相對論?")
print("代理回應:", response)
# 數學計算
response = agent.run("8 * (2 + 3) 的結果是什麼?")
print("代理回應:", response)
# 結合查詢
response = agent.run("16 的平方根是什麼,誰發展了它?")
print("代理回應:", response)
Haystack Agents 的進階功能
- 自訂工具:整合 API 或特定領域的工具以擴展功能(例如,天氣 API、股市數據)。
- 微調模型:用於專業任務的微調模型替換默認嵌入模型。
- 鏈接管道:使用多個管道處理涉及多個數據來源的複雜查詢。
總之,Haystack Agents 提供了一個強大、靈活且模組化的框架,用於構建需要動態多步推理和工具使用的先進 NLP 應用程序。由於它們無縫整合到 Haystack 生態系統中,這些代理在文件檢索、自訂 API 整合和邏輯處理等任務中表現出色,非常適合解決複雜的現實問題。它們特別適合用於客戶支持機器人等應用,這些機器人結合文件搜索和外部 API 以實現即時票務解決方案,教育工具檢索信息並進行計算以回答用戶查詢,以及商業智能解決方案,從多個來源聚合數據並生成見解。
來源
此外,別忘了在 Twitter 上關注我們,並加入我們的 Telegram 頻道和 LinkedIn 群組。別忘了加入我們的 65k+ ML SubReddit。
🚨 [推薦閱讀] Nebius AI Studio 擴展視覺模型、新語言模型、嵌入和 LoRA(推廣)
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!