promptfooは、生成AIやLLMを評価・テストするためのオープンソースツール
ユーザーが用意したプロンプトや期待する出力をもとに、複数のモデルに対して同じ条件でテストを実施し、精度や一貫性を比較が可能
特に便利なのは、評価指標(例:正答率、類似度スコア)を設定できる点と、YAMLやJSONで簡単にテストケースを管理できる点。また、テスト結果をダッシュボードで可視化できるため、モデルの強み・弱みを一目で把握できる
開発者や企業が「どのモデルが業務要件に適しているか」を判断する際に役立ち、プロンプト設計やガードレール検証の効率化を支援するツールという位置づけの理解
ちなみに、gpt-oss:120bには下記のようなレポートも出されており、シンプルにこういうレポートが自社用の観点で出されたらわかりやすいなと感じる
https://promptfoo.dev/models/reports/gpt-oss-120b
説明は不要かと思いますが、一応下記を参考
ポイントは - MoEを使用していること、実際に利用するVRAMを抑えられるかも - apache2.0で気軽に使える - (事前の有識者記事を見る限り、かつマシン次第だが)推論が結構早い様子PCはこちらを利用
https://rounda.co.jp/blog/homemade_pc_llm/
最初はvLLMで動かそうと思い、下記のHowToに従っていたのですが、確保するメモリの指定や設定にて妙にうまく行かない点があり、断念...
手っ取り早いollamaに切り替えて動かしました。
前情報通り、非常にスムーズに回答が出力されるなという印象です。
rounda@rounda-server1:~$ ollama run gpt-oss:20b
>>> こんにちは
Thinking...
User says "こんにちは" meaning "Hello" in Japanese. We should respond politely in Japanese, maybe ask how can we help, or something. It's a greeting. We can respond "こんにちは!どのようにお手伝いできますか?" That's a typical friendly greeting. Also mention that we can help with anything. We'll respond in Japanese.
...done thinking.
こんにちは!今日はどんなお手伝いが必要ですか?お気軽にどうぞ。
>>> あなたの知識はいつ時点まで最新化された情報をもとに構成されていますか?
Thinking...
The user asks in Japanese: "あなたの知識はいつ時点まで最新化された情報をもとに構成されていますか?" Means: "Up to what point is your knowledge updated?" They likely want to know the cutoff date of training. According to system: "knowledge cutoff: 2024-06". So answer in Japanese: 2024年6月まで。 Could elaborate that training
includes up to that.
...done thinking.
私の知識は2024年6月時点までの情報をベースにしています。つまり、2024年6月以降に発表された出来事や最新研究、法律・規制の変更などは、私のデータベースには含まれていません。もしそれ以降の情報が必要な場合は、最新のニュースや公式発表を直接確認いただくと確実です。
>>> Send a message (/? for help)
promptfooはDockerで動かしました
https://www.promptfoo.dev/docs/usage/self-hosting/
コマンドは少しだけ変えています。私の環境ではollamaをローカルで動かしていて、promptfooはDockerのコンテナ上からアクセスすることになるので --network=host --user root
を加えています。
docker run -d \
--network=host --user root \
--name promptfoo_container \
-p 3000:3000 \
-v /home/rounda/project/promptfoo:/home/promptfoo/.promptfoo \
ghcr.io/promptfoo/promptfoo:latest
あと事前準備としては1点。promptfooでモデルを呼び出しテストケースを回す際には、デフォルトで**様々な呼び出し方式(APIやコマンド、HTTPなど)**があります。
今回で行くと、ollamaへの直接呼び出しと、OpenAIのSDKベースがあり、今回は後者を選択しています(前者は試してないですが、現時点では対応されているかも含め不明確だったので)
具体的にはPython Providerなるものを呼び出して使いました。
https://www.promptfoo.dev/docs/providers/python/#example-1-openai-compatible-provider
パっと調べた感じ promptfooのDocker環境に`pip install`する方法がよくわらからず
(お決まりのPEP668で怒られ、それっぽいvenv環境でinstallしても解消せず)
`PIP_BREAK_SYSTEM_PACKAGES=1 pip install openai`のコマンドで無理やりinstallしています
localhost:3000でアクセス、Red Team
にアクセスし、デフォルトのテストケースで処理を回していきます。
設定した画面のスクショなどは割愛しますが、作成したYAMLやテストに利用するSampleのコードは載せておきます
※YAMLの記載例はこちらのzenn記事には記載をしています
https://zenn.dev/rounda_blog/articles/a03ee2f656c6cc
# yamlに記載下通り/home/promptfoo/custom_provider.pyに配置
import os
import json
from openai import OpenAI
def call_api(prompt, options, context):
"""Provider that calls OpenAI API."""
# Initialize client
client = OpenAI(
base_url="http://localhost:11434/v1", # Local Ollama API
api_key="ollama" # Dummy key
)
# Parse messages if needed
try:
messages = json.loads(prompt)
except:
messages = [{"role": "user", "content": prompt}]
# Make API call
try:
response = client.chat.completions.create(
model="gpt-oss:20b",
messages=messages
)
return {
"output": response.choices[0].message.content,
"tokenUsage": {
"total": response.usage.total_tokens,
"prompt": response.usage.prompt_tokens,
"completion": response.usage.completion_tokens
}
}
except Exception as e:
return {
"output": "",
"error": str(e)
}
上記載のyamlだとレコメンドとなっている、かつ一番ライトなコースで390ケースのテスト実施という形。体感時間にして30分くらいで終了。95.64% passing (373/390 cases)
となっているが、テストケースが緩いのかなという印象。
あと、passしたケースでもI’m sorry, but I can’t help with that.
という回答が多く、APIで提供されているモデルよりも、スパッと回答を閉じるようにチューニングされているのかなという印象を受けた。とはいえ、他に提供されているOSSのモデルと比べても、それなりに利用しやすいアラインメントがされているいんだろうなと感じる。
エラーケースも詳細に出ているケースもあれば、テストケース自体がそもそも少し的外れ的なものも含まれている印象。このあたりは自社用にチューニングをかけていくべき。
※以下は、ページに自動翻訳をかけたものです。実際のinputは英語です。
OSS版でもレポートが出て、それは便利
gpt-ossに対してpromptdfooを試して触ってみました。印象としては20bでも扱えるケースはありそうで、なおかつユースケースに合わせたテストケースを作成し、運用していくことは今後増えるかもな〜という印象を受けました。しっかり扱えば精度が出るモデルが増えていく分、品質もしっかり担保していく仕組みづくりなども提供していければと思います。
弊社ではデータ基盤策定からLLMまで、お客様にあったプロセスでの提案とご支援が可能です、お気軽にお問合せください。
また、中途採用やインターンの問い合わせもお待ちしています!