概要
CELでは評価式で扱う変数をEnvironment内で定義しますが、既存のデータモデルを使いたい場合は
- 同じ定義を都度作らないといけない
- 変更があった際の追従漏れが発生する
といった手間が発生してしまいます。
しかしそのデータモデルがprotobufで定義されていれば再利用することが可能です。
今回はその方法を紹介します。
環境
- go v1.22.1
- cel-go v0.20.1
CELでは評価式で扱う変数をEnvironment内で定義しますが、既存のデータモデルを使いたい場合は
といった手間が発生してしまいます。
しかしそのデータモデルがprotobufで定義されていれば再利用することが可能です。
今回はその方法を紹介します。
CELのキーコンセプトでは
と説明されていました。
主に管理ツール等で前者のControl Planeを実装し、オペレーターに自由に評価式を入力してもらいます。
Control PlaneではCheckも行われるので評価式がおかしければその時点でvalidationしてくれます。
そしてData Planeでは起動時にASTを読み込んで入力値を評価できるようにします。
今回は具体的に外部に保存する手順を説明します。
CEL(Common Expression Language)とは、Google によって開発された軽量で高速な式評価言語です。
そのシンプルさと効率性から、セキュリティポリシー、リソースフィルタリング、データ検証などに使われます。
例えばプロダクションでは以下のような利用例があります。
今回はCELの説明と簡単な使い方を紹介します。
LlamaIndexを使うと非常に簡単にRAG(Retrieval-Augmented Generation)を使った検索システムを作ることができます。
今回はLLMにない情報(PDF)をベクトル化して検索できる方法を紹介します。
Python自体もそうですが、LangchainやLlamaIndexはバージョン更新のたびに破壊的な変更が多くバージョンを固定しないと期待通りに動かないことが多いです。
先日の記事のように最初に開発環境を整えることを推奨します。少なくともvenvやvirtualenvのような仮想環境は必ず使いましょう。
続きを読むPythonはGoと違ってライブラリのdeprecatedや破壊的変更が多いため、環境やライブラリバージョンの固定が非常に重要です。
を使うことで、それらを固定してチーム内で安定した開発環境を構築できます。
Dev Containersのアーキテクチャはこのようになっています。
ref: https://code.visualstudio.com/docs/devcontainers/containers
続きを読む