chatGPTが発表されてから1年ほど経って、かなり浸透してきたと思います。実は、興味があったんだけど、使い方がよくわからないので疎遠になっていました。で、新しい年が始まったので、openAIのchatGPTのサブスクリプションを使ってみました。使ってみると、GPT3.5とGPT4.0ではかなり、精度が異なることも分かったし、毎月3,000円がちょっと高いとも感じました。正直、そこまで使用できないのもあるんですけどね。で、安く使える方法はないかと考えていくと、結果だけほしいならば、apiを使用するのが一番だと思ったので、調べてみた。apiを使った場合、GPT4.0でだいたいブログの要約で1回10円くらいだったので3000円分だと300日分くらいだと考えると経済的ってことで、チャットツールにしてみた。
参考にしたサイトは以下のとおり。ほぼこれをそのままつかっているかも。改めて、良い時代です。あとはやる気だけの問題ですけどね。ここが一番大変なのですが。
https://qiita.com/utanesuke/items/15a02993dbaff6d3658a
で使ったのが、これ。

使用したのは、streamlit。簡単にwebアプリを使用できるライブラリです。最近、NTTでも記事がありましたライブラリです。
https://it.impress.co.jp/articles/-/25986
streamlitはクラウドサーバーもあって、webアプリの公開もすることができます。2日ほど使用しないと停止するんですけどね。そういえば、前回も銘柄抽出ツールで使っていました。
クラウドサーバーを使うときは、githubと連携する必要がありますが。githubもよくわからなかったので、調べるためにちょうど良かったです。
今回のツールでは、基本的なアシスタント機能、ブログの要約機能、googleカレンダー登録支援機能をとりあえず載せてみました。ここでGPT3.5とGPT4.0を切り替えることができるようにしました。本当は、回答の傾向を買えるパラメーターをつけても良かったのですが、とりあえず基本的な係数に設定しています。
で、作ったコードが下記のもの。
import datetime
from google.oauth2 import service_account
from googleapiclient.errors import HttpError
from googleapiclient.discovery import build
import streamlit as st
import requests
import json
import math
import time
st.set_page_config(page_title="AI_assistant【ChatGPT】")
st.title("**AI_assistant【ChatGPT】**")
if "label" not in st.session_state:
st.session_state.label = 0
#================================================================================
#sideber
with st.sidebar:
add_radio = st.radio(
"種類",
("基本", "ブログ","カレンダー")
)
add_radio_model = st.radio(
"model",
("GPT-3", "GPT-4"),
horizontal=True
)
# チャットボットとやりとりする関数 ===================================================
def communicate():
if st.session_state.label == 1:
messages = st.session_state["messages_basic"]
elif st.session_state.label == 2:
messages = st.session_state["messages_blog"]
else:
messages = st.session_state["messages"]
user_message = {"role": "user", "content": st.session_state["user_input"]}
messages.append(user_message)
api_key = st.secrets["openai_api_key"]
if st.session_state.label==4:
google_message = {"role": "system", "content": '私はgoogleカレンダーを操作できます'}
messages.append(google_message)
payload = {
"model": st.session_state["model"],
"messages": messages,
"max_tokens": 3000,
"temperature": 0,
"top_p": 0.1,
}
response = requests.post("https://api.openai.com/v1/chat/completions",
headers = {"Content-Type":"application/json","Authorization":"Bearer "+ api_key } ,
json = payload,stream=True
)
bot_message = json.loads(response.text)["choices"][0]["message"]
messages.append(bot_message)
with open("log.json", mode='a') as flog:
for i in messages:
json.dump(i,flog)
st.session_state["user_input"] = "" # 入力欄を消去
#基本====================================================================
if add_radio =="基本":
st.header('【基本】')
st.subheader('', divider='blue')
st.session_state.label = 1
# st.session_stateを使いメッセージのやりとりを保存
if "messages_basic" not in st.session_state:
st.session_state["messages_basic"] = [
{"role": "system", "content": "あなたは優秀なアシスタントAIです。"},
]
# ユーザーインターフェイスの構築
st.write("ChatGPT_API(GPT-3,GPT-4)を使ったチャットボットです。")
user_input = st.text_area("メッセージを入力してください。", key="user_input", on_change=communicate)
if st.session_state["messages_basic"]:
messages = st.session_state["messages_basic"]
for message in reversed(messages[0:]): # 直近のメッセージを上に
speaker = "🙂"
if message["role"]=="system":
speaker="💻"
if message["role"]=="assistant":
speaker=f'🤖{st.session_state["model"]}'
st.write(speaker + ": " + message["content"])
#その他====================================================================
with open("blog.txt",newline='\n') as f:
blog = f.read()
with open("cal.txt",newline='\n') as f:
cal = f.read()
dt_now = datetime.datetime.now()
dt_now=(dt_now.strftime('%Y/%m/%d %H:%M:%S'))
#blog==========================================================================
if add_radio =="ブログ":
st.header('【ブログ】')
st.subheader('', divider='blue')
st.session_state.label = 2
# st.session_stateを使いメッセージのやりとりを保存
if "messages_blog" not in st.session_state:
st.session_state["messages_blog"] = [
{"role": "system", "content": "あなたは優秀な執筆者です。"},
{"role": "system", "content": blog}]
# ユーザーインターフェイスの構築
st.write("ChatGPT_API(GPT-3,GPT-4)を使ったチャットボットです。")
user_input = st.text_area("メッセージを入力してください。", key="user_input", on_change=communicate)
if st.session_state["messages_blog"]:
messages = st.session_state["messages_blog"]
for message in reversed(messages[0:]): # 直近のメッセージを上に
speaker = "🙂"
if message["role"]=="system":
speaker="💻"
if message["role"]=="assistant":
speaker=f'🤖{st.session_state["model"]}'
st.write(speaker + ": " + message["content"])
#カレンダー===============================================================
if add_radio =="カレンダー":
st.header('カレンダー')
st.subheader('', divider='blue')
st.session_state.label = 3
# st.session_stateを使いメッセージのやりとりを保存
if "messages" not in st.session_state:
st.session_state["messages"] = [
{"role": "system", "content": "あなたは優秀なアシスタントです。"},{"role": "system", "content":"現在時刻は"+dt_now},{"role": "system", "content": cal}]
# ユーザーインターフェイスの構築
st.write("ChatGPT_API(GPT-3,GPT-4)を使ったチャットボットです。")
user_input = st.text_area("メッセージを入力してください。", key="user_input", on_change=communicate)
if st.session_state["messages"]:
messages = st.session_state["messages"]
for message in reversed(messages[0:]): # 直近のメッセージを上に
speaker = "🙂"
if message["role"]=="system":
speaker="💻"
if "APIKEY" in message["content"]:
continue
if message["role"]=="assistant":
speaker=f'🤖{st.session_state["model"]}'
st.write(speaker + ": " + message["content"])
for i in range(20):
st.write("")
st.write("copylight@skamp931")
#======================================================
if add_radio_model == "GPT-3":
st.session_state["model"]="gpt-3.5-turbo"
if add_radio_model == "GPT-4":
st.session_state["model"]="gpt-4-0125-preview"
とりあえず、これを使ってみて、色々勉強してみたいと思います。
他の勉強もしないといけないのに、時間がないですね。。。。
最近、プラナリア?を捕まえてきました。こいつ、半分にすると、分裂するんですって。不思議な生き物もいるもんですね。
