我有一个存储帐户,配置了由多个 pdf/word/excel 文件组成的 Azure 容器存储。我想使用 Azure 文档智能对这些文件进行语义分块。
是否可以使用
langchain
将文件直接从容器存储加载到 Azure 文档智能?根据
langchain
文档
,似乎要么文件必须在本地可用,要么必须移交公共网址。
尝试:
# Prerequisite: An Azure AI Document Intelligence resource in one of the 3 preview regions: East US, West US2, West Europe
import os
from langchain_community.document_loaders import AzureAIDocumentIntelligenceLoader
file_path = "storage-path-to-file"
endpoint = os.getenv("DOCUMENTINTELLIGENCE_ENDPOINT")
key = os.getenv("DOCUMENTINTELLIGENCE_API_KEY")
loader = AzureAIDocumentIntelligenceLoader(
api_endpoint=endpoint, api_key=key, file_path=file_path, api_model="prebuilt-layout"
)
documents = loader.load()
# Returns:
# Message: Invalid request.
# Inner error: {
# "code": "InvalidManagedIdentity",
# "message": "The managed identity configuration is invalid: Managed identity is not enabled # for the current resource."
# }
你遇到的错误信息表明你的 Azure AI Document Intelligence 资源没有启用托管身份。Langchain 的
AzureAIDocumentIntelligenceLoader
默认使用托管身份进行身份验证。
为了直接从 Azure 容器存储加载文档到 Azure Document Intelligence,你需要使用 SAS 令牌进行身份验证,因为
langchain
的
AzureAIDocumentIntelligenceLoader
目前不支持直接使用容器存储路径。
以下是使用 SAS 令牌从 Azure 容器存储加载文档到 Azure Document Intelligence 的步骤:
1. 生成 SAS 令牌:
- 你可以使用 Azure 门户、Azure CLI 或 Azure SDK 为你的容器或 Blob 生成 SAS 令牌。确保 SAS 令牌具有读取 Blob 的权限,并设置适当的到期时间。
2. 使用 SAS 令牌构建 Blob URL:
from urllib.parse import urlparse, urlunparse
blob_url = "https://{storage_account}.blob.core.windows.net/{container_name}/{blob_name}"
sas_token = "?{your_sas_token}"
parsed_url = urlparse(blob_url)
updated_url = urlunparse((parsed_url.scheme, parsed_url.netloc, parsed_url.path, parsed_url.params, parsed_url.query + sas_token, parsed_url.fragment))
print(updated_url)
3. 使用 Langchain 加载文档:
-
将生成的 Blob URL (包含 SAS 令牌) 传递给
AzureAIDocumentIntelligenceLoader
的file_path
参数:
from langchain_community.document_loaders import AzureAIDocumentIntelligenceLoader
endpoint = os.getenv("DOCUMENTINTELLIGENCE_ENDPOINT")
key = os.getenv("DOCUMENTINTELLIGENCE_API_KEY")
loader = AzureAIDocumentIntelligenceLoader(
api_endpoint=endpoint,
api_key=key,
file_path=updated_url, # 使用包含 SAS 令牌的 URL
api_model="prebuilt-layout"
)
documents = loader.load()
注意:
- 确保不要将 SAS 令牌硬编码到你的代码中。最好将其存储在安全的位置,例如 Azure 密钥保管库中,并在运行时检索它。
-
如果你想继续使用托管身份,则需要修改
AzureAIDocumentIntelligenceLoader
的源代码以支持 Azure 容器存储凭据。
通过使用 SAS 令牌,你可以直接从 Azure 容器存储加载文档到 Azure Document Intelligence,而无需先将文件下载到本地或公开访问它们。
标签:python,azure,azure-blob-storage,langchain,azure-form-recognizer From: 78724896