系统信息
在Azure OpenAI上的text-embedding-ada-002 OpenAI嵌入模型的最大批处理大小为16。MlflowAIGatewayEmbeddings的硬编码批处理大小为20,这导致它与Azure OpenAI的text-embedding-ada-002不兼容。
最佳解决方案是允许MlflowAIGatewayEmbeddings接受一个可配置的批处理大小作为参数。
谁可以帮忙?
@hwchase17@agola11
信息
- 官方示例笔记本/脚本
- 我自己的修改过的脚本
相关组件
- LLMs/聊天模型
- 嵌入模型
- 提示/提示模板/提示选择器
- 输出解析器
- 文档加载器
- 向量存储/检索器
- 内存
- 代理/代理执行器
- 工具/工具包
- 链
- 回调/跟踪
- 异步
复现过程
- 在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"
}
}
)
- 初始化
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)
- 观察错误
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一起工作。
8条答案
按热度按时间6ie5vjzr1#
你好@coltonpeltier-db,
我是一个AI机器人,在这里协助你解决你的问题,同时等待人类维护者。我有能力帮助你解决bug、回答问题并引导你成为贡献者。感谢你的耐心和提供如此详细的问题描述。我正在审查你的问题,并将在不久后提供完整的答案。
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
参数。以下是修改后的代码:此更改将确保将文本分批发送到OpenAI嵌入,每批大小为16,与Azure OpenAI上的text-embedding-ada-002 OpenAI嵌入模型的最大批处理大小兼容。
此外,
embed_documents
和aembed_documents
方法具有可选的chunk_size
参数。如果您想为特定调用调整批处理大小,可以传递所需的批处理大小作为参数。例如:这将覆盖该特定调用的类级
chunk_size
,允许您按每次调用的方式调整批处理大小。请尝试这些解决方案并告知我们是否解决了您的问题。如果没有,我们将继续调查并找到解决方案。
来源
此响应旨在节省您的时间并提供帮助。它不是精确的解决方案,而是您自己研究的起点。
请帮助我变得更有用!如果这有帮助,请留下一个👍,如果无关紧要,请留下一个👎。
如果您想继续对话,请以@dosu-bot开头回复。
hgqdbh6s3#
我可能错了,但这些回复似乎与问题无关。问题似乎是这一行中的硬编码20有问题:
https://github.com/langchain-ai/langchain/blob/362a446999944f9764813fbf0c27a5d2682f4531/libs/langchain/langchain/embeddings/mlflow_gateway.py#L60C35-L60C35
7fhtutme4#
你好,@coltonpeltier-db
我正在帮助LangChain团队管理他们的待办事项列表,并将此问题标记为过时。据我了解,这个问题是由你打开的,强调了MlflowAIGatewayEmbeddings类中硬编码的批处理大小为20,这与Azure OpenAI上text-embedding-ada-002模型的最大批处理大小16不兼容。我提供了详细的回复,建议修改OpenAIEmbeddings类和方法以调整批处理大小。然而,你指出建议的解决方案不相关,并强调了导致问题的代码中的特定行。
请问这个问题是否仍然与LangChain仓库的最新版本相关?如果是,请在评论此问题时告知LangChain团队。否则,请随意关闭此问题,或者在7天后自动关闭。谢谢!
fcipmucu5#
是的,问题仍然存在,这里的批处理大小为20。
在Azure的文档中,您可以看到支持的最大批处理大小为16。
fslejnso6#
他们更新了批处理大小为2048,尽管您链接的文档尚未显示这一点。
希望这有所帮助。
rjjhvcjd7#
他们将批处理大小更新为2048,尽管您链接的文档尚未显示这一点。希望这有所帮助。
有没有办法增加它?
wlzqhblo8#
他们将批处理大小更新为2048,尽管您链接的文档尚未显示这一点。希望这有所帮助。
现在它从16跳到2048是真的吗?所以不确定,也许可以使用1024?