chatchat-space / Langchain-Chatchat

Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM, Qwen 与 Llama 等语言模型的 RAG 与 Agent 应用 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM, Qwen and Llama) RAG and Agent app with langchain
Apache License 2.0
31.84k stars 5.55k forks source link

知识库问答 出错 NoneType has no len() #2970

Closed murdonson closed 8 months ago

murdonson commented 8 months ago

问题描述 / Problem Description 用简洁明了的语言描述这个问题 / Describe the problem in a clear and concise manner. 知识库问答的时候,回答不了问题 空白 但是有知识库匹配结果 报错NoneType has no len() bug1

bug2

自己建立知识库 然后上传doc文件 然后向量化成功 然后开始问答的的时候 回答不了问题

操作系统:Linux-6.5.0-17-generic-x86_64-with-glibc2.35. python版本:3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0] 项目版本:v0.2.10 langchain版本:0.0.354. fastchat版本:0.2.35

环境信息 当前使用的分词器:ChineseRecursiveTextSplitter 当前启动的LLM模型:['Qwen-1_8B-Chat', 'zhipu-api', 'openai-api'] @ cpu {'device': 'cpu', 'host': '0.0.0.0', 'infer_turbo': False, 'model_path': '/home/m/project/Langchain-Chatchat/Qwen-1_8B-Chat', 'model_path_exists': True, 'port': 20002} {'api_key': '', 'device': 'auto', 'host': '0.0.0.0', 'infer_turbo': False, 'online_api': True, 'port': 21001, 'provider': 'ChatGLMWorker', 'version': 'glm-4', 'worker_class': <class 'server.model_workers.zhipu.ChatGLMWorker'>} {'api_base_url': 'https://api.openai.com/v1', 'api_key': '', 'device': 'auto', 'host': '0.0.0.0', 'infer_turbo': False, 'model_name': 'gpt-4', 'online_api': True, 'openai_proxy': '', 'port': 20002} 当前Embbedings模型: bge-large-zh @ cpu

dosubot[bot] commented 8 months ago

🤖

嗨,@murdonson!很高兴再次见到你。希望你一切都好!

根据您提供的信息,我发现了一些可能的解决方案。这个错误"NoneType has no len()"通常发生在尝试获取None对象的长度时。在Python中,None对象没有长度,因此会出现错误。

在您提供的上下文中,错误可能来自_join_docs方法。此方法试图连接文档列表,然后剥离结果。如果结果是空字符串,它返回None。如果稍后在需要其长度的上下文中使用返回的None,它将引发"NoneType has no len()"错误。

def _join_docs(self, docs: List[str]) -> Optional[str]:
    text = self._separator.join(docs)
    text = text.strip()
    if text == "":
        return None
    else:
        return text

要解决此问题,您可以修改_join_docs方法,使其在连接文本为空时返回空字符串,而不是None。这样,总是可以确定返回对象的长度。

def _join_docs(self, docs: List[str]) -> str:
    text = self._separator.join(docs)
    text = text.strip()
    return text

请注意,这只是基于提供的上下文的错误的可能原因。实际的原因可能会根据您的应用程序中方法的使用方式而有所不同。

此外,"NoneType has no len()"错误可能在knowledge_base_chat_iterator函数的if len(docs) == 0:if len(source_documents) == 0:行抛出。当尝试对docssource_documents变量执行长度检查时,如果该变量为None,则会发生此错误。

要解决此问题,您应确保docssource_documents始终初始化为列表,即使是空的。如果search_docs函数或reranker_model.compress_documents方法可能返回None,您应处理此情况。

这是修正后的代码:

docs = await run_in_threadpool(search_docs,
                               query=query,
                               knowledge_base_name=knowledge_base_name,
                               top_k=top_k,
                               score_threshold=score_threshold)
if docs is None:
    docs = []

# ...

if USE_RERANKER:
    # ...
    docs = reranker_model.compress_documents(documents=docs,
                                             query=query)
    if docs is None:
        docs = []

# ...

source_documents = []
for inum, doc in enumerate(docs):
    # ...
if source_documents is None:
    source_documents = []

以上是我根据您提供的信息和我对Langchain-Chatchat代码库的理解得出的可能的解决方案。如果您在尝试这些解决方案后仍然遇到问题,或者需要更多的帮助,请提供更多的信息,我会尽力提供更多的帮助。

Sources


This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

If you want to continue the conversation, start your reply with @dosu-bot.

murdonson commented 8 months ago

我自己下载的Qwen-1_8B-Chat 改了model config文件 模型应该是访问到了啊 本地模型

zRzRzRzRzRzRzR commented 8 months ago

不知道你这么弄的模型,这个错误应该是模型读取失败,也就是模型有问题,你检查一下模型文件吧

murdonson commented 8 months ago

不知道你这么弄的模型,这个错误应该是模型读取失败,也就是模型有问题,你检查一下模型文件吧 今天除夕 等过几天我检查检查 祝你春节快乐😁

murdonson commented 8 months ago

不知道你这么弄的模型,这个错误应该是模型读取失败,也就是模型有问题,你检查一下模型文件吧

我用官方示例测试了下载的模型 没有问题 证明模型文件没有问题 但是放在langchainchatchat这里就是报错。。。。

zRzRzRzRzRzRzR commented 8 months ago

是chat模型吗,chatglm3-6B不出现这个错误呀,看报错事generate的地方错

murdonson commented 8 months ago

是chat模型吗,chatglm3-6B不出现这个错误呀,看报错事generate的地方错

model_path': '/home/m/project/Langchain-Chatchat/Qwen-1_8B-Chat 我用的这个模型

murdonson commented 8 months ago

是chat模型吗,chatglm3-6B不出现这个错误呀,看报错事generate的地方错

我没用默认模型 就是下载的/home/m/project/Langchain-Chatchat/Qwen-1_8B-Chat 和 /home/m/project/Langchain-Chatchatbge-large-zh 在model config py 里面指定了绝对路径 然后运行python startup.py -a 然后报这个错 是为什么呢 我本地测试下载的Qwen模型 能回答问题

murdonson commented 8 months ago

是chat模型吗,chatglm3-6B不出现这个错误呀,看报错事generate的地方错

我是不是哪里漏了什么操作 我就下载了小模型 然后改绝对路径 然后启动python startup.py -a

zRzRzRzRzRzRzR commented 8 months ago

配置文件改了吗

murdonson commented 8 months ago

配置文件改了吗

改了model config py这个文件

zRzRzRzRzRzRzR commented 8 months ago

server cofing配置一下Qwen,其他地方应该不用改,如果是这样的话我也不太清楚了,因为我改了server config 和 model config就行了

KOBEBRYANTand commented 6 months ago

你好,请问怎么解决的

Autism-al commented 6 months ago

请问解决了吗