mixedbread-parsing について
mixedbread-parsing は、Mixedbread Parsing API を使って文書を解析し、構造化コンテンツを抽出するスキルです。複数形式の文書や画像に対応し、OCR モードと出力形式を選べます。
主な機能
- 01PDF、Word、PowerPoint、画像の解析
- 02高速・高品質の OCR モード
- 03Markdown、HTML、プレーンテキスト出力
- 04要素の絞り込みと信頼度スコア
- 05非同期の一括処理
活用シーン
- 01財務レポートからの表抽出
- 02スキャン文書や回転文書の処理
- 03複数ファイルの一括解析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mixedbread-ai/ skills --skill mixedbread-parsingインストール後、Claude Code で/mixedbread-parsingを入力して読み込まれたか確認します。
詳細
Mixedbread 解析
Parsing API を使用してドキュメントを解析し、構造化コンテンツを抽出して、OCR を実行します。PDF、Word ドキュメント、PowerPoint プレゼンテーション、画像に対応しています。
ドキュメント:https://www.mixedbread.com/docs/parsing/overview.md エージェント向けドキュメント:https://www.mixedbread.com/docs/llms.txt 最新のドキュメント検索:https://www.mixedbread.com/question?q=parsing§ion=docs
セットアップ
pip install mixedbread # Python
npm install @mixedbread/sdk # TypeScript
export MXBAI_API_KEY=your_api_key
クイックスタート
Python:
from mixedbread import Mixedbread
mxbai = Mixedbread()
# Upload and parse a document (waits for completion)
job = mxbai.parsing.jobs.upload_and_poll(
file=open("report.pdf", "rb"),
return_format="markdown",
)
for chunk in job.result.chunks:
print(chunk.content)
TypeScript:
import Mixedbread from '@mixedbread/sdk';
import fs from 'fs';
const mxbai = new Mixedbread();
const job = await mxbai.parsing.jobs.uploadAndPoll(
fs.createReadStream('report.pdf'),
{ return_format: 'markdown' },
);
for (const chunk of job.result.chunks) {
console.log(chunk.content);
}
判断フロー
- どの簡易メソッドを使うか?
- ディスク上のファイル →
upload_and_poll()(アップロード+ジョブ作成+ポーリング) - Files API でアップロード済みのファイル →
create_and_poll()(ジョブ作成+ポーリング) - 非同期処理を制御する必要がある →
upload()またはcreate()を実行し、その後に個別にpoll()を実行
- ディスク上のファイル →
- どの解析モードを使うか?(デフォルトは
high_quality)- デジタル生成 PDF(テキストを選択可能) →
mode="fast"を明示的に指定します。最速かつ最低コストです。テキスト、構造、レイアウトを抽出します。 - スキャン文書、画像、または複雑なレイアウト →
high_qualityモード(デフォルト)を使用します。OCR を使用します。信頼度スコアと要素ごとのバウンディングボックス付きでテキストを抽出し、回転・傾斜したページや複数列のレイアウトにも対応します。
- デジタル生成 PDF(テキストを選択可能) →
- どの戻り値形式を使うか? →
return_format:markdown(デフォルト)、html、またはplain - 特定の要素だけが必要か? →
element_typesを設定して処理時間を短縮します
対応ファイル形式
PDF(.pdf)、Word(.doc、.docx、.dotx、.docm、.dotm、.odt、.rtf)、スライド(.ppt、.pptx、.ppsx、.ppam、.pptm、.potm、.ppsm、.odp)、画像(.jpeg、.png、.webp、.avif)。
要素の種類:text、title、section-header、header、footer、page-number、list-item、figure、table、form、footnote。(旧形式の値 picture、caption、formula、page-header、page-footer も受け付けられますが、figure/text/header/footer に正規化されます。)
抽出された各要素には、type、content、page、confidence(0~1)、bbox が含まれます。bbox はページのピクセル座標で表されたバウンディングボックス [x1, y1, x2, y2] です。bbox を使うと、OCR の出力をページ上の位置に対応付けられます(例:根拠箇所のハイライト表示)。
チャンク化:chunking_strategy のデフォルトは page(現在、唯一の戦略)で、1 ページにつき 1 つのチャンクになります。
ワークフロー
ドキュメントから表を抽出する
表要素に絞り込んで、レポートから構造化データを抽出します。
Python:
job = mxbai.parsing.jobs.upload_and_poll(
file=open("financial-report.pdf", "rb"),
element_types=["table"],
return_format="html",
mode="high_quality",
)
for chunk in job.result.chunks:
for element in chunk.elements:
if element.type == "table":
print(f"Page {element.page}, confidence {element.confidence:.2f}, bbox {element.bbox}")
print(element.content)
TypeScript:
const job = await mxbai.parsing.jobs.uploadAndPoll(
fs.createReadStream('financial-report.pdf'),
{ element_types: ['table'], return_format: 'html', mode: 'high_quality' },
);
for (const chunk of job.result.chunks) {
for (const element of chunk.elements) {
if (element.type === 'table') {
console.log(`Page ${element.page}, confidence ${element.confidence.toFixed(2)}, bbox ${element.bbox}`);
console.log(element.content);
}
}
}
複数ファイルを一括解析する
複数のファイルを非同期でアップロードしてから、すべてのジョブをポーリングします。
Python:
import os
jobs = []
for filename in os.listdir("./documents"):
if filename.endswith(".pdf"):
job = mxbai.parsing.jobs.upload(
file=open(f"./documents/{filename}", "rb"),
return_format="markdown",
)
jobs.append(job)
# Poll all jobs
for job in jobs:
completed = mxbai.parsing.jobs.poll(job_id=job.id)
print(f"{completed.filename}: {len(completed.result.chunks)} chunks")
TypeScript:
import { readdirSync, createReadStream } from 'fs';
import path from 'path';
const files = readdirSync('./documents').filter(f => f.endsWith('.pdf'));
const jobs = await Promise.all(
files.map(f => mxbai.parsing.jobs.upload(
createReadStream(path.join('./documents', f)),
{ return_format: 'markdown' },
)),
);
// Poll all jobs
for (const job of jobs) {
const completed = await mxbai.parsing.jobs.poll(job.id);
console.log(`${completed.filename}: ${completed.result.chunks.length} chunks`);
}
ルール
最重要
- 二重解析しないでください。 ストアへのアップロードでは、ドキュメントが自動的に解析されます。
parsing_strategy: "high_quality"を指定してアップロードされたファイルでは、OCR テキスト(画像)、要約(画像)、文字起こし(音声と動画)が自動的に抽出されます。これらは検索結果のチャンクのフィールドとして利用できます。同じファイルに対して Parsing API も実行するメリットはありません。ストア外で単独のドキュメント抽出を行う場合にのみ、Parsing API を使用してください。 - 手動のポーリングループではなく、
upload_and_poll()/create_and_poll()を使用してください。 これらのメソッドはバックオフを自動的に処理します。retrieve()を使った手動のwhileループは不安定で、API 呼び出しを無駄にします。
重要
- 特定の要素だけが必要な場合は、
element_typesを指定してください。 すべての種類をリクエストすると、処理時間とレスポンスサイズが増加します。表だけが必要な場合は、element_typesをtableのみに設定してください。 - デジタル生成 PDF には
fastモードを使用してください。 テキストがすでに選択可能な場合、high_qualityモードによる OCR の追加処理はメリットをもたらしません。 - OCR 出力の
confidenceスコアを確認してください。 信頼度の低い要素(< 0.5)には誤りが含まれている可能性があります。フィルタリングするか、フラグを付けてください。
MEDIUM
- 失敗したジョブを再試行する前に、
job.errorを確認してください。 よくある原因:サポートされていないファイル形式、ファイルの破損、ファイルサイズが大きすぎる。むやみに再試行すると、クォータを無駄に消費します。 - 埋め込みパイプラインには
content_to_embedを使用してください。 各チャンクには、content(全文)とcontent_to_embed(埋め込み用に最適化されたテキスト)の両方が含まれます。Mixedbread 以外のベクトルストアにデータを渡す場合は、後者を使用してください。 - 解析する前にファイル形式を確認してください。 サポートされているのは、PDF、Word、PowerPoint、画像のみです。それ以外の形式は、事前に変換してください。
トラブルシューティング
| 症状 | 原因 | 対処方法 |
|---|---|---|
ジョブがpendingのまま進まない | キューが混雑している | poll()でpoll_timeout_msを長めに設定してください。retrieve()でジョブのステータスを確認してください。 |
ジョブのステータスがfailed | サポートされていないファイル形式、ファイルの破損、またはファイルサイズが大きすぎる | 詳細はjob.errorで確認してください。ファイル形式がサポートされていることを確認してください。 |
| 結果のチャンクが空 | ファイルから抽出できるコンテンツがない(空白のページ) | ファイルにコンテンツがあることを確認してください。スキャン文書の場合は、high_qualityモードを試してください。 |
| 信頼度スコアが低い | スキャン画像、または解像度の低いソース | OCR の精度を高めるには、high_qualityモードを使用してください。 |
| 表や図が見つからない | 要求された要素タイプに含まれていない | element_typesにtableとfigureを明示的に含めてください。 |
upload_and_poll()がタイムアウトする | 文書が非常に大きい、または処理に時間がかかっている | poll_timeout_msを増やすか、より細かく制御できるようにupload()とpoll()を別々に使用してください。 |