原文:langchain agent工具介绍(一)_牛客网
功能: 无服务器计算服务 类别: 底层加强 重要程度: ⭐️⭐️
# 首先,你需要安装 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模块来与网页交互,获取网页的数据 类别: 网络搜索 重要程度: ⭐️⭐️⭐️
# 导入所需的模块
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")
# 输出是一个字符串,包含网页的文本响应
'
功能: 处理非结构化数据 类别: 网络搜索 重要程度: ⭐️⭐️⭐️
# 导入所需的模块
#!pip install --upgrade protobuf
#!pip install nucliadb-protos
import os
from langchain.tools.nuclia import NucliaUnderstandingAPI
# 设置环境变量,填入您的区域和API密钥
os.environ["NUCLIA_ZONE"] = "" # e.g. europe-1
os.environ["NUCLIA_NUA_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包装器获取搜索引擎结果 类别: 网络搜索 重要程度: ⭐️
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数据库中的问题 类别: 数据库 重要程度: ⭐️⭐️
# 导入所需的模块
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.'
功能: 搜索引擎的代理工具 类别: 网络搜索 重要程度: ⭐️
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]
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)
from langchain.agents import AgentExecutor
# 创建 AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 运行搜索
agent_executor.run("查找最热门的 AI 代理初创公司及其功能")
以上是 Metaphor Search Agent 的主要功能和使用示例。
功能: 查找相关的信息,如网页、图片、新闻等。 类别: 网络搜索 重要程度: ⭐️
功能: 用于图像字幕生成 类别: 底层加强 重要程度: ⭐️
import os
os.environ["SCENEX_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 . "
"Is it a movie or a game? If it is a movie, what is the name of the movie?"
)
)
print(output)
功能: 演示如何使用IFTTT Webhooks 类别: 自动化 重要程度: ⭐️
主要功能:该Agent演示了如何使用IFTTT Webhooks,连接IFTTT服务,通过触发Webhook来执行特定的操作。
该Agent的作用是什么
Agent使用示例: 注意,使用该组件需要设置IFTTT的API密钥和环境变量。这个组件可以用于连接到IFTTT服务,通过触发Webhook来执行特定的操作,比如将歌曲添加到Spotify播放列表。
from langchain.tools.ifttt import IFTTTWebhook
# 设置IFTTT Webhook URL和名称
url = ""
tool = IFTTTWebhook(
name="Spotify", description="Add a song to Spotify playlist", url=url
)
# 使用工具触发Webhook事件
response = tool.run("taylor swift")
# 打印触发结果
print(response)
功能: 使用Wolfram Alpha组件进行计算和求解问题 类别: 底层加强 重要程度: ⭐️
主要功能:该Agent演示了如何使用Wolfram Alpha组件进行计算和求解问题。
该Agent的作用是什么
Agent使用示例: 该工具可以对数学表达式和问题进行计算和求解,并返回结果。
from langchain.utilities.wolfram_alpha import WolframAlphaAPIWrapper
# 创建Wolfram Alpha实例
wolfram = WolframAlphaAPIWrapper()
# 使用工具进行计算和求解问题
result = wolfram.run("What is 2x+5 = -3x + 7?")
# 打印计算和求解结果
print(result)
功能: 搜索YouTube视频。 类别: 网络搜索 重要程度: ⭐️
主要功能:该Agent演示了如何使用YouTubeSearchTool工具来搜索YouTube视频。
该Agent的作用是什么
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)
作者:牛客492812512号
链接:langchain agent工具介绍(一)_牛客网
来源:牛客网