本文へスキップ
BecomeCoder

RAGコース · 第4章 生成につなぐ · レッスン15

LLMで答えを作る ― Claude と OpenAI の実装

ローカル実施

導入

組み立てたプロンプトを実際に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() に渡している modelmax_tokensmessages は必須の項目です。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に答えさせる

retrievebuild_promptask_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パイプラインの最小構成。