AI-人間協働における成果物修正の2つのアプローチ

# はじめに
- 効果的なAI-人間協働のために
    - タスクの性質や規模に応じて適切なアプローチを選択し、人間とAIの役割を明確に定義することが重要
    - 品質管理プロセスを適切に実施し、全体的な整合性と効率性のバランスを取ることが成功の鍵


# アプローチの整理

AI-人間協働における成果物の修正タスクにおいて、2つの主要なアプローチに整理する。

1. 成果物そのものを直接修正する方法
2. 集約された中間成果物でやりとりする方法

### 2つのアプローチ

#### 1. 成果物そのものを直接修正する
   - 単一ファイルや限定的な範囲の修正に適している
   - 迅速な修正と即時フィードバックが可能
   - 局所最適化のリスクに注意が必要

#### 2. 集約された中間成果物でAIとやりとりする
   - 複数ファイルにまたがる大規模な修正に適している
   - 一貫性のある修正と複雑な依存関係の管理が可能
   - より多くの時間と計画が必要

### 使用できるAIツール

- 1.に対しては、既存のAIアシスタントを活用できる。(ChatGPT、GithubCopilotなど)
- 2.については、現時点でプロダクションレベルのコードサイズに対応充分なAIツールは存在しない
    - Claudeのproject機能はこのアプローチを期待されるが、現時点ではプロダクションレベルのコードサイズには充分でない。

### AIによるコード生成の実現可能なスケール

- 既存のAIアシスタントで、品質を保って生成可能なコードは100行~300行程度(主観)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348593/054c5b1e-ac05-7c09-24c8-3202ae07699c.png)

- それ以上のコードボリュームでの実現させる場合には、ワークフローを組む必要がある
    - サブプロセスを定義し、コンテキストサイズを限定する
    - コンテキストウインドウをずらしながら、せまいコンテキストを保ちながら作業を連続させる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348593/ae31454f-656c-b39a-8673-9b64ad056276.png)


## 1.成果物そのものを直接修正する

- 適用場面
  - 単一ファイルの細かな修正
  - 特定の関数やメソッドの修正
  - ドキュメントの特定セクションの更新
  - AIが生成した図表の微調整

- 利点
  - 迅速な修正が可能
  - AIへの要求コストが高い修正に対し、人間の意図を直接反映しやすい
  - 即時のフィードバックループが形成しやすい


## 2.集約された中間成果物でAIとやりとりする


- 定義：修正対象が複数ファイルに波及し、整合性が必要な修正

- 適用場面
  - アーキテクチャの変更
  - データモデルの修正
  - API仕様の変更
  - 複数のモジュールに影響する機能追加
      - 一貫性のある修正
      - 全体的な設計変更に適している
      - 複雑な依存関係を管理

### プロセス
  1. 修正要件を包括的に定義する
  2. 影響範囲の分析を行う
  3. 中間成果物（設計書等）を作成する
  4. 人間によるレビューと承認を行う
  5. AIによる一括修正を実施する
  6. 人間による修正の承認を行う

- 人間の役割
  - 全体的な設計判断
  - 複雑な要件の明確化
  - 修正指示の提供

- AIの役割
  - 影響範囲の分析を行う
  - 中間成果物（設計書等）を作成
  - 複数ファイルにまたがる一貫した修正の実施
  - 依存関係の自動解決
  - 全体的な一貫性チェックを実施

## ワークフローの比較

2つのアプローチをワークフローにして比較する。
1. 成果物そのものを直接修正する（左）
2. 集約された中間成果物でAIとやりとりする（右）

AIに求められるタスクの複雑度の違いが明らかとなった。
また、2に対しては影響範囲の分析にはAI単独の機能では実現できず「検索」機能性も必要であることがわかる。


```mermaid

graph TD
    %% クラス定義
    classDef checkpoint fill:#ffeeba,stroke:#ffc107,stroke-width:2px;
    classDef human fill:#FFB3BA,stroke:#FF6B7A,stroke-width:2px;
    classDef ai fill:#D4E6F1,stroke:#3498DB,stroke-width:2px;
    classDef humanFeedback fill:#FDEDEC,stroke:#E74C3C,stroke-width:2px;

    %% メインフロー
    A[開始] --> B{AI/人間: 修正の範囲と複雑さの評価}:::checkpoint
    B -->|単一ファイル/限定的| C
    B -->|複数ファイル/複雑| D
    
    %% 直接やりとり方式のサブグラフ
    subgraph DirectInteraction [直接やりとり方式]
        C[直接やりとり方式] --> E[人間: 特定のファイル/箇所を指定]:::human
        E --> F[人間: 具体的な修正内容を指示]:::human
        F --> G[AI: 修正を実施]:::ai
        G --> H[人間: 即時確認]:::human
        H --> I{人間: 修正は適切か?}:::checkpoint
        I -->|はい| J[人間: 修正を承認]:::human
        I -->|いいえ| K[人間: フィードバックを提供]:::humanFeedback
        K -.-> F
    end

    %% 中間成果物方式のサブグラフ
    subgraph IntermediateArtifact [中間成果物方式]
        D[中間成果物方式] --> L[人間: 修正要件を包括的に定義]:::human
        L --> setupDoc[AI: 人間レビュー用中間成果物の作成]:::ai
        setupDoc --> structureIntegrityCheck{AI: レビュー}:::checkpoint
        structureIntegrityCheck -->|OK| humanSetupReview{人間: レビュー}:::human
        structureIntegrityCheck -.->|要修正| setupDoc
        humanSetupReview -->|承認| M[AI: 影響範囲の分析を実施]:::ai
        humanSetupReview -->|要修正| humanSetupFeedback[人間: 修正要件の作成]:::humanFeedback
        humanSetupFeedback -.-> setupDoc
        M --> N[AI:変更一覧を作成]:::ai
        N --> O[人間: レビュー]:::human
        O --> P{人間: 承認されたか?}:::checkpoint
        P -->|はい| Q[AI: 一括修正の実施]:::ai
        P -->|いいえ| R[人間: フィードバックを提供]:::humanFeedback
        R -.-> N
        Q --> S[人間: 最終確認]:::human
        S --> T{人間: 修正は適切か?}:::checkpoint
        T -->|はい| U[人間: 修正を承認]:::human
        T -->|いいえ| V[人間: 追加のフィードバックを提供]:::humanFeedback
        V -.-> N
    end

    %% 終了
    J --> W[終了]
    U --> W
```


## まとめ

AI-人間協働におけるタスク修正において、2つの主要なアプローチが存在する：

1. 成果物そのものを直接修正する
2. 集約された中間成果物でAIとやりとりする

1.に対しては、既存のAIアシスタントを活用できる。
2.については、現時点でプロダクションレベルのコードサイズに充分なAIツールは存在しない。

----

### 関連記事

https://qiita.com/ymgc3/items/1f7b5ff81a592d2fcd22