AIツールを使用してPDFを画像に変換する

この進行中の Docker Labs GenAI シリーズ AI開発者ツールのエキサイティングな空間を探ります。 Dockerでは、誇大広告なしでオープンに探求できる広大な範囲があると信じています。 私たちは探索を共有し、開発者コミュニティとリアルタイムで協力します。 開発者はGitHub Copilotのようなオートコンプリートツールを採用し、チャットを使用していますが、AIツールがソフトウェアのライフサイクル全体を通じて、より具体的なタスクやインターフェースを支援する可能性は大いにあります。 したがって、私たちの探求は広範囲に及びます。 ソフトウェアをオープンソースとしてリリースするので、私たちと一緒にプレイしたり、探索したり、ハックしたりできます。

PDFを一連の画像にどのように変換しますか? 現代的な提案は、Claude や GPT に ImageMagick のような CLI コマンドを書かせることかもしれません。 その思考の流れをたどってみましょう。

2400x1260 Docker Labs Genai

「ImageMagickを使用してPDFを画像の束に変換するにはどうすればよいですか」のようなプロンプトを入力すると、確かに解決策と思われるものが得られます。

Imagemagick includes a command-line tool called convert which you can use to convert PDF files into images. Here's how you can do it:

1. Open your terminal

2. Change directory to where your PDF is located:

```
cd /path/to/your/pdf

```
3. Use the following command to convert the PDF into images (in this case JPEG):

```
convert -density 300 -quality 100 your_file.pdf output_name.jpg

``` 

その後、エージェントは convert がどのように機能するかを説明し、「これらのコマンドを実行する前にImageMagickがインストールされていることを確認してください」という提案で終了します。

ただし、ImageMagickがインストールされているかどうかを心配する代わりに、Dockerをツールプロバイダーとして使用し、先に進んでコマンドを実行するように促しましょう。このシリーズを読んでいる方は、Markdownファイルを使用してツールとプロンプトを混在させていることをご存知でしょう。 最初に試したプロンプトは次のとおりです。

---
tools:
  - name: imagemagick
---
# prompt user

Use Imagemagick to convert the family.pdf file into a bunch of jpg images.

このプロンプトを実行した後、LLM はツール呼び出しを生成し、 Docker ランタイムで実行し、 family.pdf を 9 つの.jpgに正常に変換しました ファイル(私の family.pdf ファイルは9ページでした)。 

図 1 は、 VSCode 拡張機能からのフローを示しています。

PDFを画像に変換するプロセスを示すアニメーション化されたvscodeワークフロー。
図 1: VSCode 拡張機能からのワークフロー。

LLM に十分なコンテキストを提供したので、この ImageMagick バイナリの呼び出しを計画できます。 また、このツールは Docker Hubで利用できるため、「ImageMagickがインストールされていることを確認する」必要はありません。これは、 docker run を直接使用する場合と同等のコマンドです。

# family.pdf must be located in your $PWD

docker run --rm -v $PWD:/project --workdir /project vonwig/imageMagick:latest convert -density 300 -quality 300 family.pdf family.jpg 

ツールエコシステム

これはどのように機能しましたか? このプロセスは、次の 2 つのことに依存していました。

  • ツールの配布と検出 (Docker Hub にツールをプルして 、Docker Desktop ランタイムに配布する)。
  • エージェントツールインターフェースの自動生成。

このプロジェクトを最初に始めたとき、各ツールのインターフェースの設計には時間がかかるため、小さなツールセットから始めると予想していました。 私たちは、これらのエージェントワークフローで使用するために準備されたツールのエコシステムをブートストラップする必要があると考えました。 

しかし、私たちは、はるかに一般的なアプローチを使用できることを学びました。 ほとんどのツールには、コマンドラインヘルプ、例、マニュアルページなどのドキュメントがすでに付属しています。 各ツールを特別なものとして扱うのではなく、エージェントがドキュメントを読み、再試行することでエラーに対応するアーキテクチャを使用しています (図 2)。

「ツールの実行」が「キャプチャエラー」につながり、「ドキュメントの読み取り」につながる循環プロセスの図。
図 2: エージェント プロセス。

ツールを試すプロセスは、開発者としてコマンドラインで行うことと似ています。 コマンドラインを試し、ドキュメントを読み、コマンドラインを調整して、再試行してください。

この種のループの価値は、私たちの期待を変えました。 ステップ1は、ツールをDocker Hubにプルし、エージェントがすぐに使えるドキュメントだけでツールを使用できるかどうかを確認することです。 また、オープンソースソフトウェア(OSS)ツールを nixpkgsから直接引っ張ってきて、何万もの異なるツールにアクセスして実験できるようにしています。 

Docker はランタイムをホスト オペレーティング システムから分離し、nixpkgs エコシステムとメンテナーは OSS ツールの豊富なソースを提供します。

予想通り、パッケージングエージェントは依然として問題に直面しており、ツールのパッケージ化方法を再計画する必要があります。 たとえば、上に示したプロンプトでは、最初の試行で正しいツール呼び出しが生成されている可能性がありますが、ImageMagick コンテナは最初の実行で失敗し、次のひどいエラー メッセージが表示されます。

function call failed call exited with non-zero code (1): Error: sh: 1: gs: not found  

さいわい、そのエラーを LLM にフィードバックすると、正常に実行するには Ghostscript という別のツールが必要である convert 提案されました。私たちのエージェントは今日、これを自動的に修正することができませんでした。 ただし、イメージのビルドをわずかに調整したため、 vonwig/imagemagick:latest の「最新」バージョンではこの問題がなくなりました。 これは、私たちが一度だけ学ぶ必要があることの一例です。

LLMは自分で convert を見つけ出しました。 しかし、そのエージェンシーはツールの追加から来ました。

Docker Labs の GenAI シリーズを読んで、私たちが取り組んできたことの詳細をご覧ください。

さらに詳しく