开源模型应用落地-LangChain高阶-Tools工具-集成agents(四)

本文主要是介绍开源模型应用落地-LangChain高阶-Tools工具-集成agents(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

    LangChain 的 tools 是一系列关键组件,它们提供了与外部世界进行交互的能力。通过适当的使用这些组件,可以简单实现如执行网络搜索以获取最新信息、调用特定的 API 来获取数据或执行特定的操作、与数据库进行交互以获取存储的信息等需求。

    本章基于agents进一步串联工具(tools ),从而将大语言模型的能力和本地、云服务能力结合。


二、术语

2.1. agent

    是 LangChain 中的代理模块,它可以使用语言模型(LLM)动态地调用行为链(Chains),根据用户的输入调用不同的行为。代理可以访问单一工具,并根据用户输入确定要使用的工具,也可以使用多个工具,并使用一个工具的输出作为下一个工具的输入。


三、前提条件 

3.1. 基础环境及前置条件

  1.  操作系统:centos7

3.2. 安装虚拟环境

conda create --name langchain python=3.10
conda activate langchain
pip install langchain langchain-openai

3.3. 创建Wolfram账号

开源模型应用落地-LangChain高阶-Tools工具-WolframAlpha(二)

3.4. 创建serper账号

开源模型应用落地-LangChain高阶-Tools工具-GoogleSerperAPIWrapper(三)


四、技术实现

4.1.询问广州白云山位置

# -*-  coding = utf-8 -*-
import json
import os
import warnings
import traceback
from langchain.agents import initialize_agent, Tool, AgentType
from langchain_community.utilities.wolfram_alpha import WolframAlphaAPIWrapper
from langchain_openai import ChatOpenAI
from langchain_community.utilities import GoogleSerperAPIWrapperwarnings.filterwarnings("ignore")os.environ["SERPER_API_KEY"] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
os.environ["WOLFRAM_ALPHA_APPID"] = "xxxxxx-xxxxxx"API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
os.environ["OPENAI_API_KEY"] = API_KEYdef query_location(region):# print(f'region: {region}')search = GoogleSerperAPIWrapper(type="places")results = search.results(region)# print(f'results: {results}')try:places = results['places']# places_object = json.loads(places)if len(places) > 0:place = places[0]address = place['address']latitude = place['latitude']longitude = place['longitude']print(f'address: {address}, latitude: {latitude}, longitude: {longitude}')return addresselse:return 'unknown'except Exception as e:traceback.print_exc()return 'unknown'def mathematical_calculations(info):wolfram = WolframAlphaAPIWrapper()result = wolfram.run(info)return resulttools = [Tool(name = "query_location",func=query_location,description="This function is used to query the location of a specified region, with the input parameter being the region"),Tool(name = "mathematical_calculations",func=mathematical_calculations,description="This function is used for mathematical calculations, and the input parameters are mathematical expressions")
]if __name__ == '__main__':llm = ChatOpenAI(model_name='gpt-3.5-turbo-1106', temperature=0.9, max_tokens=1024)agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,max_iterations=3,verbose=True)result = agent.run('广州白云山在哪里?')print(f'result: {result}')

调用结果:

4.2.求解数学表达式

# -*-  coding = utf-8 -*-
import json
import os
import warnings
import traceback
from langchain.agents import initialize_agent, Tool, AgentType
from langchain_community.utilities.wolfram_alpha import WolframAlphaAPIWrapper
from langchain_openai import ChatOpenAI
from langchain_community.utilities import GoogleSerperAPIWrapperwarnings.filterwarnings("ignore")os.environ["SERPER_API_KEY"] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
os.environ["WOLFRAM_ALPHA_APPID"] = "xxxxxx-xxxxxx"API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
os.environ["OPENAI_API_KEY"] = API_KEYdef query_location(region):# print(f'region: {region}')search = GoogleSerperAPIWrapper(type="places")results = search.results(region)# print(f'results: {results}')try:places = results['places']# places_object = json.loads(places)if len(places) > 0:place = places[0]address = place['address']latitude = place['latitude']longitude = place['longitude']print(f'address: {address}, latitude: {latitude}, longitude: {longitude}')return addresselse:return 'unknown'except Exception as e:traceback.print_exc()return 'unknown'def mathematical_calculations(info):wolfram = WolframAlphaAPIWrapper()result = wolfram.run(info)return resulttools = [Tool(name = "query_location",func=query_location,description="This function is used to query the location of a specified region, with the input parameter being the region"),Tool(name = "mathematical_calculations",func=mathematical_calculations,description="This function is used for mathematical calculations, and the input parameters are mathematical expressions")
]if __name__ == '__main__':llm = ChatOpenAI(model_name='gpt-3.5-turbo-1106', temperature=0.9, max_tokens=1024)agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,max_iterations=3,verbose=True)result = agent.run('求解:2x + 5 = -3x + 7')print(f'result: {result}')

调用结果:


五、附带说明

5.1.AgentType取值

  • AgentType.ZERO_SHOT_REACT_DESCRIPTION表示零样本反应式描述代理,它利用 ReAct 框架根据工具的描述来决定使用哪个工具。这种代理可以使用多个工具,但需要为每个工具提供描述信息。工具的选择单纯依靠工具的描述信息。
  • AgentType.SELF_ASK_WITH_SEARCH表示 Self-Ask with Search 代理类型。这种代理使用一个名为“中间应答”的工具,该工具能够查找问题的真实答案。它的工作原理是利用网络搜索 API 进行搜索,并将搜索结果作为中间答案,然后继续进行提问和搜索,直到找到最终的答案。
  • AgentType.REACT_DOCSTORE使用 ReAct 框架与文档存储进行交互。适用于需要从文档存储中获取信息并进行处理的任务。通过使用“Search”和“Lookup”工具,它可以实现对文档的搜索和查找功能,帮助用户快速找到所需的信息。
  • AgentType.CONVERSATIONAL_REACT_DESCRIPTION主要用于对话场景。它使用 ReAct 框架来决定使用哪个工具,并使用内存来记忆先前的对话交互。这种代理类型的设计旨在使代理能够进行对话并提供帮助。通过使用 ReAct 框架,它可以根据对话的上下文和需求选择合适的工具来执行任务,并将工具执行的结果作为上下文反馈给代理,以便其继续进行推理和回答。

5.2.Agent的执行流程

  1. 接收用户输入:接收用户的输入,并将其作为执行的起点。
  2. 规划动作:根据用户输入和当前状态,agent 会规划下一步的动作。这可能包括选择使用哪个工具、确定工具的输入等。
  3. 执行动作:使用所选的工具执行动作,并记录动作的结果。
  4. 处理结果:处理动作的结果,并根据结果决定下一步的动作。
  5. 重复步骤:不断重复上述步骤,直到达到最终的目标或满足特定的条件。

    注意:具体的执行流程可能因 agent 的类型和配置而有所不同。

5.3.注意事项

  1. 工具选择和配置:要确保选择合适的工具,并正确配置它们。
  2. 输入处理:仔细处理用户输入,确保其清晰和准确。
  3. 工具依赖:注意工具之间的依赖关系,避免不必要的冲突。
  4. 性能和效率:关注执行过程中的性能和效率,优化可能的瓶颈。
  5. 错误处理:做好错误处理,应对可能出现的异常情况。
  6. 环境适应性:根据不同的应用场景,调整 Agent 的行为和策略。

这篇关于开源模型应用落地-LangChain高阶-Tools工具-集成agents(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/959740

相关文章

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA