## AI_assistant.py プログラム解析

### 1) プログラムの動作

`AI_assistant.py`は、PythonのTkinterとttkthemesライブラリを使用して構築されたGUIアプリケーションです。OpenAIまたはGoogle Geminiといった大規模言語モデル（LLM）APIを利用して、ユーザーが指定したテキストファイルの内容を基にAIに問い合わせを行い、その応答を出力ファイルに保存し、外部エディタで表示する機能を提供します。

**主要な機能:**

1.  **GUIインターフェース**: 直感的で使いやすいグラフィカルユーザーインターフェースを提供し、各種設定や操作をマウスで行えます。
2.  **エディタ/ファイルパス設定**:
    *   **Editor Executable**: AIの生成したテキストを表示するための外部エディタ（例: VS Code, Notepad++）の実行可能ファイルを指定します。
    *   **Input Text File**: AIに処理させたい入力テキストファイルを指定します。ファイルの内容は`Max Bytes`で指定されたサイズまで読み込まれます。
    *   **Output File**: AIからの応答を保存する出力ファイルを指定します。デフォルトでは入力ファイル名に`-output.txt`が付加されますが、ユーザーが任意に設定できます。
    *   `Browse`ボタンでファイル選択ダイアログを開き、`View`ボタンで設定されたエディタでファイルを開きます。
3.  **API選択とモデル選択**:
    *   **API**: `OpenAI`または`Google`のいずれか、利用可能なAPI（環境変数でAPIキーが設定されているもの）を選択します。
    *   **Model**: 選択されたAPIプロバイダーに応じて、利用可能なAIモデルのリストが動的に更新され、そこからモデルを選択します（例: `gpt-4o`, `gemini-2.5-flash`）。GPT-5系モデルとGPT-4/3.5系モデルでAPIの呼び出し方法が内部的に分岐します。
4.  **RoleとPromptテンプレートの管理**:
    *   **Role**: `roles.ini`ファイルから読み込まれた、事前定義された「役割」（例: "文章の要約", "コードのレビュー"）を選択します。選択された役割のプロンプトが`Current Prompt`テキストエリアに表示されます。
    *   **Prompt Template**: `prompt.ini`ファイルから読み込まれた、追加の「プロンプトテンプレート」（例: "丁寧な表現", "簡潔な表現"）を選択します。選択されたテンプレートの内容は、`Current Prompt`テキストエリアの既存の内容に追加されます。
    *   **Current Prompt**: AIに送信される最終的なプロンプトを編集するテキストエリアです。`{{text}}`プレースホルダーが含まれている場合、入力ファイルの内容に置き換えられます。テキストエリアの高さは、下部のグリッパーをドラッグして調整可能です。
5.  **パラメータ設定**:
    *   **Temperature**: AIの応答の創造性や多様性を調整する数値（0.0〜2.0）。
    *   **Max Bytes**: 入力ファイルからAIに送信する最大バイト数。
    *   **Reasoning Effort (GPT-5)**: GPT-5系モデルに特有の推論レベル（"low", "medium", "high"など）を設定します。
    *   **Verbosity**: AIの応答の詳細度を指示する（"short", "normal", "long"など）。これはAPIのパラメータとしてではなく、プロンプトの先頭に指示文を追加することで実現されます。
6.  **AIクエリ実行**:
    *   `Query AI`ボタンを押すと、現在の設定に基づきAIに問い合わせが開始されます。この処理はUIをブロックしないようにバックグラウンドスレッドで実行されます。
    *   AIからの応答は指定された出力ファイルに保存され、その後設定されたエディタで自動的に開かれます。
    *   GPT-5系モデルのResponses APIからの応答は、まず人間が読めるテキスト（`ResponseOutputText`などの`text`フィールド）として抽出を試みます。抽出できない場合は、応答オブジェクト全体のJSON表現を保存します。
7.  **設定の永続化**:
    *   アプリケーションの終了時、または`Query AI`ボタンが押された際に、UI上のすべての設定がスクリプトと同じディレクトリにある`.ini`ファイル（例: `AI_assistant.ini`）に自動的に保存されます。
    *   次回起動時に、保存された設定が自動的に読み込まれ、前回の状態が再現されます。
8.  **INIファイルの読み込み**:
    *   `roles.ini`、`prompt.ini`、および設定ファイル(`.ini`)の読み込みには、エンコーディング自動検出ライブラリ`chardet`が使用され、様々な文字コードに対応しています。ファイル内のコメント行（`#`で始まる行）は無視されます。
9.  **ステータス表示**:
    *   ウィンドウ下部のステータスバーに、アプリケーションの状態、処理の進捗、エラーメッセージなどがリアルタイムで表示されます。

### 2) 必要な非標準ライブラリとインストールコマンドとインストール方法

以下の非標準Pythonライブラリが必要です。`pip`を使用してインストールできます。

```bash
pip install python-dotenv ttkthemes openai google-generativeai chardet
```

| ライブラリ名             | 説明                                                                     | インストールコマンド             | 備考                                                                                                                                                                                                                                                                                                                      |
| :----------------------- | :----------------------------------------------------------------------- | :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `python-dotenv`          | `.env`ファイルから環境変数をロードするために使用されます。             | `pip install python-dotenv`      | APIキーなどの機密情報をコードに直接記述せず、安全に管理するために必要です。                                                                                                                                                                                                                |
| `ttkthemes`              | Tkinterアプリケーションにモダンなテーマを適用するために使用されます。  | `pip install ttkthemes`          | GUIの見た目を改善します。                                                                                                                                                                                                                                                                 |
| `openai`                 | OpenAI APIと連携するために使用されます。                               | `pip install openai`             | OpenAI API (GPT-4, GPT-5, GPT-3.5など) を利用する場合に必須です。                                                                                                                                                                                                                         |
| `google-generativeai`    | Google Gemini APIと連携するために使用されます。                        | `pip install google-generativeai` | Google Gemini APIを利用する場合に必須です。                                                                                                                                                                                                                                              |
| `chardet`                | テキストファイルの文字エンコーディングを自動検出するために使用されます。 | `pip install chardet`            | `roles.ini`, `prompt.ini`, および設定ファイル(`.ini`)の読み込み時に、様々なエンコーディングのファイルに対応するために使用されます。                                                                                                                                                             |
| `tkinter` (標準ライブラリ) | Python標準のGUIライブラリです。                                          | （通常不要）                     | Pythonに同梱されていますが、一部のOS（特にLinuxディストリビューション）では、別途システムパッケージとしてインストールが必要な場合があります。例: `sudo apt-get install python3-tk` (Debian/Ubuntu), `sudo yum install python3-tkinter` (Fedora/RHEL)。 |

### 3) 必要な入力ファイル

このプログラムの動作には、以下のファイルが必要となる場合があります。

1.  **`translate.env`** または **`accounts.env`**
    *   **目的**: OpenAIおよびGoogle Gemini APIの認証キーを安全に格納するため。
    *   **場所**: スクリプトファイルと同じディレクトリに`translate.env`を配置するのが推奨されます。`translate.env`が存在しない場合、環境変数`account_inf_path`で指定されたパス（デフォルトは`accounts.env`）が探されます。
    *   **内容の例**:
        ```ini
        OPENAI_API_KEY="sk-YOUR_OPENAI_API_KEY_HERE"
        GOOGLE_API_KEY="AIzaSyYOUR_GOOGLE_API_KEY_HERE"
        ```
    *   **備考**: これらのファイルがない場合やAPIキーが設定されていない場合でもプログラムは起動しますが、対応するAPIは利用できません。

2.  **`roles.ini`**
    *   **目的**: 「Role」コンボボックスに表示される役割とそのプロンプトテンプレートを定義するため。
    *   **場所**: スクリプトファイルと同じディレクトリ。
    *   **内容の形式**:
        ```ini
        # コメント行
        desc="文章の要約"
        以下の文章を要約してください。

        {{text}}

        desc="コードのレビュー"
        以下のPythonコードをレビューし、改善点を提案してください。

        {{text}}
        ```
    *   **備考**: ファイルが存在しない場合、プログラムは組み込みのデフォルト役割リストを使用します。`desc="説明"`の形式で「説明」部分を定義し、それに続く複数行をプロンプト内容として扱います。

3.  **`prompt.ini`**
    *   **目的**: 「Prompt Template」コンボボックスに表示される追加のプロンプトテンプレートを定義するため。
    *   **場所**: スクリプトファイルと同じディレクトリ。
    *   **内容の形式**:
        ```ini
        # コメント行
        desc="丁寧な表現"
        常に丁寧な言葉遣いを心がけてください。

        desc="専門的な表現"
        専門用語を適切に使用し、技術的な視点から記述してください。
        ```
    *   **備考**: ファイルが存在しない場合、プログラムは組み込みのデフォルトプロンプトテンプレートリストを使用します。

4.  **ユーザーが指定する入力テキストファイル**
    *   **目的**: AIが処理する実際のテキストデータを提供するため。
    *   **場所**: GUIの「Input Text File」フィールドでユーザーが指定します。
    *   **備考**: プロンプトに`{{text}}`プレースホルダーが含まれている場合にのみ、このファイルの内容が読み込まれ、プレースホルダーと置き換えられてAIに送信されます。

### 4) 実行後に生成される出力ファイル

プログラムの実行により、以下のファイルが生成または更新されます。

1.  **`AI_assistant.ini`** (またはスクリプト名`.ini`)
    *   **目的**: アプリケーションのユーザー設定を保存するため。
    *   **場所**: スクリプトファイルと同じディレクトリ。
    *   **内容**: GUIで設定されたエディタパス、入力/出力ファイルパス、API選択、モデル、Temperature、Max Bytes、選択されたRole/Promptテンプレート、現在のプロンプト内容、Reasoning Effort、Verbosityなどが保存されます。アプリケーションの起動時と終了時、および`Query AI`ボタンが押された際に更新されます。

2.  **`[入力ファイル名]-output.txt`** (例: `my_document-output.txt`)
    *   **目的**: AIからの応答を格納するため。
    *   **場所**: デフォルトでは入力ファイルと同じディレクトリに生成されますが、GUIの「Output File」フィールドでユーザーが任意のパスを指定できます。
    *   **内容**: AIモデルからの生成されたテキスト応答。OpenAIのGPT-5系モデルからの応答で、人間が読めるテキストを抽出できなかった場合は、API応答のJSON形式の表現が保存されます。ファイルはUTF-8エンコーディングで保存されます。

### 5) コマンドラインでの使用例 (Usage)

`AI_assistant.py`はGUIアプリケーションであるため、直接コマンドライン引数で操作することは想定されていません。以下の方法でPythonインタープリタを介して起動します。

**1. 事前準備 (必須):**

まず、すべての必要なライブラリをインストールします。

```bash
pip install python-dotenv ttkthemes openai google-generativeai chardet
```

Linux環境などで`tkinter`が別途必要な場合は、システムパッケージをインストールします。

```bash
# Debian/Ubuntuの場合
sudo apt-get update
sudo apt-get install python3-tk

# Fedora/RHELの場合
sudo yum install python3-tkinter
```

**2. APIキーの設定 (必須):**

スクリプトファイルと同じディレクトリに `translate.env` という名前のファイルを作成し、使用したいAIサービスのAPIキーを記述します。

**`translate.env` の例:**

```ini
OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
GOOGLE_API_KEY="AIzaSyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
```

*   `OPENAI_API_KEY` を設定すると、OpenAI APIがGUIの選択肢に表示されます。
*   `GOOGLE_API_KEY` を設定すると、Google Gemini APIがGUIの選択肢に表示されます。
*   両方を設定することも可能です。

**3. カスタムRoleとPromptテンプレートの作成 (オプション):**

スクリプトファイルと同じディレクトリに `roles.ini` および `prompt.ini` ファイルを作成して、GUIのコンボボックスに表示される独自の役割やプロンプトテンプレートを定義できます。これらのファイルがない場合、プログラムは組み込みのデフォルト値を使用します。

**`roles.ini` の例:**

```ini
desc="記事の要約"
以下の記事を300字以内で要約してください。

{{text}}

desc="コードのデバッグ"
以下のPythonコードを分析し、潜在的なバグや改善点を提案してください。
修正案も提示してください。

{{text}}
```

**`prompt.ini` の例:**

```ini
desc="丁寧語"
常に丁寧な日本語で回答してください。

desc="技術的詳細"
専門用語を交え、技術的な視点から詳細に記述してください。
```

**4. プログラムの起動:**

上記の準備が完了したら、コマンドライン（ターミナルやコマンドプロンプト）から以下のコマンドを実行してプログラムを起動します。

```bash
python AI_assistant.py
```

**実行後の操作:**

プログラムを起動すると、GUIウィンドウが表示されます。
ウィンドウの各項目を設定し、「Query AI」ボタンをクリックしてAIとの対話を開始してください。設定は自動的に保存され、次回起動時に前回の状態が読み込まれます。