🛠️
ChatGPT x 業務改善シリーズ 〜ですます調 編〜
はじめに
株式会社アーキベースの飯塚です。業務でChatGPTをどう活用されていますでしょうか?
弊社では、自社プロダクトに組み込んで、文章校正や文章生成、OCR等に活用しております!
1回目の投稿ということもあり、どのように組み込んだのかを共有したいと思います。
なお、AWSやOpenAIのアカウントを取得済みの前提で進めさせていただきます。
また、ここではですます調(敬体)
に整えるということを行います。
これから導入・活用を考えられている方々の一助になれば幸いです^^
要約
細かいことをすっ飛ばすと、組込方法は、下記のイメージ図がすべてです!
-
AWS Lambda
の関数URL
を使って簡単にアクセスできるようにしています -
AWS Lmabda
からOpenAI API
にリクエストを送っています
環境
- macOS Sonoma 14.3
- Python 3.10
- openai 1.13.3
- fastapi 0.99.0
OpenAIのAPIキーの発行
- OpenAIアカウント作成後、https://platform.openai.com/api-keys からAPIキーを発行します。
-
Create new secret key をクリックすると、API keyが発行されますのでコピーします。
AWS Lambdaの作成
レイヤー作成
OpenAIが提供するPython向けのライブラリをインストールし、レイヤーにアップロードします。
(※下記手順で動作しない場合、DockerでLambdaのPython(3.10)レイヤー作成してみた!を参考に対応してみてください)
- 下記のコマンドを実行します
$ mkdir python
$ python3 -m pip install -t ./python openai
$ zip -r openai.zip ./python
-
Lambda
ページを開き、左メニューのレイヤー
を選択。右画面のレイヤーの作成
ボタンを押下します。
- レイヤー作成ページにて、下記を参考にしながら入力・選択します。また、
openai.zip
をアップロードします。
関数作成
- ランタイム
Python 3.10
を選択し、Lambda関数を作成します。
- 関数にレイヤーを紐付けます(
コード
タブの最下部より)
- 関数の設定を行います(
設定
タブ)
- 一般設定のタイムアウトを
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データを学習には使いません
- APIデータはSOC 2 Type 2 報告書をもって、安全性を担保しています
Discussion