langchain agent工具介绍(一)
AWS Lambda
功能: 无服务器计算服务 类别: 底层加强 重要程度: ⭐️⭐️
- AWS Lambda API 是一个由 Amazon Web Services (AWS) 提供的无服务器计算服务,允许开发者构建和运行应用和服务,而无需预先配置或管理服务器。这种无服务器架构使你能够专注于编写和部署代码,而 AWS 自动负责扩展、打补丁和管理运行你的应用所需的基础设施。
- AWS Lambda API 可以让你的 Agent 调用在你的 AWS 云中运行的代码
- 当一个 Agent 使用 awslambda 工具时,它会提供一个类型为字符串的参数,该参数将通过 event 参数传递给 Lambda 函数。
- 使用 AWS Lambda API 的示例如下:
# 首先,你需要安装 boto3 python 包。
pip install boto3 > /dev/null
# 为了让 agent 使用工具,你必须提供与你 lambda 函数逻辑匹配的名称和描述。
# 你还必须提供你的函数名称。
# 注意,因为这个工具实际上只是 boto3 库的一个包装器,所以你需要运行 aws configure 才能使用这个工具。更多细节,请参见 [这里]。
from langchain import OpenAI
from langchain.agents import load_tools, initialize_agent, AgentType
llm = OpenAI(temperature=0)
tools = load_tools(
["awslambda"],
awslambda_tool_name="email-sender",
awslambda_tool_description="sends an email with the specified content to **********",
function_name="testFunction1",
)
agent = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)
agent.run("Send an email to ********** saying hello world.")
Requests工具
功能: Requests模块来与网页交互,获取网页的数据 类别: 网络搜索 重要程度: ⭐️⭐️⭐️
Requests工具
- 该Agent的作用是使用Requests模块来与网页交互,获取网页的数据
- Agent使用示例
# 导入所需的模块
from langchain.agents import load_tools
from langchain.utilities import TextRequestsWrapper
# 加载Requests工具
requests_tools = load_tools(["requests_all"])
# Requests工具包含五种方法:GET, POST, PATCH, PUT, DELETE
# 每种方法都有一个对应的RequestsTool对象,可以使用run方法来运行
# 输入和输出的格式根据不同的方法而异,具体可以查看每个对象的描述属性
# 例如,使用GET方法来获取Google首页的内容
requests_tools[0].run("https://www.google.com")
# 输出是一个字符串,包含网页的文本响应
'<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content="Search the world\'s information, including webpages, images, videos and more. Google has many special features to help you find exactly what you\'re looking for." name="description"><meta content="noodp" name="robots"><meta content="text
# 也可以直接使用TextRequestsWrapper对象来调用不同的方法
requests = TextRequestsWrapper()
# 例如,使用POST方法来向一个测试网站发送一些数据
data = {"name": "Bing", "message": "Hello, world!"}
requests.post("https://httpbin.org/post", data)
# 输出是一个字符串,包含网页的文本响应,显示了发送的数据和其他信息
'{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {\n "message": "Hello, world!", \n "name": "Bing"\n }, \n "headers": {\n "Accept": "*/*", \n "Accept-Encoding": "gzip, deflate", \n "Content-Length": "27", \n "Content-Type": "application/x-www-form-urlencoded", \n "Host": "httpbin.org", \n "User-Agent": "python-requests/2.26.0", \n "X-Amzn-Trace-Id": "Root=1-613f9c9a-5a6c3f4e3b7f8d1c0a8f0b8c"\n }, \n "json": null, \n "origin": "49.212.153.227", \n "url": "https://httpbin.org/post"\n}\n'
Nuclia理解API工具
功能: 处理非结构化数据 类别: 网络搜索 重要程度: ⭐️⭐️⭐️
- 该Agent的作用是使用Nuclia平台来处理非结构化数据,包括文本、网页、文档和音视频内容,提取文本、实体、元数据、链接等信息,并生成摘要和向量表示
- Agent使用示例
# 导入所需的模块
#!pip install --upgrade protobuf
#!pip install nucliadb-protos
import os
from langchain.tools.nuclia import NucliaUnderstandingAPI
# 设置环境变量,填入您的区域和API密钥
os.environ["NUCLIA_ZONE"] = "<YOUR_ZONE>" # e.g. europe-1
os.environ["NUCLIA_NUA_KEY"] = "<YOUR_API_KEY>"
# 创建一个NucliaUnderstandingAPI对象,可以设置enable_ml参数为True或False,决定是否使用机器学习功能
nua = NucliaUnderstandingAPI(enable_ml=False)
# 使用push动作来向Nuclia理解API发送文件,需要提供一个id和一个文件路径
nua.run({"action": "push", "id": "1", "path": "./report.docx"})
nua.run({"action": "push", "id": "2", "path": "./interview.mp4"})
# 使用pull动作来从Nuclia理解API获取结果,需要提供一个id和一个空路径
# 因为处理是异步的,所以可能需要等待一段时间才能获取结果
import time
pending = True
data = None
while pending:
time.sleep(15)
data = nua.run({"action": "pull", "id": "1", "path": None})
if data:
print(data)
pending = False
else:
print("waiting...")
# 也可以使用async模式来一步完成,只需要做一个push,它会等待直到结果被拉取
import asyncio
async def process():
data = await nua.arun(
{"action": "push", "id": "1", "path": "./talk.mp4", "text": None}
)
print(data)
asyncio.run(process())
# 返回的信息
Nuclia返回以下信息:
- 文件元数据
- 提取的文本
- 嵌套的文本(如PDF中的图片中的文本)
- 摘要(只有当enable_ml设置为True时)
- 段落和句子的分割(由它们的第一个和最后一个字符的位置定义,对于视频或音频文件还有开始时间和结束时间)
- 命名实体:人物、日期、地点、组织等(只有当enable_ml设置为True时)
- 链接
- 缩略图
- 嵌入的文件
- 文本的向量表示(只有当enable_ml设置为True时)
注意:
- 生成的文件(缩略图、提取的嵌入文件等)以token的形式提供。您可以使用/processing/download端点来下载它们。
- 同时在任何层级,如果一个属性超过了一定的大小,它会被放在一个可下载的文件中,并且在文档中被一个文件指针替代。这将由{"file": {"uri": "JWT_TOKEN"}}组成。规则是如果消息的大小大于1000000个字符,最大的部分将被移动到可下载的文件中。首先,压缩过程将针对向量。如果还不够,它将针对大字段元数据,最后它将针对提取的文本。
DataForSeo API Wrapper
功能: DataForSeo API包装器获取搜索引擎结果 类别: 网络搜索 重要程度: ⭐️
- 该Agent用于使用DataForSeo API包装器获取搜索引擎结果。DataForSeo API允许用户从诸如Google、Bing、Yahoo等最受欢迎的搜索引擎中检索SERP。它还允许从不同类型的搜索引擎(如地图、新闻、事件等)中获取SERP。
- Agent使用示例
from langchain.utilities.dataforseo_api_search import DataForSeoAPIWrapper
# 设置API凭证
import os
os.environ["DATAFORSEO_LOGIN"] = "your_api_access_username"
os.environ["DATAFORSEO_PASSWORD"] = "your_api_access_password"
# 创建API包装器实例
wrapper = DataForSeoAPIWrapper()
# 使用run方法获取搜索结果片段
result = wrapper.run("Weather in Los Angeles")
# 使用results方法返回配置参数的JSON响应
json_wrapper = DataForSeoAPIWrapper(
json_result_types=["organic", "knowledge_graph", "answer_box"],
json_result_fields=["type", "title", "description", "text"],
top_count=3,
)
json_results = json_wrapper.results("Bill Gates")
# 自定义搜索结果的位置和语言
customized_wrapper = DataForSeoAPIWrapper(
top_count=10,
json_result_types=["organic", "local_pack"],
json_result_fields=["title", "description", "type"],
params={"location_name": "Germany", "language_code": "en"},
)
customized_results = customized_wrapper.results("coffee near me")
# 自定义搜索引擎
customized_wrapper = DataForSeoAPIWrapper(
top_count=10,
json_result_types=["organic", "local_pack"],
json_result_fields=["title", "description", "type"],
params={"location_name": "Germany", "language_code": "en", "se_name": "bing"},
)
customized_results = customized_wrapper.results("coffee near me")
# 自定义搜索类型
maps_search = DataForSeoAPIWrapper(
top_count=10,
json_result_fields=["title", "value", "address", "rating", "type"],
params={
"location_coordinate": "52.512,13.36,12z",
"language_code": "en",
"se_type": "maps",
},
)
maps_results = maps_search.results("coffee near me")
# 在Langchain Agents中集成
from langchain.agents import Tool
search = DataForSeoAPIWrapper(
top_count=3,
json_result_types=["organic"],
json_result_fields=["title", "description", "type"],
)
tool = Tool(
name="google-search-answer",
description="My new answer tool",
func=search.run,
)
json_tool = Tool(
name="google-search-json",
description="My new json tool",
func=search.results,
)
SQL Database Chain
功能: 回答SQL数据库中的问题 类别: 数据库 重要程度: ⭐️⭐️
- 该Agent的作用是使用语言模型(LLM)来回答SQL数据库中的问题
- Agent使用示例
# 导入所需的模块
from langchain.llms import OpenAI
from langchain.utilities import SQLDatabase
from langchain_experimental.sql import SQLDatabaseChain
# 连接到SQLite数据库
db = SQLDatabase.from_uri("sqlite:///../../../../notebooks/Chinook.db")
# 创建一个OpenAI语言模型对象
llm = OpenAI(temperature=0, verbose=True)
# 创建一个SQLDatabaseChain对象,传入语言模型和数据库对象
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)
# 使用run方法来运行Agent,传入一个自然语言问题
db_chain.run("How many employees are there?")
# Agent会生成一个SQL查询,并执行它,然后返回一个答案
> Entering new SQLDatabaseChain chain...
How many employees are there?
SQLQuery:
SELECT COUNT (*) FROM "Employee";
SQLResult:
[ (8,)]
Answer:
There are 8 employees.
> Finished chain.
'There are 8 employees.'
Metaphor Search Agent
功能: 搜索引擎的代理工具 类别: 网络搜索 重要程度: ⭐️
- 作用: Metaphor Search Agent 是一个用于搜索引擎的代理工具,用于从网页中获取内容并进行搜索。
Agent 使用示例
Metaphor Search Agent 使用示例
from langchain.agents import tool
from typing import List
# 定义搜索函数
@tool
def search(query: str):
"""使用查询进行搜索引擎检索."""
return client.search(query, use_autoprompt=True, num_results=5)
# 定义获取内容函数
@tool
def get_contents(ids: List[str]):
"""获取网页内容。
传入的 ids 列表是从 `search` 中获得的。
"""
return client.get_contents(ids)
# 定义查找相似结果函数
@tool
def find_similar(url: str):
"""查找与给定 URL 相似的搜索结果。
传入的 URL 是从 `search` 获得的。
"""
return client.find_similar(url, num_results=5)
# 将工具函数放入列表
tools = [search, get_contents, find_similar]
使用在 Agent 中
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(temperature=0)
# 定义系统消息
from langchain.schema import SystemMessage
system_message = SystemMessage(content="你是一个网络研究员,使用搜索引擎查找信息。")
# 创建 Agent 的提示
prompt = OpenAIFunctionsAgent.create_prompt(system_message=system_message)
# 创建 Agent
agent = OpenAIFunctionsAgent(llm=llm, tools=tools, prompt=prompt)
使用 AgentExecutor 运行
from langchain.agents import AgentExecutor
# 创建 AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 运行搜索
agent_executor.run("查找最热门的 AI 代理初创公司及其功能")
以上是 Metaphor Search Agent 的主要功能和使用示例。
Brave Search
功能: 查找相关的信息,如网页、图片、新闻等。 类别: 网络搜索 重要程度: ⭐️
- Brave Search是一个搜索引擎,可以让用户在网络上查找相关的信息,如网页、图片、新闻等。
- Brave Search的使用示例如下:
- 使用Brave Search工具:首先需要导入langchain.tools中的BraveSearch类,然后创建一个BraveSearch对象,传入API密钥和搜索参数(如结果数量),然后调用run方法,传入搜索词。
- 搜索结果:run方法会返回一个JSON格式的字符串,包含搜索结果的标题、链接和摘要。例如,搜索"obama middle name"会返回以下结果:
- [Obama’s Middle Name – My Last Name – is ‘Hussein.’ So?]:这是一个来自美国伊斯兰关系委员会(CAIR)的文章,作者是一个姓Hussein的穆斯林,他谈到了巴拉克·奥巴马的中间名和反穆斯林的偏见。
- [What’s up with Obama’s middle name? - Quora]:这是一个来自Quora的问答页面,有15个回答,讨论了奥巴马的中间名Hussein的含义和来源。
- [Barack Obama | Biography, Parents, Education, Presidency, Books, …]:这是一个来自不列颠百科全书(Britannica)的条目,介绍了奥巴马的生平、家庭、教育、总统任期、著作等。
SceneXplain
功能: 用于图像字幕生成 类别: 底层加强 重要程度: ⭐️
- SceneXplain
- 该Agent的作用是什么
- SceneXplain是一个通过SceneXplain工具访问的图像描述服务,用于图像字幕生成。
- Agent使用示例
import os
os.environ["SCENEX_API_KEY"] = "<YOUR_API_KEY>"
from langchain.agents import load_tools
tools = load_tools(["sceneXplain"])
# 或者直接实例化工具
from langchain.tools import SceneXplainTool
tool = SceneXplainTool()
# 在Agent中使用
from langchain.llms import OpenAI
from langchain.agents import initialize_agent
from langchain.memory import ConversationBufferMemory
llm = OpenAI(temperature=0)
memory = ConversationBufferMemory(memory_key="chat_history")
agent = initialize_agent(
tools, llm, memory=memory, agent="conversational-react-description", verbose=True
)
output = agent.run(
input=(
"What is in this image <https://storage.googleapis.com/causal-diffusion.appspot.com/imagePrompts%2F0rw369i5h9t%2Foriginal.png>. "
"Is it a movie or a game? If it is a movie, what is the name of the movie?"
)
)
print(output)
IFTTT WebHooks
功能: 演示如何使用IFTTT Webhooks 类别: 自动化 重要程度: ⭐️
-
主要功能:该Agent演示了如何使用IFTTT Webhooks,连接IFTTT服务,通过触发Webhook来执行特定的操作。
-
该Agent的作用是什么
- 该Agent用于演示如何使用IFTTT Webhooks,通过连接到特定的服务,通过触发Webhook来执行操作。
-
Agent使用示例: 注意,使用该组件需要设置IFTTT的API密钥和环境变量。这个组件可以用于连接到IFTTT服务,通过触发Webhook来执行特定的操作,比如将歌曲添加到Spotify播放列表。
from langchain.tools.ifttt import IFTTTWebhook # 设置IFTTT Webhook URL和名称 url = "<https://maker.ifttt.com/trigger/spotify/json/with/key/YOUR_IFTTT_KEY>" tool = IFTTTWebhook( name="Spotify", description="Add a song to Spotify playlist", url=url ) # 使用工具触发Webhook事件 response = tool.run("taylor swift") # 打印触发结果 print(response)
Wolfram Alpha
功能: 使用Wolfram Alpha组件进行计算和求解问题 类别: 底层加强 重要程度: ⭐️
Wolfram Alpha
-
主要功能:该Agent演示了如何使用Wolfram Alpha组件进行计算和求解问题。
-
该Agent的作用是什么
- 该Agent用于演示如何使用Wolfram Alpha组件进行计算和求解问题。
-
Agent使用示例: 该工具可以对数学表达式和问题进行计算和求解,并返回结果。
from langchain.utilities.wolfram_alpha import WolframAlphaAPIWrapper # 创建Wolfram Alpha实例 wolfram = WolframAlphaAPIWrapper() # 使用工具进行计算和求解问题 result = wolfram.run("What is 2x+5 = -3x + 7?") # 打印计算和求解结果 print(result)
YouTubeSearchTool
功能: 搜索YouTube视频。 类别: 网络搜索 重要程度: ⭐️
-
主要功能:该Agent演示了如何使用YouTubeSearchTool工具来搜索YouTube视频。
-
该Agent的作用是什么
- 该Agent用于演示如何使用YouTubeSearchTool工具来搜索YouTube视频。
-
Agent使用示例: 该工具允许你搜索YouTube视频,并可以指定返回的结果数量。返回结果是包含视频链接的列表。
from langchain.tools import YouTubeSearchTool # 创建YouTubeSearchTool实例 tool = YouTubeSearchTool() # 使用工具搜索YouTube视频,不限制结果数量 results = tool.run("lex friedman") # 打印搜索结果 print(results) # 使用工具搜索YouTube视频,限制结果数量为5 limited_results = tool.run("lex friedman,5") # 打印限制数量的搜索结果 print(limited_results)