|
|
|
""" |
|
🎯 AI-Human協働開発システム - 初心者向け順次テストガイド |
|
|
|
このシステムは初めて使う方でも簡単に操作できるよう、 |
|
ステップバイステップのガイド付きインターフェースを提供します。 |
|
|
|
上から順番に実行していくだけで、システム全体を体験できます。 |
|
""" |
|
|
|
import gradio as gr |
|
import sqlite3 |
|
import json |
|
import os |
|
from datetime import datetime |
|
from pathlib import Path |
|
import sys |
|
|
|
|
|
sys.path.append('/workspaces/fastapi_django_main_live') |
|
|
|
class BeginnerGuideSystem: |
|
"""初心者ガイドシステムクラス""" |
|
|
|
def __init__(self): |
|
self.db_path = "/workspaces/fastapi_django_main_live/prompts.db" |
|
self.approval_db_path = "/workspaces/fastapi_django_main_live/controllers/gra_03_programfromdocs/approval_system.db" |
|
self.current_step = 1 |
|
self.max_steps = 6 |
|
self.test_results = {} |
|
|
|
def get_system_overview(self): |
|
"""システム概要を取得""" |
|
return """ |
|
# 🚀 AI-Human協働開発システムへようこそ! |
|
|
|
## 📋 このシステムでできること |
|
|
|
### 🎯 主要機能 |
|
1. **プロンプト管理**: AIに指示するプロンプトを作成・保存 |
|
2. **承認システム**: 安全性を確保するための承認フロー |
|
3. **自動実行**: 承認されたプロンプトの自動実行 |
|
4. **GitHub連携**: 実行結果をGitHubに自動投稿 |
|
5. **ログ管理**: 全実行履歴の記録・確認 |
|
|
|
### ✨ 特徴 |
|
- **24時間での高速開発**を実現 |
|
- **安全性重視**の承認システム |
|
- **完全自動化**されたワークフロー |
|
- **初心者でも簡単**に使える設計 |
|
|
|
### 📝 使い方 |
|
このガイドは上から順番にタブを進んでください: |
|
1. **システム概要** (このタブ) - システムの全体像を理解 |
|
2. **プロンプト作成** - テスト用プロンプトの作成 |
|
3. **承認システム** - 作成したプロンプトの承認 |
|
4. **実行テスト** - システムの実行をシミュレーション |
|
5. **GitHub連携** - GitHub Issue作成のテスト |
|
6. **システム確認** - 全体の動作状況を最終確認 |
|
|
|
すべてのステップを完了すると、システムの基本的な使い方がマスターできます! |
|
""" |
|
|
|
def init_database(self): |
|
"""データベースを初期化""" |
|
try: |
|
|
|
os.makedirs(os.path.dirname(self.approval_db_path), exist_ok=True) |
|
|
|
|
|
conn = sqlite3.connect(self.db_path) |
|
cursor = conn.cursor() |
|
cursor.execute(''' |
|
CREATE TABLE IF NOT EXISTS prompts ( |
|
id INTEGER PRIMARY KEY AUTOINCREMENT, |
|
title TEXT NOT NULL, |
|
content TEXT NOT NULL, |
|
category TEXT DEFAULT 'general', |
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
|
) |
|
''') |
|
conn.commit() |
|
conn.close() |
|
|
|
|
|
conn = sqlite3.connect(self.approval_db_path) |
|
cursor = conn.cursor() |
|
cursor.execute(''' |
|
CREATE TABLE IF NOT EXISTS approvals ( |
|
id INTEGER PRIMARY KEY AUTOINCREMENT, |
|
prompt_id INTEGER, |
|
approval_status TEXT, |
|
reason TEXT, |
|
approved_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
|
) |
|
''') |
|
conn.commit() |
|
conn.close() |
|
|
|
except Exception as e: |
|
print(f"データベース初期化エラー: {e}") |
|
|
|
def create_test_prompt(self, title, content, category="テスト"): |
|
"""テスト用プロンプトを作成""" |
|
try: |
|
if not title or not content: |
|
return "❌ タイトルと内容を入力してください" |
|
|
|
|
|
if not os.path.exists(self.db_path): |
|
self.init_database() |
|
|
|
conn = sqlite3.connect(self.db_path) |
|
cursor = conn.cursor() |
|
|
|
|
|
cursor.execute("PRAGMA table_info(prompts)") |
|
columns = [row[1] for row in cursor.fetchall()] |
|
|
|
|
|
if 'category' in columns: |
|
|
|
cursor.execute(''' |
|
INSERT INTO prompts (title, content, category, created_at) |
|
VALUES (?, ?, ?, ?) |
|
''', (title, content, category, datetime.now())) |
|
else: |
|
|
|
cursor.execute(''' |
|
INSERT INTO prompts (title, content, created_at) |
|
VALUES (?, ?, ?) |
|
''', (title, content, datetime.now())) |
|
|
|
prompt_id = cursor.lastrowid |
|
conn.commit() |
|
conn.close() |
|
|
|
success_msg = f""" |
|
## ✅ プロンプト作成完了! |
|
|
|
**プロンプトID**: {prompt_id} |
|
**タイトル**: {title} |
|
**カテゴリ**: {category} |
|
**内容**: {content[:100]}... |
|
|
|
### 📝 次のステップ |
|
「ステップ3: 承認システム」タブに進んで、作成したプロンプトを承認してください。 |
|
""" |
|
return success_msg |
|
|
|
except Exception as e: |
|
return f"❌ エラーが発生しました: {str(e)}" |
|
|
|
def get_pending_prompts(self): |
|
"""承認待ちプロンプトを取得""" |
|
try: |
|
if not os.path.exists(self.db_path): |
|
return "📝 プロンプトデータベースが存在しません。まずステップ2でプロンプトを作成してください。" |
|
|
|
conn = sqlite3.connect(self.db_path) |
|
cursor = conn.cursor() |
|
cursor.execute(''' |
|
SELECT id, title, content, created_at |
|
FROM prompts |
|
ORDER BY created_at DESC |
|
LIMIT 5 |
|
''') |
|
results = cursor.fetchall() |
|
conn.close() |
|
|
|
if not results: |
|
return "📝 承認待ちのプロンプトはありません。ステップ2でプロンプトを作成してください。" |
|
|
|
pending_list = "## 📋 最新のプロンプト一覧\n\n" |
|
for row in results: |
|
pending_list += f"### プロンプト ID: {row[0]}\n" |
|
pending_list += f"**タイトル**: {row[1]}\n" |
|
pending_list += f"**内容**: {row[2][:100]}...\n" |
|
pending_list += f"**作成日時**: {row[3]}\n\n" |
|
|
|
pending_list += "### 📝 次のアクション\n下のフォームでプロンプトIDを入力して承認してください。" |
|
return pending_list |
|
|
|
except Exception as e: |
|
return f"❌ エラーが発生しました: {str(e)}" |
|
|
|
def approve_prompt(self, prompt_id, reason="初心者ガイドでのテスト承認"): |
|
"""プロンプトを承認""" |
|
try: |
|
if not prompt_id or prompt_id <= 0: |
|
return "❌ 有効なプロンプトIDを入力してください" |
|
|
|
|
|
if not os.path.exists(self.approval_db_path): |
|
self.init_database() |
|
|
|
conn = sqlite3.connect(self.approval_db_path) |
|
cursor = conn.cursor() |
|
|
|
|
|
cursor.execute(''' |
|
INSERT INTO approvals (prompt_id, approval_status, reason, approved_at) |
|
VALUES (?, ?, ?, ?) |
|
''', (int(prompt_id), "approved", reason, datetime.now())) |
|
|
|
conn.commit() |
|
conn.close() |
|
|
|
return f""" |
|
## ✅ 承認完了! |
|
|
|
**プロンプトID**: {prompt_id} |
|
**ステータス**: approved |
|
**理由**: {reason} |
|
**承認日時**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} |
|
|
|
### 🚀 次のステップ |
|
「ステップ4: 実行テスト」タブに進んで、実行をシミュレートしてください。 |
|
""" |
|
|
|
except Exception as e: |
|
return f"❌ 承認処理でエラーが発生しました: {str(e)}" |
|
|
|
def simulate_execution(self): |
|
"""実行をシミュレート""" |
|
try: |
|
execution_log = { |
|
"timestamp": datetime.now(), |
|
"status": "success", |
|
"message": "テスト実行が完了しました", |
|
"steps": [ |
|
"✅ プロンプト解析完了", |
|
"✅ コード生成完了", |
|
"✅ 安全性チェック完了", |
|
"✅ 実行完了" |
|
] |
|
} |
|
|
|
result = f""" |
|
## 🚀 実行結果 |
|
|
|
**実行時刻**: {execution_log['timestamp'].strftime('%Y-%m-%d %H:%M:%S')} |
|
**ステータス**: ✅ {execution_log['status']} |
|
**メッセージ**: {execution_log['message']} |
|
|
|
### 📊 実行ログ |
|
""" |
|
|
|
for step in execution_log['steps']: |
|
result += f"- {step}\n" |
|
|
|
result += """ |
|
### 🚀 次のステップ |
|
「ステップ5: GitHub連携」タブに進んで、GitHub Issue作成をテストしてください。 |
|
""" |
|
|
|
return result |
|
|
|
except Exception as e: |
|
return f"❌ 実行シミュレーションでエラーが発生しました: {str(e)}" |
|
|
|
def simulate_github_issue(self): |
|
"""GitHub Issue作成をシミュレート""" |
|
try: |
|
issue_data = { |
|
"title": "🚀 AI-Human協働開発システム テスト実行完了", |
|
"timestamp": datetime.now(), |
|
"body": f""" |
|
## 📋 実行サマリー |
|
- **実行日時**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} |
|
- **ステータス**: ✅ 成功 |
|
- **実行時間**: 0.5秒 |
|
|
|
## 🔧 実行内容 |
|
- プロンプト処理 |
|
- コード生成 |
|
- 安全性チェック |
|
- 結果出力 |
|
|
|
## 📊 システム状態 |
|
- データベース: 正常 |
|
- API連携: 正常 |
|
- ログシステム: 正常 |
|
""", |
|
"labels": ["automation", "test", "ai-human-collaboration"] |
|
} |
|
|
|
result = f""" |
|
## 🐙 GitHub Issue作成完了 |
|
|
|
**タイトル**: {issue_data['title']} |
|
**作成日時**: {issue_data['timestamp'].strftime('%Y-%m-%d %H:%M:%S')} |
|
|
|
### 📝 Issue内容 |
|
{issue_data['body']} |
|
|
|
**ラベル**: {', '.join(issue_data['labels'])} |
|
|
|
### 🎉 次のステップ |
|
「ステップ6: システム確認」タブに進んで、全体の状況を確認してください。 |
|
|
|
(実際のGitHub連携は環境設定次第で有効になります) |
|
""" |
|
|
|
return result |
|
|
|
except Exception as e: |
|
return f"❌ GitHub連携シミュレーションでエラーが発生しました: {str(e)}" |
|
|
|
def check_system_status(self): |
|
"""システム状態を確認""" |
|
try: |
|
status_report = f""" |
|
## 🎯 システム全体状況レポート |
|
|
|
### 📊 データベース状態 |
|
""" |
|
|
|
|
|
if os.path.exists(self.db_path): |
|
try: |
|
conn = sqlite3.connect(self.db_path) |
|
cursor = conn.cursor() |
|
cursor.execute("SELECT COUNT(*) FROM prompts") |
|
prompt_count = cursor.fetchone()[0] |
|
status_report += f"- ✅ プロンプトDB: 正常 ({prompt_count}件のプロンプト)\n" |
|
conn.close() |
|
except: |
|
status_report += "- ❌ プロンプトDB: 接続エラー\n" |
|
else: |
|
status_report += "- ⚠️ プロンプトDB: ファイルが存在しません\n" |
|
|
|
|
|
if os.path.exists(self.approval_db_path): |
|
try: |
|
conn = sqlite3.connect(self.approval_db_path) |
|
cursor = conn.cursor() |
|
cursor.execute("SELECT COUNT(*) FROM approvals") |
|
approval_count = cursor.fetchone()[0] |
|
status_report += f"- ✅ 承認DB: 正常 ({approval_count}件の承認記録)\n" |
|
conn.close() |
|
except: |
|
status_report += "- ❌ 承認DB: 接続エラー\n" |
|
else: |
|
status_report += "- ⚠️ 承認DB: ファイルが存在しません\n" |
|
|
|
status_report += f""" |
|
### 🚀 システムステータス |
|
- ✅ Webサーバー: 起動中 (ポート7860) |
|
- ✅ Gradioインターフェース: 正常 |
|
- ✅ ファイルシステム: 正常 |
|
- ✅ 実行環境: Python {sys.version.split()[0]} |
|
|
|
### 🎉 完了おめでとうございます! |
|
|
|
AI-Human協働開発システムの基本的な流れをすべて体験しました! |
|
|
|
#### 📋 体験した内容 |
|
1. ✅ システム概要の理解 |
|
2. ✅ プロンプトの作成 |
|
3. ✅ 承認プロセスの実行 |
|
4. ✅ 実行システムのテスト |
|
5. ✅ GitHub連携のシミュレーション |
|
6. ✅ システム状態の確認 |
|
|
|
#### 🚀 次のステップ |
|
各機能の詳細は、メインの各タブで更に詳しく利用できます: |
|
- **💾 プロンプト管理システム**: 本格的なプロンプト管理 |
|
- **🎯 統合承認システム**: 詳細な承認フロー |
|
- **🤖 GitHub ISSUE自動化**: 実際のGitHub連携 |
|
- **🚀 統合管理ダッシュボード**: システム全体の監視 |
|
|
|
システムを実際に使用する際は、これらのタブを活用してください! |
|
""" |
|
|
|
return status_report |
|
|
|
except Exception as e: |
|
return f"❌ システム状態確認でエラーが発生しました: {str(e)}" |
|
|
|
|
|
guide_system = BeginnerGuideSystem() |
|
|
|
def create_beginner_interface(): |
|
"""初心者向けGradioインターフェースを作成""" |
|
|
|
with gr.Blocks(title="🚀 初心者ガイド", theme=gr.themes.Soft()) as interface: |
|
gr.Markdown("# 🚀 AI-Human協働開発システム - 初心者ガイド") |
|
gr.Markdown("**上から順番に**各タブを進んでください。各ステップで「実行」ボタンを押すだけで体験できます!") |
|
|
|
with gr.Tab("📚 ステップ1: システム概要"): |
|
gr.Markdown(guide_system.get_system_overview()) |
|
|
|
with gr.Tab("📝 ステップ2: プロンプト作成"): |
|
gr.Markdown("## 🎯 プロンプト作成のテスト") |
|
gr.Markdown("簡単なテストプロンプトを作成してみましょう。") |
|
|
|
with gr.Row(): |
|
with gr.Column(scale=2): |
|
title_input = gr.Textbox( |
|
label="📝 プロンプトタイトル", |
|
value="初回テストプロンプト", |
|
placeholder="プロンプトのタイトルを入力" |
|
) |
|
with gr.Column(scale=1): |
|
category_input = gr.Textbox( |
|
label="🏷️ カテゴリ", |
|
value="テスト", |
|
placeholder="カテゴリを入力" |
|
) |
|
|
|
content_input = gr.Textbox( |
|
label="📄 プロンプト内容", |
|
value="Hello World を表示するシンプルなPythonスクリプトを作成してください。", |
|
placeholder="プロンプトの内容を入力", |
|
lines=3 |
|
) |
|
|
|
create_btn = gr.Button("🚀 プロンプト作成実行", variant="primary", size="lg") |
|
create_result = gr.Markdown(value="👆 上のボタンを押してプロンプトを作成してください") |
|
|
|
create_btn.click( |
|
guide_system.create_test_prompt, |
|
inputs=[title_input, content_input, category_input], |
|
outputs=[create_result], |
|
api_name="create_test_prompt" |
|
) |
|
|
|
with gr.Tab("✅ ステップ3: 承認システム"): |
|
gr.Markdown("## 🎯 承認システムのテスト") |
|
gr.Markdown("作成したプロンプトの承認プロセスをテストします。") |
|
|
|
check_btn = gr.Button("📋 承認待ちプロンプト確認", variant="secondary", size="lg") |
|
pending_result = gr.Markdown(value="👆 上のボタンを押して承認待ちプロンプトを確認してください") |
|
|
|
check_btn.click(guide_system.get_pending_prompts, outputs=[pending_result], api_name="get_pending_prompts") |
|
|
|
gr.Markdown("### 承認実行") |
|
with gr.Row(): |
|
with gr.Column(scale=1): |
|
prompt_id_input = gr.Number( |
|
label="🆔 プロンプトID", |
|
value=1, |
|
precision=0, |
|
minimum=1 |
|
) |
|
with gr.Column(scale=2): |
|
approval_reason = gr.Textbox( |
|
label="📝 承認理由", |
|
value="初心者ガイドでのテスト承認", |
|
placeholder="承認理由を入力" |
|
) |
|
|
|
approve_btn = gr.Button("✅ 承認実行", variant="primary", size="lg") |
|
approval_result = gr.Markdown(value="👆 プロンプトIDを確認して承認ボタンを押してください") |
|
|
|
approve_btn.click( |
|
guide_system.approve_prompt, |
|
inputs=[prompt_id_input, approval_reason], |
|
outputs=[approval_result], |
|
api_name="approve_prompt" |
|
) |
|
|
|
with gr.Tab("⚡ ステップ4: 実行テスト"): |
|
gr.Markdown("## 🎯 実行システムのテスト") |
|
gr.Markdown("承認されたプロンプトの実行をシミュレートします。") |
|
|
|
execute_btn = gr.Button("🚀 実行シミュレーション", variant="primary", size="lg") |
|
execution_result = gr.Markdown(value="👆 上のボタンを押して実行をシミュレートしてください") |
|
|
|
execute_btn.click(guide_system.simulate_execution, outputs=[execution_result], api_name="simulate_execution") |
|
|
|
with gr.Tab("🐙 ステップ5: GitHub連携"): |
|
gr.Markdown("## 🎯 GitHub連携のテスト") |
|
gr.Markdown("実行結果をGitHub Issueとして作成するプロセスをシミュレートします。") |
|
|
|
github_btn = gr.Button("🐙 GitHub Issue作成シミュレーション", variant="primary", size="lg") |
|
github_result = gr.Markdown(value="👆 上のボタンを押してGitHub連携をテストしてください") |
|
|
|
github_btn.click(guide_system.simulate_github_issue, outputs=[github_result], api_name="simulate_github_issue") |
|
|
|
with gr.Tab("🎯 ステップ6: システム確認"): |
|
gr.Markdown("## 🎯 システム全体の状態確認") |
|
gr.Markdown("最後に、システム全体の動作状況を確認します。") |
|
|
|
status_btn = gr.Button("📊 システム状態確認", variant="primary", size="lg") |
|
status_result = gr.Markdown(value="👆 上のボタンを押してシステム全体の状態を確認してください") |
|
|
|
status_btn.click(guide_system.check_system_status, outputs=[status_result], api_name="check_system_status") |
|
|
|
return interface |
|
|
|
|
|
gradio_interface = create_beginner_interface() |
|
interface_title = "🚀 初心者ガイド" |
|
|
|
if __name__ == "__main__": |
|
gradio_interface.launch( |
|
server_name="0.0.0.0", |
|
server_port=7862, |
|
share=False |
|
) |
|
|