介绍
AI 代理是未来的驱动力,它们可以推动未来的发展。AI 代理在 AI 的成长和新技术进步中变得越来越不可或缺。AI 代理是模仿人类属性的应用程序,可以互动、推理,甚至做出适当的决策,以高度自治的方式实现特定目标,并实时执行多项任务,这对于大型语言模型(LLMs)而言是不可能的。
在本文中,我们将借助 MonsterAPIs 和 LlamaIndex 工具详细了解 AI 代理及其工作原理。LlamaIndex 是一个强大的框架,旨在构建和管理大规模语言模型,能够与各种数据源无缝整合。其关键特性包括高效的基于向量的检索、可定制的查询引擎和对复杂索引的支持,使其成为开发 AI 驱动应用程序的理想选择。LlamaIndex 还提供了一套工具和抽象,方便地开发 AI 代理。
我们还将使用 MonsterAPI 提供的 LLM API 来构建具有实际应用的代理程序。MonsterAPI 是一个平台,提供用于微调、测试、评估和部署最新大型语言模型(如 Llama 3、Gemma、Mistral、Stable diffusion 等)的 API 套件。那么让我们开始吧:
什么是 AI 代理?
AI 代理是旨在模仿人类行为的自主系统,使其能够执行类似于人类思维和观察的任务。代理在与大型语言模型(LLMs)、工具和记忆结合的环境中行动,以执行各种任务。AI 代理在其工作方式和生成输出的过程中与大型语言模型有所不同。我们将在本文中介绍 AI 代理的一些基本属性,并详细讨论 LLMs 和 AI 代理之间的区别,以便全面了解 AI 代理。
让我们看看 LLM 和 AI 代理之间的核心区别,以清楚地区分这两种技术。
与 AI 代理合作
代理由一组组件开发而成,主要包括记忆层、工具、模型和推理循环,这些组件共同协作以完成一组任务或用户可能想解决的特定任务。例如,使用天气代理通过用户的语音或文本命令提取实时天气数据。让我们深入了解构建 AI 代理的每个组件:
组件之间的交互:
推理循环不断与模型和工具进行交互。循环利用模型的输出来告知决策,而工具则被用来执行这些决策。
这种交互形成了一个闭环,数据在组件之间流动,使代理能够无缝处理信息、做出明智的决策并采取适当的行动。
让我们看看 AI 代理的用例,然后我们将看看使用 MonsterAPI 的 AI 代理的实时代码示例。
AI 代理的使用模式:
LlamaIndex 提供高级工具和类,使开发者无需担心执行和实现问题就能开发 AI 代理。
在推理循环中,LlamaIndex 提供函数调用代理,这些代理可以很好地整合 LLMs、ReAct 代理、向量存储和高级代理,从而构建从原型到生产的有效工作代理应用程序。
在 LlamaIndex 中,代理的开发遵循以下模式。我们将在稍后讨论 AI 代理的详细开发过程。
from llama_index.agent.openai import OpenAIAgent
from llama_index.llms.openai import OpenAI
# import and define tools
...
# initialize llm
llm = OpenAI(model="gpt-3.5-turbo-0613")
# initialize openai agent
agent = OpenAIAgent.from_tools(tools, llm=llm, verbose=True)
AI 代理的使用案例 AI 代理在现实世界中有着广泛的使用案例,可以完成常见任务,提高时间效率,同时提升企业的营收。以下是一些常见的使用案例:
使用 LlamaIndex 和 MonsterAPI 构建文本到 SQL 代理
在本部分中,我们将使用 LlamaIndex 工具和 MonsterAPI 访问大型语言模型来构建文本到 SQL 应用程序。在深入代码之前,让我们先看看 MonsterAPI 平台的概述。
MonsterAPI 概述
MonsterAPI 是一个易于使用的无代码/低代码工具,简化了基于大型语言模型的应用程序(包括 AI 代理)的部署、微调、测试、评估和错误管理。与其他云平台相比,它的成本更低,并且可以免费用于个人项目或研究工作。它支持多种模型,如文本生成、图像生成和代码生成模型。在我们的示例中,MonsterAPI 模型 API 访问存储在 LlamaIndex 向量存储中的自定义数据集,以基于新添加的数据集提供增强的查询答案。
安装必要的库并设置环境
首先,我们将安装必要的库和模块,包括 MonsterAPI LLMs、LlamaIndex、sqlalchemy 和 llamaindex embeddings 以进一步开发代理。同时,在 MonsterAPI 平台上注册以获取用于访问大型语言模型的 API 密钥。
!pip install pymysql
!pip install llama_index
!pip install --force-reinstall 'sqlalchemy<2.0.0''sqlalchemy<2.0.0'
!pip install llama-index-callbacks-aim
!pip install sqlalchemy
!pip install monsterapi
!pip install llama-index-llms-monsterapi
!pip install llama-index-embeddings-huggingface
# import logging modules to configure login parameters
import logging
import sys
import pymysql
logging.basicConfig(stream=sys.stdout, level=logging.INFO, force=True)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
from IPython.display import Markdown, display
# db credentials
db_user = "your_username"
db_password = "your_password"
db_host = "your_host"
db_name = "your_name"
# create_engine, text classes from sqlalchemy
from sqlalchemy import create_engine, text
# Construct the connection string
connection_string = f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}"
# Create an engine instance
engine = create_engine(connection_string)
# Test the connection using raw SQL
with engine.connect() as connection:
result = connection.execute(text("show tables"))
for row in result:
print(row)
---------------------------------[Output]-------------------------------------
('Customers',)
('OrderDetails',)
('Orders',)
('info',)
('table_36370395d9314572970b325bee42817d',)
('table_59af3c5a5388482193f88093fc2eaa36',)
在上面的代码中,首先,你需要使用可用的数据库凭据连接 MySQL 数据库。创建一个数据库连接字符串对象,然后创建一个连接数据库表的引擎。一旦连接建立,我们就可以获取查询目的的表详情。
LlamaIndex SQL 数据库实例
一旦数据库连接上,我们使用 llamaindex 核心库中的 SQLDatabase 类来获取选定表的表架构。在创建了 SQL 数据库后,我们就可以继续开发 NL2SQL 应用程序。
from llama_index.core import SQLDatabase
# select tables to connect for application
tables = ['table_36370395d9314572970b325bee42817d', 'table_59af3c5a5388482193f88093fc2eaa36']
sql_database = SQLDatabase(engine, include_tables=tables, sample_rows_in_table_info=2)
使用 LlamaIndex 模块开发文本到 SQL 的应用程序
现在,我们将设置一个令牌计数器并配置大型语言模型,以便通过数据库表处理查询和生成响应。
import os
from llama_index.llms.monsterapi import MonsterLLM
import tiktoken
from llama_index.core.callbacks import CallbackManager, TokenCountingHandler
# token counter using token counting handler
token_counter = TokenCountingHandler(
tokenizer=tiktoken.encoding_for_model("Meta-Llama-3-8B-Instruct").encode
)
# callback manager for encoding input queries
callback_manager = CallbackManager([token_counter])
# set up monsterapi key
os.environ["MONSTER_API_KEY"] = "YOUR_API_KEY"
# create an instance of llama-3-8b model
model = "meta-llama/Meta-Llama-3-8B-Instruct"
llm = MonsterLLM(model=model, temperature=0.75)
# setting up service context for llm
service_context = ServiceContext.from_defaults(
llm=llm,callback_manager=callback_manager
)
该代码为一个使用基于 LlamaIndex 模型的代理应用程序设置了基本基础设施,并托管在 MonsterAPI 上。以下是它实现的功能:
创建 SQL 表节点映射
使用 LlamaIndex 向量存储、嵌入以及 ObjectIndex,我们可以列出数据库的表并为提示生成表架构,以便 MonsterAPI 模型 API 根据用户的查询生成合适的 SQL 查询。
from llama_index.core.embeddings import resolve_embed_model
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.objects import ObjectIndex, SQLTableNodeMapping, SQLTableSchema
import pandas as pd
# list all the tables from database and crate table schema for prompt to LLM
tables = list(sql_database._all_tables)
table_node_mapping = SQLTableNodeMapping(sql_database)
table_schema_objs = []
for table in tables:
table_schema_objs.append((SQLTableSchema(table_name = table)))
初始化SQL表查询检索引擎
from llama_index.core.indices.struct_store.sql_query import SQLTableRetrieverQueryEngine
# create an object index to store vectors
obj_index = ObjectIndex.from_objects(
table_schema_objs,
table_node_mapping,
VectorStoreIndex
)
# initializing query engine
query_engine = SQLTableRetrieverQueryEngine(
sql_database, obj_index.as_retriever(similarity_top_k=3), service_context=service_context
)
# Ask query to query engine and store it in a response variable
response = query_engine.query("How many people have previous work experience?")
这个代码片段使用 LlamaIndex 的 SQLTableRetrieverQueryEngine 实现了一个查询引擎,与数据库交互。该过程涉及以下几个关键步骤:
通过这些步骤,我们可以使用自然语言查询数据库,并获得相应的答案,而无需编写明确的 SQL 查询来回答业务问题。
总结
综上所述,AI 代理正在改变我们与 AI 技术交互的方式,通过拥有AI助手或工具,模拟人类思维和行为自主执行任务。