Bedrock Studioについてざっくり解説

[Amazon Bedrock](https://aws.amazon.com/jp/bedrock/)には、Bedrock Studioという機能が提供されています。本日（24/07/08）時点でプレビューリリースです。

https://aws.amazon.com/jp/blogs/news/build-generative-ai-applications-with-amazon-bedrock-studio-preview/

ログイン画面がかっこいいです。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/26d50ace-5768-b3d1-fcfd-67e2ce3178ae.png)

## Bedrock Studioとは

Bedrock Studioは組織内の生成AIアプリケーション開発者向けにWebベースのプロトタイピング環境を提供するサービスです。ユーザー管理にIAM Identity Centerを使うため、AWSを利用しない人（=IAMユーザーを持たない人）にもBedrockだけ使える環境を提供できます。

## Bedrock Studioの主要な機能

Bedrock Studioの主な機能は「プレイグラウンド」と「アプリ」です。

### プレイグラウンド

プレイグラウンドは、素の生成AIとチャットができる機能です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/3bcd058c-1a5b-966d-c58f-435a99409b03.png)

## アプリ

アプリは、Bedrockの機能を組み合わせてアプリを構築する機能です。組み合わせられる機能は「コンポーネント」として用意されています。コンポーネントは、以下の3種類あります。

* ナレッジベース
* ガードレール
* ファンクション

各コンポーネントを解説します。

### ナレッジベース

ナレッジベースは、Bedrockの「Knowledge Bases for Amazon Bedrock」に相当する機能です。PDFなどの対応ドキュメントを登録することで、ベクトルDBを構築できます。

Knowledge Bases for Amazon Bedrock自体が簡単にベクトルDBを構築できる機能ですが、Bedrock Studioのナレッジベースは更に設定可能項目が絞られており、ほぼ **ドキュメントをアップロードするだけ** で利用できます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/4a927724-66c4-725c-2eeb-d64c7d008b8c.png)

### ガードレール

ガードレールは、Bedrockの「Guardrails for Amazon Bedrock」に相当する機能です。「Hate」「Insults」「Sexual」「Violence」の4つの指標でコンテンツフィルターを設定できます。（Guardrails for Amazon Bedrockでは他に「Misconduct」や「Prompt Attack」に対するフィルターも可能です）

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/b8341c7d-15a2-a749-a87d-07f4306670c7.png)

### ファンクション

ファンクションは、Bedrockの「Agents for Amazon Bedrock」のアクショングループに相当する機能です。

Agents for Amazon Bedrockは「アクショングループ」としてLambdaを指定し、エージェント機能を構築する機能です。Lambdaのプログラムは自分で実装する必要があります。ナレッジベースやガードレールを指定することもできます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ba746178-ccf0-b8a9-9501-b1fafcd40576.png)

Bedrock Studioのファンクションでは、 **Lambdaが自動で作成されます** 。Bedrock Studio利用者は **Lambdaから呼び出す外部API** をOpenAPIスキーマで指定します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/145ae4ea-9453-5421-1c0f-fb660c6141ca.png)

OpenAPIスキーマは、このような形で作成します。

<details><summary>Google検索を行うAPI</summary>

```yaml
openapi: 3.0.3
info:
  title: Google Custom Search JSON API 
  description: Google Custom Search JSON API. (https://developers.google.com/custom-search/v1/using_rest)
  version: 1.0.0

servers:
  - url: https://www.googleapis.com

paths:
  /customsearch/v1:
    get:
      summary: Google search.
      description: Google search.
      security:
        - APIkey: []
        - ProgrammableSearchEngineID: []
      parameters:
        - name: q
          in: query
          description: Search query
          required: true
          schema:
            type: string
        - name: lr
          in: query
          description: Restricts the search to documents written in a particular language (e.g., lr=lang_ja).
          schema:
            type: string
            enum: 
              - lang_en
              - lang_ja
        - name: num
          in: query
          description: Number of search results to return.Valid values are integers between 1 and 10, inclusive.
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema: {}

components:
  securitySchemes:
    APIkey:
      type: apiKey
      in: query
      name: key
    ProgrammableSearchEngineID:
      type: apiKey
      in: query
      name: cx
```

</details>

<details><summary>Wikipedia検索を行うAPI</summary>

```yaml
openapi: 3.0.3
info:
  title: Wikipedia API
  description: Wikipedia API
  version: 1.0.0

servers:
  - url: https://ja.wikipedia.org

paths:
  /w/api.php:
    get:
      description: |
        Wikipediaから情報を取得するAPI。以下のいずれかの利用方法が可能です。
        1. 検索（「進撃の巨人を検索する場合」） https://ja.wikipedia.org/w/api.php?action=query&list=search&format=json&srsearch=進撃の巨人
        2. 概要取得（ページIDが2047223の概要を取得する場合） https://ja.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&explaintext=1&exintro=1&pageids=2047223
      parameters:
        - name: action
          in: query
          description: desc
          required: true
          schema:
            type: string
            enum: 
              - query
        - name: list
          in: query
          description: desc
          schema:
            type: string
            enum: 
              - search
        - name: format
          in: query
          description: desc
          required: true
          schema:
            type: string
            enum: 
              - json
        - name: srsearch
          in: query
          description: desc
          schema:
            type: string
        - name: pageids
          in: query
          description: desc
          schema:
            type: string
        - name: prop
          in: query
          description: desc
          schema:
            type: string
            enum: 
             - extracts
        - name: explaintext
          in: query
          description: desc
          schema:
            type: string
            enum: 
             - "1"
        - name: exintro
          in: query
          description: desc
          schema:
            type: string
            enum: 
             - "1"

      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema: {}
```

</details>

Bedrock Studioの利用者が、AWSのことを意識しなくてよいように工夫されていますね。ただ、外部API（＝パブリックなAPI）を呼び出す仕組みのため、利用したい機能が同じAWSアカウント内のプライベートなAPIの場合は直接呼び出すことができないので注意が必要です。

ファンクションは認証情報を含めることもできます。（認証情報はSecrets Managerで管理されます。もちろん利用者が意識する必要はありません）

## デモ動画

作成しました！

<iframe width="560" height="315" src="https://www.youtube.com/embed/LE3qL75_sZM?si=5-V_kSkVzdrR7dF9" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>