make_textbook5 プログラム仕様

AI処理専用:講義テキスト(文字起こし)とスライドMarkdownから教科書用/スライド用Markdownを生成します。

AIを活用して、講義の文字起こしテキストとMarkdown形式のスライドを基に、 教育用の教科書Markdownと、より洗練されたスライド用Markdownを自動生成します。 OpenAI (GPTシリーズ) とGoogle (Geminiシリーズ) の両APIに対応しており、 それぞれ最適なメッセージ構築形式を自動で選択します。 AIへの入力となるメッセージはデバッグ用に`.log`ファイルとして保存されます。

  • OpenAI: system + user の会話形式でメッセージを構築します。

  • Google: 1つのuserメッセージにすべての情報をまとめる形式でメッセージを構築します。

  • AIに渡すmessagesを .log ファイルに保存します。

技術ドキュメント: make_textbook5.py

ai.make_textbook5.build_messages(api_choice: str, system_instructions: str, lecture_text: str, slide_markdown: str, final_instruction: str)[ソース]

指定されたAIプラットフォーム向けにメッセージリストを構築します。

詳細説明:

AI APIの種類(OpenAIまたはGoogle Gemini)に応じて、適切な形式でメッセージリストを構築します。 OpenAI (gpt-4oなど) および Open AI Responses (仮のopenai5) の場合は、 `system`ロールと複数の`user`ロールで構成される会話形式を採用します。 Google Gemini (gemini-2.5-flashなど) の場合は、すべての情報を1つの`user`メッセージにまとめます。

パラメータ:
  • api_choice -- str 使用するAI APIの選択肢 ('openai', 'openai5', 'gemini', 'google')。

  • system_instructions -- str AIへのシステム指示(プロンプト)。

  • lecture_text -- str or None 講義の文字起こしテキスト。Noneの場合は「文字起こしテキストはありません。」と伝えます。

  • slide_markdown -- str スライドのMarkdownテキスト。空文字の場合はスライドは提供されません。

  • final_instruction -- str 最終的な出力形式に関する指示。

戻り値:

list of dict AIに渡すためのメッセージリスト。

ai.make_textbook5.call_ai_api(messages: list, api_choice: str, *, openai_key=None, openai_model=None, openai_model5=None, gemini_key=None, gemini_model=None) str[ソース]

指定されたAIサービス(OpenAIまたはGoogle Gemini)のAPIを呼び出します。

詳細説明:

api_choice`に基づいて、適切なAPIクライアントとモデルを選択し、AIにメッセージを送信します。 OpenAI API (`openai) は`client.chat.completions.create`を使用します。 OpenAI Responses API (openai5) は、仮の`client.responses.create`を使用することを想定しています。 Google Gemini API (gemini, google) は`genai.GenerativeModel`と`model.generate_content`を使用します。 APIキーが設定されていない場合や、未対応のAPIが指定された場合はエラーを発生させます。

パラメータ:
  • messages -- list of dict AIに送信するメッセージリスト。

  • api_choice -- str 使用するAI APIの選択肢 ('openai', 'openai5', 'gemini', 'google')。

  • openai_key -- str, optional OpenAI APIキー。

  • openai_model -- str, optional OpenAIのモデル名(通常のChat Completions API用、例: "gpt-4o")。

  • openai_model5 -- str, optional OpenAIの仮のResponses API用モデル名(例: "gpt-5.2")。

  • gemini_key -- str, optional Google Gemini APIキー。

  • gemini_model -- str, optional Google Geminiのモデル名(例: "gemini-2.5-flash")。

戻り値:

str or None AIからの応答テキスト。API呼び出し中にエラーが発生した場合はNone。

例外:

ValueError -- APIキーが未設定の場合、または未対応のAPIが指定された場合。

ai.make_textbook5.main()[ソース]

プログラムのエントリポイント。コマンドライン引数を解析し、AI処理を実行します。

詳細説明:

この関数は、プログラムの実行開始時に呼び出されます。 まず`parse_args`関数を呼び出してコマンドライン引数を解析し、必要な設定(入力・出力ファイル名、API設定など)を取得します。 次に、デフォルトの出力ファイル名が設定されていない場合は、入力ファイル名に基づいて生成します。 最後に、`run_ai_processing`関数を呼び出して、AIによる主要なテキストとスライドの生成処理を実行します。 処理が完了した後、`terminate`関数を呼び出してプログラムを終了します。

戻り値:

なし

ai.make_textbook5.parse_args()[ソース]

コマンドライン引数を解析し、AI設定ファイルを読み込みます。

詳細説明:

`argparse`モジュールを使用して、入力ファイル、出力ファイル、使用するAI API、 モデル名、出力言語、専門分野、役割などのコマンドライン引数を解析します。 AIの設定は`ai.env`から`read_ai_config`で読み込まれ、APIキーは環境変数から取得されます。 プロンプトテンプレートはINIファイルから読み込まれ、グローバル変数`PROMPT_TEMPLATE_JA`と`PROMPT_TEMPLATE_EN`に設定されます。 必要な入力ファイルが指定されていない場合はエラーを出力し、プログラムを終了します。

戻り値:

tuple (argparse.ArgumentParser, argparse.Namespace) `argparse.ArgumentParser`オブジェクトと、解析された引数を格納する`argparse.Namespace`オブジェクトのタプル。

ai.make_textbook5.read_ini(inifile=None)[ソース]

INIファイルから設定を読み込み、キーと値の辞書として返します。

詳細説明:

指定されたINIファイルを検索し、読み込みます。 コメント行(#`または;`で始まる行)および空行はスキップされます。 `key=value`形式の行を解析し、辞書に格納します。 三重引用符で囲まれた複数行の値をサポートします。 読み込み後、辞書内の値に対して`$VAR`形式の変数展開を行います。

パラメータ:

inifile -- str, optional 読み込むINIファイルのパス。Noneの場合、`search_file`関数でデフォルトのINIファイルを検索します。

戻り値:

dict INIファイルから読み込まれた設定を格納した辞書。

例外:

FileNotFoundError -- 指定されたINIファイルが見つからない場合。

ai.make_textbook5.run_ai_processing(infile: str, in_slide_file: str, textbook_file: str, slide_file: str, args)[ソース]

AIを活用して講義テキストとスライドから教科書とスライドのMarkdownを生成します。

詳細説明:

入力された文字起こしテキストとスライドMarkdownを読み込みます。 選択された出力言語、専門分野、役割に基づき、AIへのプロンプトを構築します。 構築されたメッセージリストを`build_messages`関数でAI APIに応じた形式に変換し、 `save_messages_log`関数でログファイルに保存します。 `call_ai_api`関数を呼び出してAIに処理を依頼し、その応答から教科書とスライドの内容を抽出し、 それぞれ指定された出力ファイルにMarkdown形式で保存します。

パラメータ:
  • infile -- str or None 文字起こしテキストファイルのパス。Noneの場合、テキストは提供されません。

  • in_slide_file -- str or None 入力スライドMarkdownファイルのパス。Noneの場合、スライドは提供されません。

  • textbook_file -- str 出力する教科書Markdownファイルのパス。

  • slide_file -- str 出力するスライドMarkdownファイルのパス。

  • args -- argparse.Namespace argparse`によって解析されたコマンドライン引数オブジェクト。 (例: `args.api, args.lang, args.field, `args.role`など)

戻り値:

なし

例外:

FileNotFoundError -- 入力ファイルが見つからない場合。

ai.make_textbook5.save_messages_log(messages: list, infile: str)[ソース]

AIとの対話メッセージリストをJSON形式でログファイルに保存します。

詳細説明:

infile`のファイル名(拡張子なし)を基にログファイル名(例: `lecture.log)を生成します。 メッセージリストは、デバッグや検証のために読みやすい整形されたJSON形式で保存されます。 ファイル保存中にエラーが発生した場合は、エラーメッセージを標準エラー出力に表示します。

パラメータ:
  • messages -- list of dict 保存するメッセージリスト。

  • infile -- str 元の入力ファイルのパス(ログファイル名生成用)。 Noneの場合、"output.log"が生成されます。

戻り値:

なし

ai.make_textbook5.search_file(infile=None)[ソース]

指定されたファイルをカレントディレクトリまたはスクリプトディレクトリから検索します。

詳細説明:

infile`がNoneの場合、スクリプト名に基づいたデフォルトのINIファイル名(例: `make_textbook5.ini)を生成します。 このデフォルトファイルは、まずカレントディレクトリで検索され、次に見つからなければスクリプトが配置されているディレクトリで検索されます。 `infile`が指定された場合、そのパスが存在するかを確認し、存在しない場合はスクリプトディレクトリ内での存在も確認します。

パラメータ:

infile -- str, optional 検索するファイルのパス。Noneの場合、デフォルトのINIファイルを検索します。

戻り値:

str or None 見つかったファイルの絶対パス。見つからない場合はNone。

ai.make_textbook5.terminate()[ソース]

プログラムを終了します。

詳細説明:

グローバル変数`pause`が真(1)の場合、ユーザーにEnterキーの入力を促してからプログラムを終了します。 これにより、コンソールウィンドウがすぐに閉じられるのを防ぎ、出力の確認を可能にします。

戻り値:

なし