0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RAGの錬成術~入門編~

Last updated at Posted at 2024-10-01

RAGの錬成術 ~入門編~

(入門編と書いてますが、これは筆者の技術スタックがアレだからです。誤りなどは寛大な心で許していただけると助かります、、、)

はじめに

  • この記事は「とにかくRAGを作りたい!」という人を読者として想定しています。
    • サービスをデプロイしたり、機密情報を扱ったりすることは特に想定していないのであしからず。
    • もちろん使用は自己責任でお願いします。
    • コードは安全な環境で実行してください。
  • APIでサクッとRAGの作り方は3つある
    • OPENAIのASSISTANTS APIを使う方法
    • langchainで実装する方法
    • 自分でベクトルDBを作る方法
    • (他にもDifyやAzure-OpenAI等を使う方法もあるが、割愛)
  • 上が簡単で、下に行くほど実装が難しくなるが、カスタマイズができるようになる。

RAGとは

  • RAGとはRetrieval Augmented Generationの略で、ChatGPTをはじめとする生成AIに文書から抽出した文献を与えることで、その機能を拡張する概念である。
  • 様々な方法があり、一般的なベクトル検索から、検索キーワードをChatGPTにこたえさせたり、答えが見つかるまで有限ノックさせる方法もある。
  • 文献は下記参照

OPENAIのASSISTANTS APIを使う方法

  • OpenAIのFunction Callingの一つ(?)である、File Searchを使う。

WEBで触るところ(APIでも触ることはできるが、今回は割愛。)

  1. まずは、https://platform.openai.com/ にアクセスする。必要に応じてログインし、「Storege」をクリックする。
  2. 「Vector Stores」をクリックして、「Create」をクリックするimage.png
    image.png
  3. 「Vector Store」を作成出来たら、「Add files」をクリックimage.png
  4. RAGしたいファイルをアップロードして、Attachをクリックする。image.png
  5. 出来たら、右下の「Create Assistant」を一回クリックして、「Assistants」タブに移動するimage.pngimage.png
  6. そうするとAssistants APIができているので、必要に応じて、System InstructionやModelを適当に調整する。また、File SearchがONになっていることを確認する。image.png
  7. その後、PlayGroundに行って動作を確認する。image.png
    image.png
  8. Assistants IDを保管しておく。
    image.png

Pythonで触るところ

import getpass
import os

# API KEYをコードにベタ打ちしないように、getpassで取得する。
# このコードを実行すると、入力画面になるので、そこで入力する。
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key: ") 
from openai import OpenAI

prompt = "ここに聞きたいプロンプトを書く"
assistants_id = "先ほど保存したASSISTANTS IDをここに書く"
client = OpenAI()

thread = self.client.beta.threads.create() # Threadを作成

message = self.client.beta.threads.messages.create(
    thread_id=thread.id, # 先ほど作成したthreadを利用
    role="user", # roleはuser
    content=prompt, # 先ほど定義したプロンプトを入力。
)
run = self.client.beta.threads.runs.create_and_poll(
    thread_id=thread.id, 
    assistant_id=assistant.id
)

if run.status == 'completed':
  messages = client.beta.threads.messages.list(
    thread_id=thread.id
  )
  print(messages)
else:
  print(run.status)

きちんと出力出来たらOK

Langchainを使う方法

後日追記

ベクトルストアを使う方法

後日追記

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?