Baby AGI的AssertionError报错分析| 豆包MarsCode AI刷题

99 阅读3分钟

解决 BabyAGI_CN.py 中的 AssertionError 问题

问题描述

在运行 BabyAGI_CN.py 时,遇到了 AssertionError 错误。具体错误信息如下:

AssertionError: `d` must be equal to `self.d`

这个错误出现在 faiss/class_wrappers.py 文件的第 329 行,代码断言了 d(可能是某个维度或属性)等于 self.d,但实际上它们不相等,导致了错误。运行BabyAGI_CN.py报错内容:

image.png

image.png

原因分析

询问ai之后,发现:主要的问题是AssertionError,这通常表示程序在执行过程中遇到了不符合预期的情况。具体来说,在faiss/class_wrappers.py文件的第329行,代码断言了d(可能是某个维度或属性)等于self.d,但实际上它们不相等,导致了错误。

BabyAGI_CN.py 程序中,embedding_size 被设置为 2560,这意味着我们创建了一个用于存储 2560 维向量的 Faiss 索引。然而,当尝试使用这个索引来搜索相似项时,传入的向量维度可能不是 2560,这导致了断言失败。

解决方法

  1. 检查嵌入模型输出的维度: 确保 DoubaoEmbeddings 类中的 embed_queryembed_documents 方法返回的嵌入向量确实有 2560 维。可以通过打印或日志记录来验证这一点。
  2. 确认 embedding_size 的值: 如果嵌入模型实际上产生的是不同维度的向量,需要相应地调整 embedding_size 的值。
  3. 检查环境变量: 确保所有相关的环境变量(如 EMBEDDING_MODELEND)都正确设置,并且指向了正确的模型端点。

实施步骤

  1. 验证嵌入模型输出维度: 在 BabyAGI_CN.py 程序中加入以下代码,以验证嵌入模型的输出维度。
# 验证嵌入模型输出维度 
test_text = "这是一个测试文本。" 
embedding = embeddings_model.embed_query(test_text) 
print(f"嵌入向量维度: {len(embedding)}")

2. 运行程序并检查输出: 将上述代码加入到 BabyAGI_CN.py 中,并重新运行程序。观察输出的嵌入向量维度。将上面程序加入BabyAGI_CN.py程序中,如下图所示。

image.png

加入上面的测试程序之后,再次运行BabyAGI_CN.py程序,如下图所示。

image.png 运行之后发现输出维度不是 2560,维度是4096,那么需要更新 embedding_size 的值以匹配实际的嵌入向量维度。因此,需要将embedding_size值改为4096。

  1. 调整 embedding_size 的值: 根据输出的嵌入向量维度,调整 embedding_size 的值为 4096。

image.png 4. 注释测试代码并重新运行: 注释掉测试代码,重新运行 BabyAGI_CN.py 程序,确保程序能够正常运行。如下图所示,发现可以运行成功。

image.png

总结

通过上述步骤,我们成功解决了 BabyAGI_CN.py 中的 AssertionError 问题。首先,我们通过添加测试代码验证了嵌入模型的实际输出维度,发现输出维度是 4096 而不是初始设置的 2560。然后,我们根据实际输出维度调整了 embedding_size 的值,将其设置为 4096。最后,注释掉测试代码并重新运行程序,确保程序能够正常运行。这些步骤不仅解决了当前的问题,还为我们提供了处理类似问题的通用方法。希望这些步骤能够帮助你在遇到类似问题时快速定位并解决问题。

如有错误,欢迎在评论区指出!