Skip to content

OpenAI APIのみで実装したシンプルなローカルRAGサンプル(FastAPIとNumPyベース)

Notifications You must be signed in to change notification settings

kkawailab/simple_rag_openai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ultra Simple RAG — OpenAI API 課金のみ

目的: 生成も埋め込みも OpenAI API のみを使い、その他はすべてローカル(無料)で完結する最小RAG。
ベクトルDBは使わず、JSONに埋め込みを保存し、Numpyのコサイン類似で検索します。

構成

  • API: FastAPI (/ask)
  • 埋め込み: text-embedding-3-small(OpenAI)
  • 生成: gpt-4o-mini(OpenAI)
  • ストレージ: index.json(ローカルに埋め込みキャッシュ)
  • 文書: docs/.md/.txt/.pdf を配置

セットアップ

python -m venv .venv
source .venv/bin/activate        # Windowsは .venv\Scripts\activate
pip install -r requirements.txt

# OpenAIのAPIキーを設定
cp .env.example .env
# .env を開いて OPENAI_API_KEY=... を記入

起動

uvicorn app:app --host 0.0.0.0 --port 8000
# または
python app.py  # (uvicorn不要の簡易実行)

起動時に docs/ を走査 → 分割 → OpenAI埋め込み → index.json に保存します。以降は毎起動時に再構築します(最小構成のため)。

使い方

curl -X POST http://localhost:8000/ask \
  -H "Content-Type: application/json" \
  -d '{"question":"このプロジェクトの目的は?"}'

WordPressに埋め込む最短例(同一ドメイン前提)

<div>
  <input id="q" placeholder="質問を入力" style="width:70%"><button onclick="ask()">Ask</button>
</div>
<pre id="ans"></pre>
<script>
async function ask(){
  const q = document.getElementById('q').value;
  const r = await fetch('/ask', {method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({question:q})});
  const j = await r.json();
  document.getElementById('ans').textContent = j.answer + "\n\n(出典: " + (j.sources||[]).join(", ") + ")";
}
</script>

よくある質問

  • 費用は? → OpenAI API(埋め込み&生成)のトークン課金のみ。他はローカル。
  • 日本語PDFが抜けるpypdfで空になる場合はpdfminer.sixに差し替えを検討。
  • 精度を上げたい → チャンクサイズ/オーバーラップ調整、Top-k増加、systemプロンプト強化。
  • 更新のたびに再構築は重い → 監視で差分のみ埋め込む実装に拡張可能。

ライセンス

MIT(サンプル)。

About

OpenAI APIのみで実装したシンプルなローカルRAGサンプル(FastAPIとNumPyベース)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages