投稿

オンプレミス環境でベクトル検索をしてみる(OpenSearch)

イメージ
Document オンプレミス環境でベクトル検索をしてみる(OpenSearch) 昨今、生成AIやLLMが話題ですが、より回答精度を上げる方法として RAG という言葉をよく聞きます。 RAG(Retrieval-Augmented Generation) とは、ざっくりいうと、FAQなどのデータをデータベースに格納しておき、ユーザーからのインプットに対して最適な回答をデータベースから抽出し、その回答をもとにLLMに文章を生成させることで、より正確に回答を生成できるようにする方法になります。 RAG用のデータベースでは、 ベクトル検索 という手法が主に使われており、入力されたキーワードを全文検索するのではなく、類似度で検索をする形式が多いようです。 今回は、このベクトル検索について触れていきたいと思います。ただ、AzureやAWSなどのクラウドサービスを使えば容易に実現できる思いますが、少し勉強しながら構築したいのでオンプレミス環境に導入していこうと思います。 なお、私はデータベースにそこまで詳しくなく、見様見真似で進めているので、間違った解釈があるかもしれませんがご容赦ください。 ただベクトル検索に興味のある方の参考になれば幸いです。 データベースの準備 今回ベクトル検索可能なデータベースとして、 OpenSearch を使ってみたいと思います。 クラウド環境では、 Elasticsearch や OpenSearch の名前をよく見ます。調べてもこのあたりのデータベースが良さそうという理由で採用します。 ちなみに、この Elasticsearch はOSSであったものの、色々商用問題などがあったようですね。。。 さっそく、 OpenSearch を導入していきたいと思います。 環境は、Ubuntu22.04です。 Javaをインストールする ...

CPUで処理できるLLM、BitNetを試してみる

イメージ
CPUで処理できるLLM、BitNetを試してみる CPUで処理できるLLM、BitNetを試してみる 近年、 LLM や 生成AI が流行っており、これらを導入するソフトウェアなどが増えてきました。 さらに、当初は企業のサーバに接続するAPI通信が主体でしたが、ローカル環境でも動作するモデルが出てきており、環境が整っている人であれば個人PC内でも実行できるようになりました。 しかしLLMの推論にはCPUでは処理が遅くGPUが必須となっていました。ゲーミングPCなどを持っている人であればある程度のスペックのGPUを持っているかと思いますが、そうでない人がほとんどかと思います。 そんな中、Microsoftは CPUでも処理できるLLMモデル を公開し、さらにGithubにも公開されました。 このあたりの専門ではないので詳細は省きますが、本来32ビットの浮動小数点数で表現するものを、1ビットで表現することでモデル容量を減らし、処理を高速化するもののようです。 モデルサイズが小さくなるので、どうしても精度低下は発生しますが、CPUでも処理をさせることができるようです。 今回はそんな BitNet をローカル環境で実行して、精度などを確認していきたいと思います。 ただし、まだ日本語には対応していなそうなので、英語のみでの確認になります。 なお、OSが異なりますが、動画でも手順紹介をしているので合わせて参考にしてみてください。 導入手順 早速導入をしていきます。基本的にはGithubのReadmeに従って準備をしていきます。 なお、今回は CentOS Stream9 の環境で構築します。 Pythonをインストールする まずはプログラミング言語である、 Python をインストールします...

MacOSと.Net MAUIでAndroid15をビルドする

MacOSと.Net MAUIでAndroid15をビルドする MacOSと.Net MAUIでAndroid15をビルドする .Net MAUI でアプリを作っている人は少数だと思うんですよね。。なのでこんな悩みをしている人は少ないかと思いますが、誰かの参考になれば。。 .Netと言えばWindowsでしたが、 Visual Studio for Mac があったので、Macユーザーでも.Netの開発ができていました。 しかし、Visual Studio for Macは2024/8/31に廃止になり、 VSCode にextensionを導入する形での開発スタイルに。。。 これにより、今まではVisual Studioで一括管理できていたSDKなどが、個別管理になってしまいパスの通し直しなどが発生しました。 これから.Net MAUIの環境を構築する人には関係ないものですが、今まで Visual Studio で構築していた人は新しく Android Studio をインストールし、SDKをインストールします。 ここで問題なのが、Visual StudioにおけるAndroidSDKの格納先は下記で、 $Home/Library/Developer/Xamarin/android-sdk-macosx/platforms Android StudioのAndroidSDKの格納先は下記のため、格納場所が異なります。 $HOME/Library/Android/sdk そのため、Android Studio経由でSDKをダウンロードをすると、Pathを更新しない限りはVSCodeでビルドしようとするとエラーになります。 ダウンロードが完了したら、下記コマンドを実行します。これでビルドする際に、Android StudioでダウンロードしたSDKを利用することができます。 Sudo dotnet build -t:...

.Net MauiでAndroidのEdgeToEdgeに対応する

イメージ
.Net MauiでAndroidのEdgeToEdgeに対応する .Net MauiでAndroidのEdgeToEdgeに対応する Androidアプリをリリースしている人であればご存知だと思いますが、アプリを公開しておくためには常に最新OSに対応しておかないといけません。 なので私も最新の Android15 に対応するべく、アプリ改修をしていたのですが、一つ問題が生じました。。 それは、 Android SDK35 でデフォルト設定になった EdgeToEdge です。 EdgeToEdge が有効になることで、端末の時刻などが表示されている画面上部までアプリ内容を表示できるようになる反面、しっかりアプリ側が対応していないとレイアウトの一部が被ってしまい、正常に動作しなくなってしまったります。 特に私は NavigationBar を表示させていることもあり、画面遷移後の戻るボタンが動作しなくなったり、ツールバーが押せなくなったりしてしまいました。 これに対応しないといけないのですが、使用しているフレームワークが .Net MAUI のため情報がほとんどなく苦戦したので対応方法を纏めようと思います。 EdgeToEdgeに対応する 調べていると色々な対応方法が紹介されているのですが、.Net Mauiに対応したものがなく、それっぽく記述しようとしてもコンパイルエラーになりました。 その中で最終的にうまく行った方法を紹介します。 結論として、かなり無理矢理感があり、NavigationBarの表示文字がカメラに被ってしまっているなどの問題もあるのですが、よければ参考にしてください。。 参考にしたサイト: こちら 下記のコードをPlatform/Android配下の MainActivity.cs に転記します。 public class MainAc...

Teamsでメンションされた際にToDoを作成する

イメージ
メンションされた際に、ToDoを作成する Teamsでメンションされた際にToDoを作成する みなさんは仕事などで Teams でやり取りをする機会が多いかと思います。 Teams には メンション 機能があり、グループチャットやチャネルにて宛先を指定し通知をさせることができます。 非常に便利な機能なのですが、多用されると通知がたまり、対応漏れ気が付かないケースが出てくるかと思います。 こういった対応漏れを防ぐために色々な対策をとっているかと思いますが、今回は私が実装している対策を紹介をしたいと思います。 方法としては、 PowerAutomate で対応フローを作成し、メンションされた際にToDoリストに追加するようにしています。 是非参考にしてみてください。 なお、動画でも同じ内容を紹介しているので併せて参考にしてみてください。 フロー紹介 それではフローを紹介していきます。 トリガー メンションされた際に起動するようにしたいので、トリガーはTeamsの「自分が@mentionされたとき」を選択します。 このトリガーでは詳細設定が必要になるので、設定をしていきます。 メッセージの種類 このトリガーは「グループチャット」と「チャネル」の2つから選択します。 今回は「チャネル」を選択します。 チーム ...

Pythonをオフラインでインストールする(Linux)

イメージ
Pythonをオフラインでインストールする(Linux) Pythonをオフラインでインストールする(Linux) 以前、 Node.jsをオフラインでインストールする(Linux) という記事を投稿していましたが、 今回は Python について、オフライン環境でインストールをする方法を紹介していこうと思います。 趣旨としては前回同様に、 インターネットに接続のできない環境 で資材インストールをする手順を纏めるものです。 通常はインターネット接続できるので不要ですが、仕事などで使うサーバーなどではよくあることだと思うので、よければ参考にしてみてください。 ちなみにインターネットに接続することができる環境でも、この方法を用いても問題はないです。 インストール手順 今回のオフラインインストールはLinux環境での内容です。 また資材のダウンロードはオンライン環境で実施するため、オフライン環境に資材を持っていく部分は各自の環境に沿って実施してください。 資材準備 まずは下記公式サイトにアクセスし、資材をダウンロードしてきます。 これはインターネットに繋がる端末で実施します。 ・ Download Python 「ダウンロード」の「すべてのリリース」から任意のバージョンを選択します。 今回は、 3.12.4 を選択し、「Files」の「XZ compressed source tarball」をクリックします。 資材転送 ダウンロードしたバイナリファイルをオフライン環境に持っていきます。 ...

OracleLinuxでDVDからモジュールをインストールする

イメージ
OracleLinuxでDVDからモジュールをインストールする OracleLinuxでDVDからモジュールをインストールする 最近 インターネットに接続できない環境 で、モジュールをインストールする機会が多くなっており、 毎回手順を忘れかけるので、備忘のため纏めておきたいと思う。 モジュールをオフラインでインストールする際には、rpmなどをインターネットから拾ってくる方法でもインストールできますが、 依存関係の解決がとても面倒で、可能であればインターネット接続環境のように yum install などで纏めてインストールしたいです。 そんなときに、OSをインストールした際のdvdデータがあれば、バージョンは限られますがそこからインストールをすることが可能です。 設定手順が必要になるので、後述していきます。 設定手順 今回はHyper-V上の仮想OSに対しての設定手順になります。 dvdへの向き先変更ファイルを作成 まずは向き先変更用のファイルを作成します。 sudo vi /etc/yum.repos.d/local-oel-dvd.repo 中身は下記になります。URL部分は各自マウントする場所によって変わります。 [local-oel-dvd] name=local-oel-dvd baseurl=file:///mnt/AppStream enabled=1 gpgcheck=0 [local-oel-dvd-baseos] name=local-oel-dvd-baseos baseurl=file:///mnt/BaseOS enabled=1 gpgcheck=0 デフォルトの向き先を無効にする ...