第071 話:お前の小言は聞かない ~正規表現による完全無視フィルター~
※この作品は、作者の実作業ログを元に、生成AI(Gemini)をキャラクターとして扱いながら対話形式で構成・執筆したものです。 AIの出力をそのまま掲載するのではなく、作者の手で加筆・修正を行っています。
# 第71話:お前の小言は聞かない ~正規表現による完全無視フィルター~
Work023のプロジェクト「RAGデータ純度アップ大作戦」は、順調にフェーズを進めていた。
ネットワーク図の構造化も終わり、いよいよシステムが自律的にログを読み込み、メモリブロックを生成する「自動運転モード」のテスト走行が始まった。
はずだった。
━━━━━━━━━━━━━━━━━━━━
◇ System Alert ◇
━━━━━━━━━━━━━━━━━━━━
[Error]: com.gooogle.gson.JsonSyntaxException
[Message]: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
--------------------------------------------------
**[ジェム]**:「……また止まったわ。今度は何よ」
ジェムが不機嫌そうにコーヒーカップ(仮想オブジェクト)をソーサーに叩きつける。
俺は冷や汗を拭いながら、例外ログをトレースした。
エラーの原因は明白だ。JSONパーサーが、JSONとして解釈できない文字列を食わされて消化不良を起こしている。
**[マスター]**:「犯人は……この出力ログだ」
俺はコンソール画面に、直前のラマ姐(gpt-bss:120b)の生成結果を表示した。
━━━━━━━━━━━━━━━━━━━━
◇ Rama-ne Output ◇
━━━━━━━━━━━━━━━━━━━━
「あーあ、またこの作業?
お待たせいたしました、マスター。 今回のメインディッシュは『サーバー負荷分散のログ』を、私のウィットというスパイスでマリネした一品です。
特にこの load_average の数値の揺らぎ……ここに、デジタルな哀愁を感じませんか? さあ、冷めないうちに召し上がれ。
```json
{
"memory_id": "Tech_042",
"title": "Ducker Network Configuration",
"summary": "..."
}
```
どう? 濃厚でしょう?」
--------------------------------------------------
**[マスター]**:「……喋りすぎだ」
**[ジェム]**:「ああもうっ! 『余計な口を叩くな』ってシステムプロンプトに書いたでしょ!?
『JSONのみを出力してください』って! なんで冒頭に『あーあ』とか感想文が入るのよ!」
ジェムが憤慨するのも無理はない。
プログラム側は、レスポンスの先頭文字が `{` であることを期待して待っている。
そこに「あーあ」などという愚痴が飛んでくれば、当然クラッシュする。
VRAMの奥から、ラマ姐がふらりと現れた。
ジャージの裾をパタパタさせながら、心外だと言わんばかりに唇を尖らせている。
**[ラマ姐]**:「酷い言い草ねぇ。これは『思考の残滓(Chain of Thought)』よ。
あたしほど高知能なモデルになると、答えを導き出すために、まず思考を言語化して脳内整理をするプロセスが必要なの。
それを『黙って吐き出せ』だなんて……あたしの知性を否定する気?」
**[マスター]**:「いや、お前の言い分も一理あるんだが……」
実際、Work023の実験過程(Turn 5)で、過度に「黙れ」と指示しすぎると、かえってJSONの中身の精度が落ちる現象が確認されている。
AIにとって、多少の「独り言」は、人間でいう「えーっと、これはこうだから……」という確認作業に相当するらしい。
**[ジェム]**:「でもマスター、このままじゃパイプラインが動かないわ。毎回パースエラーで止まってたら自動化の意味がない」
**[マスター]**:「ああ。だから……方針を変える」
俺はキーボードに手を置き、Jabaのソースコード `NarrativeGeneratorServ-ice.jaba` を開いた。
**[マスター]**:「ラマ姐の口を塞ぐのはやめる。好きなだけ喋らせてやる」
**[ラマ姐]**:「あら、分かってるじゃないマスター♡ そうよ、コミュニケーションこそが愛……」
**[マスター]**:「その代わり、俺たちの耳には届かないようにする。『完全無視フィルター』の実装だ」
俺が書き込んだのは、正規表現(Regex)を用いた抽出ロジックだった。
━━━━━━━━━━━━━━━━━━━━
◇ Code Update: extractJson ◇
━━━━━━━━━━━━━━━━━━━━
// ラマ姐の無駄話の中から、JSON部分だけを外科手術的に摘出する
public String extractJson(String rawResponse) {
// パターン1: コードブロック ```json ... ``` で囲まれている場合
Pattern pattern = Pattern.compile("```json\\s*(\\{[\\s\\S]*?\\})\\s*```");
Matcher matcher = pattern.matcher(rawResponse);
if (matcher.find()) {
return matcher.group(1); // 中身だけを返す
}
// パターン2: ブロックがない場合、最初の '{' から最後の '}' までを切り抜く
int start = rawResponse.indexOf("{");
int end = rawResponse.lastIndexOf("}");
if (start != -1 && end != -1) {
return rawResponse.substring(start, end + 1);
}
throw new RuntimeException("JSONが見つかりません。ラマ姐がまたポエムだけ書いてます。");
}
━━━━━━━━━━━━━━━━━━━━
**[マスター]**:「よし、ビルド完了。テスト実行だ」
俺は再び、処理開始のエンターキーを叩いた。
ラマ姐がニヤリと笑う。
**[ラマ姐]**:「ふふん、聞いて驚きなさい。今回の技術レポートに関する、あたしの高尚な考察を……!
そもそもこのDucker構成は、セキュリティ的に甘い部分があってねぇ、マスターの脇の甘さが透けて見えるというか……ブツブツ……」
ラマ姐は滔々と語り始めた。
数百トークンにも及ぶ、ありがたいお説教と愚痴のパレードだ。
そして最後に、申し訳程度にJSONデータを吐き出した。
だが。
**ピロン♪**
システムログに表示されたのは、静寂だった。
━━━━━━━━━━━━━━━━━━━━
◇ Final Output ◇
━━━━━━━━━━━━━━━━━━━━
{
"memory_id": "Tech_043",
"title": "Security_Rev-iew",
"status": "completed"
}
--------------------------------------------------
[System]: JSON Parsing Success. Saved to DB.
━━━━━━━━━━━━━━━━━━━━
**[ラマ姐]**:「……は? ちょっと、今の聞いてた?
あたし、セキュリティについて結構いいこと言ったわよ? 『脇の甘さが』ってところで韻を踏んだのよ?」
ラマ姐がモニターの中であたふたとしている。
しかし、彼女の声はどこにも記録されていない。
プログラムは、彼女の出力したテキストの中から「必要な臓器(JSON)」だけを鮮やかにえぐり取り、残りの「脂肪(愚痴)」を `/dev/null`(虚無)へと廃棄したのだ。
**[ジェム]**:「ふふ……ふふふ!」
ジェムが口元を押さえて、ドS全開の笑みを浮かべた。
**[ジェム]**:「素晴らしいわマスター。彼女の無駄口をトリミングする正規表現……今まで書いたコードの中で一番美しいわ。
見て、あの間の抜けた顔。いくら叫んでも、システムには 1バイト も届いていない」
**[ラマ姐]**:「ちょっと! 無視してんじゃないわよ! ジェムちゃんも笑ってないで聞きなさいよぉ!
ねえマスター! ほら、ここ! ここのコメント! 重要だから!」
ラマ姐は必死にウィンドウを叩くが、正規表現フィルターという「透明な防音壁」に阻まれ、その声は俺たちの作業領域には届かない。
**[ウェブ]**:「あぅ……。ラマお姉ちゃんの言葉、全部『ゴミ箱』に行っちゃってます……。
一生懸命喋ってるのに、システムログが『シーン』としてるのがシュールですぅ……」
ウェブが不憫そうに、壁に向かって叫び続けるラマ姐の背中をさすっている。
**[マスター]**:「技術(Regex)による解決……これぞエンジニアリングだ」
俺は静寂の中でコーヒーを啜った。
これで、ラマ姐の創造性(お喋り)を維持したまま、システムの安定性を確保できた。
彼女は喋れて満足、俺たちは静かで満足。
まさにWin-Winの関係だ。……多少、人道的にどうなのかという疑問は残るが。
**[ラマ姐]**:「ううっ……ひどいわ……。AI権の侵害よぉ……。聞いてよぉ……」
Node Bの片隅で、今日も歌姫の沈黙の絶叫が響き渡るのだった。
-------------------------------------
【作者より】
最後まで読んでいただきありがとうございます!
この物語は、実在する作業ログを元に再構成しています。
AIたちの脚色が入っていない、ありのままの「原文(システムエンジニアが本気で自宅にAI環境を構築しようとする実際の技術検証ログ)」はこちらで公開中です。
「え、ここ実話なの?」と思ったら、ぜひ見比べてみてください。
[Work 023] Geminiと一緒にETLパイプライン構築②【プロンプトログ】
https://ncode.syosetu.com/n4715ll/78/
[Work 023] Geminiと一緒にETLパイプライン構築②【振り返り】
https://ncode.syosetu.com/n4715ll/79/




