首页 > 编程问答 >可以使用 Azure 文档智能从 Azure 容器存储加载文档

可以使用 Azure 文档智能从 Azure 容器存储加载文档

时间:2024-07-28 05:15:51浏览次数:14  
标签:python azure azure-blob-storage langchain azure-form-recognizer

我有一个存储帐户,配置了由多个 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

相关文章

  • Python 中的“样板”代码?
    Google有一个Python教程,他们将样板代码描述为“不幸的”,并提供了以下示例:#!/usr/bin/python#importmodulesusedhere--sysisaverystandardoneimportsys#Gatherourcodeinamain()functiondefmain():print'Hellothere',sys.argv[1]#Command......
  • Python 3.9.1 中的 collections.abc.Callable 是否有 bug?
    Python3.9包含PEP585并弃用typing模块中的许多类型,转而支持collections.abc中的类型,现在它们支持__class_getitem__例如Callable就是这种情况。对我来说,typing.Callable和collections.abc.Ca......
  • 列表子类的 Python 类型
    我希望能够定义列表子类的内容必须是什么。该类如下所示。classA(list):def__init__(self):list.__init__(self)我想包含键入内容,以便发生以下情况。importtypingclassA(list:typing.List[str]):#Maybesomethinglikethisdef__init__(self):......
  • Python 中类型友好的委托
    考虑以下代码示例defsum(a:int,b:int):returna+bdefwrap(*args,**kwargs):#delegatetosumreturnsum(*args,**kwargs)该代码运行良好,只是类型提示丢失了。在Python中使用*args,**kwargs来实现​​委托模式是很常见的。如果有一种方法可......
  • 使用 python 支持构建自定义 vim 二进制文件
    背景Debian11vim软件包不包含python3支持。请参阅标题为“Debian11vim中不支持python-证据”的部分下面我需要vim支持python3YouCompleteMevim插件为了构建一个新的,我将vim9.0tarball下载到v......
  • 如何在Python 3.12+中正确使用泛型来提高代码质量?
    我正在尝试使用泛型来改进FastAPI应用程序中的类型注释。我有一个抽象存储库类,在其中使用泛型:fromabcimportABC,abstractmethodfromtypingimportListclassAbstractRepository[T](ABC):@abstractmethodasyncdefadd_one(self,data:dict)->T:......
  • python中的while循环不退出
    我试图完成第一年的python商业课程作业,但我的while循环无法退出,有人能帮忙吗?commisionTable=[{"admin_fee":100,"comm_rate":0.10},{"admin_fee":125,"comm_rate":0.12},{"admin_fee":150,"comm_rate":......
  • python---json文件写入
    ​ 使用到的知识点:os模块执行linux指令、json.dump()、withopenasf代码实现importsysimportosimportjson #向json文件file中添加内容data,其中data的类型为字典defwrite_json(file,data):    #如果文件存在,则删除    if(os.path.exists(fi......
  • python错题记录:布尔运算与逻辑值检测
    一前言环境:python3.10win10二布尔运算与逻辑值检测1案例案例1如上,在布尔运算时,有些时候代码只会运算前面的一部分,剩下的部分根本不会运算。以前在练习算法代码时,就利用这个规则来减少代码的工作量案例2如上,之前好长一段时间,上面的布尔运算总是让我感到困惑布尔运......
  • python---字典遍历
    1、三种常见的字典遍历实现defget_key_value(dics):  '''遍历所有键值对'''  forkey,valueindics.items():    print(f"{key}:{value}")defget_keys(dics):  '''遍历所有的键'''  forkeyindics......