我正在尝试使用 Azure openai 部署来生成嵌入并将其存储在 Redis vectorDB 中。我如下创建了嵌入模型,并将 model_config (如
embedding_ctx_length
、generation_max_tokens
、allowed_special
、model_kwargs
)参数传递为 values
:
from langchain_openai import AzureOpenAIEmbeddings
embeddings_model = AzureOpenAIEmbeddings(
deployment=<'deployment_name'>
model='gpt_35_turbo',
openai_api_type="azure",
values=model_config,
)
然后我调用
Redis.from_documents()
来生成嵌入,如下所示:
from langchain_community.vectorstores.redis import Redis
Redis.from_documents(
docs, # a list of Document objects from loaders or created
embeddings_model,
redis_url=redis_url,
index_name=redis_index_name,
)
失败并出现以下错误:
TypeError: Embeddings.create() got an unexpected keyword argument 'values'
在我第二次尝试解决此问题时,我尝试创建嵌入模型,如下所示:
from langchain_openai import AzureOpenAIEmbeddings
"model_config": {
"allowed_special": "",
"chunk_size": 50,
"disallowed_special": "all",
"embedding_ctx_length": 8191,
"generation_max_tokens": 8000,
"model_kwargs": ""
}
embeddings_model = AzureOpenAIEmbeddings(
deployment=<'deployment_name'>
model='gpt_35_turbo',
openai_api_type="azure",
**self.__model_config,
)
那么如果未设置
model_kwargs
,它不会处理这种情况:
> invalid_model_kwargs = all_required_field_names.intersection(extra.keys())
E AttributeError: 'str' object has no attribute 'keys'
.venv/lib/python3.12/site-packages/langchain_openai/embeddings/base.py:219: AttributeError
对于如何解决这个问题有什么建议吗?这是我正在使用的软件包版本:
langchain 0.2.3
langchain-community 0.2.4
langchain-core 0.2.5
langchain-openai 0.1.14
langchain-text-splitters 0.2.1
您似乎混合了各种模型系列和使用它们的参数。
如果要生成嵌入,则不能使用 GPT-3.5 模型或任何 GPT 系列模型:您需要使用其他模型,例如
text-embedding-ada-002
或 text-embedding-3-large
(请参阅列表 here 了解 Azure OpenAI)
对于这些模型,您不会有“max_tokens”等参数,因为它们具有固定大小的输出:
text-embedding-ada-002
将生成一个包含 1536 个数值的数组,即使您的输入只有 1 个令牌。
关于
embedding_ctx_length
参数,它是Langchain中的一个助手,可以避免当您发送令牌计数高于所用模型的最大输入的输入时引发错误。如果您超过此金额,它将拆分您的输入(请参阅info)。
请注意,前面提到的所有 3 个嵌入模型的最大输入大小均为 8191 个标记(请参阅 openai doc):