導入
組み立てたプロンプトを実際にLLMへ送れば、いよいよ本物のRAGが完成します。ただしLLMの呼び出しはブラウザの中からはできないので、ここからは手元のパソコンやサーバーで動かすコードを読み物として見ていきます。
説明
まずは Anthropic の Claude を使う実装です。anthropic パッケージ(pip install anthropic)を使い、Messages API に「システム指示」と「ユーザーの本文(=前レッスンで作ったプロンプト)」を渡します。
from anthropic import Anthropic
# クライアントを作るだけで、環境変数 ANTHROPIC_API_KEY からAPIキーが自動的に読み込まれる
client = Anthropic()
def ask_claude(prompt):
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
system="You are a helpful assistant that answers using only the provided context.",
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
# build_prompt はレッスン14で作った関数
answer = ask_claude(prompt)
print(answer)
client.messages.create() に渡している model・max_tokens・messages は必須の項目です。system にはLLM全体への振る舞いの指示(役割)を、messages にはユーザーからの入力本文――つまり前レッスンで組み立てた prompt の文字列――を渡します。返ってくる response.content はテキストのかたまり(ブロック)のリストなので、response.content[0].text で本文を取り出します。
参考として、OpenAI を使う場合の同等コードも載せておきます(pip install openai)。
from openai import OpenAI
# 環境変数 OPENAI_API_KEY からAPIキーが自動的に読み込まれる
client = OpenAI()
def ask_openai(prompt):
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful assistant that answers using only the provided context."},
{"role": "user", "content": prompt},
],
)
return response.choices[0].message.content
answer = ask_openai(prompt)
print(answer)
どちらも考え方は同じです。「システム指示(役割)」と「ユーザー入力(プロンプト)」をAPIに渡し、返ってきたテキストを取り出す。APIキーはどちらもコードに直接書かず、環境変数から読み込むのが基本です(ANTHROPIC_API_KEY / OPENAI_API_KEY)。
最後に、第3章の検索(retriever)から今回の生成(generator)までを1本につないだ、最小限のRAG関数を擬似コードで示します。
def rag_answer(query, documents):
contexts = retrieve(query, documents, top_k=3) # 第3章: 質問に近い文書を検索
prompt = build_prompt(query, contexts) # レッスン14: プロンプトを組み立てる
return ask_claude(prompt) # このレッスン: LLMに答えさせる
retrieve → build_prompt → ask_claude。この3ステップこそがRAGの全体像です。
まとめ
- Claudeは
client.messages.create(model=..., max_tokens=..., system=..., messages=[...])で呼び出す。返答はresponse.content[0].text。 - OpenAIも考え方は同じで、
chat.completions.create(model=..., messages=[...])を使う。 - APIキーはコードに直書きせず、環境変数から読み込む。
retrieve → build_prompt → LLM呼び出しの3ステップが、RAGパイプラインの最小構成。