描述bug
我尝试通过OpenAI嵌入模型text-embedding-ada-002
(设置为默认)使用parsing
-> splitting
-> ingesting
PDF文档进行重现,并遇到了以下异常:**Caused by: dev.ai4j.openai4j.OpenAiHttpException:**
{
"error": {
"message": "'$.input' is invalid. Please check the API reference: https://platform.openai.com/docs/api-reference.",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
初始PDF文档大小为10.7 MB,
Langchain4j的Document
类大小为4.4 MB
块大小:1000
块数量:2300
日志和堆栈跟踪
https://gist.github.com/OTR/aab5b0d1918dd2be709e554a3cf30d52
重现方法
pom.xml:
https://gist.github.com/OTR/7b1617757068fcf957a93551f13cbb39
重现代码片段:
https://gist.github.com/OTR/46475c3ab6b856e733d592a493768538
在第46行失败:storeIngestor.ingest(document);
预期行为
应该正确地摄取和检索,我尝试使用不同的PDF(一个是500 KB,另一个是12.2 MB,它们都处理得很好)运行相同的代码。
请补充以下信息:
- LangChain4j版本:0.27.1
- Java版本:17
依赖项:
https://gist.github.com/OTR/b820d63973bfd6b0e3c16fa1e31bc17e
其他上下文
我尝试使用调试器检查,这是我能够在异常之前设置断点的最后一行:
langchain4j/langchain4j-open-ai/src/main/java/dev/langchain4j/model/openai/OpenAiEmbeddingModel.java
第91行中的3e43248 | | EmbeddingRequestrequest = EmbeddingRequest.builder() |
或者截图上的第58行:
2条答案
按热度按时间vohkndzv1#
感谢OTR的报告和详细的错误描述!
似乎在
Document
和/或TextSegments
(拆分后)存在一些问题。请问您能否提供PDF或者查看Document
加载后的内部内容以及List<String> texts
和embedTexts
方法中的信息?谢谢!zc0qhyus2#
这个bug与
segments
的大小(一个TextSegments的列表)有关。我在类EmbeddingStoreIngestor
的方法public void ingest(List<Document> documents)
中设置了一个断点,或者在截图的第53行。然后我尝试使用二分查找来定位引发异常的特定TextSegment,首先在运行时将
segments
变量重新分配给它的前半部分,然后释放执行,然后将其重新分配为后半部分并释放执行。结果发现,列表的每一半都可以单独正常工作。但是整个段列表会导致异常。
接下来,我尝试了不同的子列表组合
segments
。假设整个列表的大小为2293个元素,那么subList
方法的参数和测试结果如下表所示:文档分割器的参数与我在源代码sample中提到的相同。