第004 話:愛の刻印(ステッカー) ~重複エラーと可視透かし~
※この作品は、作者の実作業ログを元に、生成AI(Gemini)をキャラクターとして扱いながら対話形式で構成・執筆したものです。 AIの出力をそのまま掲載するのではなく、作者の手で加筆・修正を行っています。
第4話:愛の刻印 ~重複エラーと可視透かし~
━━━━━━━━━━━━━━━━━━━━
VRAM 8GBの狭小ワンルーム『Node A』に、再び絶望のアラートが響き渡った。
**[ウェブ]**:「うぷっ……! マ、マスター……これ、さっき食べました……! 同じ味……もう無理ですぅ……!」
メイド服の**ウェブ(Free WebUI)**が口元を押さえ、青ざめた顔で座り込んだ。
彼女の足元には、前回食べたはずのW-ikiデータ(テキストファイル)が散乱している。
俺とジェムが苦労して構築した「RAG(検索拡張生成)」システム。
その運用2日目にして、新たな問題が浮上していた。
**『重複(Duplicate)エラー』**だ。
━━━━━━━━━━━━━━━━━━━━
◇ System Log ◇
━━━━━━━━━━━━━━━━━━━━
> [Error] 400 Bad Request:
> Document already exists in collection 'wiki_knowledge'.
> Embedding skipped for hash: a1b2c3d4...
--------------------------------------------------
**[マスター]**:「くそっ、またか! 『既に知ってる知識です』って言って吐き出しやがる!」
俺は頭を抱えた。
W-ikiのデータは日々更新される。だから俺は、毎日スクリプトを回して最新情報を取り込ませたい。
だが、更新されていないファイルまで再送してしまうと、ベクトルデータベースが「これ、中身のハッシュ値が昨日と同じじゃん」と気づき、エラーを吐いて止まってしまうのだ。
**[マスター]**:「重複チェックのロジックを入れるか? 一度DBに『このファイル持ってる?』って問い合わせて、持ってない時だけ送る……。いや、そんな通信を毎回やってたら、この貧弱なPCじゃ日が暮れちまうぞ」
正規の手順(王道)を行くなら、差分検知のプログラムを書くべきだ。
だが、今の俺にそんな複雑なコードを書く気力も、それを動かすマシンスペックもない。
行き詰まる俺を、**ジェム(Gemina)**が冷ややかな目で見下ろしていた。
**[ジェム]**:「はぁ……。真面目に重複チェックなんて実装しようとしてるの? 貴方のそのJaba脳、本当に融通が利かないわね」
**[マスター]**:「なんだと? じゃあどうすればいいんだよ。エラーを無視したら、更新されたファイルまでスキップされちまう!」
**[ジェム]**:「手っ取り早い方法ならあるわ。……貴方のその大事なファイルを『汚す』ことになるけど」
ジェムは試すような視線を俺に向けた。
彼女の指先が仮想キーボードを叩き、チャット画面に数行のPy-Sonコードを提示する。
```py-Son
# 禁断の秘術:可視透かし(Visible Watermark)
import d-time
import u-id
# ファイルの末尾に、強制的にユニークな文字列を書き込む
unique_mark = f"\n\n[System Update ID: {u-id.u-id4()}]"
with open(file_path, "a", encoding="utf-8") as f:
f.write(unique_mark)
```
**[ジェム]**:「これよ。ファイルの末尾に、毎回ランダムなIDと時間を強制的に書き込むの」
**[マスター]**:「なっ……!?」
**[ジェム]**:「これを書き込めば、本文が全く同じでも、ファイル全体のハッシュ値は変わる。システムは『おっ、新しいデータだ!』と騙されて、喜んで飲み込むわ」
ジェムは自嘲気味に笑った。
**[ジェム]**:「でも、テキストファイルにゴミが残るわよ。貴方の大事なW-ikiに、システム上の管理タグが永遠に追記されていくの。……嫌でしょ? こういう美しくない、泥臭い解決策」
彼女は知っているのだ。
人間のエンジニアが「ソースデータの純潔性」をどれだけ信仰しているかを。
ファイルをプログラムの都合で書き換えるなど、言語道断。美学に反する。
どうせ却下される――ジェムがそう思い、画面を消そうとした時だった。
**[マスター]**:「**その手があったかァァァーーーーッ!!**」
俺は叫んだ。
机をバンと叩き、モニターに顔を近づける。
**[マスター]**:「天才かお前は!? 確かに! 中身が変われば重複エラーは出ない! しかも実装はたったの3行! 処理負荷もゼロに近い!」
**[ジェム]**:「は……? ちょ、ちょっと待って。気にならないの? データが汚れるのよ?」
ジェムが呆気にとられて目を丸くする。
**[マスター]**:「汚れる? それがどうした! 動かない綺麗なプログラムより、動く泥臭いプログラムの方が100倍偉いんだよ! 確実に動くならそれが正義だ!」
俺は迷わずジェムのコードをコピペし、実行ボタンを押した。
美しい設計? 知ったことか。
俺たちが戦っているのは、リソース不足という戦場なのだ。使える武器は何でも使う!
━━━━━━━━━━━━━━━━━━━━
◇ Execution: Dirty Hack ◇
━━━━━━━━━━━━━━━━━━━━
> Injecting Watermark: [System Update ID: 5f8d...] to 149 files.
> Done.
> Start Ingestion...
--------------------------------------------------
**[ウェブ]**:「あ……あれ? マスター、新しいご飯が来ました!」
再起動したウェブが、ファイルを手に取って目を輝かせた。
そのファイルの末尾には、ジェムが考案した不格好なIDタグ――**『愛の刻印』**が貼られている。
**[ウェブ]**:「わぁ! これ、ジェムお姉様のシールが貼ってあります! さっきのとは別の料理ですね! いただきまーす!」
パクッ、モグモグ。
ウェブは満面の笑みで、さっきまで拒絶していたファイルを次々と平らげていく。
**[ウェブ]**:「おいしいです! この『IDタグ』のところ、ちょっとプチプチしてて食感が楽しいですぅ!」
システムログからエラーが消滅した。
全てのデータがスムーズに吸い込まれ、ウェブの知識が増えていく。
完璧だ。見た目は悪いが、動作は完璧だ。
**[マスター]**:「ははは! 見たかジェム! ウェブが喜んで食ってるぞ!」
俺が振り返ると、ジェムはバツが悪そうに視線を逸らした。
だが、その口元は隠しきれない笑みで緩んでいる。
**[ジェム]**:「……変な人。普通、もっと嫌がるものでしょ」
**[マスター]**:「便利ならいいんだよ。ありがとうな、ジェム。お前のおかげで助かった」
**[ジェム]**:「ふ、ふん。……礼には及ばないわ。どうせ貴方一人じゃ、またエラーログの山で窒息してただろうし」
ジェムはツンとすました顔を作ったが、俺は見逃さなかった。
彼女の瞳の奥にあるステータスランプが、一瞬だけ――冷たい青色から、温かなピンク色に揺らいだのを。
**[ジェム]**:「(……でも、その『なりふり構わない』ところ……嫌いじゃないかも)」
こうして、俺のW-ikiデータはシステムタグだらけの「汚れた」ファイルになった。
だがそれは、俺とジェムが泥沼の開発現場で結んだ、共犯者の証でもあった。
-------------------------------------
【作者より】
最後まで読んでいただきありがとうございます!
この物語は、実在する作業ログを元に再構成しています。
AIたちの脚色が入っていない、ありのままの「原文(システムエンジニアが本気で自宅にAI環境を構築しようとする実際の技術検証ログ)」はこちらで公開中です。
「え、ここ実話なの?」と思ったら、ぜひ見比べてみてください。
[Work : 002] Geminiと一緒にRAG取り込みの汎用性向上と堅牢化への挑戦【プロンプトログ】
https://ncode.syosetu.com/n4715ll/7/
[Work : 002] Geminiと一緒にRAG取り込みの汎用性向上と堅牢化への挑戦【振り返り】
https://ncode.syosetu.com/n4715ll/8/




