This project uses LLM and LangChain to implement natural language SQL for AWS Cost and Usage Reports (CUR).
コードは、こちらのサイトがベース(本家)になります。
- Introducing the LangChain integration
- https://github.com/cube-js/cube/tree/master/examples/langchain
「AWS Cost Usage Reportの可視化(2) -ヘッドレスBIツールCubeを試してみる」のStep1を参考にする。
-
cure core起動パラメータ準備
touch .env
.envファイル
CUBEJS_AWS_KEY=<AWSアクセスキー> CUBEJS_AWS_SECRET=<AWSシークレットキー> CUBEJS_AWS_REGION=ap-northeast-1 CUBEJS_AWS_S3_OUTPUT_LOCATION=s3://<S3バケット名> CUBEJS_DB_TYPE=athena CUBEJS_EXTERNAL_DEFAULT=true CUBEJS_SCHEDULED_REFRESH_DEFAULT=true CUBEJS_DEV_MODE=true CUBEJS_SCHEMA_PATH=model
-
cube coreコンテナ起動
docker compose up -d
-
ブラウザでcubeへ接続し(http://localhost:4000/)、(Athenaの)モデル作成。
-
python環境を準備
(base)$ conda create -n aws_cur_langchain phthon=3.1 (base)$ conda activate aws_cur_langchain (aws_cur_langchain)$ pip install -r requirements.txt
※ventやvirtualenvなど、お好みのツールでok。上記は、conda(Anacondaディストリビューション)を使う場合の参考。
-
OpenAI APIのキー取得(ex. sk-XXXXXXXXXXX)
-
Cube APIシークレットキー(ex. JWTフォーマット)。ブラウザでCube Coreへアクセスし、「Playground」->「Code」から取得できる。
(snip) const cubejsApi = cubejs( '{ヘッダ}.{ペイロード}.{署名}', { apiUrl: 'http://localhost:4000/cubejs-api/v1' } ); (snip)
-
.envファイルに、下記の環境変数を追加。 .envファイル
OPENAI_API_KEY=<OpenAI APIのキー> CUBE_API_URL=http://localhost:4000/cubejs-api/v1 CUBE_API_SECRET=<Cube APIシークレットキー> #DATABASE_URL=postgresql://localhost:4000/test DATABASE_URL=host=localhost port=15432 dbname=test user=username password=password
-
アプリ起動
(aws_cur_langchain)$ streamlit run streamlit_app.py
※初回起動時はIngestion処理のため(「Loading context from Cube API...」)5分程度待つ。
-
GUIが表示されたらクエリ投入(ex. pricing_public_on_demand_costの合計は?)