FAISSまたはChromaで素朴なRAGを構築する
Pythonを40行記述し、クエリをEmbeddingして上位K件の最近傍チャンクを取得し、プロンプトに詰めてLLMに質問します。
「FAISSまたはChromaで素朴なRAGを構築する」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
40行のRAG
これですべての部品がそろいました。小規模なドキュメント集合を対象に、動作する単純なRAGとして組み立てます。
Step 1: Install
# pip install openai chromadbStep 2: Sample Corpus
docs = [
'Python is a high-level interpreted programming language created by Guido van Rossum in 1991.',
'Pizza is a savory dish of Italian origin consisting of a round flat base of dough.',
'The Eiffel Tower is a wrought-iron lattice tower in Paris, France, completed in 1889.',
'NumPy is a Python library used for working with arrays and numerical computing.',
'The Great Wall of China is a series of fortifications built across northern China.'
]
print(f"Loaded {len(docs)} documents")
for i, d in enumerate(docs):
print(f"{i+1}. {d[:50]}...")
Step 3: Set Up Chroma
import chromadb
from openai import OpenAI
client = chromadb.Client()
collection = client.create_collection('demo')
openai_client = OpenAI()Step 4: Embed and Store
embed_response = openai_client.embeddings.create(
model='text-embedding-3-small',
input=docs
)
vectors = [d.embedding for d in embed_response.data]
collection.add(
ids=[f'd{i}' for i in range(len(docs))],
embeddings=vectors,
documents=docs
)Step 5: Embed the Query
query = 'Tell me about Python programming'
query_vec = openai_client.embeddings.create(
model='text-embedding-3-small',
input=query
).data[0].embeddingStep 6: Retrieve Top-K
results = collection.query(
query_embeddings=[query_vec],
n_results=2
)
retrieved = results['documents'][0]
print(retrieved)
# ['Python is a high-level...', 'NumPy is a Python library...']Step 7: Build the RAG Prompt
context = '\n'.join(f'- {chunk}' for chunk in retrieved)
prompt = f'''
Using only the context below, answer the question. If unknown, say so.
Context:
{context}
Question: {query}
'''Step 8: Call the LLM
response = openai_client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
temperature=0,
)
print(response.choices[0].message.content)FAISSという選択肢
DBサーバーを使わず、完全にローカルで実行したい場合は、FAISSのほうがさらに簡単です。
import faiss
import numpy as np
index = faiss.IndexFlatIP(1536) # inner product, normalised vectors
index.add(np.array(vectors).astype('float32'))
D, I = index.search(np.array([query_vec]).astype('float32'), k=2)
retrieved = [docs[i] for i in I[0]]この単純なRAGの制限
- チャンク化がない — 短いドキュメントでしか機能しない
- 再ランキングがない
- メタデータによるフィルタリングがない
- 評価がない
これらはすべて、後のコースで解決します。
クエリあたりのコスト
クエリを1回実行するたびに、次のコストがかかります。
- 埋め込みAPI呼び出し1回(約0.00002ドル)
- 約500トークンのコンテキストを含むチャット補完1回(約0.0001ドル)
合計すると、1問あたり1セントの約100分の1です。
リリースして反復改善する
この40行のRAGは、手元のデータに対する事実ベースのQ&Aでは、コンテキストを持たないチャットボットの大半をすでに上回ります。まずはリリースし、ユーザーがどこで問題を起こすかを観察して、最も必要なところに高度な技術を追加していきましょう。
素朴なRAGのTop-K
「top-K」検索とは何を意味するのでしょうか。
まとめ
RAGを構築しました。次は、これを1台のラップトップを超える規模に拡張できるベクトルデータベースを見ていきます。
よくある質問
「FAISSまたはChromaで素朴なRAGを構築する」レッスンは無料ですか?
はい。「FAISSまたはChromaで素朴なRAGを構築する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「FAISSまたはChromaで素朴なRAGを構築する」で何を学びますか?
Pythonを40行記述し、クエリをEmbeddingして上位K件の最近傍チャンクを取得し、プロンプトに詰めてLLMに質問します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「FAISSまたはChromaで素朴なRAGを構築する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- RAGが解決すること(Knowledge Cut-off、Hallucinations)
- チャンク分割戦略(固定、文単位、意味単位)
- ドキュメントセットのインデックス作成
- FAISSまたはChromaで素朴なRAGを構築する