Open3

「Arch」を試す

kun432kun432

GitHubレポジトリ

https://github.com/katanemo/arch

ARCH: インテリジェントなプロンプトゲートウェイ

高速で堅牢かつパーソナライズされた生成AIアプリ(エージェント、アシスタントなど)を構築

Archは、APIを使用してLLMアプリを保護、監視、パーソナライズするために設計されたインテリジェントなLayer 7ゲートウェイです。

Archは、特定の目的に合わせて設計されたLLMを搭載しており、プロンプトの処理や取り扱いに関連する重要だが差別化されないタスクを担当します。これには、脱獄試行の検出と拒否、プロンプトで表現されたユーザーのリクエストを実行するために「バックエンド」APIをインテリジェントに呼び出すこと、上流のLLM間でのルーティングや災害復旧の提供、プロンプトおよびLLMのやり取りを集中管理する観測機能の管理が含まれます。

ArchはEnvoy Proxy上に構築され、(そしてその主要なコントリビュータによって開発され)、次の信念に基づいています。

プロンプトは、従来のHTTPリクエストと同様に、セキュアな取り扱いやインテリジェントなルーティング、強力な観測機能、パーソナライズのためのバックエンド(API)システムとの統合が必要な、微妙かつ不透明なユーザーリクエストである。

主な機能:

  • Envoyベースの構築: Archはアプリケーションサーバーと並んで稼働し、プロンプトおよびLLMに関連するトラフィックの入り口と出口を管理するために、実績のあるEnvoyのHTTP管理およびスケーラビリティ機能を活用します。
  • Function Callingによる高速なエージェントおよびRAGアプリの構築: 特定の目的に合わせて設計されたLLMを搭載し、関数/API呼び出しやプロンプトからのパラメータ抽出といった、プロンプトベースのタスクを高速かつ低コストで正確に処理します。
  • Prompt Guard: Archはプロンプトのガードレールを集中管理し、コードを1行も書くことなく脱獄試行を防止し、安全なユーザーインタラクションを保証します。
  • トラフィック管理: ArchはLLM呼び出しを管理し、スマートなリトライ、自動切り替え、継続的な可用性を確保するための強靭な上流接続を提供します。
  • 標準ベースの観測性: ArchはW3C Trace Context標準を使用して、アプリケーション間での完全なリクエストトレーシングを実現し、観測ツールとの互換性を確保します。また、レイテンシー、トークン使用量、エラーレートを監視するメトリクスを提供し、AIアプリケーションのパフォーマンス最適化を支援します。

ドキュメントにアクセスして、Archを使用して生成AIアプリの速度、セキュリティ、パーソナライズを向上させる方法を学びましょう。

公式ドキュメント

https://docs.archgw.com/

kun432kun432

Quickstartに従って進めてみる。今回はローカルのMacで。

https://docs.archgw.com/get_started/quickstart.html

https://github.com/katanemo/arch?tab=readme-ov-file#quickstart

まず作業ディレクトリ+Python仮想環境を作成。自分はmiseを使っているが適宜。

$ mkdir arch-work && cd arch-work
$ mise use python@3.12
$ cat << 'EOS' >> .mise.toml

[env]
_.python.venv = { path = ".venv", create = true }
EOS
$ mise trust

archをインストール

$ pip install archgw
$ pip freeze | grep -i archgw
archgw==0.0.3
archgw_modelserver==0.0.3
$ archgw --help
Usage: archgw [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  build                    Build Arch from source.
  down                     Stops Arch.
  download-models          Download required models from Hugging Face Hub...
  generate-prompt-targets  Generats prompt_targets from python methods.
  logs                     Stream logs from arch services.
  up                       Starts Arch.

archの設定ファイルを用意する。設定ファイルの主な項目は以下の6つ。

  • endpoints: Archがプロンプトを受信するエンドポイントを指定する。
  • system_prompts: インタラクションのコンテキストを設定するための、事前定義プロンプトを定義する。
  • llm_providers: ArchがプロンプトをルーティングできるLLMプロバイダーのリストを指定する。
  • prompt_guards: 不適切なプロンプトを検出し拒否するためのルールを設定する。
  • prompt_targets: 特定の種類のプロンプトを処理するエンドポイントを定義する。
  • error_target: エラーを処理するためにルーティングする場所を指定する。

でQuickStartの設定内容でそのまま進めるとこんな感じで動かない。Issueを探してみるとこんなのがあった。

Validating /Users/kun432/work/arch-work/arch_sample.yaml
Error validating arch_config file: /Users/kun432/work/arch-work/arch_sample.yaml, error: Additional properties are not allowed ('listen' was unexpected)
Exiting archgw up: Additional properties are not allowed ('listen' was unexpected)

https://github.com/katanemo/arch/issues/221

どうもGitHubのREADMEやドキュメントの更新が追いついていない雰囲気がある。

Issueのコメントにあるように、デモが複数用意されているので、こちらを見てみるのだが、

https://github.com/katanemo/arch/tree/main/demos

いい感じのデモがないんだよねぇ・・・いろいろ動かさないといけないっぽい。まずはサラッと仕組みを理解したいだけなんだけど、どうしたもんかなぁ・・・・

kun432kun432

ちょっとドキュメントを色々見てみた。

https://docs.archgw.com/concepts/tech_overview/terminology.html

上のページにあるようにarchはアプリケーションの前後(どちらかだけもできるようだし、両方もできるっぽい)で使うようなものになるっぽい。


referered from https://docs.archgw.com/concepts/tech_overview/terminology.html

また、以下のページでも、

https://docs.archgw.com/concepts/tech_overview/request_lifecycle.html


refered from https://docs.archgw.com/concepts/tech_overview/request_lifecycle.html

こんな感じで、コンポーネント間に挟むようなこともできるみたい。

なるほど。となると、用意されているデモがどういう構成なのかを事前に確認してから、試したほうがいいかもしれない。