开源模型应用落地-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

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi