MCPcopy Index your code
hub / github.com/aws-samples/generative-bi-using-rag

github.com/aws-samples/generative-bi-using-rag @v1.8.0_240919

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.8.0_240919 ↗ · + Follow
1,122 symbols 3,226 edges 120 files 51 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

AWS上でRAGを使用した生成型BI

このフレームワークは、AWS上でカスタマイズされたデータソース(RDS/Redshift)に対して生成型BI機能を有効にするためのものです。以下の主要な機能を提供します: - 自然言語を使用してカスタマイズされたデータソースをクエリするためのText-to-SQL機能。 - データソース、テーブル、および列の説明を追加、編集、および管理するためのユーザーフレンドリーなインターフェース。 - 歴史的な質問-回答のランキングとエンティティ認識を統合することによるパフォーマンスの向上。 - エンティティ情報、公式、SQLサンプル、複雑なビジネス問題の分析アイデアなど、ビジネス情報のカスタマイズ。 - 複雑な帰属分析問題を処理するためのエージェントタスク分割機能の追加。 - 基盤となるText-to-SQLメカニズムについての洞察を提供する直感的な質問応答UI。 - 対話的なアプローチを通じて複雑なクエリを処理するためのシンプルなエージェント設計インターフェース。

導入

Amazon BedrockとAmazon OpenSearchを使用したNLQ(自然言語クエリ)デモです。

スクリーンショット

ユーザー操作マニュアル

プロジェクトデータフローチャート

デプロイガイド

1. EC2インスタンスの準備

以下の設定でEC2を作成します:

- OSイメージ(AMI):Amazon Linux 2023、Amazon Linux 2(AL2のサポート終了は2025-06-30)
- インスタンスタイプ:t3.largeまたはそれ以上
- VPC:デフォルトを使用し、パブリックサブネットを選択
- セキュリティグループ:22、80、8000ポートへのアクセスをどこからでも許可(「SSHトラフィックをどこからでも許可」と「インターネットからのHTTPトラフィックを許可」を選択)
- ストレージ(ボリューム):1 GP3ボリューム - 30 GiB

2. 権限の設定

2.1 IAMロールの権限

新しいIAMロールを作成し、名前をgenbirag-service-roleとします。設定は以下の通りです: - 信頼されたエンティティタイプ:AWSサービス - サービス:EC2 - 使用事例:EC2 - EC2インスタンスが代わりにAWSサービスを呼び出すことを許可します。

「権限の追加」をスキップして、まずこのロールを作成します。

ロールが作成されたら、インラインポリシーを作成して以下の権限を追加します:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "bedrock:*",
                "dynamodb:*"
            ],
            "Resource": "*"
        }
    ]
}

最後に、このIAMインスタンスプロファイル(IAMロール)をEC2インスタンスにバインドします。

2.2 Amazon Bedrockのモデル権限

Anthropic ClaudeモデルとAmazon Titan埋め込みモデルのモデルアクセスを、AWSコンソールのus-west-2(オレゴン)リージョンで有効にしていることを確認してください。 Bedrock

3. DockerとDocker Composeのインストール

EC2インスタンスにSSHコマンドでec2-userユーザーとしてログインするか、EC2コンソールのEC2インスタンスコネクト機能を使用してコマンドラインにログインします。

セッションで、以下のコマンドを実行します。注:各コマンドを1行ずつ実行してください。

このユーザーでない場合は、以下のコマンドで切り替えることができます:

sudo su - ec2-user
# コンポーネントのインストール
sudo yum install docker python3-pip git -y && pip3 install -U awscli

# Amazon Linux 2の場合、dnfをyumで置き換えることができます

sudo yum install docker python3-pip git -y && pip3 install -U awscli && sudo pip3 install docker-compose

# docker pythonラッパー7.0 SSLバージョンの問題を修正  
pip3 install docker==6.1.3

# コンポーネントの設定
sudo systemctl enable docker && sudo systemctl start docker && sudo usermod -aG docker $USER

# ターミナルを終了
exit

4. デモアプリケーションのインストール

ターミナルセッションを再開し、以下のコマンドを続けて実行します:

注:各コマンドを1行ずつ実行してください。

# ユーザーec2-userとしてログイン

# OpenSearchサーバーパラメータの設定
sudo sh -c "echo 'vm.max_map_count=262144' > /etc/sysctl.conf" && sudo sysctl -p

# コードのクローン
git clone https://github.com/aws-samples/generative-bi-using-rag.git

# .envファイルで環境変数を設定し、AWS_DEFAULT_REGIONをEC2インスタンスと同じリージョンに変更
cd generative-bi-using-rag/application && cp .env.template .env 

# ローカルでdockerイメージをビルド
docker-compose build

# すべてのサービスを起動
docker-compose up -d

# MySQLとOpenSearchの初期化が完了するまで3分待機
sleep 180

5. MySQLの初期化

ターミナルで以下のコマンドを続けて実行します:

cd initial_data && wget https://github.com/fengxu1211/generative-bi-using-rag/raw/demo_data/application/initial_data/init_mysql_db.sql.zip

unzip init_mysql_db.sql.zip && cd ..

docker exec nlq-mysql sh -c "mysql -u root -ppassword -D llm  < /opt/data/init_mysql_db.sql"

6. Amazon OpenSearch dockerバージョンの初期化

6.1 新しいインデックスを作成してサンプルデータのインデックスを初期化

docker exec nlq-webserver python opensearch_deploy.py

スクリプトの実行が何らかのエラーで失敗した場合は、以下のコマンドでインデックスを削除し、前のコマンドを再実行してください。

curl -XDELETE -k -u admin:admin "https://localhost:9200/uba"

6.2 (オプション)既存のインデックスにデータを追加してカスタムQAデータを一括インポート

docker exec nlq-webserver python opensearch_deploy.py custom false

7. Streamlit Web UIへのアクセス

ブラウザでURLを開きます:http://<your-ec2-public-ip>

注:HTTPを使用し、HTTPSではありません。

8. APIへのアクセス

ブラウザでURLを開きます:http://<your-ec2-public-ip>:8000

注:HTTPを使用し、HTTPSではありません。

デフォルトのアカウントは

username: admin
password: # 以下の手順に従ってパスワードを設定してください

パスワードを変更するか、ユーザー名を追加する場合は、以下のファイルを変更できます。

application/config_files/stauth_config.yaml

例えば

credentials:
  usernames:
    jsmith:
      email: jsmith@gmail.com
      name: John Smith
      password: abc # ハッシュ化されたパスワードに置き換える
    rbriggs:
      email: rbriggs@gmail.com
      name: Rebecca Briggs
      password: def # ハッシュ化されたパスワードに置き換える
cookie:
  expiry_days: 30
  key: random_signature_key # 文字列である必要があります
  name: random_cookie_name
preauthorized:
  emails:
  - melsby@gmail.com

パスワードを平文からハッシュ化されたパスワードに変更するには、以下の方法で取得できます。

from streamlit_authenticator.utilities.hasher import Hasher
hashed_passwords = Hasher(['abc', 'def']).generate()

デモアプリケーションでカスタムデータソースを使用する方法

  1. 最初に、Data Connection ManagementおよびData Profile Managementページで対応するData Profileを作成します。

AddConnect

  1. Data Profileを選択した後、質問を開始します。簡単な質問に対しては、LLMが直接正しいSQLを生成できます。生成されたSQLが正しくない場合は、Schemaに注釈を追加してみてください。

CreateProfile

このWebページを更新し、Fetch table definitionをクリックします。

UpdateProfile

  1. Schema Managementページを使用し、Data Profileを選択した後、テーブルとフィールドにコメントを追加します。これらのコメントは、LLMに送信されるプロンプトに含まれます。 (1) いくつかのフィールドのAnnotation属性に、そのフィールドに表示される可能性のある値を追加します。例:"Values: Y|N", "Values: 上海市|江蘇省" (2) テーブルのコメントに、ビジネスの質問に答えるためのドメイン知識を追加します。

AddSchema

UpdateSchema

  1. 再度質問をします。正しいSQLを生成できない場合は、Sample QAペアをOpenSearchに追加します。 (1) Index Managementページを使用し、Data Profileを選択した後、QAペアを追加、表示、削除できます。

AddIndex

  1. 再度質問をします。理論的には、RAGアプローチ(PEはFew shotsを使用)が正しいSQLを生成できるはずです。

セキュリティ

詳細については、CONTRIBUTINGを参照してください。

ライセンス

このライブラリはMIT-0ライセンスの下でライセンスされています。LICENSEファイルを参照してください。

Extension points exported contracts — how you extend this code

Session (Interface)
(no doc)
report-front-end/src/components/PanelSideNav/types.ts
MainStackProps (Interface)
(no doc)
source/resources/lib/main-stack.ts
ChartTypeProps (Interface)
(no doc)
report-front-end/src/components/SectionChat/ChartRenderer.tsx
RedshiftStackProps (Interface)
(no doc)
source/resources/lib/redshift/redshfit-stack.ts
SQLResultProps (Interface)
(no doc)
report-front-end/src/components/SectionChat/ResultRenderer.tsx
LLMStackProps (Interface)
(no doc)
source/resources/lib/model/llm-stack.ts
RecommendQuestionsProps (Interface)
(no doc)
report-front-end/src/components/SectionChat/CustomQuestions.tsx
CognitoStackProps (Interface)
(no doc)
source/resources/lib/cognito/cognito-stack.ts

Core symbols most depended-on inside this repo

add
called by 58
application/nlq/data_access/dynamo_model.py
get_state
called by 54
application/nlq/core/state_machine.py
get_answer
called by 44
application/nlq/core/state_machine.py
transition
called by 39
application/nlq/core/state_machine.py
getLogger
called by 35
application/utils/logging.py
response_websocket
called by 30
application/api/service.py
update
called by 27
application/nlq/data_access/dynamo_model.py
get_all_profiles_with_info
called by 23
application/nlq/business/profile.py

Shape

Method 593
Function 351
Class 135
Interface 28
Route 11
Enum 4

Languages

TypeScript57%
Python43%

Modules by API surface

application/static/components/bootstrap/bootstrap.min.js350 symbols
application/static/components/marked.min.js102 symbols
application/static/components/jquery-3.7.1.min.js80 symbols
application/nlq/core/state_machine.py37 symbols
application/api/main.py21 symbols
application/utils/llm.py20 symbols
application/utils/prompts/generate_prompt.py19 symbols
application/api/schemas.py19 symbols
application/nlq/business/vector_store.py18 symbols
report-front-end/src/components/SectionChat/types.ts16 symbols
application/nlq/data_access/dynamo_connection.py16 symbols
application/nlq/business/nlq_chain.py16 symbols

Datastores touched

(mysql)Database · 1 repos

For agents

$ claude mcp add generative-bi-using-rag \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page