SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|07|08|09|10|11|12|
2026|01|02|03|04|

2005-01-12(Wed) さよならサブウェイ

  なんだかんだで第二の故郷と化しつつあるYRPだが、今回のミッションは2泊3日である。でもってこんなオイラであるから、例の緊急プロジェクトである232メモリを進捗するため、PICライタ、ブレッドボードとオシロを持参する。なにしにいっとるんじゃ!! というツッコミはなしでヒトツよろしくお願いしたい次第である。

  仕事はあまりに順調で定時に終わってしまった。今日は至近のホテルYRPが取れなかったので、前回も宿泊した汐入駅前のハーバー横須賀に向かう。どーにも「床屋どこ?」という感じを受けるこのハーバー横須賀であるが、それはバーバーどこすか? の空耳である。

  汐入駅前にゲーセンがあったので入る。んが、なんにも面白いものがないのでスグ出る。晩飯でも食おうかとエクスプローリングしていたところ、なんとサブウェイ発見!! オイラはココのサンドイッチがかなりの好物なんだよねぇ。最近、あまり店舗を見ないけど、以前はしばしば御徒町の店に通ったっけ。御徒町店は他の店に比べても特別にムチャな量の具をパンにハサむ店で、フランスパンほどの2倍長タイプをイッキに食べてシアワセになっていたっけなぁ……

  画像の説明 画像の説明

  ……って、なによッ!! メニューから2倍長タイプが姿を消しているではないのッ!! しかも、一番安い「ベジーアンドチープ」……もとい「ベジーアンドチーズ」の姿も見えないではないかッ!! その代わりに「ベジーデライト」とかいうメニューが鎮座しているが「チーズなし」っつぅのはどういう了見だ。クサだけかよ。パンとクサだけなのかよ。パンにクサをハサだだけのモノがオレの晩飯なのかよッ!! オショウじゃねーぞ、オレはッ!!

  いやなにオイラはやっぱり30cmという長さのサンドイッチを端から口の中に押し込んでいくのが好きなのだ。そうなるとクドいサンドイッチは食べられないし、値段的にも安いメニューを選択しなければならないので「ベジーアンドチーズのロング」に落ち着いていたのだ。けれどこのメニュー体系ではどうにも選択のしようがない。どうにも選択のしようがなく、どうにも選択のしようがないわけで、どうにも選択のしようがないのである。結局、数分間に渡って食い入るようにメニューを眺めた挙句に店を後にした。あーぁ、悲しい。しばらく見ないうちにどうしてこんなことになってしまったのだろう。もー、以前にイチモク置いていたアイドルが、しばらく見なううちにヘアヌード写真集を出してしまったくらいのショックである。ダメダメじゃん。

  画像の説明

  傷心のままに、気がつけば夜のドブイタ通りをフラフラと……ナヌ!? ドブイタ通りって、以前にワザワザ観光で訪れたコトのある場所じゃん。夜だとこんなにサミシイ感じなのかぁ。最初は同名の違う場所かと思ったよ。クルっと回るがあまりフツーに食う場所も見つからない。結局、汐入駅前に戻ってコンビニで適当に弁当を買ってホテルに戻ってしまった。ぎゅー。

  ホテルではテレビを観ながらダラダラと時間を過ごしてしまう。例のGlenfiddichをチビチビやりつつ、トリビアの泉を観ていたら途中で寝てしまい、あわてて232メモリの開発作業を開始する……も、さっぱり進まず。どーも、オシロがうまく使えない。んぎゃー。


2007-01-12(Fri) アチラが立てば、サーバが立たず

  さて、仕事が忙しいながらも、休日までは侵食されなかったので、元気いっぱいにサーバイジリである。

  このNASは、VIAのEpiaML800MHz版に、ATA133で160Gの3.5inchHDD、ギガビットの蟹NICを組み合わせ、小型の筐体にパッケージングした製品である。初期状態ではBSDベースのOSが導入されており、基本的にはNASとして利用するためのものだが、当然ながら最初から素直に利用するつもりは毛頭ないオイラである。

  画像の説明

  まずはイキナリだがケースを外す。で、裏面に現れた各種「非サポート」コネクタに、PS/2キーボード、マウス、液晶ディスプレイをつないでしまう。で、電源オン。これまたイキナリBIOS設定に移動し、念のため初期状態の設定をデジカメでバシバシと保存しながら、オンボードNICを有効にするのであった。そうなのだ。この製品はギガビット対応NASに仕上げるため、ひとつしかないPCIスロットにロープロファイルなギガビットの蟹NICが刺さっており、マザー上の100Mビットは初期状態では殺されているのである。つまり、それを生かせばマルチホームになり、ルータとして稼動可能なのである。

  で、早速だがRHEL4のインストールである。しかし、手元にはCDROMドライブがない。どうするか。ここはUSBブートを使って、玄箱をNFSインストールサーバに、インストール作業を進めるのである。手元のUSBメモリにRHEL4のインストールCDの/images/diskboot.imgを「dd if=/images/diskboot.img of=/dev/sdb」てな感じで書き込む。でもって、NASのBIOSの起動設定を「First boot: [USB-HDD]」にして……起動しない。なんで?

  うーん、なんだか、メモリチェックが始まらなくて強制リセットをかけたり……なんだか動作自体が安定しないなぁ……と感じつつ「First boot: [USB-FDD]」にしてみるがやっぱり起動しない。まさか、NAS用のハードだからBIOSが特別な内容になっているとか? 「Boot Other Device: [Enable]」とかにしてもダメだし……んなアホな……と思いながら「USB ブート」とかでググると、Epiaは「First boot: [USB-ZIP]」で起動するという情報が……おっと、起動したッ!! なんでZIPでッ!? まぁ、いっか、起動すりゃ。

  「boot: linux rescue」でレスキューモードに移行する。起動ディスクの内容はNFSの先にあるので、玄箱のisoのあるディレクトリを指定する必要があるが、無事、レスキューモードでの起動に成功した。USB接続のHDDをつないで、現状のディスクの内容を書き出す。/dev/hda1と/dev/hda2をまるごと、それと/dev/hda3の先頭1MB。まぁ、初期状態のOSを使うことはないと思うが、念のためだ。

  再起動。もう一度USBメモリからブートするが、今度は「boot: linux askmethod」として、通常のGUIインストールプロセスを起動する。パーティションは4Gをふたつ。あろうことか、そのふたつでRAID1、ミラーリングアレイを構成してしまう。でもって……あ、ホスト名を決めなきゃ……どうしよう……

  ……Linuxサーバからしてみれば、オイラがフリーズしたのかと思っただろう。それくらいホスト名に悩みまくる。WRAPはwrap、玄箱HGはkuroと安直に決めたが、この製品はLHD-NAS160V、愛称NetPocket……非常にホスト名に向かない名前なのだ。筐体が黒いから黒に関連する言葉がいいけど……軽く1時間は悩んだ挙句「chrome」に決定した。元素のクロム。イメージは、強固な金属、オレンジの溶液、有毒、黒という色にも掛けている。スペルも短くて覚えやすい。気に入った。

  さて、名前に悩んだのはウソのように、適当にパッケージを選んでインストール完了。イザ、起動ッ!! ……しない。なんで? 「Missing operating system」ってディスク読んでるそぶりもないじゃんよ。またもや、BIOSのBOOT設定をどのように変えようが、ブートする気配がない。

  まぁ、動かない理由はいくらでも思い当たる。やっぱり元がNAS用のハードだからBIOSが特別だとか? HDDがつながっているのがマスタでない? マザーにヘンなジャンパが当たってるとか? USBブートからのネットワークインストールが悪さしている? 1ドライブでソフトRAIDなどという妙な設定にしているから? ……とりあえず、ハード面でももっとバラして目視確認したほうがいいな……というところで、午前4時。

  画像の説明

  もしかしたら、RHEL4のインストールはできないんじゃないかなどという不安を抱えつつ寝床に行く。非常にもやもやするが仕方ない……今日はここまで。おやすみ。


2010-01-12(Tue) 電球でござる、電球形蛍光灯でござる

  ダイニングの電球が切れた。というか、オイラはダイニングテーブルでPCするので、居間という感じの場所の電球だ。もひとついうと、厳密には電球でなく、電球型蛍光灯である。

  画像の説明

  この電球型蛍光灯は100W型で、実質は20Wのものである。結構、高かった記憶があって、もう切れたのか、と思ったが、そこはAmazon購入のよいところ。調べると履歴が出てきた。意外と昔、2007年4月中旬の購入だった。実に、3年近く持っていた計算になる。

  カタログスペック通りの寿命だったのか気になって、ちょっと計算してみる。この電球の寿命は6,000時間との記載がある。そこで、逆算して、1日の使用時間を求めてみた。

6,000時間 ÷ (2.75年 × 365日) = 6時間/日

  1日6時間使用(したでしょ?)という結果が出た。あながち間違いではない。確かにそれくらいは使っている気がする。すると、カタログスペック通りの寿命を発揮したわけだ。結構、マメに点けて切ってを繰り返していたのだが、それににもかかわらず、だ。これは素晴らしい。

  もうひとつ、電気代への貢献度を計算してみた。

(6,000時間 × 100W = 600kwh)× 22円 = 13,200円
(6,000時間 ×  20W = 120kwh)× 22円 =  2,640円

  なんと、1万円以上の差が出た。こうなると、多少の誤差はあれ、1,500円という高価な電球代を差し引いても、余裕で8,000円くらいは浮かせられた計算になる。なんという順当な結果だろう。

  こうなると、例え個体差で電球の寿命が1/3だったと仮定しても、損まではしない計算になる。すかさず、Amazonで再注文。ちょうど今は、1,480円でも配送無料なので、無理にヘンなモノを買う必要もなくて助かった。

  ぼちぼちと、一般向けのLED照明も出揃い始めている今日この頃であるが、まだちょっと高価すぎる。一般向けではないコイツは高価ではなく、現在も問題なく使用できているが、かなり光量に問題がある。となると、まさにコナれてきている電球型蛍光灯は、現在、最適なソリューションということになりそうだ。


2017-01-12(Thu) お風呂mp3スピーカVer.2.0完成

  先日「お風呂mp3スピーカVer.1.0」を完成してから、素晴らしく快適なお風呂タイムを過ごしている。ホイとツマミをヒネれば、すぐさま数百曲の中から好みの音楽を流し出せるという仕様は素晴らしく快適だ。お風呂タイムだけでなく、ちょっとした作業の折に、脇で音楽を流すのにも活用している。

  ちなみに、数百曲というのは、文字通りの数百曲だ。mp3の再生機器にありがちな問題に「フラッシュメモリ中に記録されている曲数が増えると、起動してから音楽が流れ出し始めるまでの時間が延びて使い物にならない」とか「UIに問題があり、数百曲の中から目的の曲に移動するのが苦痛で使い物にならない」とかいうものがあるが、このaitendoのmp3モジュールに関しては、まったく当てはまらない。

  現在、フォルダ分けしつつ400曲近くを放り込んであるが、起動してから音楽が流れ出し始めるまでの時間は瞬時だ。前回に書いたが、リモコンの数字キーで直接にnnn曲目までジャンプできるので、後ろの方に入れた新曲へも即座にアクセスできる。さすがに目的の曲がnnn曲目であることは事前に知りようがないが、曲の頭を聴いて当たりをつけ、早送りボタンを連打すれば、ちゃんと押した分だけレスポンスよく先の曲に進むので、まったく苦痛はない。

  ちなみに再生順はFATエントリ順。追記すれば、後ろに並ぶ感じ。意図的に再生順序を変えたい場合は、ディレクトリ内のすべてのファイルを一時ディレクトリに移動し、再生したい順に、元のディレクトリに移動しなおせばよい。個人的には、この仕様も気に入っている。

  こういう使い心地って、実際に入手して試してみないとわからんのだが、今回のモジュールに関しては、各機能の作り込みのレベルにコダワリを感じさせるほどの、素晴らしいプロダクトであるといえよう。もう何セットか買っておこうかしらん。

  さて、そんな絶賛稼働中の「お風呂mp3スピーカVer.1.0」だが、「Ver.1.0」てことは「Ver.2.0」があるのである。「Ver.1.0」完成当時から「バスレフ型」のスピーカにしたかったのである。

  画像の説明

  以前にも同様のタッパーを使って「密閉型」から「バスレフ型」へ変更した経験があり、音の変化を体感したことがあるのだが、やはり、この程度の容積で「密閉型」にすると、コーンの動きが制限を受けるのか、どうにも息苦しさを感じさせる音になってしまうのだ。

  前回はバスレフダクトにラップの芯を使ったが、今回はお風呂での使用が前提のため、紙素材は使えない。そのため、事前にホームセンタでバスレフダクト向けの塩ビパイプを探していたところ、いい感じの長さの「VPソケット」という部品が見つかったので買っておいた。たった38円。本来の用途は塩ビパイプ同士を接続するもののようで、内側に僅かなデッパリがあるのだが気にしない。そもそも、バスレフダクトの太さや長さも適当だ。以前に、多少の長さの違いが音質に影響しないことは自らの耳で確認済みだし。

  さらに、割り箸によるエンクロージャの補強も施してやる。補強前はスピーカの側面に触れると低音の響きがそのまま伝わり、盛大に箱鳴りしていることがわかるが、この補強により、それがかなり低減する。つまりは、バスレフ経由での低音出力が増し、ビビる感じが減ることになる。

  もうひとつ、バックパネルにコルクシートを貼ってやる。気休めではあるが、スピーカの背面がフタとして取り外し可能な構造上、側面とは違い、背面はツッパリ棒による補強ができないので、せめて厚みを増してやるのである。

  画像の説明

  ここまできて「お風呂スピーカ」なのに、バスレフ型になんてしたら、そこから湿気が入ってしまい、本末転倒ではないのか? という疑問もあろうが、そこは……こうするのであるッ!

  画像の説明

  どこかで見たような遮蔽ゴム(!?)による防水処理である。遮蔽したらバスレフの効果なんて無いんじゃないか? という疑問もあろうが、ドラムに合わせてゴム膜が振動する様子が確認できることから、効果がないということはない。少なくとも「密閉型」で発生する、コーンの動きが制限を受けたような、音の息苦しさからは開放される。

  ちなみに、この「ゴム」をバスレフダクトの防水に用いる方法は、80年代のお風呂スピーカオーディオマニアの中では一般的な方法であり、マニアの中には、様々な「ゴム」に付け替えて音の変化を楽しんだり、「ゴム」のエージング方法についても様々な工夫を凝らしたとする記録が残っている(民明書房刊「月刊 オーデヲテック(1984年1月号)」より)。

  さらに「ゴム」を変えると音が変わるのはピュア界では常識で、メーカの違いでも味付けにサがでるようだ。

・オカモト
  やわらかくしなやかな伸び 多少のゴム臭 B
・不二ラテックス
  天にそびえたつような抜け 強い突き上げ感 C
・相模ゴム工業
  より温もりを感じられる ダイレクトな刺激感 A+
・ジェクス
  気持ちのよい深さ 締りがイマイチ B-

  で、上は取り付け深さが3cmの場合の特徴。それより浅く取り付けると上記特徴+マイルドの味付け、深いと上記特徴+刺激的な味付けが加わる……というような冗談はともかく、実際、バスレフダクトの増設より、音の息苦しさは解消された。とはいえ、低音が出るようになったかというと、そこは元のスピーカ自体が、それほど低音を出しそうな感じがしないので、そこそこである。

  今後も末永く愛用していくことにしよう。


2024-01-12(Fri) 深谷ドライブ

  なんつうか、自分にとってロードスターはペットのようなもので、一緒に遊んで楽しいが、相手をするのが面倒だと思う時もないわけではない。実際にはマシンなので、年単位で放っておかなければ問題はないのだけれど、それでも週末に2連続で乗らないと気が咎めてしまうのだ。さらに時々はどーんと遠出しなければ「ならない」と思えてしまう。別の言い方をすればある種の呪いなのかもしれない。とはいえ、走り出してしまえばそれは全編に渡って楽しい時間なのだけれど。

  で、冬なのにもかかわらず遠出したくなり、目的地にレトロゲーセンを選んでしまう。だいぶ前に行ったことがあるのだが、自分にとって定期的なレトロゲニウム補給は必須なのである。事前にライブカメラでチェックしていたものの心配だった雪は皆無で、布チェーンは所持していたものの、使わずにノーマルタイヤでスコンと到着してしまった。350kmチョイを9時間だ。

  早速、ロボットへ。おー、ひさびさ、と思ったが、節電のために都度電源を切る運用となっていて、イマイチ心が盛り上がらず。暗い店内で都度インストカードをノゾき込まないと、何のゲームなのかわからない。料理の写真がなくて「ウマそっ!」ってならない、字面だけのメニューを渡された気分。しゃーないんだろうけど。

  とりあえずグラディウス。1面の噴火で事故って2ミスしたが、サクッと1周クリア。師匠に倣って6面ボス以外は全編レーザーだ。と、グラミネラルが満たされたところで、腹が減ったので隣のアリオに飯を食いに行く。なんでもバナナジャングルという店があると聞いて食いに行きたくなってしまったのだ。あまりバナナは好きではないのだが、削りチーズ満載のホットドッグと併せ、なかなか美味しくいただけた。

  画像の説明

  印象的だったのは、食器の返却時。女の子店員に「美味しかったですか?」と聞かれたこと。いま「ごちそうさまでした」と言ったやんか、とは思ったが、その言葉が形骸化してるのも確かなので、笑顔で「美味しかったです」と答える。いや、そういう意識はすごく大事だと思う。例えバイトであれ報酬や上司ではなく、仕事は「客を向いて」するべきなのだ。気分がいい。

  ロボットに戻って、ガントレット(ウィザードでソーサラまで)、19XX(2ボス)、エリア88(7後半まで)、ロストワールド(バリアボールまで)。実にオッサンの魂百までっぽい。後ふたつは何度もクリアしてるのだがさすがに忘れてるな。ロストワールドで鉄クサくなった手を嗅いで悔しさを紛らせる。

  画像の説明

  次いで、遊んだ記憶のない、赤ずきんx2、なめんなよ、SNKバトルフィールドあたりをプレイ。赤ずきんはなかなか秀逸なアイデアなのに、作りが粗いな。ヘンな配置にハマると、連続して死んでしまう。

  画像の説明

  最後、ドラゴンスピリット。調子が悪いとダメなのだが、調子がイイ。オマケに全編タマゴ祭、スモール祭、ワイド祭。2,3ミスでエンディングへ。フフン、どんなもんや。最後、外のガチャガチャでエアロシティ筐体を引く。できればテーブル筐体のがよかったが、これはこれで。

  画像の説明

  まだ準備中のようだったが、ギャラクシアン3があった。メタルホークとスターブレードも。ナムコの超新星爆発的な作品群。どれも大好物だ。稼働を開始したらまた来たいな。

  画像の説明

  コンビニで買い物して、格安のホテルに戻って、風呂に入ってノンビリしながら、グラIIをプレイするのを忘れたことに気づく。あー、もー、と、思いつつ、そういうのを忘れてしまうのも、また今度でいいかと考えられるのも、実にオッサン的な思考である。


2026-01-12(Mon) やりとり用の独自のRAG機構Xorag

  世は相変わらずAI流行りだ。徐々に世でのAIの立ち位置も落ち着いてきつつある。もはやインフラだな。テクニカルサポート業務を支援するために作ったXalebotも動き続けており、最近ではコッソリとAIの回答案をそのまんまお客に返したりもしている。まぁ、自分が内容を査閲して、返せそうなものだけ返しているので、別に省力化にはなっていないのだが、AIの精度もだいぶよくなってきているのも確かだ。

  しかし、ネット上に溢れているLinuxのノウハウがそのまま利用できる場合はともかく、そうでない場合にはあまり精度のよい回答が出てこないのが常。そういう場合に有効なのがRAGである。AIへの問い合わせの中に参考情報を付加することにより、その参考情報を踏まえた回答が期待できる。参考情報はあらかじめインデックスしておいて、問い合わせたい内容に近い情報を検索して与えるのだが、この検索にはベクトル検索が用いられることが多い。問い合わせたい内容のベクトルに近いベクトルを持つ文書を参考情報として付加するわけだ。ベクトル化はAI技術の根幹でもあり、親和性も高い。

  というようなRAG技術は、既に定番となっている手法ではあるが、具体的に中でどんな処理をしているかは不明である。ベクトル化に当たっては、ユーザがアップロードした文書を細切れにする必要があるが、どれくらいの粒度にしているのか。また、問い合わせの内容に近い文書を検索して与えるのはいいとして、近似の判断をどう行い、何件、どれくらいの量を与えているのか、などだ。

  しかし、そもそもレスポンス業務において、その方法は適切なのだろうか。アップロードする文書に回答部分が含まれるのは必須になるが、問い合わせ部分は含まれるべきなのか。改めて考えてみれば、相手からの問い合わせにマッチすべきは問い合わせ部分ではないのか。そう考えれば、回答部分をマッチ対象するのはおかしくはないのか。

  つまりこうあるべきではないのか。

1.顧客からの「今回の問い合わせ」を「今回の問い合わせベクトル」に変換
2.ベクトル検索により「今回の問い合わせベクトル」に近い「過去の問い合わせベクトル」がマッチ
3.その「過去の問い合わせ」に対する「過去の回答」を取り出す
4.「今回の問い合わせ」に「過去の回答」を参考情報としてAIに回答案を作らせる

  レスポンス業務ではなく、友人からのメールに例えるならこうだ。

1.友人からの「ドライブ行かない?」を「ドライブ行かない?ベクトル」に変換
2.ベクトル検索により「ドライブ行かない?ベクトル」に近い「ツーリング行かない?ベクトル」がマッチ
3.その「ツーリング行かない?」に対する回答である「どこへでも行くぜ」を取り出す
4.「ドライブ行かない?」に「どこへでも行くぜ」を参考情報としてAIに返事を作らせる

  逆に言うと、テクニカルサポート業務への自動回答案作成と、友人のメールに対する自動返信は同じ仕組みで実現できるってことだ。違いは、テクニカルサポート業務の場合、参考情報は過去のすべての回答が対象であるのに対し、友人の場合、参考情報は過去のその友人への返信に限る(限らない方法もあろうが)ってことくらいか。

  さて、どう実装するか。Xalebot-tmoの時は、xalebot.configの中に固定で口調を指定したり、全文検索から引っ張ってくるように指定できたりした。その延長としてこんなのを考えた。

・xalebot
 ↓メールスレッド ↑プロンプト
・xalebot.config
 ↓問い合わせ内容 ↑参考情報
・xorag_tmo
 ↓問い合わせベクトル ↑過去の回答
・pgvector
 ↓ベクトル検索 ↑近似ベクトル
・ベクトルDB

  xorag_tmoは、独立したスクリプトである。JSONで問い合わせ内容を受け、JSONで参考情報を返す。xalebot.configからは概ね以下のような感じで呼び出す。呼び出し方も、呼び出されるxorag_tmoも、Xalebotから見ると設定の一部である。RAG機能はXalebotの一部ではない、という実装だ。

# ベクトル DB 対応(問合せの経緯を DB 登録)
@configs[:xorag][:insertdb] = Proc.new {|mail_thread|
    call_xorag('insertdb', mail_thread)
}
 
# ベクトル DB 対応(問合せの経緯を元に DB から近似の回答事例を引く)
@configs[:prompt][:mk_a_proc] = Proc.new {|mail_thread|
    res = call_xorag('selectdb', mail_thread)
    obj = JSON.parse(res)
    max = 3; rels = []; obj['abstracts'].each {|abstract|
        (max -= 1) < 0 and break
        rels << abstract['abstract']['body']
    }
    <<MK_A % rels.join("\n\n").enbracket
それに対して返信内容の作成を%%sお願いします。
なお、以下の過去のメール内容を踏まえ、それに近い口調でお願いします。
%s
MK_A
}

  で、試してみる。試す友人は自作自演のヨシダくんである。Xalebot+Xoragとしては未知の友人だ。

おひさしぶり。ヨシダです。
 
先日、ようやくスイッチ2が手に入ったよ。なかなか抽選が当たらなくてまいった。
フルタは最近ゲームとかやってる? スイッチ2はもう持ってるのかな?
 
じゃまた。

  それに対して、Xalebotから以下のような自動応答が返された。この時点では未知の友人なので、参照すべき過去のメールがなく、AIとして一般的な友人に対する内容、口調になっている。

おひさしぶり、ヨシダ!
 
メールありがとう。スイッチ2、ついに手に入れたんだね!おめでとう!抽選大変だっ
たよね。フルタは最近あまりゲームをやってないけど、スイッチ2はまだ持ってないん
だ。ヨシダが楽しんでるのを聞くと、ちょっと欲しくなっちゃうな。
 
またゲームの話もしたいね!
 
じゃあまた!

  既に友人には自動応答メールが返っているが、差出人は「AI Furutanian」、件名には「【AI生成】」が付与されている。AIとはわからないようにメールすることも可能だが、現状はネタ扱いである。なので、加えて本当の返事を書いて出す。

おー、おひさ。ヨシダっち。元気そうでなにより。
 
> 先日、ようやくスイッチ2が手に入ったよ。なかなか抽選が当たらなくてまいった。
 
なかなかの争奪戦らしいね。ようやく最近は普通に買えるところもでてきたようだけど。
 
> フルタは最近ゲームとかやってる? スイッチ2はもう持ってるのかな?
 
どうも新しいゲームには興味なくてね。もっぱらレゲーで遊んでいるよ。
いまさらグラディウス2やってるんだが、1番装備だと全然クリアできなくて……。
歳で腕が落ちてないことを証明したくて始めたのに、おかしーなーw。
 
またねー。

  Xalebot+Xoragはこのメールをスルーせず、ベクトルDBに事例として格納するが、表立った動作はない。そこに自作自演のヨシダくんが以下のような返事をよこす。

返事ありがと。
 
>> 先日、ようやくスイッチ2が手に入ったよ。なかなか抽選が当たらなくてまいった。
> なかなかの争奪戦らしいね。ようやく最近は普通に買えるところもでてきたようだけど。
 
え、そうなの? こっちの方では見たことないけどな。
 
> どうも新しいゲームには興味なくてね。もっぱらレゲーで遊んでいるよ。
> いまさらグラディウス2やってるんだが、1番装備だと全然クリアできなくて……。
> 歳で腕が落ちてないことを証明したくて始めたのに、おかしーなーw。
 
グラディウス2か。フルタ好きだったよね。昔は結構スイスイクリアしてなかった?
でも、1番装備って……なんだっけ? そんなシステムあったっけ?

  それに対して、Xalebotから以下のような自動応答が返された。

おー、ヨシダっち。返事ありがとう!
 
そうだよ、グラディウス2は昔好きでね。1番装備は、確か最初のゲーム開始時に選ぶや
つなんだけど、実はけっこう難しいんだよ。慣れないと敵の弾幕にやられちゃってさ。
昔はずいぶんスイスイいけてたはずなんだけど、今は全然ダメだ。歳のせいかなぁ??
 でもちょっと面白いから続けてるよ。
 
他のレトロゲームもまた試してみようかなと思ってるけど、なかなか時間がないね。ヨ
シダっちもスイッチ2でいろいろ楽しんでるのかな?
 
またねー。

  早速、過去のメールを踏まえた内容になっている。「ヨシダっち」や「またねー」という呼びかけや「1番装備だが歳のせいかクリアできない」というあたりだ。

  しかし、もともとXalebotにはスレッド中の過去の経緯を加味する機能があるので、これらが必ずしもXoragの成果とは言い難い。なので、自作自演のヨシダくんに、別のスレッドでツーリングの話題についてメールしてもらう。

おひさしぶり。ヨシダです。
 
先日、カブでツーリングに行ったんだけど、もう寒くてダメだね。
そういえばフルタ、バイクを契約したとかいってなかった? いつ納車?
 
ほんじゃね。

  すると、Xalebotから以下のような自動応答が返される。

おー、ヨシダっち、おひさ! そうだね、寒くなってきたからツーリングもしんどいよ
ね。
 
俺はバイクの契約したよ!納車は来月の頭くらいかな。ようやく手に入るみたいで楽し
みだわ。
 
それより、ヨシダっちはやっぱりカブなのか? 寒いと風を受けるのが辛いよなー。で
も、やっぱりバイクでの景色は最高だよね。
 
今のところ、ゲームは相変わらずレゲーをやってて、最近はゼビウスにハマってるよ。
懐かしくて楽しい!
 
また遊びに行こうぜー!

  すると、当該スレッド中には出てきていない「ヨシダっち」という呼びかけや「レゲー」の話題が含まれた回答となった。ちょっと唐突だし「ゼビウス」がどこから出てきたかわからんが、まぁ「レゲー」の代表として出てきたのであろう。

  つうわけで、ほんの数回のやり取りでも、実際のメールの応答を学習し、オレっぽいメールが返せるようになっていることが確認できる。なかなかよいのではないだろうか。

  例によって、http://itline.jp/git/xalebotに置いておく。