【要約】DRY原則をAI APIに適用。35行×42エンドポイントを10行に削減した共通ラッパーの設計 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がClaude APIを組み込んだFastAPIアプリを構築する際、コードの重複に直面した。各エンドポイントに、AI呼び出しに関する定型的なロジックが散在していた。
- ・各エンドポイントに35行の定型処理が記述されていた。
- ・バリデーション、キャッシュ、AI呼び出し、エラー処理が重複していた。
- ・42のエンドポイントで、計1,470行の冗長なコードが発生していた。
- ・コスト管理が個別実装であり、可視化が困難であった。
// Approach
開発者は、定型処理を抽象化した共通関数
_ai_call を設計することで解決を図った。API呼び出しに必要な周辺機能を一つの関数に集約した。- ・文字数制限やNGワードチェックをラッパー内に実装した。
- ・キャッシュ制御や
asyncio.wait_forによるタイムアウト処理を統合した。 - ・529エラーに対し、指数バックオフによるリトライを組み込んだ。
- ・トークン使用量からコストを算出し、SQLiteへ自動記録する機能を設けた。
// Result
共通ラッパーの導入により、コードの保守性と運用性が劇的に向上した。開発効率の向上と、コストの透明化を同時に達成している。
- ・1エンドポイントあたりの行数を35行から10行へ削減した。
- ・42のエンドポイント全体で、計700行の削減を実現した。
- ・ツール別・日別のコストが管理画面で自動集計可能となった。
Senior Engineer Insight
> 実戦的な設計である。特に529エラーへの指数バックオフや、コスト記録の自動化は、運用を見据えた優れた判断だ。ただし、ラッパーが肥大化すると、特定エンドポイント向けの微調整が困難になる。機能追加時は、責務を適切に分離すべきだ。