自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

超越靜態(tài)管道:使用LlamaIndex增強(qiáng)人工智能代理 原創(chuàng)

發(fā)布于 2024-9-4 07:50
瀏覽
0收藏

本文使用LlamaIndex的查詢引擎工具和函數(shù)工具構(gòu)建人工智能代理,并演示如何有效地集成和利用這些工具。

基本的檢索增強(qiáng)生成(RAG)數(shù)據(jù)管道通常依賴于硬編碼的步驟,每次運(yùn)行時都遵循預(yù)定義的路徑。這些系統(tǒng)沒有實(shí)時決策,也不會根據(jù)輸入數(shù)據(jù)動態(tài)調(diào)整動作。這種限制會降低在復(fù)雜或不斷變化的環(huán)境中的靈活性和響應(yīng)性,凸顯了傳統(tǒng)RAG系統(tǒng)的一個主要弱點(diǎn)。

LlamaIndex通過引入??代理??解決了這個限制。代理超越了查詢引擎,因?yàn)樗鼈儾粌H可以從靜態(tài)數(shù)據(jù)源“讀取”數(shù)據(jù),還可以動態(tài)地攝取和修改來自各種工具的數(shù)據(jù)。這些代理由LLM提供支持,通過從提供的工具集中選擇最合適的工具來執(zhí)行一系列操作,以完成指定的任務(wù)。這些工具可以像基本功能一樣簡單,也可以像全面的LlamaIndex查詢引擎一樣復(fù)雜。他們處理用戶輸入或查詢,就如何處理這些輸入做出內(nèi)部決策,并決定是否需要額外的步驟,或者是否可以交付最終結(jié)果。這種執(zhí)行自動推理和決策的能力使代理對復(fù)雜的數(shù)據(jù)處理任務(wù)具有高度的適應(yīng)性和高效性。

超越靜態(tài)管道:使用LlamaIndex增強(qiáng)人工智能代理-AI.x社區(qū)

該圖說明了LlamaIndex代理的工作流程:它們?nèi)绾紊刹襟E、做出決策、選擇工具和評估進(jìn)度,從而根據(jù)用戶輸入動態(tài)地完成任務(wù)。

LlamaIndex代理的核心組件

LlamaIndex中的代理有兩個主要組件:AgentRunner和AgentWorker。

超越靜態(tài)管道:使用LlamaIndex增強(qiáng)人工智能代理-AI.x社區(qū)

Agent Runner

Agent Runner是LlamaIndex中的編排器。它管理代理的狀態(tài),包括會話內(nèi)存,并為用戶交互提供高級界面。它創(chuàng)建和維護(hù)任務(wù),并負(fù)責(zé)在每個任務(wù)中運(yùn)行各個步驟。以下是其功能的詳細(xì)分解:

  • 任務(wù)創(chuàng)建:代理執(zhí)行器根據(jù)用戶查詢或輸入創(chuàng)建任務(wù)。
  • 狀態(tài)管理:存儲和維護(hù)會話和任務(wù)的狀態(tài)。
  • 內(nèi)存管理:它在內(nèi)部管理會話內(nèi)存,確保在交互中保持場景。
  • 任務(wù)執(zhí)行:它與Agent Worker協(xié)調(diào),在每個任務(wù)中執(zhí)行各個步驟。

與LangChain代理(需要開發(fā)人員人工定義和傳遞內(nèi)存)不同,LlamaIndex代理在內(nèi)部處理內(nèi)存管理。

超越靜態(tài)管道:使用LlamaIndex增強(qiáng)人工智能代理-AI.x社區(qū)

Agent Worker

Agent Worker控制由Agent Runner給出的任務(wù)的逐步執(zhí)行。它負(fù)責(zé)根據(jù)當(dāng)前輸入生成任務(wù)中的下一步。Agent Worker可以定制以包含特定的推理邏輯,使其高度適應(yīng)不同的任務(wù)。主要方面包括:

  • 步驟生成:根據(jù)當(dāng)前數(shù)據(jù)確定任務(wù)的下一步。
  • 自定義:通過自定義,以處理特定類型的推理或數(shù)據(jù)處理。

Agent Runner管理任務(wù)的創(chuàng)建和狀態(tài),而Agent Worker執(zhí)行每個任務(wù)的步驟,在Agent Runner的指導(dǎo)下充當(dāng)操作單元。

LlamaIndex中的代理類型

LlamIndex提供了針對特定任務(wù)和功能設(shè)計的不同類型的代理。

數(shù)據(jù)代理

數(shù)據(jù)代理是專門用于處理各種數(shù)據(jù)任務(wù)的代理,包括檢索和操作。它們可以在讀和寫模式下運(yùn)行,并與不同的數(shù)據(jù)源無縫交互。

數(shù)據(jù)代理可以跨各種數(shù)據(jù)庫和API搜索、檢索、更新和操作數(shù)據(jù)。它們支持與Slack、Shopify、Google等平臺的交互,從而可以輕松地與這些服務(wù)集成。數(shù)據(jù)代理可以處理復(fù)雜的數(shù)據(jù)操作,例如查詢數(shù)據(jù)庫、調(diào)用API、更新記錄和執(zhí)行數(shù)據(jù)轉(zhuǎn)換。其適應(yīng)性強(qiáng)的設(shè)計使其適用于從簡單的數(shù)據(jù)檢索到復(fù)雜的數(shù)據(jù)處理管道的廣泛應(yīng)用。

Python

1 from llama_index.agent import OpenAIAgent, ReActAgent
2 from llama_index.llms import OpenAI
3
4 # import and define tools
5 ...
6 # initialize llm
7 llm = OpenAI(model="gpt-3.5-turbo")
8 # initialize openai agent
9 agent = OpenAIAgent.from_tools(tools, llm=llm, verbose=True)
10 # initialize ReAct agent
11 agent = ReActAgent.from_tools(tools, llm=llm, verbose=True)
12 # use agent
13 response = agent.chat("What is (121 * 3) + 42?")

自定義代理

自定義代理(Custom Agents)為用戶提供了很多的靈活性和自定義選項(xiàng)。通過子類化CustomSimpleAgentWorker,可以為代理定義特定的邏輯和行為。這包括處理復(fù)雜查詢、集成多個工具和實(shí)現(xiàn)錯誤處理機(jī)制。

用戶可以通過定義分步邏輯、重試機(jī)制和集成各種工具來定制自定義代理以滿足特定需求。這種自定義允許用戶創(chuàng)建管理復(fù)雜任務(wù)和工作流的代理,使它們能夠高度適應(yīng)不同的場景。無論是管理復(fù)雜的數(shù)據(jù)操作還是與獨(dú)特的服務(wù)集成,自定義代理都能提供構(gòu)建專業(yè)、高效解決方案所需的工具。

工具和工具規(guī)格

工具是任何代理中最重要的組件,它們允許代理執(zhí)行各種任務(wù)并擴(kuò)展其功能。通過使用不同類型的工具,代理可以根據(jù)需要執(zhí)行特定的操作。這使得該代理具有很高的適應(yīng)性和效率。

函數(shù)工具

函數(shù)工具(FunctionTool)允許用戶將任何Python函數(shù)轉(zhuǎn)換為代理可以使用的工具。這一特性對于創(chuàng)建自定義操作非常有用,可以增強(qiáng)代理執(zhí)行各種任務(wù)的能力。

用戶可以將簡單的函數(shù)轉(zhuǎn)換為代理將其集成到其工作流中的工具。這可以包括數(shù)學(xué)運(yùn)算、數(shù)據(jù)處理函數(shù)和其他自定義邏輯。

可以將Python函數(shù)轉(zhuǎn)換為如下的工具:

Python

1 from llama_index.core.tools import FunctionTool
2 def multiply(a: int, b: int) -> int:
3    """Multiple two integers and returns the result integer"""
4    return a * b
5
6 multiply_tool = FunctionTool.from_defaults(fn=multiply)

LlamaIndex中的FunctionTool方法允許用戶將任何Python函數(shù)轉(zhuǎn)換為代理可以使用的工具。函數(shù)的名稱成為工具的名稱,函數(shù)的文檔字符串充當(dāng)工具的描述。

查詢引擎工具

查詢引擎工具(QueryEngine Tools)包裝了現(xiàn)有的查詢引擎,允許代理對數(shù)據(jù)源執(zhí)行復(fù)雜的查詢。這些工具與各種數(shù)據(jù)庫和API集成,使代理能夠高效地檢索和操作數(shù)據(jù)。

這些工具使代理能夠與特定的數(shù)據(jù)源交互、執(zhí)行復(fù)雜的查詢和檢索相關(guān)信息。這種集成允許代理在決策過程中有效地使用數(shù)據(jù)。

要將任何查詢引擎轉(zhuǎn)換為查詢引擎工具,可以使用以下代碼:

Python

1 from llama_index.core.tools import QueryEngineTool
2 from llama_index.core.tools import ToolMetadata
3 query_engine_tools = QueryEngineTool(
4        query_engine="your_index_as_query_engine_here",
5        metadata=ToolMetadata(
6            name="name_your_tool",
7            description="Provide the description",
8        ),
9    )

QueryEngineTool方法允許用戶將查詢引擎轉(zhuǎn)換為代理可以使用的工具。ToolMetadata類幫助定義這個工具的名稱和描述。工具的名稱由name屬性設(shè)置,描述由description屬性設(shè)置。

  • 注意:工具的描述非常重要,因?yàn)樗兄贚LM決定何時使用該工具。

使用MyScaleDB和LlamaIndex構(gòu)建人工智能代理

使用查詢引擎工具和功能工具構(gòu)建一個人工智能代理,以演示如何有效地集成和利用這些工具。

安裝必要的庫

首先,通過在終端運(yùn)行以下命令安裝所需的庫:

Shell

1 pip install myscale-client llama

將使用MyScaleDB作為向量搜索引擎來開發(fā)查詢引擎。這是一個專門為可擴(kuò)展應(yīng)用程序設(shè)計的高級SQL向量數(shù)據(jù)庫。

獲取查詢引擎的數(shù)據(jù)

對于這個例子,將使用??Nike目錄數(shù)據(jù)集??。使用以下代碼下載并準(zhǔn)備數(shù)據(jù):

Python

1 from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
2 import requests
3
4 url = 'https://niketeam-asset-download.nike.net/catalogs/2024/2024_Nike%20Kids_02_09_24.pdf?cb=09302022'
5 response = requests.get(url)
6
7 with open('Nike_Catalog.pdf', 'wb') as f:
8    f.write(response.content)
9
10 reader = SimpleDirectoryReader(input_files=["Nike_Catalog.pdf"])
11 documents = reader.load_data()

這段代碼將下載Nike目錄PDF并加載數(shù)據(jù)以便在查詢引擎中使用。

連接MyScaleDB

在使用MyScaleDB之前,需要建立一個連接:

Python

1 import clickhouse_connect
2
3 client = clickhouse_connect.get_client(
4    host='your_host_here',
5    port=443,
6    username='your_username_here',
7    password='your_password_here'
8 )

要了解如何獲取集群詳細(xì)信息并閱讀有關(guān)MyScale的更多信息可以參考??MyScaleDB??快速入門指南。

創(chuàng)建查詢引擎工具

首先為代理構(gòu)建第一個工具,即查詢引擎工具。為此,首先使用MyScaleDB開發(fā)查詢引擎,并將Nike目錄數(shù)據(jù)添加到矢量存儲中。

獲取查詢引擎的數(shù)據(jù)

Python

1 from llama_index.vector_stores.myscale import MyScaleVectorStore
2 from llama_index.core import StorageContext
3 vector_store = MyScaleVectorStore(myscale_client=client)
4 storage_context = StorageContext.from_defaults(vector_store=vector_store)
5 index = VectorStoreIndex.from_documents(
6   documents, storage_context=storage_context
7 )
8 query_engine = index.as_query_engine()

一旦數(shù)據(jù)被輸入到向量存儲中,就會創(chuàng)建一個索引。下一步是將查詢引擎轉(zhuǎn)換為工具。為此,將使用LlamaIndex的QueryEngineTool方法。

Python

1 from llama_index.core.tools import QueryEngineTool
2 from llama_index.core.tools import ToolMetadata
3
4 query_engine_tool = QueryEngineTool(
5    query_engine=index,
6    metadata=ToolMetadata(
7        name="nike_data",
8        description="Provide information about the Nike products. Use a detailed plain text question as input to the tool."
9    ),
10 )

QueryEngineTool接受query_engine和meta_data作為參數(shù)。在元數(shù)據(jù)中,采用描述定義工具的名稱。

創(chuàng)建函數(shù)工具

下一個工具是一個簡單的Python函數(shù),它將兩個數(shù)字相乘。此方法將使用LlamaIndex的FunctionTool轉(zhuǎn)換為工具。

Python

1 from llama_index.core.tools import FunctionTool
2 # Define a simple Python function
3 def multiply(a: int, b: int) -> int:
4    """Multiply two integers and return the result."""
5    return a * b
6 # Change function to a tool
7 multiply_tool = FunctionTool.from_defaults(fn=multiply)

在此之后,完成了工具的創(chuàng)建。LlamaIndex代理將工具作為Python列表。然后把這些工具添加到一個列表中。

Python

1 tools = [multiply_tool, query_engine_tool]

定義LLM

定義LLM是任何LlamaIndex代理的核心。LLM的選擇是至關(guān)重要的,因?yàn)槎xLLM的理解和性能越好,它就越能有效地充當(dāng)決策者和處理復(fù)雜問題。將使用OpenAI的gpt-3.5 turbo模型。

Python

1 from llama_index.llms.openai import OpenAI
2 llm = OpenAI(model="gpt-3.5-turbo")

初始化代理

正如前面看到的,一個代理由一個Agent Runner和一個Agent Worker組成。這是代理的兩個組成部分?,F(xiàn)在將探索它們在實(shí)踐中是如何工作的。以兩種方式實(shí)現(xiàn)了下面的代碼:

  • 自定義代理:第一種方法是首先使用工具和LLM初始化代理工作者。然后,將Agent Worker傳遞給Agent Runner以處理完整的代理。在這里將導(dǎo)入必要的模塊并編寫自己的代理。

Python

1 from llama_index.core.agent import AgentRunner
2 from llama_index.agent.openai import OpenAIAgentWorker
3
4 # Method 2: Initialize AgentRunner with OpenAIAgentWorker
5 openai_step_engine = OpenAIAgentWorker.from_tools(tools, llm=llm, verbose=True)
6 agent1 = AgentRunner(openai_step_engine)
  • 使用預(yù)定義代理:第二種方法是使用代理,代理是AgentRunner的子類,它在底層捆綁了OpenAIAgentWorker。因此不需要自己定義AgentRunner或AgentWorkers,因?yàn)樗鼈兪窃诤蠖藢?shí)現(xiàn)的。

Python

1 from llama_index.agent.openai import OpenAIAgent
2
3 # Initialize OpenAIAgent
4 agent = OpenAIAgent.from_tools(tools, llm=llm, verbose=True)
  • 注意:當(dāng)在LLM中設(shè)置verbose=true時,可以深入了解模型的思維過程,從而通過提供詳細(xì)的解釋和推理來理解它是如何得到答案的。

無論初始化方法是什么,都可以使用相同的方法測試代理。測試第一個:

Python

1 # Call the custom agent
2 agent = agent.chat("What's the price of BOYS NIKE DF STOCK RECRUIT PANT DJ573?")

應(yīng)該得到類似這樣的結(jié)果:

超越靜態(tài)管道:使用LlamaIndex增強(qiáng)人工智能代理-AI.x社區(qū)

現(xiàn)在采用數(shù)學(xué)運(yùn)算調(diào)用第一個自定義代理。

Python

1 # Call the second agent
2 response = agent1.chat("What's 2+2?")

調(diào)用第二個代理,并要求進(jìn)行數(shù)學(xué)運(yùn)算。會得到類似這樣的回復(fù):

超越靜態(tài)管道:使用LlamaIndex增強(qiáng)人工智能代理-AI.x社區(qū)

人工智能代理自主處理復(fù)雜任務(wù)的潛力正在擴(kuò)大,這使得它們在商業(yè)環(huán)境中具有不可估量的價值,在這些環(huán)境中,它們可以管理日常任務(wù),并將人類解放出來從事更高價值的活動。隨著技術(shù)的進(jìn)步和向前發(fā)展,人工智能代理的采用預(yù)計將會增長,進(jìn)一步徹底改變?nèi)藗兣c技術(shù)的互動方式,并優(yōu)化工作流程。

結(jié)論

LlamaIndex代理提供了一種管理和處理數(shù)據(jù)的智能方式,超越了傳統(tǒng)的RAG系統(tǒng)。與靜態(tài)數(shù)據(jù)管道不同,這些代理可以做出實(shí)時決策,根據(jù)傳入的數(shù)據(jù)調(diào)整其操作。這種自動推理使它們對復(fù)雜任務(wù)具有高度的適應(yīng)性和高效性。它們集成了從基本功能到高級查詢引擎的各種工具,以智能地處理輸入并提供優(yōu)化的結(jié)果。

原文標(biāo)題:??Beyond Static Pipelines:Enhancing AI Agents With LlamaIndex??,作者:Usama Jamil

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦