🛠️

ChatGPT x 業務改善シリーズ 〜ですます調 編〜

2024/04/30に公開

はじめに

株式会社アーキベースの飯塚です。業務でChatGPTをどう活用されていますでしょうか?
弊社では、自社プロダクトに組み込んで、文章校正や文章生成、OCR等に活用しております!

1回目の投稿ということもあり、どのように組み込んだのかを共有したいと思います。
なお、AWSOpenAIのアカウントを取得済みの前提で進めさせていただきます。
また、ここではですます調(敬体)に整えるということを行います。

これから導入・活用を考えられている方々の一助になれば幸いです^^

要約

細かいことをすっ飛ばすと、組込方法は、下記のイメージ図がすべてです!

  • AWS Lambda関数URLを使って簡単にアクセスできるようにしています
  • AWS LmabdaからOpenAI APIにリクエストを送っています

環境

  • macOS Sonoma 14.3
  • Python 3.10
    • openai 1.13.3
    • fastapi 0.99.0

OpenAIのAPIキーの発行

  1. OpenAIアカウント作成後、https://platform.openai.com/api-keys からAPIキーを発行します。
  2. Create new secret key をクリックすると、API keyが発行されますのでコピーします。

AWS Lambdaの作成

レイヤー作成

OpenAIが提供するPython向けのライブラリをインストールし、レイヤーにアップロードします。
(※下記手順で動作しない場合、DockerでLambdaのPython(3.10)レイヤー作成してみた!を参考に対応してみてください)

  1. 下記のコマンドを実行します
$ mkdir python
$ python3 -m pip install -t ./python openai
$ zip -r openai.zip ./python
  1. Lambdaページを開き、左メニューのレイヤーを選択。右画面のレイヤーの作成ボタンを押下します。

  1. レイヤー作成ページにて、下記を参考にしながら入力・選択します。また、openai.zipをアップロードします。

関数作成

  1. ランタイムPython 3.10を選択し、Lambda関数を作成します。

  1. 関数にレイヤーを紐付けます(コードタブの最下部より)

  1. 関数の設定を行います(設定タブ)
  • 一般設定のタイムアウトを3秒 -> 30秒に変更
  • 関数URLを作成します
  • 環境変数にOPENAI_API_KEYを設定します
    • キーOPENAI_API_KEY
    • OpenAIのAPIキーの発行でメモしたキー

コード

コードに下記を記述します。
やっていることは、テキストをですます調に変換するというシンプルな内容です。
モデルにgpt-4-turboを採用していますが適宜変更可です(モデル一覧)。

import json
import logging
import os
from openai import OpenAI

# OpenAI APIキーの設定
client = OpenAI(api_key=os.environ['OPENAI_API_KEY'])

# loggingの設定
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    try:
        # イベントのボディをJSONとして解析
        event_body = json.loads(event['body'])
        input_text = event_body['text']

        logger.info(f"Requested_text: {input_text}")

        # プロンプト
        system_prompt = f"""
        あなたは文章の校正者です。
        以下の[入力文章]の内容を、下記の要件をすべて満たす形に修正してください。
        1. 文意は一切変更せず、変換した文章のみを出力します
        2. ですます調(敬体)にします
        3. 全角英数字を半角英数字にします
        
        [入力文章]
        {input_text}
        """

        # OpenAI APIの呼び出し
        response = client.chat.completions.create(
            model='gpt-4-turbo-2024-04-09',
            messages=[{'role': 'system', 'content': system_prompt}],
            temperature=0.02, # バラツキを抑える
        )

        logger.info(f"Response: {response}")

        return {
            'statusCode': 200,
            'headers': {'Content-Type': 'text/plain; charset=utf-8'},
            'body': response.choices[0]["message"]["content"]
        }

    except Exception as e:
        logger.error(f"Error: {str(e)}")
        
        # エラーレスポンスを返す
        return {
            'statusCode': 500,
            'headers': {'Content-Type': 'text/plain; charset=utf-8'},
            'body': 'Something went wrong'
        }

挙動確認

左のテキストエリアが変換前のテキスト、右が変換後のテキストです!

まとめ

今回は、AWS Lambda経由でOpenAI APIにリクエストを投げる方法を説明しました。
導入手順を中心としたため、コードの説明が薄くなってしまいました…申し訳ございません。。
なにかの参考になれば幸いです^^

次回はOCRについて触れる予定ですので、細かいコードの説明もそちらで行います!

補足

  • Q. AWS Lambdaになぜ切り分けたのか?
  • A. プロダクトの負荷を少しでも軽減するため

導入前に確認(データ漏洩について)

  • APIデータを学習には使いません

https://help.openai.com/en/articles/5722486-how-your-data-is-used-to-improve-model-performance

  • APIデータはSOC 2 Type 2 報告書をもって、安全性を担保しています

https://openai.com/enterprise-privacy

Archibase Tech Blog

Discussion