Closed5

LangChainのQAボットの評価にAuto-evaluatorを使う

kun432kun432

Streamlitを使ってGUIで、LangChainのQAボットの評価ができるサードパーティのツール。

準備

何はともあれdevcontainer環境を構築。自分で作りたくない場合は以下をcloneするなりforkするなりしてもらえれば。

https://github.com/kun432/auto-evaluator

以下は自分でdevcontainer環境を作る場合。

とりま公式レポジトリをforkしてcloneしておく。

で、cloneしたレポジトリ直下に以下を作成する。

.devcontainer/devcontainer.json
{
	"name": "Python 3",
	"image": "mcr.microsoft.com/devcontainers/python:0-3.11",
	"customizations": {
		"vscode": {
			"extensions": [
				"ms-python.python"
			]
		}
	},
	"workspaceFolder": "/workspace",
	"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
	"mounts": [
		"source=${localEnv:HOME}/.gitconfig,target=/home/vscode/.gitconfig,type=bind,consistency=cached",
		"source=${localEnv:HOME}/.langchainenv,target=/workspace/.env,type=bind,consistency=cached",
	],
	"onCreateCommand": "pip install -r requirements.txt"
}

上記で2つローカルマシンからマウントしている。

  • ~/.gitconfig
  • ~/.langchainenv

.gitconfigはdevcontainer内からgitを叩くために、.langchainenvはOpenAIのAPIキーとかをレポジトリには含めたくないけど必要になるので.envとしてマウントするようにしている。これらは予めローカルマシン側で設定しておく。

OPENAI_API_KEY=xxxxxxxxx

その他はこんな感じ。このへんはお好みで。

.vscode/settings.json
{
    "aws.telemetry": false,
    "terminal.integrated.shellIntegration.history": 999999,
    "files.insertFinalNewline": true
}

あと .gitignore は以下で作成した。

https://www.toptal.com/developers/gitignore?templates=linux,macos,python,windows,jupyternotebooks,visualstudiocode,git

でこのディレクトリをVSCodeで開いてdevcontainerで開き直せばOK。

あとStreamlit向けに設定を追加しておく。

.streamlit/credentials.toml
[general]
email=""
.streamlit/config.toml
[browser]
gatherUsageStats = false

では起動。.envを読み込むようにauto-evaluator.pyを修正しても良さそうだけどとりあえずこんな感じで。

$ source ./.env
$ export OPENAI_API_KEY
$ streamlit run auto-evaluator.py

ブラウザが立ち上がって(もしくはhttp://localhost:8501/にアクセス)以下の画面が表示されればOK。

実際の使い方はまた今度。

kun432kun432

では実際に使ってみる。

用意しないといけないものは一応2つ。

  1. QAのベースとなる「ドキュメント」
  2. 上記ドキュメントを元に自分で作成したQAの「評価セット」

一応2はオプションで、指定しない場合は1から自動的に作成してくれるのだけど、日本語の場合は以下の問題がある。

  • ドキュメントからの評価データ作成にはQAGenerationChainが使用されるが、ドキュメントの分割単位等はデフォルトでハードコードされており、日本語のドキュメントの場合にはトークン数上限を超える場合がある。
  • QAGenerationChainのデフォルトのプロンプトだと、評価データが日本語以外の言語で生成される可能性がある。

これを踏まえると、2についてauto-evaluatorを使うのはちょっと厳しそうなので、別の方法で生成しておいたほうが良いと思う。QAGenerationChainでの評価データ作成については以下を参照。

https://github.com/rlancemartin/auto-evaluator/blob/main/auto-evaluator.py#L76-L97

kun432kun432

いろいろ試してみたのだけど、

  • OpenAIの"That model is currently overloaded with other requests"にやられたり、タイム・アウトしたり。
  • textsplitterのセパレータやらチャンクサイズやらをかなり小さくしないとすぐにトークン量上限のエラーになる。
  • 遅い(まあQAごとにループするので当然といえば当然)

とまあ、いろいろ複合的に問題が重なって、かつ、いろいろハードコートされてるところとかも直さないと日本語ではちょっと厳しい、と感じたので一旦諦め・・・・

このスクラップは2023/05/23にクローズされました