RAGでプロンプトを改善してみた
やること
RAGの概要を理解してプロンプトを改善する
RAGについては以下のページを参照しました。
前提
RAGとは
Retrieval-Augumented-Generationの略で、端的に言えばLLMが知らない情報についてWEBページやデータベースなどのデータソースから情報をとってきて、プロンプトに情報を付与して回答させる仕組みです。例えば下図ではAzure AI Searchを介して情報を取得し、GPTに回答させるアーキテクチャです。
図は冒頭の参照ページより
GPT-4oについて訊いてみた
GPT-3.5にGPT-4oについて訊いてみます。
from openai import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>"
client = OpenAI()
query = "GPT-4oについて説明してください"
# GPT-3.5に質問を投げて回答を取得する関数
def get_gpt_response(query):
response = client.completions.create(
model="gpt-3.5-turbo-instruct",
prompt=f"Question: {query}\n\nAnswer:",
max_tokens=500
)
return response.choices[0].text
# GPTに質問を投げて回答を取得
answer = get_gpt_response(query)
answer
出力結果:
GPT-40は、オープンドメインの自然言語処理タスクを行うための人工知能システムであるGPTシリーズの次のバージョンです。GPT-3からさらに高度な処理能力を備えており、人間のような自然な文章生成や他のタスクの解決能力が向上しています。GPT-40は、オープンドメインのデータセットを学習することで、さまざまなタスクの解決能力を備えた汎用的な言語モデルとなっています。また、GPT-40は巨大なパラメータ数を持つ予定で、より高度な学習機能を実現することが期待されています。
それっぽい答えが返ってきましたが、「GPT-4o」ではなく「GPT-40」と読み替えられています。gpt-3.5-turbo-instructは2023年9月のリリースでGPT-4oを知らないはずなので、なんとか辻褄を合わせて回答した感じでしょうか。
GPT-4oの情報をスクレイピングする
「GPT-4oは知りません」という回答だったらわかりやすかったんですが、思いどおりにはいきません(笑)ということで、気を取り直してRAGを実装していきます。
今回はマイクロソフトの公式ページからGPT-4oの情報をとってきました。
import requests
from bs4 import BeautifulSoup
# データをスクレイピングする
def scrape_data(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"Error: Received status code {response.status_code}")
return ""
soup = BeautifulSoup(response.content, 'html.parser')
paragraphs = soup.find_all('p')
if not paragraphs:
print("No paragraphs found.")
return ""
text = ' '.join([p.get_text() for p in paragraphs])
return text
url = 'https://news.microsoft.com/ja-jp/2024/05/14/240514-introducing-gpt-4o-openais-new-flagship-multimodal-model-now-in-preview-on-azure/'
data = scrape_data(url)
data
出力結果:
2024年5月14日
| Japan News Center マイクロソフト Azure AI Platform 担当コーポレート バイス プレジデント エリック ボイド (Eric Boyd) ※本ブログは、米国時間 5 月 13 日に公開された “Introducing GPT-4o: OpenAI’s new flagship multimodal model now in preview on Azure” の抄訳を基に掲載しています。 マイクロソフトは、Azure AI 上で稼働する OpenAI の新しいフラッグシップ モデル GPT-4o を発表します。この画期的なマルチモーダル モデルは、テキスト、視覚、音声機能を統合し、会話型の生成 AI 体験の新たな基準を打ち立てます。現在、GPT-4o は Azure OpenAI Service 上でプレビューが試行可能であり、テキストと画像をサポートします。 アクセスのリクエストはこちらからお申込みいただけます。(英語) GPT-4o は、AI モデルのマルチモーダル入力対応を革新します。テキスト、画像、音声をシームレスに組み合わせることで、GPT-4o はより充実した魅力的なユーザー体験を提供します。 本日より、Azure OpenAI Service をご利用中のお客様は、米国の 2 つのリージョンにおいて、Azure OpenAI Studio のプレビュー プレイグラウンドを通じて GPT-4o の広範な機能を試すことができます。この最初のリリースでは、テキスト入力と視覚入力にフォーカスし、このモデルの可能性を紹介します。今後、音声と動画などの機能が追加される予定です。 GPT-4o はスピードと効率性を追求して設計されました。最小限のリソースで複雑なクエリを処理する高度な機能が、コスト削減と性能向上を実現します。 GPT-4o の導入は、さまざまな分野のビジネスに多くの可能性をもたらします: マイクロソフトは、GPT-4o やその他の Azure AI のアップデートについて、Microsoft Build 2024 でさらに詳しくお伝えし、開発者の皆さまが生成 AI のパワーを最大限に活用できるよう支援していきます。 以下のステップで GPT-4o と Azure OpenAI Service の活用を始めましょう: — 本ページのすべての内容は、作成日時点でのものであり、予告なく変更される場合があります。正式な社内承認や各社との契約締結が必要な場合は、それまでは確定されるものではありません。また、様々な事由・背景により、一部または全部が変更、キャンセル、実現困難となる場合があります。予めご了承下さい。 Tags: Cloud Computing, Corporate News, 人工知能 (AI) フォロ ー: このページを共有:
テキストをチャンク分割してベクトル化、類似テキストを取得
GPT-4oの情報をプロンプトに投げられる形に加工します。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import pandas as pd
# テキストをチャンク分割してベクトル化
chunk_size = 500
chunks = [data[i:i+chunk_size] for i in range(0, len(data), chunk_size)]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(chunks)
# コサイン類似度で似ているテキストを取得する
def get_similar_texts(query, chunks, vectorizer, X, top_k=5):
query_vec = vectorizer.transform([query])
similarities = cosine_similarity(query_vec, X).flatten()
indices = np.argsort(-similarities)[:top_k]
return [chunks[i] for i in indices]
query = " GPT-4oについて説明してください"
similar_texts = get_similar_texts(query, chunks, vectorizer, X)
similar_texts
出力結果:
['をシームレスに組み合わせることで、GPT-4o はより充実した魅力的なユーザー体験を提供します。 本日より、Azure OpenAI Service をご利用中のお客様は、米国の 2 つのリージョンにおいて、Azure OpenAI Studio のプレビュー プレイグラウンドを通じて GPT-4o の広範な機能を試すことができます。この最初のリリースでは、テキスト入力と視覚入力にフォーカスし、このモデルの可能性を紹介します。今後、音声と動画などの機能が追加される予定です。 GPT-4o はスピードと効率性を追求して設計されました。最小限のリソースで複雑なクエリを処理する高度な機能が、コスト削減と性能向上を実現します。 GPT-4o の導入は、さまざまな分野のビジネスに多くの可能性をもたらします: マイクロソフトは、GPT-4o やその他の Azure AI のアップデートについて、Microsoft Build 2024 でさらに詳しくお伝えし、開発者の皆さまが生成 AI のパワーを最大限に活用できるよう支援していきます。 以下のステップで GPT-4o と Azure OpenAI',
'\n2024年5月14日\t\t\t\n\t\t\t | Japan News Center マイクロソフト Azure AI Platform 担当コーポレート バイス プレジデント エリック ボイド (Eric Boyd) ※本ブログは、米国時間 5 月 13 日に公開された “Introducing GPT-4o: OpenAI’s new flagship multimodal model now in preview on Azure” の抄訳を基に掲載しています。 マイクロソフトは、Azure AI 上で稼働する OpenAI の新しいフラッグシップ モデル GPT-4o を発表します。この画期的なマルチモーダル モデルは、テキスト、視覚、音声機能を統合し、会話型の生成 AI 体験の新たな基準を打ち立てます。現在、GPT-4o は Azure OpenAI Service 上でプレビューが試行可能であり、テキストと画像をサポートします。 アクセスのリクエストはこちらからお申込みいただけます。(英語) GPT-4o は、AI モデルのマルチモーダル入力対応を革新します。テキスト、画像、音声',
' Service の活用を始めましょう: — 本ページのすべての内容は、作成日時点でのものであり、予告なく変更される場合があります。正式な社内承認や各社との契約締結が必要な場合は、それまでは確定されるものではありません。また、様々な事由・背景により、一部または全部が変更、キャンセル、実現困難となる場合があります。予めご了承下さい。 Tags: Cloud Computing, Corporate News, 人工知能 (AI) フォロ ー: このページを共有:']
GPT-4oについて再度訊いてみる
# GPT-3.5に質問を投げて回答を取得する
def get_gpt_response(query, context):
response = client.completions.create(
model="gpt-3.5-turbo-instruct",
prompt=f"Context: {context}\n\nQuestion: {query}\n\nAnswer:",
max_tokens=500
)
return response.choices[0].text
os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>"
client = OpenAI()
query = "GPT-4oについて説明してください"
context = ' '.join(similar_texts)
answer = get_gpt_response(query, context)
answer
出力結果:
GPT-4oは、Azure AI上で稼働するOpenAIの新しいフラッグシップマルチモーダルモデルです。テキスト、画像、音声の入力を統合し、会話型の生成AI体験を提供します。現在Azure OpenAI Service上でプレビューが試行可能であり、テキストと画像をサポートしています。今後、音声や動画の機能も追加される予定です。
コメントなど
今度はきちんと「GPT-4o」となっています。contextを与えると「マルチモーダル」といった具体的なキーワードや今後の予定も盛り込まれており、プロンプトが改善されているのがわかりました。今回はRAGの概要を理解するために簡単な構成で作ってみただけなので、色々試していきたいと思います。
Discussion