Skip to content

Commit

Permalink
テストの追加]カバレッジ75%
Browse files Browse the repository at this point in the history
  • Loading branch information
Yulikepython committed Dec 29, 2024
1 parent 2af520d commit 2e9be3a
Show file tree
Hide file tree
Showing 14 changed files with 368 additions and 42 deletions.
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Python関連
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
venv/
.env

# テスト関連
.pytest_cache/
.coverage
htmlcov/
coverage.xml

# IDE関連
.idea/
.vscode/
*.swp
*.swo

# ドキュメント関連
docs/*
!docs/default/
49 changes: 49 additions & 0 deletions CONTRIBUTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# コントリビューションガイドライン

最終更新: 2024年12月29日

## はじめに
ai-assistant-hubプロジェクトへの貢献に興味を持っていただき、ありがとうございます。このガイドラインでは、プロジェクトに貢献する際の手順とベストプラクティスを説明します。

## 貢献の方法

### バグ報告
1. 既存のissueで同様の報告がないか確認してください
2. バグの再現手順を明確に記載してください
3. 環境情報(OS、Pythonバージョンなど)を含めてください

### 機能の提案
1. 新機能の提案は、まずissueで議論を行ってください
2. 提案には以下を含めてください:
- 機能の詳細な説明
- ユースケース
- 想定される影響

### プルリクエスト
1. 作業前に最新の`main`ブランチから作業ブランチを作成してください
2. コミットメッセージは明確で簡潔に記述してください
3. テストを追加・更新し、全てのテストが通過することを確認してください
4. ドキュメントの更新を忘れずに行ってください

## コーディング規約
- PEP 8に従ってください
- 型ヒントを使用してください
- ドキュメンテーション文字列を各関数・クラスに追加してください
- コメントは必要な場合のみ、日本語で記述してください

## セキュリティガイドライン
1. 機密情報を含むファイルは決してコミットしないでください
2. サードパーティライブラリの追加時はセキュリティ面を考慮してください
3. 認証情報は必ず環境変数として扱ってください

## レビュープロセス
1. 最低1名のレビュアーの承認が必要です
2. CIチェックが全て通過している必要があります
3. コードレビューのコメントには適切に対応してください
4. 変更が大きい場合は、段階的なPRに分割することを検討してください

## ヘルプが必要な場合
- issueで質問してください
- プルリクエストで「WIP」(作業中)というラベルを使用してフィードバックを求めることができます

ご協力ありがとうございます!
116 changes: 92 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,45 @@
# AI Assistant Hub

LangChainとOpenAIを活用したAIアシスタントアプリケーション。ドキュメント解析とインテリジェントな対話を実現します
AI Assistant Hub は LangChain と OpenAI を活用した RAG(Retrieval-Augmented Generation)ベースの AI アシスタントアプリケーションです。ドキュメント解析と高度な対話機能を提供します

## 機能
## 主な機能

- OpenAI GPTモデルとの対話機能
- 環境設定の健全性チェック
- ドキュメント解析とRAG(Retrieval-Augmented Generation)機能
- 🤖 OpenAI GPT モデルを活用した高度な対話機能
- 📚 複数形式のドキュメント解析とインデックス化
- 🔍 RAG(Retrieval-Augmented Generation)による的確な回答生成
- ⚡ 非同期処理による効率的な応答
- 🛡️ 包括的な健全性チェックシステム

## セットアップ
## システム要件

- Python 3.9+
- OpenAI API キー
- 十分なストレージ容量(ベクトルストア用)

## インストール方法

1. リポジトリのクローン:
```bash
git clone https://github.com/yourusername/ai-assistant-hub.git
git clone https://github.com/Yulikepython/ai-assistant-hub.git
cd ai-assistant-hub
```

2. 仮想環境の作成と依存関係のインストール:
2. 仮想環境の作成と有効化:
```bash
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
source venv/bin/activate # Windows: .\venv\Scripts\activate
```

3. 環境変数の設定:
`.env`ファイルをプロジェクトルートに作成し、以下の内容を設定:
3. 依存パッケージのインストール:
```bash
pip install -r requirements.txt
```

4. 環境変数の設定:
src内の `.env.sample`をコピーして、`.env` ファイルを作成。以下の変数に正しい値を入れます。:
```env
OPENAI_API_KEY=your_api_key_here
DOCS_PATH=/path/to/your/documents
```

## 使用方法
Expand All @@ -41,36 +54,91 @@ python -m src.health_check
python -m src.main
```

## プロジェクト構造
3. 対話の開始:
- プロンプトが表示されたら、質問を入力してください
- 終了するには 'q' を入力してください

## 開発者向け情報

### プロジェクト構造

```
ai-assistant-hub/
├── src/
│ ├── __init__.py
│ ├── .env.sample # 環境変数のサンプル
│ ├── .env # サンプルから自身で作成してください
│ ├── main.py # メインアプリケーション
│ ├── config.py # 設定ファイル
│ ├── health_check.py # 健全性チェック機能
│ └── document_processor.py # ドキュメント処理機能
├── tests/
│ └── test_ai_assistant.py # テストスイート
├── docs/ # 処理対象ドキュメント
├── tests/ # テストファイル
├── .env # 環境変数
└── requirements.txt # 依存関係
```

## 開発環境
### テストの実行

- Python 3.9+
- LangChain
- OpenAI GPT
基本的なテスト実行:
```bash
python -m pytest tests/test_ai_assistant.py -v
```

## ライセンス
カバレッジレポートの取得:
```bash
# 基本的なカバレッジレポート
python -m pytest --cov=src tests/test_ai_assistant.py

MIT
# 未カバー行を表示する詳細レポート
python -m pytest --cov=src --cov-report=term-missing tests/test_ai_assistant.py

## 貢献
# HTMLレポートの生成
python -m pytest --cov=src --cov-report=html tests/test_ai_assistant.py
```

### ドキュメント処理の設定

`config.py` で以下の設定をカスタマイズできます:
- 対応するファイル形式
- 除外パターン
- チャンクサイズとオーバーラップ
- 並行処理の設定

## トラブルシューティング

1. OpenAI API エラー:
- API キーが正しく設定されているか確認
- 環境変数が適切に読み込まれているか確認

2. ドキュメント読み込みエラー:
- ファイルパスが正しく設定されているか確認
- ファイルのエンコーディングを確認
- アクセス権限を確認

3. メモリエラー:
- チャンクサイズの調整を検討
- 処理対象ドキュメントの量を確認

## 貢献方法

1. このリポジトリをフォーク
2. 新しいブランチを作成 (`git checkout -b feature/amazing-feature`)
2. 新しい機能ブランチを作成 (`git checkout -b feature/amazing-feature`)
3. 変更をコミット (`git commit -m 'Add amazing feature'`)
4. ブランチをプッシュ (`git push origin feature/amazing-feature`)
5. プルリクエストを作成
5. プルリクエストを作成

## ライセンス

このプロジェクトは MIT ライセンスの下で公開されています。

## サポートと連絡先

- Issue Tracker: https://github.com/Yulikepython/ai-assistant-hub/issues
- メール: developer@itc.tokyo

## 謝辞

- OpenAI - GPTモデルの提供
- LangChain - フレームワークの提供
- すべてのコントリビューター
20 changes: 20 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# セキュリティポリシー

最終更新: 2024年12月29日

## 脆弱性の報告

このプロジェクトでセキュリティ脆弱性を発見した場合は、以下の手順に従ってください:

1. パブリックなGitHub issueを作成**しないでください**
2. [security@itc.tokyo](mailto:security@itc.tokyo) にメールを送信してください
3. 脆弱性に関する詳細情報を含めてください
4. 初期応答まで最大48時間お待ちください

## セキュリティのベストプラクティス

このプロジェクトを使用する際は:
1. APIキーや機密性の高い認証情報を決してコミットしないでください
2. 機密性の高い設定には環境変数を使用してください
3. 定期的に依存パッケージを更新してください
4. ドキュメントのセキュリティガイドラインに従ってください
6 changes: 6 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import os
import sys

# プロジェクトルートディレクトリをPythonパスに追加
project_root = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, project_root)
5 changes: 2 additions & 3 deletions docs/default/default-md.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# これは検証用のMDファイルです。

以下の秘密キーワードが読み取れているかを確認してください。
- 秘密キーワード: secret-keyword-for-md-file
- これは秘密キーワードではありません: default-keyword-for-md-file
```
- 秘密キーワード: test-secret-keyword-for-md-file
- これは秘密キーワードではありません: test-default-keyword-for-md-file
2 changes: 1 addition & 1 deletion docs/default/default-txt.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
これは検証で使用するためのテキストファイルです。
読み取れていることを必ず確認すること。
ファイルの秘密キーワードは、「itc-api-assistant-txt-file-key」です。
ファイルの秘密キーワードは、「test-itc-api-assistant-txt-file-key」です。
6 changes: 6 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[pytest]
asyncio_mode = strict
asyncio_default_fixture_loop_scope = function
testpaths = tests
python_files = test_*.py
addopts = -v
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ chroma-hnswlib==0.7.6
chromadb==0.5.23
click==8.1.8
coloredlogs==15.0.1
coverage==7.6.10
dataclasses-json==0.6.7
Deprecated==1.2.15
distro==1.9.0
Expand Down Expand Up @@ -88,6 +89,7 @@ PyPika==0.48.9
pyproject_hooks==1.2.0
pytest==8.3.4
pytest-asyncio==0.25.0
pytest-cov==6.0.0
pytest-mock==3.14.0
python-dateutil==2.9.0.post0
python-dotenv==1.0.1
Expand Down
4 changes: 2 additions & 2 deletions src/.env.sample
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
OPENAI_API_KEY=<<ここにAPIキーを入力>>
DOCS_PATH=<<ここにDOCSディレクトリのパスを入力>>
OPENAI_API_KEY=your_api_key_here
DOCS_PATH=/path/to/your/documents
3 changes: 1 addition & 2 deletions src/document_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import RetrievalQA

from config import DocumentConfig

from src.config import DocumentConfig # この行を修正

class DocumentProcessor:
def __init__(self, docs_dir: str, chunk_size: int = 1000, chunk_overlap: int = 200):
Expand Down
6 changes: 3 additions & 3 deletions src/health_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
from typing import Optional

from config import EnvironmentalVariable as Ev
from src.config import EnvironmentalVariable as Ev


def check_environment() -> tuple[bool, Optional[str]]:
Expand All @@ -13,7 +13,7 @@ def check_environment() -> tuple[bool, Optional[str]]:
return True, None


def test_chat_completion(model) -> tuple[bool, Optional[str]]:
def check_chat_completion(model) -> tuple[bool, Optional[str]]: # test_chat_completion から名前を変更
"""ChatGPTの基本機能テスト"""
try:
messages = [
Expand All @@ -39,7 +39,7 @@ def run_health_check(model) -> bool:
print(f" {env_message}")

# Chat機能チェック
chat_ok, chat_message = test_chat_completion(model)
chat_ok, chat_message = check_chat_completion(model) # 関数名の変更をここでも反映
print(f"\n2. Chat完了機能チェック: {'✓' if chat_ok else '✗'}")
if chat_message:
print(f" テスト応答: {chat_message}")
Expand Down
15 changes: 8 additions & 7 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@
import os
import asyncio

from config import EnvironmentalVariable as Ev
from config import OpenAIModel as Om
from document_processor import create_document_processor
from health_check import run_health_check
from src.config import EnvironmentalVariable as Ev # この行を修正
from src.config import OpenAIModel as Om # この行を修正
from src.document_processor import create_document_processor # この行を修正
from src.health_check import run_health_check # この行を修正

# Envの読み込み
ENV_PATH = os.path.join(os.path.dirname(__file__), ".env")
load_dotenv(ENV_PATH)

# 環境変数の値を取得
OpenAI_KEY = os.getenv(Ev.OPENAI_API_KEY.name)
DOCS_PATH = os.getenv(Ev.DOCS_PATH.name)

# ★以下の設定は適宜変更してください★
# モデルの設定
MODEL_NAME = Om.gpt_4o.value

Expand All @@ -24,9 +24,10 @@

def get_docs_full_path() -> str:
"""ドキュメントの完全パスを取得"""
if not DOCS_PATH:
docs_path = os.getenv(Ev.DOCS_PATH.name)
if not docs_path:
raise ValueError("DOCS_PATH が環境変数に設定されていません")
return os.path.join(DOCS_PATH, DOCS_DIR)
return os.path.join(docs_path, DOCS_DIR)

def create_chat_model():
"""ChatOpenAIモデルのインスタンスを作成"""
Expand Down
Loading

0 comments on commit 2e9be3a

Please sign in to comment.