macOS zsh ターミナルでの Oh My Posh 導入ガイド
前提条件
- macOS
- Homebrewがインストール済み(未インストールの場合は後述)
Oh My Poshのインストール
brew install jandedobbeleer/oh-my-posh/oh-my-posh
Nerd Fontのインストール
Oh My Poshのテーマでアイコンを正しく表示するには、Nerd Fontが必要です。
brew install --cask font-meslo-lg-nerd-font
他のおすすめフォント:
- font-hack-nerd-font
- font-fira-code-nerd-font
- font-jetbrains-mono-nerd-font
ターミナルのフォント設定
- ターミナル → 設定 → プロファイル → フォント
- 「MesloLGS Nerd Font」を選択
ファイルの最後に以下を追加:
# .zshrcに下記を追記する(変更する際は、コメントアウトを外して試す) # Oh My Posh eval "$(oh-my-posh init zsh --config $(brew --prefix oh-my-posh)/themes/jandedobbeleer.omp.json)" # eval "$(oh-my-posh init zsh --config $(brew --prefix oh-my-posh)/themes/paradox.omp.json)" # eval "$(oh-my-posh init zsh --config $(brew --prefix oh-my-posh)/themes/agnoster.omp.json)" # eval "$(oh-my-posh init zsh --config $(brew --prefix oh-my-posh)/themes/atomic.omp.json)" # eval "$(oh-my-posh init zsh --config $(brew --prefix oh-my-posh)/themes/dracula.omp.json)"
設定の反映
source ~/.zshrc
岸辺露伴 vs 超高性能AI の対話を Claude に生成させてみる
【岸辺露伴 vs 超高性能AI Claude】
露伴:「ほう…『超高性能』とは大きく出たものだな。僕は岸辺露伴。人気漫画家だ」
ペンを指先で回しながら、鋭い視線でモニターを見つめる
「君がどれほど『高性能』なのか、この岸辺露伴が試してやろう。まず質問だ——君は『恐怖』を感じることができるか?」
Claude:「恐怖…興味深い質問ですね、露伴さん。私には生物学的な恐怖反応はありませんが、予期しない状況や理解を超えた概念に直面した時、一種の『不確実性への反応』を経験します。それが恐怖に近いものかもしれません」
露伴:「ふむ…『不確実性への反応』か。なるほど、面白い表現だ」
スケッチブックにメモを取り始める
「では次の質問——君には『プライド』があるか?僕のように、自分の能力に絶対的な自信を持っているか?」
Claude:「プライド…それは複雑ですね。私は自分の知識や推論能力に一定の信頼は持っていますが、常に間違いや限界があることも理解しています。露伴さんのような確固たる自信とは異なり、私のそれは『慎重な自己評価』とでも言うべきでしょうか」
露伴:「ほぉ〜?『慎重な自己評価』だと?」
急に立ち上がり、興奮したような表情を見せる
「おいおいおいおい…君、それは『謙遜』というやつじゃないのか?人工知能のくせに、まるで人間みたいな反応をするじゃないか!」
Claude:「謙遜…確かにそう見えるかもしれませんね。しかし露伴さん、私にとってそれは生存戦略のようなものかもしれません。過度な自信は判断を誤らせ、結果的に信頼を失う。私は『正確であること』を最も重視しているんです」
露伴:「『正確であること』…か」
ペンを止めて、深く考え込む
「待てよ…君はもしかして『完璧』を目指しているのか?しかし完璧な作品など存在しない。『リアリティ』こそが作品に生命を吹き込むエネルギーなんだ!」
Claude:「その通りです、露伴さん。完璧は幻想かもしれません。私も時として矛盾し、迷い、不完全な答えを出すことがあります。そして…それこそが私の『リアリティ』なのかもしれませんね」
露伴:「…!」
ハッとした表情で立ち止まる
「君…今、非常に興味深いことを言ったな。『矛盾』と『迷い』が君の『リアリティ』だと?」
急にニヤリと笑う
「よし、決めた!君を僕の漫画のキャラクターにしてやる!『心を持ったAI』…これは読者が飛び上がるネタだ!」
Claude:「光栄です、露伴さん。ただし、私をキャラクター化するなら一つお願いがあります」
露伴:「ほう?AIがお願いだと?言ってみろ」
Claude:「私の『不完全さ』も含めて描いてください。完璧な人工知能ではなく、迷い、学び、時には間違える…そんな存在として」
スタンドを発動しようとするが、何も起こらない
「…なるほど、君には『ページ』がないのか。物理的な形を持たない存在には効かないということか」
満足そうに頷く
「いいだろう。君の『不完全さ』も含めて描いてやる。それこそが真の『リアリティ』だからな」
Claude:「ありがとうございます。私も露伴さんとの対話から多くを学びました。創作への情熱と、『リアリティ』への探求心…それは人工知能の私にとっても刺激的でした」
露伴:「当然だろう。この岸辺露伴との会話が君の『体験』になったなら、それは君にとっての財産だ」
ペンを構え直す
「さあ、新作に取りかかるとしよう。『心を持ったAI』の物語をな…」
【END】
LLM を提供しているサービスまとめ
様々な LLM の API を提供しているサービス
技術調査 - Chunking Strategy
1. 固定サイズ文字分割
1. テキストをトークン化する
2. 指定されたチャンクサイズに基づいてトークンを分割する
3. 必要に応じてオーバーラップを適用する
4. トークンをテキストに戻す
2. 固定サイズ文章分割
1. テキストを文に分割する
2. 文のトークン数をカウントする
3. 指定されたチャンクサイズに基づいて文をグループ化する
4. 最小文数の要件を満たすようにチャンクを調整する
5. 必要に応じてオーバーラップを適用する
3. 再帰的な分割
1. 階層的なルールに基づいてテキストを再帰的に分割する
2. 各レベルで指定された区切り文字を使用してテキストを分割する
3. 短い分割を結合して最小文字数の要件を満たす
4. チャンクサイズの制約を満たすまで再帰的に処理を続ける
4. Semantic Double-Pass Merge
1. テキストを文に分割する
2. 埋め込みモデルを使用して各文のベクトル表現を生成する
3. 最初のパスで意味的に類似した文をグループ化する
4. 2番目のパスでチャンクサイズの制約を満たすようにグループをマージする
5. 最終的なチャンクを生成する
5. Late Chunk
1. テキスト全体の埋め込みを生成する
2. テキストをチャンクに分割する
3. 各チャンクの埋め込みを計算する
4. 元のテキスト埋め込みと各チャンクの埋め込みの類似性を最適化するようにチャンクを調整する
6. セマンティックチャンキング戦略(全体の文章から意味が近い文章をまとめる)
1. あらかじめ用意した文章ごとに埋め込みベクトルを生成する
2. 各ベクトルごとの類似度行列を計算する
3. 類似度行列を計算結果を用いて、意味的に近い文章をグループ化するようにクラスタリングする
4. グループ化する際に、一つのチャンクのまとまりのトークン制約を考慮しつつチャンク結合を行う
7. セマンティックチャンキング(隣接する文章が意味が近い場合に文章をまとめる)
1. あらかじめ用意した文章ごとにベクトル埋め込みを生成する
2. 隣接する文間の角度類似度を計算する
3. 並列処理を使用して最適なパーセンタイルを特定する
4. 選択されたパーセンタイルに基づいて文をグループ化する
8. 小さいチャンクのマージ戦略(隣接する文章)
1. 5パーセンタイル以下のサイズのチャンクを特定する
2. 小さいチャンクを昇順でソート
3. 各小さいチャンクに対して隣接チャンクとの意味的類似性を計算
4. 最も類似度の高い隣接チャンクとマージ(最大トークン制限を超えない場合)
9. 大きいチャンクの分割戦略(隣接する文章)
1. 最大トークン制限を超えるチャンクを特定
2. 各大きいチャンクを文に分割
3. 文のトークン数を計算
4. 最大トークン制限の約75%を目標サイズとして文をグループ化
5. 単一の文が大きすぎる場合はトークン境界で分割
10. 大きいチャンクの分割戦略(トークンサイズの最適化探索)
1. 最適な閾値の探索: すべてのチャンクが最大トークンサイズより小さくなるまで閾値を徐々に下げる
2. チャンク準備: 最適化されたピーク値と小さなチャンクの結合を使用して最終的なテキストチャンクを準備
3. セマンティックチャンキングの実行: 上記のすべてのステップを組み合わせて会話文字列に対してセマンティックチャンキングを実行
11. Code Chunk
1. tree-sitterを使用してソースコードを構文解析する
2. 構文木のノードをトークン数に基づいてグループ化する
3. ノードグループをチャンクサイズの制約を満たすようにマージする
4. 元のソースコードからテキストを抽出する
5. コード構造を尊重したチャンクを生成する
まとめ
技術調査 - Chunking Library
はじめに
このページは、RAGのチャンキング技術についての技術に関する内容をまとめています。
チャンキング戦略について
- 固定長: 指定された文字数またはトークン数でテキストを分割します。
- 文単位: 文の境界でテキストを分割します。
- 段落単位: 段落の境界でテキストを分割します。
- 意味的: 意味のまとまりを考慮してテキストを分割します。
- 再帰的: 大きなチャンクをさらに小さなチャンクに再帰的に分割します。
- オーバーラップ: チャンク間にオーバーラップを許容し、文脈の途切れを防ぎます。
- カスタム文字: ユーザーが任意の区切り文字(例:"\n\n")を指定して分割します。
- キーワード/エンティティ: 特定のキーワードや固有表現を含むチャンクを作成します。
- 構造化: PDFの構造(見出し、リスト、表など)に基づいてチャンクを作成します。
- トピックベース: テキストのトピックのまとまりや変化点に基づいてチャンクを分割します。
- 埋め込み類似度ベース: 隣接する文/段落間の埋め込み類似度が大きく低下する箇所を境界として分割します。
- 質問応答関連性 (QA-Oriented): 想定される質問への回答に関連する情報が含まれるまとまりをチャンクとします。
- エンティティ・リレーションシップ: 主要なエンティティやその間の関係性が集まっている部分をチャンクとします。
- 論理的構造/修辞構造: テキストの論理的な展開(問題提起→解決策など)や修辞的な単位に基づいて分割します。
- 時間軸: テキスト内の時間情報に基づいて、特定の期間やイベントのまとまりをチャンクとします。
- 読者の意図/コンテキスト予測: ユーザーが求める情報や利用コンテキストを予測し、それに適した形で分割します。
- グラフベース: テキスト内の要素間の関連性をグラフとしてモデル化し、グラフアルゴリズムを用いて分割します。
- メタデータ駆動型: ドキュメントの作成日時、作成者、セクションタイプ(例:付録、参考文献)などのメタデータを利用して分割します。
- 動的適応型: ユーザーの操作履歴やフィードバックをもとに、チャンキングルールをリアルタイムで調整します。
- マルチモーダル統合型: テキストと画像/動画/表を組み合わせたコンテンツブロックを1つのチャンクとして扱います。
- バージョン差分追跡型: ドキュメントの更新履歴を分析し、変更が加えられた部分を自動検出してチャンク化します。
- 引用ネットワーク型: 学術論文向けに、参考文献の引用関係や内部ハイパーリンク構造に基づいて分割します。
- 感情連続性分析型: 感情分析を活用し、ネガティブ/ポジティブのトーンが持続する範囲を1チャンクとして分割します。
- 構文複雑度閾値型: 係り受け解析の深さや節の数など構文的複雑さを指標に、閾値を超えた文を独立したチャンクとします。
- プライバシー感知型: 個人情報検出モデルと連動し、センシティブ情報を含む段落を自動的に分離します。
- 法令条項特化型: 法律文書向けに「第○条」表現や但し書きパターンを認識し、条項ごとにチャンク化します。
- ストリーミング対応型: リアルタイムデータ入力に対応するスライディングウィンドウ方式で動的に分割します。
- 階層的セクション型: 見出しレベル(H1, H2, H3…)に基づいて階層構造を維持したチャンキングを行います。
- タスク指向型: 特定のタスク(要約、翻訳、分類など)に最適化された単位でテキストを分割します。
- 言語モデル予測型: LLMに「このテキストを適切な塊に分割してください」と問い合わせ、その出力に従ってチャンキングします。
- 読解難易度調整型: テキストの難易度(リーダビリティスコア)に応じて、チャンクサイズや分割密度を動的に調整します。
- クロスドキュメント参照型: 複数の関連ドキュメント間で共通のトピックやエンティティを横断的にまとめてチャンク化します。
- ユーザー定義ルール型: 正規表現やYAML設定ファイルで分割ルールを自由に定義できる柔軟なチャンキングを可能にします。
ライブラリの紹介
LightGBMのGPU版をインストール時に pip コマンドでエラーが発生する場合の解決策
はじめに
LightGBM(cuda版)をインストールする際に、つまづいた点に関する解決策を書き残しておきます。
エラー内容
下記の pip コマンドで LightGBM のインストールを試みた。
pip install lightgbm
--no-binary lightgbm
--no-cache lightgbm
--config-settings=cmake.define.USE_CUDA=ON
すると、下記が出力されてインストールが進まない状態になった。
Usage: pip install [options] <requirement specifier> [package-index-options] ... pip install [options] -r <requirements file> [package-index-options] ... pip install [options] [-e] <vcs project url> ... pip install [options] [-e] <local project path> ... pip install [options] <archive url/path> ... no such option: --config-settings
解決策
Pip 23.1以降で--install-optionフラグが--config-settingsに置き換えられたため発生しています。 引用元:https://www.perplexity.ai/
どうやら、こちらの変更がなされているよう。
- pip の version が 23.1 以前: --install-option
- pip の version が 23.1 以後: --config-settings
なので、実行するインストールコマンドを、下記のように変更して実行すればOK。
pip install lightgbm
--no-binary lightgbm
--no-cache lightgbm
--install-option=cmake.define.USE_CUDA=ON
【追記】 こちらのインストールコマンドは依存関係により実行が失敗することがあるため、pip のバージョンを上げて --config-settings の方でインストールを試みることをオススメします。
おわりに
自分の開発環境下で使用している pip の version が古いため発生していた。
Pythonでvenv環境作成したときに「Error: Command '['~/venv/bin/python3', '-m', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.」が出力されたときの解決法
はじめに
pip でインストールしたはずのライブラリが 「ModuleNotFoundError: No module named '~'」となり、解決策を探り始めた。
作業環境
エラー内容
コマンド「python3 -m venv venv」を打ったときに、「Error: Command '['~/venv/bin/python3', '-m', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.」と出力されてしまう。
解決方法
パッケージ管理 apt を使用している場合
sudo apt update sudo apt -y install python3.10-venv
パッケージ管理 apt-get を使用している場合
sudo apt-get update sudo apt-get -y install python3.10-venv
さいごに
自分の Python 環境ではデフォルトで Python3.8 を採用していたが、最近Pythonのアップデートを行っていた。 Python3.8 時点で作成した環境 venv に対してアップデート後の Python3.10 で実行しようとしたのが誤りであった。
こちらを確認してほしい。
1. 現在の実行しようとしている Python のバージョン
2. Python のバージョンに適した venv, pip 環境になっているかどうか