langchain4j [BUG] Metadata.hashCode() (和 Document.hashCode()) 是危险的,

kzipqqlq  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(35)

Metadata实现了hashCode(),尽管它是一个可变类。
hashCode()仅存在以启用存储数据结构(如Map和Set);当存储对象的hashCode发生变化时,它们的行为会变得非常糟糕。
由于Document包含Metadata,并且根据它实现了hashCode();因此这个问题影响到了Document。
可能的解决方案:

  • 移除两个实现;使它们成为不可哈希的类。
  • 为Metadata(以及可能的Document)创建不可变版本。
  • 使Metadata可冻结,并只允许在冻结的Metadata类上使用hashCode。
zour9fqk

zour9fqk1#

@crutcher 第一个选项(移除两个实现;使它们成为不可哈希的类)听起来不错,WDYT?

相关问题