langchain4j [BUG] Azure OpenAI 嵌入模型抛出SSL异常

kt06eoxx  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(32)

Bug描述

在具有有效凭据的AzureOpenAiEmbeddingModel示例上尝试执行embed()embedAll()操作时,抛出SSL错误:

`Exception in thread "main" java.io.UncheckedIOException: javax.net.ssl.SSLException: failure when writing TLS control frames`

日志和堆栈跟踪

异常发生在线程 "main" java.io.UncheckedIOException: javax.net.ssl.SSLException: failure when writing TLS control frames at com.azure.core.http.netty.NettyAsyncHttpClient.sendSync(NettyAsyncHttpClient.java:201) at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:51) at com.azure.core.http.policy.HttpLoggingPolicy.processSync(HttpLoggingPolicy.java:175) at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53) at com.azure.core.http.implementation.http.policy.InstrumentationPolicy.processSync(InstrumentationPolicy.java:101) at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53) at com.azure.core.http.policy.KeyCredentialPolicy.processSync(KeyCredentialPolicy.java:115) at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53) at com.azure.core.http.policy.CookiePolicy.processSync(CookiePolicy.java:73) at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53) at com.azure.core.http.policy.AddDatePolicy.processSync(AddDatePolicy.java:50) at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53) at com.azure.core.http.policy.RetryPolicy.attemptSync(RetryPolicy.java:211) at com.azure.core.http.policy.RetryPolicy.attemptSync(RetryPolicy.java:224) at com.azure.core.http
在Kotlin协程中,出现了一个异常:

at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
at my.org.MainKt.main(Main.kt)
Suppressed: java.io.UncheckedIOException: javax.net.ssl.SSLException: failure when writing TLS control frames
at com.azure.core.http.netty.NettyAsyncHttpClient.sendSync(NettyAsyncHttpClient.java:201)
at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:51)
at com.azure.core.http.policy.HttpLoggingPolicy.processSync(HttpLoggingPolicy.java:175)
at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53)
at com.azure.core.implementation.http.policy.InstrumentationPolicy.processSync(InstrumentationPolicy.java:101)
at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53)
at com.azure.core.http.policy.KeyCredentialPolicy.processSync(KeyCredentialPolicy.java:115)
at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53)
at com.azure.core.http.policy.CookiePolicy.processSync(CookiePolicy.java:73)
at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53)
at com.azure.core.http.policy.AddDatePolicy.processSync(AddDatePolicy.java:50)
at com.azure.core.http.HttpPipelineNextSyncPolicy.processSync(HttpPipelineNextSyncPolicy.java:53)
at com.azure.core.http.policy.RetryPolicy.attemptSync(RetryPolicy.java:211)

这个异常是由于在尝试写入TLS控制帧时发生了失败。具体原因是在发送同步请求时,NettyAsyncHttpClientsendSync方法抛出了javax.net.ssl 这是一个Java堆栈跟踪,它显示了在Netty网络编程中发生的异常。具体来说,这个错误是由于找不到io.netty.util.Recycler$EnhancedHandle`类导致的。这可能是因为缺少了相应的依赖库。为了解决这个问题,你需要确保你的项目中包含了Netty库的所有依赖。你可以检查项目的构建文件(如Maven的pom.xml或Gradle的build.gradle)以确保所有必要的依赖都已添加。
这是一个与Azure相关的错误日志,具体来说是SSL握手失败的问题。在尝试建立TLS连接时,发生了一个异常,导致无法写入TLS控制帧。这可能是由于网络问题、证书问题或者客户端和服务器之间的协议不匹配等原因导致的。为了解决这个问题,你可以尝试以下方法:

  1. 检查你的网络连接是否正常。
  2. 确保你的客户端和服务器使用的TLS/SSL协议版本是兼容的。
  3. 如果你使用的是自签名证书,请确保客户端信任该证书。如果没有信任,你需要将证书添加到客户端的信任存储中。
  4. 如果问题仍然存在,你可以尝试更新你的Azure SDK或库,以获取最新的修复和改进。
    这是一个Java堆栈跟踪,它显示了在执行Netty网络编程时发生的错误。具体来说,这个错误是由于找不到io.netty.util.Recycler$EnhancedHandle类导致的。这可能是因为缺少了相应的依赖库。

要解决这个问题,你需要确保你的项目中包含了Netty库的所有依赖。你可以检查项目的构建文件(如Maven的pom.xml或Gradle的build.gradle)以确保所有必要的依赖都已添加。对于Maven项目,你可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.72.Final</version>
</dependency>

对于Gradle项目,你可以在build.gradle文件中添加以下依赖:

implementation 'io.netty:netty-all:4.1.72.Final'

请注意,这里的版本号可能会随着时间推移而发生变化,因此建议查阅Netty官方文档以获取最新版本。
在处理SSL握手时发生了错误,导致TLS控制帧无法写入。这可能是由于证书问题或加密套件不匹配导致的。请检查您的证书和加密套件设置,确保它们是正确的。
根据提供的错误信息,可以看出问题出现在io.netty.util.Recycler$EnhancedHandle类的加载上。具体原因是找不到该类导致的java.lang.NoClassDefFoundError异常。

这个异常通常发生在以下情况下:

  1. 缺少相关的依赖库或JAR文件。
  2. 依赖库版本不兼容或存在冲突。
  3. 编译时和运行时的类路径不一致。

要解决这个问题,可以尝试以下几个步骤:

  1. 确保你的项目中包含了正确的依赖库或JAR文件。检查项目的构建配置文件(如Maven的pom.xml或Gradle的build.gradle)是否正确地声明了所需的依赖项,并且这些依赖项的版本与你使用的Netty库版本兼容。
  2. 如果你正在使用IDE(如IntelliJ IDEA或Eclipse),请确保你的项目配置正确,并且所有的依赖项都已正确地添加到类路径中。有时候IDE可能会自动管理依赖项,但有时也可能需要手动进行配置。
  3. 如果你在运行应用程序时使用了命令行参数来指定类路径,请确保这些参数正确地指向了包含所需依赖项的位置。
  4. 如果以上步骤都没有解决问题,你可以尝试清理并重新构建你的项目。这将确保所有依赖项都被正确地下载和打包到可执行文件中。

如果上述步骤都没有解决问题,可能需要进一步调查你的项目配置和环境设置,以确定导致该异常的具体原因。
原始堆栈跟踪:
在 io.netty.handler.ssl.SslHandler.setHandshakeFailureTransportFailure(SslHandler.java:1999) 处发生异常。
原因:java.lang.NoClassDefFoundError: io/netty/util/Recycler$EnhancedHandle

翻译后的文本:
在尝试使用 NettyAsyncHttpClient 进行异步操作时,发生了异常。异常发生在 NettyAsyncHttpClient.java 文件的第 160 行。异常原因是找不到类 io/netty/util/Recycler$EnhancedHandle。原始堆栈跟踪中还包含了其他信息,但这些信息与此翻译无关。
根据提供的错误信息,问题出在java.lang.ClassNotFoundException: io.netty.util.Recycler$EnhancedHandle。这个异常表示找不到io.netty.util.Recycler$EnhancedHandle类。

要解决这个问题,你可以尝试以下方法:

  1. 确保你的项目中包含了正确版本的Netty库。你可以检查项目的依赖关系,确保Netty库的版本与LangChain4j使用的版本一致。

  2. 如果问题仍然存在,尝试清理并重新构建项目。这可以确保所有依赖项都已正确下载和配置。

  3. 如果以上方法都无法解决问题,你可以考虑在LangChain4j的GitHub仓库中提交一个issue,详细描述你遇到的问题。这样,开发者可以帮助你诊断问题并提供解决方案。

h7wcgrx3

h7wcgrx31#

/cc @agoncal (azure), @jdubois (azure)

bgtovc5b

bgtovc5b2#

@LukeTarr 我刚刚创建了一个样本,试图复制你的bug( https://github.com/langchain4j/langchain4j-examples/pull/93/files )。在我这边运行正常。你能尝试这个样本并告诉我吗?
同时检查创建模型的shell脚本,也许有些差异:

az cognitiveservices account deployment create \
  --name "$AI_SERVICE" \
  --resource-group "$RESOURCE_GROUP" \
  --deployment-name "$AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME" \
  --model-name "text-embedding-ada-002" \
  --model-version "2"  \
  --model-format "OpenAI" \
  --sku-capacity 1 \
  --sku-name "Standard"
q1qsirdb

q1qsirdb3#

抱歉回复晚了,是的,我设置了一个新的嵌入模型示例来尝试,但示例仍然出现相同的错误。如果这个对你有用,我开始认为可能是我的组织网络配置问题,而不是lanchain4j。这周我会进行一些调查,看看我能找出什么。如果是我这边网络的问题,我会解决它,否则我会回来报告这里。谢谢!

相关问题