文档翻译代码突发报错:LLMChain的aapply调用出现OpenAIObject运算错误
问题
原本一套可正常运行的文档(pdf、docx、文本)翻译代码,近期未做任何改动,但近几日突然出现报错:
Error in doc_translate_openai of openai i.e unsupported operand type(s) for +=: 'OpenAIObject' and 'OpenAIObject' Traceback (most recent call last): File "/home/site/wwwroot/translation_services/gpt.py", line 773, in doc_translate_openai await doc_translator.translate_document( File "/home/site/wwwroot/translation_services/gpt.py", line 313, in translate_document await self._translate_docx(docx_file) File "/home/site/wwwroot/translation_services/gpt.py", line 189, in _translate_docx await self._translate_xml() File "/home/site/wwwroot/translation_services/gpt.py", line 211, in _translate_xml translated_texts = await self._batch_translate(texts) File "/home/site/wwwroot/translation_services/gpt.py", line 236, in _batch_translate results = await self.translation_chain.aapply(inputs) File "/home/site/wwwroot/.python_packages/lib/site-packages/langchain/chains/llm.py", line 206, in aapply raise e File "/home/site/wwwroot/.python_packages/lib/site-packages/langchain/chains/llm.py", line 203, in aapply response = await self.agenerate(input_list, run_manager=run_manager) File "/home/site/wwwroot/.python_packages/lib/site-packages/langchain/chains/llm.py", line 116, in agenerate return await self.llm.agenerate_prompt( File "/home/site/wwwroot/.python_packages/lib/site-packages/langchain/chat_models/base.py", line 245, in agenerate_prompt return await self.agenerate( File "/home/site/wwwroot/.python_packages/lib/site-packages/langchain/chat_models/base.py", line 210, in agenerate llm_output = self._combine_llm_outputs([res.llm_output for res in results]) File "/home/site/wwwroot/.python_packages/lib/site-packages/langchain/chat_models/openai.py", line 311, in _combine_llm_outputs overall_token_usage[k] += v TypeError: unsupported operand type(s) for +=: 'OpenAIObject' and 'OpenAIObject'
报错发生在调用results = await self.translation_chain.aapply(inputs)方法并传入字典时。
解决方案
- 版本兼容调整:该错误源于Langchain与OpenAI SDK版本不匹配,OpenAI SDK返回的
token_usage从普通字典变为OpenAIObject类型,旧版Langchain仍用字典累加逻辑处理。可选择:- 降级Langchain到兼容版本,比如指定安装
langchain==0.0.286及以下; - 升级Langchain到修复该问题的新版本(如0.1.x系列)。
- 降级Langchain到兼容版本,比如指定安装
- 临时源码修复:若无法调整包版本,可手动修改
langchain/chat_models/openai.py中的_combine_llm_outputs方法,先将OpenAIObject转为字典再累加:def _combine_llm_outputs(self, llm_outputs: List[Dict]) -> Dict: overall_token_usage = {} for output in llm_outputs: token_usage = output.get("token_usage", {}) # 转换OpenAIObject为字典 if hasattr(token_usage, 'dict'): token_usage = token_usage.dict() for k, v in token_usage.items(): if k in overall_token_usage: overall_token_usage[k] += v else: overall_token_usage[k] = v return {"token_usage": overall_token_usage} - 排查依赖自动更新:用
pip freeze查看当前langchain和openai版本,确认是否有依赖包自动更新导致版本冲突,必要时锁定依赖版本。
内容的提问来源于stack exchange,提问作者Aniruddha
相关产品推荐
相关产品推荐

