MarkItDown そのものの解説や、Http Trigger や PowerApps 経由での利用例は下記が参考になります。
この記事では、Azure Functions Azure Blob Storage のバインドとトリガー を用いて MarkItDown
を動かしてみました。
作ったもの
はまったところ
MarkItDown
そのものとはあまり関係ない部分もあるけどはまったところ
保存時のblobnameの指定
使用法
関数のパラメーターを次の型で宣言し、BLOB ストレージに書き込むことができます。func.Out[str] は文字列
func.Out[func.InputStream] はストリーム
詳細については、「出力 - 例」を参照してください。
このとき例では
@app.blob_output(arg_name="outputblob",
path="newblob/test.txt",
connection="<BLOB_CONNECTION_SETTING>")
となっており、blob 名が固定となっている。
どうしたものかと色々試した結果、trigger 側の blob 名をパターン指定することで取ってこれるらしい。
すなわち、以下のアノテーションとすることで、input/test.docx
で関数がトリガーされた結果、output/test.docx.md
として保存することができる。
@app.blob_trigger(
arg_name="input", path="input/{blobname}", connection="markitdown_blobstorage"
)
@app.blob_output(arg_name="outputblob", path="output/{blobname}.md", connection="markitdown_blobstorage")
変換できるファイルが限られている模様
OpenAI を使うのは画像系ファイルの場合".jpg", ".jpeg", ".png"
に限られていたり、
何でもかんでも対応しているわけではないっぽくて、拡張子を見て(あるいは mimetypes.guess_typeして)変換している様子
そのため、以下のようにした。
default_supported_extensions = (
'.pptx', '.docx', '.xlsx', '.pdf', '.csv', '.zip', '.html', '.htm'
# ".xml", ".rss", ".atom",'.ipynb', // not working
)
llm_supported_image_extensions = ('.jpg', '.jpeg', '.png')
use_llm = True if os.environ.get('markitdown_azureopenai_key') else False
if use_llm:
# create an instance of the AzureOpenAI class
client = AzureOpenAI(
azure_endpoint=os.environ.get('markitdown_azureopenai_endpoint'),
api_key=os.environ.get('markitdown_azureopenai_key'),
api_version=os.environ.get('markitdown_azureopenai_apiversion'),
)
md = MarkItDown(llm_client=client, llm_model="gpt-4o")
supported_extensions = default_supported_extensions + llm_supported_image_extensions
else:
md = MarkItDown()
supported_extensions = default_supported_extensions