Carpe Diem

備忘録

CELでカスタム関数を使う

概要

CELは標準的な演算子や関数に加え、独自のカスタム関数を定義して機能を拡張することが可能です。

今回はカスタム関数を使ってみる際に必要な前提知識を踏まえながらサンプルコードを紹介します。

環境

  • go v1.22.1
  • cel-go v0.20.1

カスタム関数の作り方

Goでの実装になりますが、手順としては以下です。

  1. environmentに関数を登録
  2. bindする関数を定義(interfaceを実装する)
  3. 評価式で関数を使う
続きを読む

CELで独自のオブジェクトをprotobufを使って変数定義する

概要

CELでは評価式で扱う変数をEnvironment内で定義しますが、既存のデータモデルを使いたい場合は

  • 同じ定義を都度作らないといけない
  • 変更があった際の追従漏れが発生する

といった手間が発生してしまいます。

しかしそのデータモデルがprotobufで定義されていれば再利用することが可能です。

今回はその方法を紹介します。

環境

  • go v1.22.1
  • cel-go v0.20.1
続きを読む

CELでASTを外部に保存する

概要

CELのキーコンセプトでは

  • Control PlaneでCEL式をParse & Checkし、生成されたASTを保存
  • Data Planeで保存したASTを読み取り、インプット値を評価する

と説明されていました。

主に管理ツール等で前者のControl Planeを実装し、オペレーターに自由に評価式を入力してもらいます。
Control PlaneではCheckも行われるので評価式がおかしければその時点でvalidationしてくれます。
そしてData Planeでは起動時にASTを読み込んで入力値を評価できるようにします。

今回は具体的に外部に保存する手順を説明します。

環境

  • go v1.22.1
  • cel-go v0.20.1
続きを読む

CEL(Common Expression Language)

概要

CEL(Common Expression Language)とは、Google によって開発された軽量で高速な式評価言語です。
そのシンプルさと効率性から、セキュリティポリシー、リソースフィルタリング、データ検証などに使われます。

例えばプロダクションでは以下のような利用例があります。

今回はCELの説明と簡単な使い方を紹介します。

環境

  • go v1.22.1
  • cel-go v0.20.1
続きを読む

LLMのプロンプト

概要

LLMにおけるプロンプトの構成要素を理解して扱うことで

  • 期待通りの回答を得られる(精度が高くなる)
  • なぜTemplateはこの書き方をするのかが分かる
  • なぜagent_scratchpadのような変数がいるのかが分かる

といったようになります。

プロンプト

構成要素

プロンプトの構成要素は主に以下の4つです。

  • 命令(instruction)
  • 入力(input)
  • 文脈(context)
  • 出力形式の指定(output)

単純に「命令」だけだと幅広い解釈をしてしまい、期待しない回答が返ってくるので上記を考慮してプロンプトを作成するのが良いです。

続きを読む

LlamaIndexでPDFに対してベクトル検索を行う

概要

LlamaIndexを使うと非常に簡単にRAG(Retrieval-Augmented Generation)を使った検索システムを作ることができます。

今回はLLMにない情報(PDF)をベクトル化して検索できる方法を紹介します。

環境

  • python 3.11.8
  • streamlit 1.31.1
  • llama-index 0.10.14

実装

開発環境

Python自体もそうですが、LangchainやLlamaIndexはバージョン更新のたびに破壊的な変更が多くバージョンを固定しないと期待通りに動かないことが多いです。

先日の記事のように最初に開発環境を整えることを推奨します。少なくともvenvやvirtualenvのような仮想環境は必ず使いましょう。

christina04.hatenablog.com

続きを読む

VS CodeのPython環境をDev Containersで構築する

概要

PythonはGoと違ってライブラリのdeprecatedや破壊的変更が多いため、環境やライブラリバージョンの固定が非常に重要です。

  • Dev Containers
  • poetry
  • 仮想環境(venvなど、今回はpoetryのvirtualenv)

を使うことで、それらを固定してチーム内で安定した開発環境を構築できます。

環境

  • macOS 13.6
  • Dev Containers 0.346.0
  • python 3.11.8
  • poetry 1.7.1

役割

Dev Containersのアーキテクチャはこのようになっています。

ref: https://code.visualstudio.com/docs/devcontainers/containers

続きを読む