1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SlackからスタンプでBacklog起票できる仕組みにAIで要約をつけてみた

Posted at

この記事は mediba Advent Calendar 2024 15日目の記事です。

はじめに

株式会社medibaでインフラエンジニアをしております、馬淵と申します。

Slackでやりとりをしている時に、タスクとして登録しておきたい仕事が飛んでくる時ってありますよね。
以前、そのようなメッセージをスタンプを押せばBacklogに登録してくれる仕組みを作りました。
記事 → こちら

しかし、タスクの題名や内容についてがイケてなかったので、今回はAIを使って題名付けをしてみました。

前提条件

AWSを使ったことがある
Bedrockが利用可能なリージョンに開発環境がある

構成図

スクリーンショット 2024-12-15 17.15.06.png

作成するまでの流れ

1.BedRockのモデルを利用可能にする
2.IAMロールの作成
3.Lambdaに処理を追加
4.完了!

1.BedRockのモデルを利用可能にする

最初に、BedRockを使えるようにする準備をします。
まずはAWSのマネジメントコンソールに[Bedrock]と入力し、画面へ遷移してください。
スクリーンショット 2024-12-13 20.09.22.png

次に、画面左側の[モデルアクセス]を押下し、使いたいモデルにチェックを入れてください。
スクリーンショット 2024-12-13 20.09.39.png

僕が作成した環境では以下3モデルのアクセスが有効になっています。
スクリーンショット 2024-12-13 20.16.21.png

2.IAMロールの作成

BedRockを使える許可を持ったロールを作成します。

まずはAWSのマネジメントコンソールに[IAM]と入力し、画面へ遷移してください。
スクリーンショット 2024-12-13 20.28.28.png

画面左側にある[ポリシー]から、[ポリシーを作成]を押下し、ポリシーを作成します。
アクセス許可では[JSON]から以下を貼り付け[次へ]を選択し、任意のポリシー名を付けて[ポリシーの作成]を押下します。

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

次に、今作成したポリシーを持ったロールを作成します。
画面左側にある[ロール]から、[ロールを作成]を押下し、ロールを作成します。
ユースケースにはLambdaを指定してください。
スクリーンショット 2024-12-13 20.41.42.png
ポリシーには先ほど作ったポリシーを作成します。
スクリーンショット 2024-12-13 20.43.40.png

これでロールを作成できました。
このロールをLambdaに追加すれば準備完了です。

3.Lambdaに処理を追加

処理を加えたいLambdaにBedrockを呼び出す処理を加えます。
今回はAnthropic Claudeのinvoke_modelメソッドを使用しました。

以下コードを参考に処理を追加します。

呼び出し部

    bedrock_runtime = boto3.client('bedrock-runtime')

    # 各種パラメーターの指定
    modelId = 'anthropic.claude-v2:1' 
    accept = 'application/json'
    contentType = 'application/json'

処理部
slack_message変数には要約してほしいメッセージが入っています。
これをHuman:とAssistant:に挟んでプロンプトメッセージを作成し、Bedrockに渡します。

        prompt_message="次の業務対応依頼にをチケット化したいと考えています。チケットの題名を考えてください。回答は題名のみでお願いします。他の返答を含めないでください。"
        # リクエストBODYの指定
        body = json.dumps({
            "prompt": "\n\nHuman:"+prompt_message+slack_message["text"]+"\n\nAssistant:",
            "max_tokens_to_sample": 100,
        })

        # Bedrock APIの呼び出し
        response = bedrock_runtime.invoke_model(
        	modelId=modelId,
        	accept=accept,
        	contentType=contentType,
            body=body
        )

レスポンス解釈部

        # APIレスポンスからBODYを取り出す
        body = response.get("body")

        # iter_chunks() を使用する場合
        for chunk in response['body'].iter_chunks():
          decoded_chunk = chunk.decode('utf-8')
          try:
            # JSON オブジェクトとして読み込み、"completion" キーの値を取得
            title = json.loads(decoded_chunk)["completion"]
          except (json.JSONDecodeError, KeyError):
            # JSON デコードエラーまたは KeyError が発生した場合、チャンク全体を出力
            print(decoded_chunk)

これでtitle変数の中にチケットを要約したいい感じの題名が入っています。

4.完了!

これでBackLogのAPIを叩けば、いい感じに起票が行われます。

こちらが使用例になります。
スクリーンショット 2024-12-15 17.52.48.png

終わりに

以上になります。ここまで長い記事をご覧いただきありがとうございました。
AIの進化がめざましいので、どんどん業務に活かしていきたいですね。

参考記事

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-parameters-anthropic-claude-text-completion.html
https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html
https://dev.classmethod.jp/articles/invoke-bedrock-form-lambda-function/#toc-lambda
https://dev.classmethod.jp/articles/amazon-bedrock-ga/
https://speakerdeck.com/mabuchi/slacktesutanhuwoya-sutobacklogniqi-piao-surushi-zu-miwozuo-ru-1

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?