偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

譯者 | 李睿

審校 | 重樓

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

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

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

LlamaIndex代理的核心組件

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

Agent Runner

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

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

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

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ù)的下一步。
  • 自定義:通過(guò)自定義,以處理特定類(lèi)型的推理或數(shù)據(jù)處理。

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

LlamaIndex中的代理類(lèi)型

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

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

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

數(shù)據(jù)代理可以跨各種數(shù)據(jù)庫(kù)和API搜索、檢索、更新和操作數(shù)據(jù)。它們支持與Slack、Shopify、Google等平臺(tái)的交互,從而可以輕松地與這些服務(wù)集成。數(shù)據(jù)代理可以處理復(fù)雜的數(shù)據(jù)操作,例如查詢數(shù)據(jù)庫(kù)、調(diào)用API、更新記錄和執(zhí)行數(shù)據(jù)轉(zhuǎn)換。其適應(yīng)性強(qiáng)的設(shè)計(jì)使其適用于從簡(jiǎn)單的數(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)。通過(guò)子類(lèi)化CustomSimpleAgentWorker,可以為代理定義特定的邏輯和行為。這包括處理復(fù)雜查詢、集成多個(gè)工具和實(shí)現(xiàn)錯(cuò)誤處理機(jī)制。

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

工具和工具規(guī)格

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

函數(shù)工具

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

用戶可以將簡(jiǎn)單的函數(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)有的查詢引擎,允許代理對(duì)數(shù)據(jù)源執(zhí)行復(fù)雜的查詢。這些工具與各種數(shù)據(jù)庫(kù)和API集成,使代理能夠高效地檢索和操作數(shù)據(jù)。

這些工具使代理能夠與特定的數(shù)據(jù)源交互、執(zhí)行復(fù)雜的查詢和檢索相關(guān)信息。這種集成允許代理在決策過(guò)程中有效地使用數(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類(lèi)幫助定義這個(gè)工具的名稱和描述。工具的名稱由name屬性設(shè)置,描述由description屬性設(shè)置。

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

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

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

安裝必要的庫(kù)

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

Shell

1 pip install myscale-client llama

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

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

對(duì)于這個(gè)例子,將使用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之前,需要建立一個(gè)連接:

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快速入門(mén)指南。

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

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

獲取查詢引擎的數(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ù)被輸入到向量存儲(chǔ)中,就會(huì)創(chuàng)建一個(gè)索引。下一步是將查詢引擎轉(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ù)工具

下一個(gè)工具是一個(gè)簡(jiǎn)單的Python函數(shù),它將兩個(gè)數(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列表。然后把這些工具添加到一個(gè)列表中。

Python

1 tools = [multiply_tool, query_engine_tool]

定義LLM

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

Python

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

初始化代理

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

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

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的子類(lèi),它在底層捆綁了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時(shí),可以深入了解模型的思維過(guò)程,從而通過(guò)提供詳細(xì)的解釋和推理來(lái)理解它是如何得到答案的。

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

Python

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

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

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

Python

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

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

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

結(jié)論

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

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

責(zé)任編輯:姜華 來(lái)源: 51CTO內(nèi)容精選
相關(guān)推薦

2023-12-11 11:41:49

機(jī)器學(xué)習(xí)數(shù)據(jù)注釋人工智能

2024-02-22 09:55:48

人工智能安全監(jiān)控建筑工地安全

2021-05-28 13:15:54

人工智能領(lǐng)域地位

2022-03-26 22:24:31

區(qū)塊鏈人工智能技術(shù)

2019-09-27 11:46:06

人工智能數(shù)據(jù)技術(shù)

2019-08-14 15:27:39

人工智能技術(shù)經(jīng)濟(jì)

2020-11-27 09:00:00

人工智能

2023-03-09 22:02:21

ChatGPT人工智能

2024-01-03 09:47:44

2023-08-30 16:04:13

人工智能AI

2023-10-19 11:10:18

人工智能邊緣部署

2021-03-09 16:32:12

人工智能科學(xué)教育

2021-09-02 09:44:51

AI人工智能

2021-08-10 08:54:10

人工智能中國(guó)美國(guó)

2023-11-01 06:55:05

人工智能可觀測(cè)性IT

2024-03-15 14:26:28

2025-03-13 13:29:32

2024-03-29 06:00:00

人工智能新興風(fēng)險(xiǎn)安全威脅

2022-08-02 11:25:12

人工智能數(shù)據(jù)管道

2022-09-14 13:49:34

人工智能金融服務(wù)公司
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)