« Apache Solr + llama.cpp embedding を使ってベクトル検索してみる | トップページ | Gemini CLIから利用するMCPサーバを自作してSolr全文検索と文献取得するRAGを試してみた »

2025.08.21

ベクトル検索でなくたっていいじゃない ‐ Solrの全文検索とGemini CLIを使ったなんちゃってRAG ‐

Apache Solr + llama.cpp embedding を使ってベクトル検索してみるに書きましたように、単純にベクトル埋め込みを使った検索をすれば解決かというと、現状難しいものがあります。前処理や後処理にちゃんと手をかけないとだめなんでしょうし、改善するべき箇所はたくさんありそうで、今後も色々試していきたいと思っています。一方で検索ワードがはっきりしているなら従前からある全文検索が優秀な結果を出してくれます。

要は、参考情報としての文書を適切に選択できればRAGを利用できるわけで、そういったなんちゃって(半手動)RAGのお話を。

お遊びではありますが、ローカルにSave Page WEを使って保存したhtmlファイルを指定してGeminiに要約してもらうスクリプトを作ってみました。


./mkprompt.sh /Volumes/Home/www/ScrapBook/macmini2020/ScrapBook3/20200817092406.html 'この記事を要約してください。'
./mkprompt.sh /Volumes/Home/www/ScrapBook/macmini2020/ScrapBook3/20200817092406.html 'この記事を要約してください。' | gemini > tmp.txt

スクリプトはこのような感じでさっくりとですが、gemini CLI への指示を出力します。


#!/bin/sh
set -u

QUERY=
RESULT=
LF='
'

if [ $# -lt 2 ] ; then
echo "Usage: mkprompt.sh [file] [question]"
echo "lack of parameter"
exit 1
fi

QUERY="${2}"

# Execute Main Routine
# Start Tika Server
mes=$(curl -sS http://localhost:9998/tika 2>&1 | \
grep 'Tika' | sed 's/^.*\(Tika\).*$/\1/')
if [ "$mes" != 'Tika' ] ; then
tika-rest-server &
echo 'Starting tika-rest-server...Try Again.'
exit 0
fi

# Main Routine
# convert to text using Apache Tika
curl -sS -T "${1}" http://localhost:9998/tika/text |
jq |
grep 'X-TIKA:content' |
sed 's/^.*: \"//' |
sed 's/\",$//' |
sed 's/\\n/\n/g' |
sed 's/\\r/\n/g' |
sed 's/\\t/ /g' |
sed 's/\r/\n/g' |
sed 's/\t/ /g' |
sed 's/\s+/ /g' |
{
while IFS= read -r line; do
RESULT="${RESULT}${LF}${line}"
done
cat <<RESPONSE
USER: 貴方はユーザーの質問に答えるAIアシスタントBotです。
ユーザーの質問に対して適切なアドバイスを答えます。
情報として、以下の内容を参考にしてください。
========
${RESULT}
========
さて、「${QUERY}」という質問に対して、上記の情報を元に、答えを考えてみましょう。
ASSISTANT:
RESPONSE
}

# EOF

htmlファイルから抽出したテキストファイルには結構ノイズが入っているのですが、Geminiはきちんと必要な情報を集出して要約してくれます。これこそLLMが得意とするところですね。実際は、もう少し真面目に前処理して不必要なスペースその他の文字を削除した方がtokenの節約になります。

ディープラーニング(Deep Learning)の歴史を振り返る - 渋谷駅前で働くデータサイエンティストのブログ
を参照させていただいて、gemini CLI に要約してもらいました。

2025082001
上1行目で出力される指示をtmp1.txtに保存してgemini CLIにファイルをアットマーク指定します。

2025082002
ノイズが多いとファイル読み込みが途中で止まることがありました。サイドまで読み込むように指示しましょう。

2025082003
指示ファイルを最後まで読み込んで指示どおり要約してくれました。

2025082004
もう一度要約してもらいました。微妙に表現が違いますが、同内容ではありますね。

2025082005
結果を、ファイル名を指定して、ファイルに出力してもらうこともできます。

2025082006
ファイル出力時には許可を求められます。

2025082007
こんな感じで、参考情報として与えたファイルをもとに、必要ならWeb検索して回答するように依頼することもできます。

これは、かなり実用的ですね!いじりがいがありそうです。

|

« Apache Solr + llama.cpp embedding を使ってベクトル検索してみる | トップページ | Gemini CLIから利用するMCPサーバを自作してSolr全文検索と文献取得するRAGを試してみた »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« Apache Solr + llama.cpp embedding を使ってベクトル検索してみる | トップページ | Gemini CLIから利用するMCPサーバを自作してSolr全文検索と文献取得するRAGを試してみた »