アルゴリドム学習オートメーション+⍺:RAGベースの類似問題推薦システム
なぜ作ろうとしているのか?
既に構築したエビングハウス忘却曲線ベースのSlackボットは既に解いた問題を再び見直すのに成功しました。 しかし、長期記憶に維持し、アルゴリズムの実力を増えるためにわ解いたタイプに対する変形問題や同じタイプの問題が必要であり、 復習する時にわ、私が復習する問題をAIに投げて「これと類似した問題を探して」といった方式で類似した問題を解き、この部分を自動化しようとしています。
約一週間問題を研いて勉強いさがら現在私が経験している問題点は以下の通りです。
プラットフォーム、言語の違い:Baekjoon(韓国)の問題を解いた後、これと類似した論理を持つ外国サイト(LeetCode、Codeforces)の問題を探すために再びAIに尋ねて検索しなければなりません。
検索ノイズ:問題のタイトルや内容が似ているからといって必ず同じアルゴリズムを要求するわけではありません。もちろん解法方法が多様ですが、私がした内容を復習するためにはできるだけ類似した内容を探さなければならないと考えています。
アルゴリズム問題の探し方
アルゴリズム問題で、私がマッチングすべきデータは次の通りです。
- 不要な部分(ストーリー):問題に付けられたストーリー(例:チョルスのリンゴ売り)。これは検索時に除去すべきノイズです。
- アルゴリズム形態、タグ:問題の核心となるデータ構造とアルゴリズム論理(例:2次元配列のPrefix Sum)。
- 制約条件:時間複雑度とメモリ制限。
どんな技術が入るのか:RAGベースのアーキテクチャ
単純なキーワードマッチングではなく、意味的類似性を判断するために**RAG (Retrieval-Augmented Generation)**システムを構築しようとしています。 RAGを活用するプロジェクトをしようと思っていたところ、ちょうど良い機会ができました^^
まず以下のような流れで開発が進む予定です。
1. 知識ベース (Vector Database)
LeetCodeとCodeforcesの問題データセットを収集してベクトルデータベース(PineconeまたはChromaDB)に保存します。 このとき問題本文全体ではなく、LLMが前処理したアルゴリズム要約本をイムベッヂングして検索精度を高めます。
2. 3段階パイプライン
正確なマッチングのために次の過程を経ます。
Metadata Filtering:Baekjoonの難易度(Gold/Silverなど)とタグを基に候補群を1次フィルタリングします。
Semantic Search:OpenAIのtext-embedding-3-smallモデルを通じて問題骨格の類似度を計算します。
LLM Re-Ranking:上位5個の候補群をGPT-4o-miniに伝えて、制約事項まで一致する最適な1順位問題を最終選定します。
費用と効率性分析(GPT作成)
このシステムは個人ブログのインフラ(GitHub Actions)内で稼働するので維持費用がほとんど発生しないと予想されると言うことですが、回してみなければわかりませんね? 最近(Github Actions)について何かあったけ、たぶんActionを使うこのができないならJenkinsで回せばいいのではないかと思います。
| 項目 | 使用技術 | 費用 (30問基準) |
|---|---|---|
| ストレージ | Pinecone Starter Plan | $0 (Free) |
| インベディング | text-embedding-3-small | 約 $0.0006 |
| 推論/検証 | GPT-4o-mini | 約 $0.15 |
| コンピューティング | GitHub Actions | $0 (Public Repo) |
| 合計 | 約 $0.15 (韓国ウォン約200ウォン) |
今後の計画
単純に「復習する時間です」という通知を受ける段階を越え、「昨日解いたペク·ジュン問題と類似したリトコードMedium問題をお勧めします」というメッセージを受け取る環境を目標とします。
この自動化が完成すれば、私はこれ以上問題を探すために問題リンクをコピーしてAIに投げることをしなくてもいいです。
Slackメッセージ一つで学習を続けられるようになります。 システム構築が完了し次第、具体的なベクトルDBアップロードスクリプトとプロンプトエンジニアリングプロセスを共有します。
댓글