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的房产销售系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,…

【hot100】力扣hot100部分题解

1.和为k的子数组 题目链接 注意:题目是连续的子数组。 因为数据有负数,用滑动窗口不太好做。 所以用数组前缀和。 数组前缀和就是从第1位到当前位的子数组的和。 每次遍历更新到当前位之前的前缀和,以对象的形式存储(key为前缀和&…

【0323】Postgres内核之 hash table sequentially search(seq_scan_tables、num_seq_scans)

0. seq scan tracking 我们在这里跟踪活跃的 hash_seq_search() 扫描。 需要这种机制是因为如果扫描正在进行时发生桶分裂(bucket split),它可能会访问两次相同的条目,甚至完全错过某些条目(如果它正在访问同一个分裂的桶中的条目)。因此,如果正在向表中插入数据,我们…

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

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

【iOS】UIViewController的生命周期

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

OpenXR Monado创建跨进程通信通道 ipc_connect

OpenXR Monado创建跨进程通信通道 ipc_connect monado/src/xrt/targets/openxr/target.c xrt_instance_create monado/src/xrt/ipc/client/ipc_client_instance.cipc_instance_create(ii, out_xinst);ipc_connectipc_c->ica ipc_client_android_create(android_globals_ge…

补:在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)…

使用 Watchdog 实现 Python 程序的自动重载

在开发 Python 程序时,特别是在开发图形用户界面(GUI)应用时,我们经常需要频繁修改代码并查看效果。每次修改后手动重启程序既耗时又繁琐。本文将介绍如何使用 Watchdog 库来实现 Python 程序的自动重载,大大提高开发效率。 什么是 Watchdog? Watchdog 是一个 Python 库…

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

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

力扣---80. 删除有序数组中的重复项 II

给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明&…

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模式匹配九、数组十、矩阵十一、树、二…

C#基础(10)变长参数和参数默认值

前言 作为函数的补充知识点&#xff0c;我们已经学习了ref和out&#xff0c;接下来两节我们继续来讲函数相关的内容。本节则讲解变长参数和参数默认值。 函数语法 关键字&#xff1a;params public void PrintNumbers(params int[] numbers) {for 相关逻辑 } 注意 params…

MySql批量迁移数据库

导出数据库 将指定数据库实例&#xff08;MYSQL_HOST、MYSQL_PORT、MYSQL_USER、MYSQL_PASSWORD&#xff09;中的所有数据库&#xff08;表结构、数据&#xff09;导出到指定目录&#xff08;BACKUP_DIR&#xff09;下的多个单独的SQL脚本&#xff0c;每个SQL脚本名称即为数据…

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

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

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

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

adb devices不显示连接设备怎么解决

adb devices不显示设备&#xff0c;首先用老办法检查。假如是显示adb这个命令不认识&#xff0c;那就是系统路径问题。假如能认识adb这个命令&#xff0c;那就检查一下手机有没有开usb调试。 但是我遇到了更奇怪的问题&#xff1a;我把网上的攻略都试了一遍&#xff0c;设备驱…

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

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