langchain MlflowAIGatewayEmbeddings : 默认批处理大小与Azure OpenAI文本嵌入-ada-002不兼容,

qacovj5a  于 2个月前  发布在  其他
关注(0)|答案(8)|浏览(46)

系统信息

在Azure OpenAI上的text-embedding-ada-002 OpenAI嵌入模型的最大批处理大小为16。MlflowAIGatewayEmbeddings的硬编码批处理大小为20,这导致它与Azure OpenAI的text-embedding-ada-002不兼容。
最佳解决方案是允许MlflowAIGatewayEmbeddings接受一个可配置的批处理大小作为参数。

谁可以帮忙?

@hwchase17@agola11

信息

  • 官方示例笔记本/脚本
  • 我自己的修改过的脚本

相关组件

  • LLMs/聊天模型
  • 嵌入模型
  • 提示/提示模板/提示选择器
  • 输出解析器
  • 文档加载器
  • 向量存储/检索器
  • 内存
  • 代理/代理执行器
  • 工具/工具包
  • 回调/跟踪
  • 异步

复现过程

  1. 在azure openai上创建一个通往text-embedding-ada-002的网关路由
ROUTE_NAME = "azure-ada-002"

# Try to delete the route if it already exists
try:
    delete_route(ROUTE_NAME)
    print("Route deleted")
except:
    print("Route does not exist, creating..")

create_route(
    name=ROUTE_NAME,
    route_type="llm/v1/embeddings",
    model = {
        "name" : "text-embedding-ada-002",
        "provider" : "openai",
        "openai_config" : {
            "openai_api_type" : azure_openai_type,
            "openai_api_key": azure_openai_key,
            "openai_deployment_name": "ada-embed-v1",
            "openai_api_base": azure_openai_base,
            "openai_api_version": "2023-05-15"
        }
    }
)
  1. 初始化MlflowAIGatewayEmbeddings并尝试嵌入超过16个文档
from langchain.embeddings import MlflowAIGatewayEmbeddings
import pandas as pd

azure_ada = MlflowAIGatewayEmbeddings(route="azure-ada-002")

test_strings = [
    "aaaa" for i in range(20)
]
azure_ada.embed_documents(test_strings)
  1. 观察错误
HTTPError: 400 Client Error: Bad Request for url: https://ohio.cloud.databricks.com/gateway/azure-ada-002/invocations. Response text: {
  "error": {
    "message": "Too many inputs. The max number of inputs is 16.  We hope to increase the number of inputs per request soon. Please contact us through an Azure support request at: https://go.microsoft.com/fwlink/?linkid=2213926 for further questions.",
    "type": "invalid_request_error",
    "param": null,
    "code": null
  }
}

预期行为

我应该能够使用MlflowAIGatewayEmbeddings类与Azure OpenAI一起工作。

6ie5vjzr

6ie5vjzr1#

你好@coltonpeltier-db,
我是一个AI机器人,在这里协助你解决你的问题,同时等待人类维护者。我有能力帮助你解决bug、回答问题并引导你成为贡献者。感谢你的耐心和提供如此详细的问题描述。我正在审查你的问题,并将在不久后提供完整的答案。

kxeu7u2r

kxeu7u2r2#

感谢您的反馈。看起来您遇到的问题是由于在 MlflowAIGatewayEmbeddings 类中硬编码的批处理大小为20,这与Azure OpenAI上的text-embedding-ada-002 OpenAI嵌入模型的最大批处理大小16不兼容。
根据提供的上下文,LangChain存储库中已解决类似的问题。在这些问题中提供的解决方案建议更新LangChain版本,指定Azure OpenAI服务部署名称,在代码中添加延迟或减少异步工作器数量以避免达到限制,并在调用 OpenAIEmbeddings 之前手动设置参数。
然而,这些解决方案可能不会直接解决您的问题。要将 MlflowAIGatewayEmbeddings 中的批处理大小调整为与Azure OpenAI上的text-embedding-ada-002 OpenAI嵌入模型的最大批处理大小16兼容,您需要修改 OpenAIEmbeddings 类中的 chunk_size 参数。以下是修改后的代码:

if values["openai_api_type"] in ("azure", "azure_ad", "azuread"):
    # Azure OpenAI embedding models allow a maximum of 16 texts
    # at a time in each batch
    # See: https://learn.microsoft.com/en-us/azure/ai-services/openai/reference#embeddings
    values["chunk_size"] = max(values["chunk_size"], 16)

此更改将确保将文本分批发送到OpenAI嵌入,每批大小为16,与Azure OpenAI上的text-embedding-ada-002 OpenAI嵌入模型的最大批处理大小兼容。
此外, embed_documentsaembed_documents 方法具有可选的 chunk_size 参数。如果您想为特定调用调整批处理大小,可以传递所需的批处理大小作为参数。例如:

embeddings = OpenAIEmbeddings()
embeddings.embed_documents(texts, chunk_size=16)

这将覆盖该特定调用的类级 chunk_size ,允许您按每次调用的方式调整批处理大小。
请尝试这些解决方案并告知我们是否解决了您的问题。如果没有,我们将继续调查并找到解决方案。

来源

此响应旨在节省您的时间并提供帮助。它不是精确的解决方案,而是您自己研究的起点。
请帮助我变得更有用!如果这有帮助,请留下一个👍,如果无关紧要,请留下一个👎。
如果您想继续对话,请以@dosu-bot开头回复。

hgqdbh6s

hgqdbh6s3#

我可能错了,但这些回复似乎与问题无关。问题似乎是这一行中的硬编码20有问题:
https://github.com/langchain-ai/langchain/blob/362a446999944f9764813fbf0c27a5d2682f4531/libs/langchain/langchain/embeddings/mlflow_gateway.py#L60C35-L60C35

7fhtutme

7fhtutme4#

你好,@coltonpeltier-db

我正在帮助LangChain团队管理他们的待办事项列表,并将此问题标记为过时。据我了解,这个问题是由你打开的,强调了MlflowAIGatewayEmbeddings类中硬编码的批处理大小为20,这与Azure OpenAI上text-embedding-ada-002模型的最大批处理大小16不兼容。我提供了详细的回复,建议修改OpenAIEmbeddings类和方法以调整批处理大小。然而,你指出建议的解决方案不相关,并强调了导致问题的代码中的特定行。

请问这个问题是否仍然与LangChain仓库的最新版本相关?如果是,请在评论此问题时告知LangChain团队。否则,请随意关闭此问题,或者在7天后自动关闭。谢谢!

fcipmucu

fcipmucu5#

是的,问题仍然存在,这里的批处理大小为20。
在Azure的文档中,您可以看到支持的最大批处理大小为16。

fslejnso

fslejnso6#

他们更新了批处理大小为2048,尽管您链接的文档尚未显示这一点。
希望这有所帮助。

rjjhvcjd

rjjhvcjd7#

他们将批处理大小更新为2048,尽管您链接的文档尚未显示这一点。希望这有所帮助。
有没有办法增加它?

wlzqhblo

wlzqhblo8#

他们将批处理大小更新为2048,尽管您链接的文档尚未显示这一点。希望这有所帮助。

现在它从16跳到2048是真的吗?所以不确定,也许可以使用1024?

相关问题