creating chat agent with langchain and openai getting no attribute error

题意:

使用 LangChain 和 OpenAI 创建聊天代理时遇到“没有属性错误”(Getting "no attribute" error when creating a chat agent with LangChain and OpenAI)

问题背景:

I'm trying to test a chat agent using the python code below. I'm using langchain agent and tool from langchain. I'm defining a couple of simple functions for the LLM to use as tools when a prompt mentions something relevant to the tool. I'm using the openai gpt-3.5-turbo model for the LLM. I'm getting the error message below when trying to run conversational_agent with a simple prompt to return a random number. The function defined for the tool should do this easily. I'm getting the error message below mentioning that openai doesn't have the attribute. Does anyone see what the issue might be and can you suggest how to fix it?

我正在尝试使用下面的 Python 代码来测试一个聊天代理。我使用了 LangChain 的 agent 和 tool 功能。我为大型语言模型(LLM)定义了一些简单的函数,作为工具使用,当提示包含与工具相关的内容时,这些函数会被调用。我使用的是 OpenAI 的 gpt-3.5-turbo 模型作为 LLM。但是,当我尝试使用一个简单的提示来运行 conversational_agent 以返回一个随机数时,遇到了下面的错误消息。为工具定义的函数应该可以轻松完成这个任务。但是,我收到的错误消息提到 openai 没有该属性。请问有人知道问题可能出在哪里,以及如何修复吗?

code:        代码如下:

from config import api_key,new_personal_api_keyapikey=new_personal_api_key# apikey=api_keyimport osos.environ['OPENAI_API_KEY'] = apikeyfrom langchain.chains.conversation.memory import ConversationBufferWindowMemoryfrom langchain.agents import Tool
from langchain.tools import BaseTooldef meaning_of_life(input=""):return 'The meaning of life is 42 if rounded but is actually 42.17658'life_tool = Tool(name='Meaning of Life',func= meaning_of_life,description="Useful for when you need to answer questions about the meaning of life. input should be MOL "
)import randomdef random_num(input=""):return random.randint(0,5)random_tool = Tool(name='Random number',func= random_num,description="Useful for when you need to get a random number. input should be 'random'"
)from langchain import OpenAI 
from langchain.chat_models import ChatOpenAI# Set up the turbo LLM
turbo_llm = ChatOpenAI(temperature=0,model_name='gpt-3.5-turbo'
)from langchain.agents import initialize_agenttools = [random_tool, life_tool]# conversational agent memory
memory = ConversationBufferWindowMemory(memory_key='chat_history',k=3,return_messages=True
)# create our agent
conversational_agent = initialize_agent(agent='chat-conversational-react-description',tools=tools,llm=turbo_llm,
#     llm=local_llm,verbose=True,max_iterations=3,early_stopping_method='generate',memory=memory,handle_parsing_errors=True
)conversational_agent('Can you give me a random number?')

 error:        错误信息如下:

> Entering new AgentExecutor chain...---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[12], line 1
----> 1 conversational_agent('Can you give me a random number?')File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chains/base.py:310, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, metadata, run_name, include_run_info)308 except BaseException as e:309     run_manager.on_chain_error(e)
--> 310     raise e311 run_manager.on_chain_end(outputs)312 final_outputs: Dict[str, Any] = self.prep_outputs(313     inputs, outputs, return_only_outputs314 )File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chains/base.py:304, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, metadata, run_name, include_run_info)297 run_manager = callback_manager.on_chain_start(298     dumpd(self),299     inputs,300     name=run_name,301 )302 try:303     outputs = (
--> 304         self._call(inputs, run_manager=run_manager)305         if new_arg_supported306         else self._call(inputs)307     )308 except BaseException as e:309     run_manager.on_chain_error(e)File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/agents/agent.py:1146, in AgentExecutor._call(self, inputs, run_manager)1144 # We now enter the agent loop (until it returns something).1145 while self._should_continue(iterations, time_elapsed):
-> 1146     next_step_output = self._take_next_step(1147         name_to_tool_map,1148         color_mapping,1149         inputs,1150         intermediate_steps,1151         run_manager=run_manager,1152     )1153     if isinstance(next_step_output, AgentFinish):1154         return self._return(1155             next_step_output, intermediate_steps, run_manager=run_manager1156         )File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/agents/agent.py:933, in AgentExecutor._take_next_step(self, name_to_tool_map, color_mapping, inputs, intermediate_steps, run_manager)930     intermediate_steps = self._prepare_intermediate_steps(intermediate_steps)932     # Call the LLM to see what to do.
--> 933     output = self.agent.plan(934         intermediate_steps,935         callbacks=run_manager.get_child() if run_manager else None,936         **inputs,937     )938 except OutputParserException as e:939     if isinstance(self.handle_parsing_errors, bool):File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/agents/agent.py:546, in Agent.plan(self, intermediate_steps, callbacks, **kwargs)534 """Given input, decided what to do.535 536 Args:(...)543     Action specifying what tool to use.544 """545 full_inputs = self.get_full_inputs(intermediate_steps, **kwargs)
--> 546 full_output = self.llm_chain.predict(callbacks=callbacks, **full_inputs)547 return self.output_parser.parse(full_output)File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chains/llm.py:298, in LLMChain.predict(self, callbacks, **kwargs)283 def predict(self, callbacks: Callbacks = None, **kwargs: Any) -> str:284     """Format prompt with kwargs and pass to LLM.285 286     Args:(...)296             completion = llm.predict(adjective="funny")297     """
--> 298     return self(kwargs, callbacks=callbacks)[self.output_key]File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chains/base.py:310, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, metadata, run_name, include_run_info)308 except BaseException as e:309     run_manager.on_chain_error(e)
--> 310     raise e311 run_manager.on_chain_end(outputs)312 final_outputs: Dict[str, Any] = self.prep_outputs(313     inputs, outputs, return_only_outputs314 )File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chains/base.py:304, in Chain.__call__(self, inputs, return_only_outputs, callbacks, tags, metadata, run_name, include_run_info)297 run_manager = callback_manager.on_chain_start(298     dumpd(self),299     inputs,300     name=run_name,301 )302 try:303     outputs = (
--> 304         self._call(inputs, run_manager=run_manager)305         if new_arg_supported306         else self._call(inputs)307     )308 except BaseException as e:309     run_manager.on_chain_error(e)File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chains/llm.py:108, in LLMChain._call(self, inputs, run_manager)103 def _call(104     self,105     inputs: Dict[str, Any],106     run_manager: Optional[CallbackManagerForChainRun] = None,107 ) -> Dict[str, str]:
--> 108     response = self.generate([inputs], run_manager=run_manager)109     return self.create_outputs(response)[0]File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chains/llm.py:120, in LLMChain.generate(self, input_list, run_manager)118 callbacks = run_manager.get_child() if run_manager else None119 if isinstance(self.llm, BaseLanguageModel):
--> 120     return self.llm.generate_prompt(121         prompts,122         stop,123         callbacks=callbacks,124         **self.llm_kwargs,125     )126 else:127     results = self.llm.bind(stop=stop, **self.llm_kwargs).batch(128         cast(List, prompts), {"callbacks": callbacks}129     )File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chat_models/base.py:459, in BaseChatModel.generate_prompt(self, prompts, stop, callbacks, **kwargs)451 def generate_prompt(452     self,453     prompts: List[PromptValue],(...)456     **kwargs: Any,457 ) -> LLMResult:458     prompt_messages = [p.to_messages() for p in prompts]
--> 459     return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chat_models/base.py:349, in BaseChatModel.generate(self, messages, stop, callbacks, tags, metadata, run_name, **kwargs)347         if run_managers:348             run_managers[i].on_llm_error(e)
--> 349         raise e350 flattened_outputs = [351     LLMResult(generations=[res.generations], llm_output=res.llm_output)352     for res in results353 ]354 llm_output = self._combine_llm_outputs([res.llm_output for res in results])File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chat_models/base.py:339, in BaseChatModel.generate(self, messages, stop, callbacks, tags, metadata, run_name, **kwargs)336 for i, m in enumerate(messages):337     try:338         results.append(
--> 339             self._generate_with_cache(340                 m,341                 stop=stop,342                 run_manager=run_managers[i] if run_managers else None,343                 **kwargs,344             )345         )346     except BaseException as e:347         if run_managers:File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chat_models/base.py:492, in BaseChatModel._generate_with_cache(self, messages, stop, run_manager, **kwargs)488     raise ValueError(489         "Asked to cache, but no cache found at `langchain.cache`."490     )491 if new_arg_supported:
--> 492     return self._generate(493         messages, stop=stop, run_manager=run_manager, **kwargs494     )495 else:496     return self._generate(messages, stop=stop, **kwargs)File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chat_models/openai.py:365, in ChatOpenAI._generate(self, messages, stop, run_manager, stream, **kwargs)363 message_dicts, params = self._create_message_dicts(messages, stop)364 params = {**params, **kwargs}
--> 365 response = self.completion_with_retry(366     messages=message_dicts, run_manager=run_manager, **params367 )368 return self._create_chat_result(response)File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chat_models/openai.py:297, in ChatOpenAI.completion_with_retry(self, run_manager, **kwargs)293 def completion_with_retry(294     self, run_manager: Optional[CallbackManagerForLLMRun] = None, **kwargs: Any295 ) -> Any:296     """Use tenacity to retry the completion call."""
--> 297     retry_decorator = _create_retry_decorator(self, run_manager=run_manager)299     @retry_decorator300     def _completion_with_retry(**kwargs: Any) -> Any:301         return self.client.create(**kwargs)File ~/anaconda3/envs/llm_110623/lib/python3.10/site-packages/langchain/chat_models/openai.py:77, in _create_retry_decorator(llm, run_manager)68 def _create_retry_decorator(69     llm: ChatOpenAI,70     run_manager: Optional[71         Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]72     ] = None,73 ) -> Callable[[Any], Any]:74     import openai76     errors = [
---> 77         openai.error.Timeout,78         openai.error.APIError,79         openai.error.APIConnectionError,80         openai.error.RateLimitError,81         openai.error.ServiceUnavailableError,82     ]83     return create_base_retry_decorator(84         error_types=errors, max_retries=llm.max_retries, run_manager=run_manager85     )AttributeError: module 'openai' has no attribute 'error'

问题解决:

this seems like version incompatibility issue. I checked the open api pypi:

“这看起来像是版本不兼容的问题。我检查了 openapi 的 PyPI 页面:”

looks like it was just updated yesterday. probably langchain has not been updated so both libraries are conflicting. if you downgrade your openai sdk it should work

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

房产销售系统|基于java和vue的房产销售系统(源码+数据库+文档)

房产销售|房地产|卖房系统 目录 基于java和vue的房产销售系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,…

95分App全程正品保障,赋能闲置消费新风尚

在当今快节奏、高消费的时代,闲置经济正以前所未有的速度崛起,成为新一代消费者的新宠。越来越多的年轻人开始拥抱闲置商品,将“断舍离”与“物尽其用”的理念融入日常生活,催生了闲置交易市场的空前繁荣。曾几何时,购…

【iOS】UIViewController的生命周期

UIViewController的生命周期 文章目录 UIViewController的生命周期前言UIViewController的一个结构UIViewController的函数的执行顺序运行代码viewWillAppear && viewDidAppear多个视图控制器跳转时的生命周期pushpresent 小结 前言 之前对于有关于UIViewControlller的…

补:在Spring Boot 当中使用 Thymeleaf 视图解析器

补&#xff1a;在Spring Boot 当中使用 Thymeleaf 视图解析器 想要在 Spring Boot 当中使用 Thymeleaf 视图&#xff0c;就需要导入相关的 jar 依赖。在 pom.xml 文件中配置 。 <!-- 引入 thymeleaf-start ,项目会自动完成配置&#xff0c;--><dependency>…

网络操作系统项目

部署与管理Active Directory 项目基础知识 活动目录是一种由微软开发的网络服务&#xff0c;用于在网络环境中管理和组织用户、计算机和其他网络资源。它是基于目录服务的概念&#xff0c;类似于电话号码簿。 活动目录主要用于集中管理网络中的用户帐户、组织单位、计算机、打…

统一建模语言UML之类图(Class Diagram)(表示|关系|举例)

文章目录 1.UML2.Class Diagram2.1 类图的表示2.2 类间的关系2.2.1 关联2.2.2 聚合2.2.3 组合2.2.4 泛化&#xff08;继承&#xff09;2.2.5 实现&#xff08;接口实现&#xff09;2.2.6 依赖 2.3 类图的作用 参考&#xff1a;Class Diagram | Unified Modeling Language (UML)…

大数据新视界 --大数据大厂之Flink强势崛起:大数据新视界的璀璨明珠

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

electron react离线使用monaco-editor

1.安装monaco-editor/react和monaco-editor pnpm i monaco-editor/react pnpm i monaco-editor 2.引入并做monaco-editor离线配置 import Editor, { DiffEditor, useMonaco, loader } from monaco-editor/react import * as monaco from monaco-editor import editorWorke…

软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)

软考 – 软件设计师 – 二轮复习(3) – 数据结构(持续更新) 文章目录 软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)前言一、时间、空间复杂度二、递归式时间复杂度三、线性表四、栈五、栈和队列六、串七、朴素模式匹配八、KMP模式匹配九、数组十、矩阵十一、树、二…

HarmonyOS开发实战( Beta5.0)自定义装饰器实践规范

介绍 本示例介绍通过自定义装饰器在自定义组件中自动添加inspector (布局回调)方法并进行调用。 效果图预览 不涉及 使用说明 在自定义组件上添加自定义装饰器CallbackObserver&#xff0c;并根据参数设置对应的方法名和需要绑定的组件的ID。编译工程&#xff0c;可以根据…

四款音频剪辑软件免费使用,你更pick哪一个?

视频剪辑知随着软件的不断更新&#xff0c;入门门槛和操作难度也随之变得越来越低&#xff0c;但是依然有不少人不知道剪辑视频要用什么工具&#xff0c;作为一个视频剪辑爱好者&#xff0c;我尝试过不少编辑软件&#xff0c;今天就来跟大家分享一下四款视频剪辑软件在实际使用…

通用四期ARM架构银河麒麟桌面操作系统V10【安装、配置FTP客户端】

一、操作环境 服务端&#xff1a;银河麒麟桌面操作系统V10SP1 客户端&#xff1a;银河麒麟桌面操作系统V10SP1 二、服务端配置 注&#xff1a;以下命令均在终端执行 鼠标点击桌面右键&#xff0c;选择打开终端 操作步骤&#xff1a; 1、安装vsftpd软件&#xff1a;如果提…

深入理解TCP三次握手

在网络通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个可靠的、面向连接的协议&#xff0c;它保证了数据包的顺序和完整性。为了建立一个稳定的连接&#xff0c;TCP 使用了一个被称为 三次握手&#xff08;Three-W…

滑动窗口(1)_长度最小的子数组

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(1)_长度最小的子数组 收录于专栏【经典算法练习】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. …

一款高效、简洁的帧动画生成工具

在现代网页设计和移动应用开发中&#xff0c;帧动画是一种常见的动画实现方式&#xff0c;它通过连续显示一系列静态图片来模拟动画效果。然而&#xff0c;手动创建和管理这些帧动画图片不仅耗时费力&#xff0c;而且效率低下。为此&#xff0c;gka 应运而生&#xff0c;它是一…

Java学习Day41:骑龙救!(springMVC)

springMVC与sevlet都是对应表现层web的&#xff0c;但是越复杂的项目使用SpringMVC越方便 基于Java实现MVC模型的轻量级web框架 目标&#xff1a; 小案例&#xff1a; 1.导入依赖 spring-context: 提供 Spring 框架的核心功能&#xff0c;如依赖注入、事件发布和其他应用上…

无人机之伯努利定律

无人机的伯努利定律是解释无人机飞行原理的关键理论之一&#xff0c;它主要阐述了流体&#xff08;如空气&#xff09;在流动过程中速度与压力之间的关系。以下是对无人机伯努利定律的详细解释&#xff1a; 一、伯努利定律的基本原理 伯努利定律是流体力学中的一个基本原理&am…

【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录 目标 准备工作 爬取数据的开始时间和结束时间 爬取数据并解析 将数据转换为DataFrame并保存为CSV文件 本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点: 使用r…

Word 脚注与正文之间的空行怎么删除啊?

全网都搜索不到解决方案&#xff0c;难道只有我一个人遇到这个问题了吗&#xff1f; 无语&#xff0c;。、;

Java导入、导出excel保姆级教程(附封装好的工具类)

前言 我们在日常开发中&#xff0c;一定遇到过要将数据导出为Excel的需求&#xff0c;那么怎么做呢&#xff1f;在做之前&#xff0c;我们需要思考下Excel的组成。Excel是由四个元素组成的分别是&#xff1a;WorkBook(工作簿)、Sheet(工作表)、Row(行)、Cell(单元格)&#xff…