205
225

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

教科書・本を自動生成するツールをChatGPTで作ってみた

Last updated at Posted at 2024-10-12

教科書をLaTeXおよびPDFファイルで自動生成するツールを作りました!

プログラムはGithubで公開しており、Google Colabで実行できます。
ツールの名前は、AutoGenBookとしました。
このツールにより、あなたのバックグラウンドを考慮した上で、あなたの知りたい分野の教科書を数十円くらいで作ることができます!!

以下は「機械学習のための線形代数」についての教科書を出力した結果です。PDFはこちらに置いています。

Markdownでの出力にも対応しました(2024/10/19)。
数式だけでなく、プログラムも表示できます。
Github Markdownは一部のLaTeX記法に対応していないため、うまくレンダリングされない部分がありますが、VSCodeのMarkdown Previewだと正しく表示されます。
https://gist.github.com/hooked-on-mas/70b4c7c19d873f60955d5dbc3ca72b18

未だ日本語で世に出ていなさそうな「○○エンジニアのための△△入門」の記事を14個生成させてみました(2024/10/14)。例えば、「AIエンジニアのための哲学入門」や「サイバーセキュリティエンジニアのための犯罪学入門」、「機械工学エンジニアのためのトポロジー入門」などがあります。結構興味深い内容が生成できたので、良ければみてみてください。
https://zenn.dev/hookedonmas/books/b6aa4eff9c940a

使い方

OpenAI APIの取得と登録

本ツールはOpenAIのAPIキーが必要です。
OpenAIのAPIキーを取得した後、Google Colabの左側メニューの鍵アイコンをクリックし、OpenAIのAPIキーをopenai_apiと名付けて登録してください。
詳細なやり方を知りたい方は、OpenAIのAPIキーについてはこちら、Google Colabへの登録についてはこちらなどを参照ください。

Google Colabでの実行

↓ を押してもらえると、Google Colabに飛べます。
Open In Colab

AutoGenSageの中身

詳細はプログラムの内容を見てもらえばわかると思いますが、簡単にアイデアと処理の流れを説明します。

基本アイデア

ChatGPTには出力量に制限があるため、「教科書を作ってほしい」と頼んでも、1〜2ページ程度の内容しか出力されません。
そこで、ある本の主題・タイトルを起点として、大見出し(章)→中見出し(節)→小見出し(項)→...のように、ChatGPTを用いて意味的に独立した区分に再帰的に分割します。
これにより、本の全体構成をChatGPTの出力量に縛られることなく自動生成することができます。
そして、最終的に分割された各小区分に関する本文の内容をChatGPTによって生成し、PDFとして出力します。

これは人が本や論文を書く時に、章立てを考えてから実際に中身を書き始めるのと同じで、発想としては自然なことだと思います。

処理の流れ

以下に、おおまかな処理の流れを示します。同じ処理を行うところは一部省略しています。
また、項の生成までで止めていますが、それ以降の分割処理は続きます。

実際に作成された文章構造

実際に出力された12ページくらいの本の文章構造を以下に示します。
bookから出ている矢印の先の1、2、3、4が章を表していて、その下が節、その下が小節になっています。これらのノードは、その章・節のタイトルや概要を情報として持っています。
そして、赤い丸で示されている末端のノードは、本文の内容を情報として持っているノードになります。
section_structure.png

さいごに

このツールが便利だと思った方はZennのバッジを送っていただけると嬉しいです!(OpenAI APIの使用料を結構支払ったので、、)
GithubレポジトリへのStarも,もしよければお願いします.
また、ツールを改良し貢献していただけると、とても嬉しいです!
何かあれば、コメントかX(@hookedonmas)にお願いします。

今後改良したい内容

実装中

  1. 自動デバッグ
    全体でコンパイルする前に各区分をコンパイルして、エラーがないか確認する。エラーがでるのであれば、エラーの内容を踏まえて再度ChatGPTに出力させる
  2. 図の生成
    図をDall-E 3などに生成させる

未実装

  1. コンテキストの提示
    ある区分の内容を出力させる際、前後の区分の概要または内容も考慮させることで、出力内容の重複をなくし、文章の流れを滑らかにする
  2. OutputParserの利用
    LLMにJSON形式で出力させているが、この辺りの処理が簡易なもので、JSON形式でないものを出力されるとエラーが出る。ちゃんとしたlangchainのパーサーを使って実装する
205
225
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
205
225

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?