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)
    
    
全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务