このスクリプトは、サカナAIが作った科学論文のLaTeX文書を自動生成するパイソンコードです。主に、LaTeXファイルの生成、引用の管理、セクションの執筆、エラーの修正などを行います。
perform_writeup.py 論文を書く
スクリプトの詳細
モジュールのインポート
`argparse`, `os`, `shutil`, `subprocess`などのモジュールをインポートします。これらは、ファイル操作やコマンドライン引数の処理に使用されます。
LaTeX生成関数: `generate_latex`
パスの設定: `osp.abspath`と`osp.join`を使用して、絶対パスを取得し、作業ディレクトリを設定します。
参考文献の確認: LaTeXファイル内の引用が`references.bib`に含まれているかを確認します。見つからない場合は警告を出し、修正を促します。
図の確認: LaTeXファイルに含まれる図がディレクトリ内に存在するかを確認し、存在しない場合は警告を出します。
重複の削除: 重複する図やセクションヘッダーを検出し、削除を促します。
エラー修正: `chktex`を使用してLaTeXのバグを検出し、修正を行います。
引用管理
引用の追加: `get_citation_aider_prompt`関数を使用して、論文に必要な引用を追加します。Semantic Scholar APIを使用して関連する論文を検索し、引用を追加します。
論文の執筆
各セクション(例: タイトル、概要、導入、背景、方法、実験設定、結果、結論)を執筆するためのプロンプトを生成します。各セクションの執筆前に、コメントで段落の内容を簡単に説明します。
メイン関数
コマンドライン引数を解析し、指定されたモデルとフォルダを使用して、論文の執筆を開始します。選択したAIモデルに基づいて、適切なAPIクライアントを設定します。
このスクリプトは、AIを活用して科学論文の執筆プロセスを効率化し、エラーの少ないLaTeX文書を生成することを目的としています。
コードの中身
必要なライブラリとモジュールのインポート:
import argparse
import os
import os.path as osp
import shutil
import subprocess
from typing import Optional, Tuple
from ai_scientist.generate_ideas import search_for_papers
from ai_scientist.llm import get_response_from_llm, extract_json_between_markers
import re
import json
サブプロセス実行、型ヒント、正規表現処理、JSONハンドリングなど、プログラムの様々な機能に必要なものです。
LaTeX生成関数の定義:
def generate_latex(coder, folder_name, pdf_file, timeout=30, num_error_corrections=5):
# ... (関数の内容)
LaTeXファイルを生成し、コンパイルしてPDFを作成します。主な処理は以下の通りです:
参照の検証
図の存在確認
重複図の削除
重複セクションヘッダーの削除
LaTeXエラーの修正
LaTeXコンパイル関数の定義:
def compile_latex(cwd, pdf_file, timeout=30):
# ... (関数の内容)
この関数は、LaTeXファイルをPDFにコンパイルします。pdflatexとbibtexコマンドを使用して、参考文献を含む完全なPDFを生成します。
セクションごとのヒントの定義:
per_section_tips = {
"Abstract": "...",
"Introduction": "...",
# ... (他のセクション)
}
これは、論文の各セクションを書く際のヒントを提供する辞書です。
エラーリストの定義:
error_list = """
- Unenclosed math symbols
- Only reference figures that exist in our directory
# ... (他のエラー項目)
"""
これは、LaTeXドキュメントで一般的に発生するエラーのリストです。
引用ヘルパー関数の定義:
def get_citation_aider_prompt(client, model, draft, current_round, total_rounds):
# ... (関数の内容)
この関数は、論文に引用を追加するためのプロンプトを生成します。Semantic Scholar APIを使用して関連論文を検索し、適切な引用を選択します。
メイン関数の定義:
def perform_writeup(idea, folder_name, coder, cite_client, cite_model, num_cite_rounds=20):
# ... (関数の内容)
この関数は、論文の実際の執筆プロセスを管理します。各セクションを順番に書き、引用を追加し、全体を洗練させます。
メインの実行部分:
if __name__ == "__main__":
# ... (コマンドライン引数の解析とセットアップ)
# ... (AIモデルの選択と初期化)
# ... (論文の生成実行)
このセクションでは、コマンドライン引数を解析し、適切なAIモデルを選択・初期化し、論文生成プロセスを開始します。
この記事が気に入ったらサポートをしてみませんか?