Azure OpenAI Java SDK(1.0.0-beta.9)图片ChatCompletion调用异常求助
Azure OpenAI Java SDK 图片ChatCompletion上下文长度超限问题解决方案
你的代码实现本身是可行的,出现上下文长度超限的核心原因是直接将图片的base64编码内容嵌入请求中,导致token计算量剧增。Azure OpenAI会将base64字符串的每一段字符都计入token总量,大尺寸图片的base64编码会轻松突破模型的token上限,而其他第三方库(如kotlin-openai)可能默认采用了外部图片URL的方式传递图片,避免了这个问题。
以下是具体解决方案:
改用外部图片URL传递(推荐)
将图片上传至可公开访问的存储服务(如Azure Blob Storage),生成带访问权限的URL(如SAS URL),用该URL替代base64编码内容。此时模型仅计算URL本身的token数量,不会触发超限。修改后的代码示例:val cco = ChatCompletionsOptions( mutableListOf( ChatRequestSystemMessage("You are an assistant which does Optical Character Recognition on scanned medical documents."), ChatRequestUserMessage(mutableListOf<ChatMessageContentItem>( ChatMessageTextContentItem("Read text from the scanned medical document. Only respond with the text content."), ChatMessageImageContentItem(ChatMessageImageUrl("https://your-storage-account.blob.core.windows.net/container/medical-scan.png?your-sas-token")) )) ) )压缩图片以减少base64长度(仅当必须用base64时)
对图片进行分辨率压缩、质量优化,缩小图片文件体积后再进行base64编码。比如将图片调整至模型推荐的尺寸(如GPT-4V支持的最大分辨率内),使用图片压缩工具降低质量,从而减少base64字符串的长度,降低token消耗。检查SDK版本兼容性
虽然你使用的1.0.0-beta.9版本支持图片输入,但可尝试升级至最新的beta版本,排查是否存在token计算逻辑的bug或优化点。
内容的提问来源于stack exchange,提问作者user20130987
相关产品推荐
相关产品推荐

