🦸‍♂️

【Assistant API】GPTを使ってアシスタントを作る

2024/05/26に公開

目的

日頃、実装するにも家の管理をするにも相談役や話し相手が欲しくなるときがあります。
そんなときAIは良き話し相手になってくれると考えています
Chatbotは使ったことはあるのですがAssistantAPIは使ったことがないので、
openai公式のドキュメントを見ながら作っていこうと考えています。

使用するライブラリとドキュメント

ここをみながら実装します
https://platform.openai.com/docs/api-reference/moderations

openai             1.30.3

アシスタントの作成

以下で実装紹介します

下準備

  1. .envを作成してconfig.pyを読み込むことでapikeyを適用させよう
.envとconfig.py
.env内の記載
GPT_APIKey='ご自身のAPIkeyを記載'
#config.pyの内容
from dotenv import load_dotenv
load_dotenv()
import os
 
apikey = os.getenv('GPT_APIKey') #gpt key 読み込み

アシスタントを作成

サンプルの

# assistant.py
import config
from openai import OpenAI

client = OpenAI(
    api_key = config.apikey
)

assistant = client.beta.assistants.create(
    name="Math Tutor",
     instructions="You are a personal math tutor. Write and run code to answer math questions.",
  tools=[{"type": "code_interpreter"}],
  model="gpt-3.5-turbo-0125",

)
パラメータ 内容
name アシスタントの名前
string or null
instructions アシスタントの役割
string or null
model 使用するアシスタントのモデル
string
tools アシスタントで有効になっている
ツールリスト、list

アシスタントとユーザの会話と質問の追加まで

thread = client.beta.threads.create()

# 会話にユーザから計算を質問する
message = client.beta.threads.messages.create(
  thread_id=thread.id,
  role="user",
  content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

ストリーミングなしで連携する

run = client.beta.threads.runs.create_and_poll(
  thread_id=thread.id,
  assistant_id=assistant.id,
  instructions="Please address the user as Jane Doe. The user has a premium account."
)
print("run: ", run)
# ステータスの成功と失敗を見る
if run.status == 'completed': 
  messages = client.beta.threads.messages.list(
    thread_id=thread.id
  )
  print(messages)
else:
  print(run.status)
ソースをまとめる
import config

from openai import OpenAI

client = OpenAI(
    api_key = config.apikey
)
# アシスタントを作成
assistant = client.beta.assistants.create(
    name="Math Tutor",
     instructions="You are a personal math tutor. Write and run code to answer math questions.",
  tools=[{"type": "code_interpreter"}],
  model="gpt-3.5-turbo-0125",

)
# アシスタントとユーザの会話開始
thread = client.beta.threads.create()

# 会話にユーザから計算を質問する
message = client.beta.threads.messages.create(
  thread_id=thread.id,
  role="user",
  content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

# 今回はストリーミングなしで実行
run = client.beta.threads.runs.create_and_poll(
  thread_id=thread.id,
  assistant_id=assistant.id,
  instructions="Please address the user as Jane Doe. The user has a premium account."
)

# ステータスの成功と失敗を見る
if run.status == 'completed': 
  messages = client.beta.threads.messages.list(
    thread_id=thread.id
  )
  print(messages)
else:
  print(run.status)

実行結果の抜粋

今回使ったサンプル内で3x + 11 = 14が成り立つにはx=1なので、解答結果も正しい

value='The solution to the equation \\(3x + 11 = 14\\) is \\(x = 1\\). If you have any more equations you need help with or any other questions, feel free to ask!'), 

全体図

ライフサイクル

ストリーミング時はステータスの管理が必要なのですが今回使っていないため、
紹介で終わります

実行したときの費用

アシスタントAPI

$0.03

まとめ

今回はサンプルを使ってアシスタントの呼び出し方を学びました。

  • 呼び出すたびにモデルが作られる対策
  • 具体的にアシストしてほしい内容をまとめる
  • ツールで使う関数を用意する

上記を準備して自分用のアシスタントを作り上げたいです!!

Discussion