AutoGenBookは、LLM(大規模言語モデル)を用いて本を自動生成するPythonベースのツールです。ユーザーが指定した内容に基づき、章や節、さらに小節を再帰的に作成し、最終的にLaTeXを使用してPDF形式で出力します。
このツールはOpenAIのAPIキーを必要とします。APIキーを取得したら、Google Colabの左側のメニューにあるキーアイコンをクリックし、openai_api
という名前で登録してください。
以下のボタンをクリックして、Google Colabでツールを開きます:
生成された教科書のサンプル「機械学習のための線形代数:Numpyによる実践ガイド」をPDF形式で以下から閲覧できます.
詳細はプログラムの内容を見てもらえばわかると思いますが、簡単にアイデアと処理の流れを説明します。
ChatGPTには出力量に制限があるため、「教科書を作ってほしい」と頼んでも、1〜2ページ程度の内容しか出力されません。 そこで、ある本の主題・タイトルを起点として、大見出し(章)→中見出し(節)→小見出し(項)→...のように、ChatGPTを用いて意味的に独立した区分に再帰的に分割します。 これにより、本の全体構成をChatGPTの出力量に縛られることなく自動生成することができます。 そして、最終的に分割された各小区分に関する本文の内容をChatGPTによって生成し、PDFとして出力します。
これは人が本や論文を書く時に、章立てを考えてから実際に中身を書き始めるのと同じで、発想としては自然なことだと思います。
以下に、おおまかな処理の流れを示します。同じ処理を行うところは一部省略しています。 また、項の生成までで止めていますが、それ以降の分割処理は続きます。
graph TD
N[仕様の入力] --> A[本のタイトル・概要の生成<br>章のタイトル・概要の生成]
A --> B[(本のタイトル・概要)]
A --> B1[(第1章のタイトル・概要)]
A --> B2[(第2章のタイトル・概要)]
B1 --> BB1[第1章の節の生成]
B2 --> BB2[第2章の節の生成]
BB1 --> C11[(1.1節のタイトル・概要<br>・分割すべきか)]
BB1 --> C12[(1.2節のタイトル・概要<br>・分割すべきか)]
BB2 --> C21[(2.1節のタイトル・概要<br>・分割すべきか)]
BB2 --> C22[(2.2節のタイトル・概要<br>・分割すべきか)]
C11 --> D11{分割が必要か?}
C12 --> D12{分割が必要か?}
C21 --> D21{分割が必要か?}
C22 --> D22{分割が必要か?}
D11 --> |Yes| E11[1.1節の項の生成]
D11 --> |No| F11[1.1節の内容の生成]
E11 --> E111[(1.1.1項のタイトル・概要<br>・分割すべきか)]
E11 --> E112[(1.1.2項のタイトル・概要<br>・分割すべきか)]
E111 --> F111{分割が必要か?}
E112 --> F112{分割が必要か?}
F11 --> FF[(1.1節の内容)]
実際に出力された12ページくらいの本の文章構造を以下に示します。
bookから出ている矢印の先の1、2、3、4が章を表していて、その下が節、その下が小節になっています。これらのノードは、その章・節のタイトルや概要を情報として持っています。
そして、赤い丸で示されている末端のノードは、本文の内容を情報として持っているノードになります。