【LLM大模型】LangChain之工具Tools(上)

工具Tools

概述

工具是代理、链或LLM可以用来与世界互动的接口。它们结合了几个要素:

javascript
 代码解读
工具的名称

工具的描述

该工具输入的JSON模式

要调用的函数

是否应将工具结果直接返回给用户

LangChain通过提供统一框架集成功能的具体实现。在框架内,每个功能被封装成一个工具,具有自己的输入输出及处理方法。代理接收任务后,通过大模型推理选择适合的工具处理任务。一旦选定,LangChain将任务输入传递给该工具,工具处理输入生成输出。输出经过大模型推理,可用于其他工具的输入或作为最终结果返回给用户。

简单的说就是:代理根据任务类型和需求通过大模型推理选择工具处理任务,LangChain传递任务输入给工具生成输出,输出再经大模型推理,作为其他工具输入或最终结果返回给用户。

工具列表

具体工具Tools详情参考:Tools文档

工具名称中文说明
Alpha Vantage提供实时和历史金融市场数据的工具
Apify用于网络抓取和数据提取的云平台工具
ArXiv提供访问学术论文和文献的工具
AskNews为任何LLM注入最新的全球新闻(或历史新闻)的工具
AWS Lambda提供云函数或无服务器计算的工具
Shell (bash)提供让LLM使用它来执行任何shell命令的工具
Bearly Code Interpreter Bearly提供一个代码沙箱(代码解释器),允许远程执行代码的工具
Bing Search提供 Bing 搜索引擎查询结果的工具
Brave Search提供 Brave 搜索引擎查询结果的工具
ChatGPT Plugins插件工具,用于扩展 ChatGPT的功能
Connery Action Tool提供了各种即用型开源插件,以增加便利性的工具
Dall-E Image GeneratorOpenAI提供的开发文本到图像模型的工具
DataForSeo从各种搜索引擎获取搜索结果的工具
Dataherald提供自然语言到SQL的 API工具
DuckDuckGo Search提供 DuckDuckGo 搜索引擎查询结果的工具
E2B Data AnalysisE2B 的数据分析沙箱允许在沙箱环境中安全执行代码
Eden AI通过单个API轻松访问更多的AI功能API的工具
Eleven Labs Text2Speech一个实现文本转语音功能的工具
Exa Search完全为LLMs使用而设计的搜索引擎工具
File System提供与本地文件系统交互的工具集
Golden Query提供基于知识图谱的自然语言查询服务的工具
Google Cloud Text-to-Speech提供文本转语音功能的工具
Google Drive提供操作谷歌云端硬盘API的工具
Google Places提供 Google 地点信息和查询的工具
Google Search提供 Google 搜索引擎查询结果的工具
Google Serper用于网络搜索的工具,需要注册并获取 API 密钥
Gradio提供与 Gradio 应用交互的工具
GraphQL提供 GraphQL 查询的工具
HuggingFace Hub Tools提供了与 HuggingFace 库交互的工具
Human as a tool描述了如何将人类作为一个执行具体任务的工具
IFTTT WebHooks提供与 IFTTT WebHooks 交互的工具
Lemon Agent用于实现自动化工作流的工具
OpenWeatherMap提供查询天气信息的工具
PubMed提供 PubMed 医学文献查询的工具
Requests提供网络信息获取功能的工具
SceneXplain提供图像描述服务的工具
Search Tools提供各种搜索工具的工具集
SearxNG Search提供自托管 SearxNG 搜索 API 查询的工具
SerpAPI提供网络搜索的工具
Twilio提供 SMS 或其他消息通道发送消息的工具
Wikipedia提供查询 Wikipedia 百科全书的工具
Wolfram Alpha提供查询 Wolfram Alpha 的知识引擎的工具
YouTube提供 YouTube 视频搜索的工具
Zapier Natural Language Actions API用于自然语言处理的API 工具

参考连接

内置工具:有关所有内置工具的列表,请参阅此页面

自定义工具:虽然内置工具很有用,但很可能必须定义自己的工具。请参阅本指南

工具包:工具包是可以很好地协同工作的工具的集合。请参阅此页面

工具的初步认识

Wikidata工具

维基数据是一个自由开放的知识库,人类和机器都可以阅读和编辑。维基数据是世界上最大的开放知识库之一。

WikipediaAPIWrapper是维基百科的包装器,通过它进行维基百科的搜索查询

安装Wikidata相关库

python
 代码解读
pip install wikipedia

具体实现代码如下

python
 代码解读
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

# 初始化工具 可以根据需要进行配置
# 使用包装器WikipediaAPIWrapper进行搜索并获取页面摘要。默认情况下,它将返回前 k 个结果的页面摘要。它通过 doc_content_chars_max 限制文档内容。
api_wrapper = WikipediaAPIWrapper(top_k_results=1, doc_content_chars_max=100)
tool = WikipediaQueryRun(api_wrapper=api_wrapper)

# 工具默认名称
print(tool.name)
# 工具默认的描述
print(tool.description)
# 输入内容 默认JSON模式
print(tool.args)
# 工具是否应该直接返回给用户
print(tool.return_direct)

# 可以用字典输入来调用这个工具
print(tool.run({"query": "langchain"}))
# 使用单个字符串输入来调用该工具。
print(tool.run("langchain"))
python
 代码解读
wikipedia
A wrapper around Wikipedia. Useful for when you need to answer general questions about people, places, companies, facts, historical events, or other subjects. Input should be a search query.
{'query': {'title': 'Query', 'type': 'string'}}
False
Page: LangChain
Summary: LangChain is a framework designed to simplify the creation of applications 
Page: LangChain
Summary: LangChain is a framework designed to simplify the creation of applications 

自定义默认工具​

可以修改参数的内置名称、描述和JSON模式。

在定义参数的JSON模式时,重要的是输入保持与函数相同,因此不应更改它,但可以轻松地为每个输入定义自定义描述。

python
 代码解读
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
from langchain_core.pydantic_v1 import BaseModel, Field

# 初始化工具 可以根据需要进行配置
api_wrapper = WikipediaAPIWrapper(top_k_results=1, doc_content_chars_max=100)


class WikiInputs(BaseModel):
    """维基百科工具的输入。"""

    query: str = Field(
        description="维基百科中的查询,字数应在3个字以内"
    )


tool = WikipediaQueryRun(
    name="wiki-tool",
    description="在维基百科中查找内容",
    args_schema=WikiInputs,
    api_wrapper=api_wrapper,
    return_direct=True,
)

print(tool.run("langchain"))

工具的加载方式

通常使用以下形式代码加载工具

python
 代码解读
from langchain.agents import load_tools

tool_names = ['tool_name_1','tool_name_2']
tools = load_tools(tool_names)

有些工具(链、代理)可能需要使用LLM来初始化

python
 代码解读
from langchain.agents import load_tools

tool_names = ['tool_name_1','tool_name_2']
llm = ChatOpenAI(temperature=0.0)
tools = load_tools(tool_names, llm=llm)

自定义工具

在LangChain中,自定义工具有多种方法

@tool装饰器

@tool装饰器是定义自定义工具的最简单方法。装饰器默认使用函数名称作为工具名称,但可以通过传递字符串作为第一个参数来覆盖此设置。此外,装饰器将使用函数的文档字符串作为工具的描述 - 因此必须提供文档字符串。

示例:

python
 代码解读
from langchain.tools import tool

@tool
def multiply(a: int, b: int) -> int:
    """Multiply two numbers."""
    return a * b

print(multiply.name)
print(multiply.description)
print(multiply.args)

res = multiply.run({"a": 10, "b": 20})
print(res)

在这里插入图片描述

输出: 通过将工具名称和 JSON 参数传递到工具装饰器来自定义

python
 代码解读
from langchain.pydantic_v1 import BaseModel, Field
from langchain.tools import tool

class SearchInput(BaseModel):
    query: str = Field(description="should be a search query")


@tool("search-tool", args_schema=SearchInput, return_direct=True)
def search(query: str) -> str:
    """Look up things online."""
    return "LangChain"

print(search.name)
print(search.description)
print(search.args)

res = search.run({"query": "start test"})
print(res)

在这里插入图片描述

BaseTool

通过子类化 BaseTool 类来明确定义自定义工具。这可以最大程度地控制工具定义,但工作量会更大。

示例:

python
 代码解读
from langchain.pydantic_v1 import BaseModel, Field
from typing import Optional, Type
from langchain_core.tools import BaseTool

from langchain.callbacks.manager import (
    AsyncCallbackManagerForToolRun,
    CallbackManagerForToolRun,
)


class CalculatorInput(BaseModel):
    a: int = Field(description="第一个数字")
    b: int = Field(description="第二个数字")


class CustomCalculatorTool(BaseTool):
    name = "Calculator"
    description = "在需要回答有关数学的问题时很有用"
    args_schema: Type[BaseModel] = CalculatorInput
    return_direct: bool = True

    def _run(
            self, a: int, b: int, run_manager: Optional[CallbackManagerForToolRun] = None
    ) -> str:
        """使用该工具。"""
        return a * b

    async def _arun(
            self,
            a: int,
            b: int,
            run_manager: Optional[AsyncCallbackManagerForToolRun] = None,
    ) -> str:
        """异步使用该工具。"""
        raise NotImplementedError("Calculator 不支持异步")


multiply = CustomCalculatorTool()
print(multiply.name)
print(multiply.description)
print(multiply.args)
print(multiply.return_direct)

res = multiply.run({"a": 10, "b": 20})
print(res)

输出:
在这里插入图片描述

StructuredTool

还可以使用StructuredTool数据类。此方法是前两种方法的混合。它比从 BaseTool 类继承更方便,但提供的功能比仅使用装饰器更多

python
 代码解读
from langchain_core.tools import StructuredTool
def search_function(query: str):
    result = query + " : LangChain"
    return result

search = StructuredTool.from_function(
    func=search_function,
    name="Search",
    description="在需要回答有关当前事件的问题时很有用",
)

print(search.name)
print(search.description)
print(search.args)

res = search.run("start query")
print(res)

在这里插入图片描述

自定义 args_schema 来提供有关输入的更多信息

python
 代码解读
from langchain.pydantic_v1 import BaseModel, Field
from langchain_core.tools import StructuredTool
class CalculatorInput(BaseModel):
    a: int = Field(description="第一个数字")
    b: int = Field(description="第二个数字")

def multiply(a: int, b: int) -> int:
    """将两个数字相乘。"""
    return a * b

calculator = StructuredTool.from_function(
        func=multiply,
        name="Calculator",
        description="multiply numbers",
        args_schema=CalculatorInput,
        return_direct=True,
    )

res = calculator.run({"a":10,"b":20})
print(res)

处理工具错误

当工具遇到错误且异常未被捕获时,代理将停止执行。如果希望代理继续执行,可以引发 ToolException 并相应地设置 handle_tool_error。

python
 代码解读
from langchain_core.tools import StructuredTool
from langchain_core.tools import ToolException


def search_tool(s: str):
    raise ToolException("模拟出现异常")

search = StructuredTool.from_function(
    func=search_tool,
    name="Search_tool",
    description="一个搜索工具",
    handle_tool_error=True,
)

res = search.run("test")
print(res)

当ToolException抛出时,代理不会停止工作,可以根据handle_tool_error工具的变量来处理异常,并将处理结果作为观察返回给代理,并以红色打印。

python
 代码解读
from langchain_core.tools import StructuredTool
from langchain_core.tools import ToolException


def search_tool(s: str):
    raise ToolException("模拟出现异常")


def _handle_error(error: ToolException) -> str:
    result = "工具执行发生错误:" + error.args[0]
    return result


search = StructuredTool.from_function(
    func=search_tool,
    name="Search_tool",
    description="一个搜索工具",
    handle_tool_error=_handle_error,
)

res = search.run("test")
print(res)

在这里插入图片描述

如何系统的去学习AI大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

全套 《LLM大模型入门+进阶学习资源包↓↓↓ 获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值