netease-youdao / QAnything

Question and Answer based on Anything.
https://qanything.ai
GNU Affero General Public License v3.0
11.98k stars 1.17k forks source link

[BUG] <提问抛出异常> #116

Open icenicky opened 9 months ago

icenicky commented 9 months ago

是否已有关于该错误的issue或讨论? | Is there an existing issue / discussion for this?

该问题是否在FAQ中有解答? | Is there an existing answer for this in FAQ?

当前行为 | Current Behavior

所有的提问都会报错 'NoneType' object is not subscriptable

期望行为 | Expected Behavior

No response

运行环境 | Environment

- OS:Ubuntu 20.04 / Windows 10 WSL2
NVIDIA Driver:   551.52
CUDA: 12.2
Docker Compose:  1.29.2
- NVIDIA GPU Memory:16GB

QAnything日志 | QAnything logs

INFO:httpx:HTTP Request: POST http://localhost:7802/v1/chat/completions "HTTP/1.1 200 OK" INFO:root:Error calling API: 'NoneType' object is not subscriptable Exception ignored in: <generator object OpenAICustomLLM._call at 0x7fa8f26af920> Traceback (most recent call last): File "/workspace/qanything_local/qanything_kernel/core/local_doc_qa.py", line 249, in get_knowledge_based_answer yield response, history RuntimeError: generator ignored GeneratorExit

复现方法 | Steps To Reproduce

No response

备注 | Anything else?

No response

Meaninles commented 9 months ago

请问解决了吗

fallbernana123456 commented 9 months ago

我也是碰到这个问题。请问有解决办法吗

fredfany commented 9 months ago

两位的问题有何进展,我遇到同样的问题,我的情况是使用了新的第三方LLM Yuan-2.0,启动成功,之后提问所有问题都出现这种情况,怀疑可能是兼容性问题,比如QAnyting为Yuan-2.0准备的模版不合适。

INFO:httpx:HTTP Request: POST http://localhost:7802/v1/chat/completions "HTTP/1.1 200 OK" INFO:root:Error calling API: 'NoneType' object is not subscriptable

rerank_server.log提示应该是获取到了正确答案:

local rerank query: 韦小宝住在哪里 local rerank passages number: 2 local rerank passages: ['姓名韦小宝 性别男 民族汉 出生1654年12月20日 住址北京市东城区景山前街4号 紫禁城敬事房 公民身份证号码11204416541220243X', '教育基金会 服务指南 常用电话 办公电话 >后勤服务 乘车路线 旅游景点 餐饮住宿 常用链接 首页 学校概况 学校简介 学校章程 学校标志 现任领导 校情统计 历史沿革 历任领导 校园导游 学校单位 教师队伍 中国科学院院士 中国工程院院士 教学名 师 教授研究员 人才培养 科学研究 国际交流 社会服务 科技示范 科技产业 出版社 校园文化 校友总会 教育基金会 服务指南 常用电话 办公电话 后勤服务 乘车路线 旅游景点 餐饮住宿 常用链接 在校生 教 职工 校友 考生与访客 旧版网站 ENGLISH 学校概况 学校简介 学校章程 学校标志 现任领导 校情统计 历史沿革 历任领导 校园导游 学校概况 学校简介 学校章程 学校标志 现任领导 校情统计 历史沿革 历>任领导 校园导游 您现在的位置: 首页 - 学校概况 - 现任领导 现任领导 党委书记 黄思光 校长 吴普特 党委副书记 吴普特 党委常务副书记 邬小撑 常务副校长 党委副书记 陈\u3000红 闫祖书 副校长 >马建华 罗\u3000军 陈玉林 郑英宁 韦革宏 房玉林 纪委书记 陈\u3000红 党委常委 黄思光 吴普特 邬小撑 马建华 陈玉林 郑英宁 陈\u3000红 闫祖书 韦革宏 房玉林 孙\u3000马 李筱英 信息公开 人才招聘 博士后招聘 留学服务 招生信息 学生就业 快速通道 电子政务 校长信箱 图书文献 电子邮箱 一网通办 人事管理系统 财务综合服务平台 研究生管理系统 智慧后勤数字服务 本科教务管理系统 校园统一缴费平 台 合同管理系统 在线教育综合平台 大型设备共享 外事管理服务平台 采购服务系统 电子政务 校长信箱 图书文献 电子邮箱 一网通办 人事管理系统 财务综合服务平台 研究生管理系统 智慧后勤数字服务 本 科教务管理系统 校园统一缴费平台 合同管理系统 在线教育综合平台 大型设备共享 外事管理服务平台 采购服务系统 科教服务 乡村振兴学院(乡村振兴战略研究院) 秦岭研究院 国家节水灌溉杨凌工程技术>研究中心 测试中心 国家肉牛改良中心 实验动物中心 乡村振兴学院(乡村振兴战略研究院) 秦岭研究院 国家节水灌溉杨凌工程技术研究中心 测试中心 国家肉牛改良中心 实验动物中心 信息管理:党委宣传>部技术维护:网络与教育技术中心地址:陕西杨凌邮编:712100 版权所有 © 西北农林科技大学陕ICP备05001586号'] local rerank infer time: 0.01092982292175293 s rerank res: [[ 0.3904] [-0.1114] [-0.354 ]] merge_tot_scores: [0.390380859375, 0] "rerank_server.log" 164L, 89103C

sanic_api.log里提示出错:

我的问题或指令:

韦小宝住在哪里

请根据上述参考信息回答我的问题或回复我的指令。前面的参考信息可能有用,也可能没用,你需要从我给出的参考信息中选出与我的问题最相关的那些,来为你的回答提供依据。回答一定要忠于原文,简洁但>不丢信息,不要胡乱编造。我的问题或指令是什么语种,你就用什么语种回复, 你的回复: INFO:root:prompt tokens: 747 INFO:root:streaming: True INFO:root:[{'role': 'user', 'content': '参考信息:\n姓名韦小宝 性别男 民族汉 出生1654年12月20日 住址北京市东城区景山前街4号 紫禁城敬事房 公民身份证号码11204416541220243X\n教育基金会 服>务指南 常用电话 办公电话 后勤服务 乘车路线 旅游景点 餐饮住宿 常用链接 首页 学校概况 学校简介 学校章程 学校标志 现任领导 校情统计 历史沿革 历任领导 校园导游 学校单位 教师队伍 中国科学院>院士 国家节水灌溉杨凌工程技术研究中心 测试中心 国家肉牛改良中心 实验动物中心 乡村振兴学院(乡村振兴战略研究院) 秦岭研究院 国家节水灌溉杨凌工程技术研究中心 测试中心 国家肉牛改良中心 实验>动物中心 信息管理:党委宣传部技术维护:网络与教育技术中心地址:陕西杨凌邮编:712100 版权所有 © 西北农林科技大学陕ICP备05001586号\n---\n我的问题或指令:\n韦小宝住在哪里\n---\n请根据上述>参考信息回答我的问题或回复我的指令。前面的参考信息可能有用,也可能没用,你需要从我给出的参考信息中选出与我的问题最相关的那些,来为你的回答提供依据。回答一定要忠于原文,简洁但不丢信息,>不要胡乱编造。我的问题或指令是什么语种,你就用什么语种回复,\n你的回复:'}] INFO:httpx:HTTP Request: POST http://localhost:7802/v1/chat/completions "HTTP/1.1 200 OK" INFO:root:Error calling API: 'NoneType' object is not subscriptable INFO:qa_logger:chat_data: {'user_info': 'zzp', 'kb_ids': ['KB5b72ff22213b42a7a6a1a9683b08baa5'], 'query': '韦小宝住在哪里', 'history': [['韦小宝住在哪里', "'NoneType' object is not subscriptable"]], 'prompt': '参考信息:\n姓名韦小宝 性别男 民族汉 出生1654年12月20日 住址北京市东城区景山前街4号 紫禁城敬事房 公民身份证号码11204416541220243X\n教育基金会 服务指南 常用 电话 办公电话 后勤服务 乘车路线 旅游景点 餐饮住宿 常用链接 首页 学校概况 学校简介 学校章程 学校标志 现任领导 校情统计 历史沿革 历任领导 校园导游 学校单位 教师队伍 中国科学院院士 中国工>程院院士 教学名师 教授研究员 人才培养 科学研究 国际交流 社会服务 科技示范 科技产业 出版社 校园文化 校友总会 教育基金会 服务指南 常用电话 办公电话 后勤服务 乘车路线 旅游景点 餐饮住宿 常>用链接 在校生 教职工 校友 考生与访客 旧版网站 ENGLISH 学校概况 学校简介 学校章程 学校标志 现任领导 校情统计 历史沿革 历任领导 校园导游 学校概况 学校简介 学校章程 学校标志 现任领导 校情>@@@

fredfany commented 9 months ago

补充一下,通过API接口调用发现内容返回正常,就是页面提示错误:

 curl --location 'http://47.93.62.12:1234/api/local_doc_qa/local_doc_chat'  --data '{ "user_id": "zzp",  "kb_ids": ["KB5b72ff22213b42a7a6a1a9683b08baa5"],  "question": "韦小宝住在哪里",  "history": [] }'
{"code":200,"msg":"success chat","question":"韦小宝住在哪里","response":"data: [DONE]\n\n","history":[["韦小宝住在哪里","Error code: 400 - {'object': 'error', 'message': '**NETWORK ERROR DUE TO HIGH TRAFFIC. PLEASE REGENERATE OR REFRESH THIS PAGE.**\\n\\n(Attention mask should be of size (1, 1, 1, 751), but is torch.Size([1, 1, 1, 1]))', 'code': 50001}"]],

页面提示如下: image

icenicky commented 9 months ago

通过api测试调用也会有一定概率触发这个bug,通过页面调用基本100%触发bug,页面触发bug后再尝试使用api测试也会有bug。 目前定位到是 model_worker.py +139行抛出exception。 CUDA error: unknown error\nCUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.\nFor debugging consider passing CUDA_LAUNCH_BLOCKING=1.\nCompile withTORCH_USE_CUDA_DSAto enable device-side assertions

又因为 llm_for_fastchat.py +113 没有判断 event["choices"]是否为None,导致这里抛出了异常 event_text = event["choices"][0]['delta']['content']

异常被捕获后直接将错误信息进行了返回,最终导致了UI上回复了“'NoneType' object is not subscriptable”; 同时由于异常后不会再有yield f"data: [DONE]\n\n"信息返回给调用方,所以调用方也进入了死循环。 except Exception as e: logging.info(f"Error calling API: {e}") delta = {'answer': f"{e}"} yield "data: " + json.dumps(delta, ensure_ascii=False)

这里根源还是要再跟进下model_worker.py +139行抛出的exception,可能是pytorch和 CUDA版本不匹配导致, 不过需要跟进fastchat的源码才能知道具体原因了

shaxiaozz commented 9 months ago

请问这是cuda版本的原因吗?

wpq3142 commented 9 months ago

知道原因之一了, 导入资料的时候报了一个错,然后就出现这个问题了, 新建了一个,一个一个导入文件,只要不报错,就不会出现上面'NoneType' object is not subscriptable 问题, 估计是导入资料处理的时候有问题导致的,

rookiexiao123 commented 9 months ago

请问解决了吗,导入qwen-72b-chat-int4出现了同样的问题:INFO:root:Error calling API: 'NoneType' object is not subscriptable

liuyijiang1994 commented 8 months ago

同RuntimeError: generator ignored GeneratorExit 问题,估计是异步哪里没处理好

hehuang139 commented 8 months ago

这个问题有进展吗?

liuyijiang1994 commented 8 months ago

这个问题有进展吗?

RonaldJEN commented 8 months ago

这个问题有进展吗?

sunwhw commented 5 months ago

如果是参照官方的https://github.com/netease-youdao/QAnything/blob/qanything-python/docs/API.md#-urlhttpyour_host8777apilocal_doc_qalocal_doc_chat通过调用api的形式进行问答, 报这个错误的话,在取response那里改为


res = response.json()
# print(res)
print(res['history'][-1][-1])
# 而不是 print(res['response'])
我看到源码的逻辑是会把这个真正的response存储到history里面,而“data: Done”应该是此次请求结束的标志,但可能这里没处理好,所以传错了,所以只需要从最新的history取答案即可