Skip to content

Commit fec01d5

Browse files
committed
v0.2.0
1 parent e333fa0 commit fec01d5

11 files changed

Lines changed: 510 additions & 53 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,3 +160,4 @@ cython_debug/
160160
#.idea/
161161

162162
image/*
163+
log/*

Readme.md

Lines changed: 65 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ VOICEVOX Engine … https://github.com/VOICEVOX/voicevox_engine
5252

5353
以下のリンクから ZundaGPT.ZIP をダウンロードして、作成したフォルダに展開してください。
5454

55-
https://github.com/led-mirage/ZundaGPT/releases/tag/v0.1.0
55+
https://github.com/led-mirage/ZundaGPT/releases/tag/v0.2.0
5656

5757
#### 3. 実行
5858

@@ -109,23 +109,59 @@ Windowsの場合は、Windowsの検索窓で「環境変数を編集」で検索
109109

110110
`settings.json`ファイルにはこのアプリの設定情報が記載されているのだ。普通は特に変更する必要はないけど、自分用にカスタマイズしたい人は、このファイルをいじるといいのだ。以下に設定項目を簡単に紹介するのだ。
111111

112+
#### ✨ echo(既定値 true)v0.2.0から新設
113+
114+
声に出して読み上げるかどうかの設定なのだ。設定できる値は`true``false`の2つなのだ。
115+
116+
`@echo [ on | off ]`コマンドで設定可能なのだ。
117+
112118
#### ✨ speaker_id(既定値 3)
113119

114-
声のIDなのだ。3はずんだもんを意味しているのだ。VOICEVOXに収録されている他のキャラクターの声で話して欲しいときは、この値を変更すればいいのだ。キャラクターのIDを調べるときは、「VOICEVOX スピーカーID 一覧」などとググれば出てくるのでそれを参考にすればいいのだ。
120+
声のIDなのだ。3はずんだもんを意味しているのだ。VOICEVOXに収録されている他のキャラクターの声で話して欲しいときは、この値を変更すればいいのだ。キャラクターのIDを調べるには、[この資料](voicevox_speaker_list.md)を参考にするといいのだ。
121+
122+
`@speaker_id [数値]`コマンドで設定可能なのだ。
115123

116-
#### ✨speed_scale(既定値 1.2)
124+
#### speed_scale(既定値 1.2)
117125

118126
読み上げの速さの設定なのだ。VOICEVOXのデフォルトは1.0なんだけど、ボクは少し早く読み上げさせたかったので1.2としているのだ。遅くしたい場合はこの値を減らせばいいのだ。
119127

120-
#### ✨pitch_scale(既定値 0.0)
128+
`@speaker_scale [数値]`コマンドで設定可能なのだ。
129+
130+
#### ✨ pitch_scale(既定値 0.0)
121131

122132
声の高さの設定なのだ。この値を増やすと、声の高さが上がるのだ。ただ、少しの変化で大きく変わるので、0.1とか0.2とか小刻みに調整するといいのだ。
123133

124-
#### ✨voicevox_server(既定値 http://127.0.0.1:50021)
134+
`@pitch_scale [数値]`コマンドで設定可能なのだ。
135+
136+
#### ✨ user_echo(既定値 true)v0.2.0から新設
137+
138+
あなたのメッセージを声に出して読み上げるかどうかの設定なのだ。設定できる値は`true``false`の2つなのだ。
139+
140+
`@user_echo [ on | off ]`コマンドで設定可能なのだ。
141+
142+
#### ✨ user_speaker_id(既定値 13)v0.2.0から新設
143+
144+
あなたの声のIDなのだ。13は青山龍星を意味しているのだ。VOICEVOXに収録されている他のキャラクターの声で話して欲しいときは、この値を変更すればいいのだ。キャラクターのIDを調べるには、[この資料](voicevox_speaker_list.md)を参考にするといいのだ。
145+
146+
`@user_speaker_id [数値]`コマンドで設定可能なのだ。
147+
148+
#### ✨ user_speed_scale(既定値 1.2)v0.2.0から新設
149+
150+
あなたの声の読み上げの速さの設定なのだ。VOICEVOXのデフォルトは1.0なんだけど、ボクは少し早く読み上げさせたかったので1.2としているのだ。遅くしたい場合はこの値を減らせばいいのだ。
151+
152+
`@user_speed_scale [数値]`コマンドで設定可能なのだ。
153+
154+
#### ✨ user_pitch_scale(既定値 0.0)v0.2.0から新設
155+
156+
あなたの声の高さの設定なのだ。この値を増やすと、声の高さが上がるのだ。ただ、少しの変化で大きく変わるので、0.1とか0.2とか小刻みに調整するといいのだ。
157+
158+
`@user_pitch_scale [数値]`コマンドで設定可能なのだ。
159+
160+
#### ✨ voicevox_server(既定値 http://127.0.0.1:50021)
125161

126162
VOICEVOXのサーバーのURLを記載するのだ。これがVOICEVOXのデフォルトなので、普通はここを変更する必要はないのだ。分かる人はわかると思うんだけど、このIPは自PCのIPになっているのだ。他のPCで実行しているVOICEVOXに声を生成してもらう場合は、このURLを変更すればいいのだ。ただ、ファイアウォールの設定とかいろいろ面倒なので、分からない人は気にする必要はないのだ。
127163

128-
#### ✨chat_api(既定値 OpenAI)
164+
#### chat_api(既定値 OpenAI)
129165

130166
使用するAPIの設定なのだ。設定できる値は`OpenAI``AzureOpenAI`の二つなのだ。あまり使っている人はいないかもしれないけど、Azure OpenAI ServiceのAPIを使用する場合は`AzureOpenAI`にするのだ。
131167

@@ -138,32 +174,42 @@ VOICEVOXのサーバーのURLを記載するのだ。これがVOICEVOXのデフ
138174

139175
需要がないと思うのでAzure OpenAI Serviceの詳しい説明は省略するのだ。使いたい人は自分で調べて欲しいのだ。
140176

141-
#### ✨chat_model(既定値 gpt-3.5-turbo-1106)
177+
#### chat_model(既定値 gpt-3.5-turbo-1106)
142178

143179
OpenAIのテキスト生成のモデル名を指定するのだ。これを変更することでAIの賢さが変わるのだ。既定はリーズナブルなGTP3.5を使用しているのだ。もっと賢くしたい場合はGPT4.0系も使えるけれど、その分利用量が上がるので注意するのだ。使用できるモデルの一覧と利用料金は以下のリンクで確認できるのだ。
144180

145181
モデルの一覧 … https://platform.openai.com/docs/models
146182
利用料金 … https://openai.com/pricing#language-models
147183

148-
#### ✨chat_character_name(既定値 ずんだ)
184+
#### chat_character_name(既定値 ずんだ)
149185

150186
コマンドプロンプトに表示するキャラクターの名前を設定すのだ。話者を変えた場合や、自分の好きな名前にしたい場合はここを編集するといいのだ。
151187

152-
#### ✨chat_instraction(既定値 君は優秀なアシスタント…以下略)
188+
#### chat_instraction(既定値 君は優秀なアシスタント…以下略)
153189

154190
AIのキャラづけの設定なのだ。ここで、AIの台詞をずんだもんっぽくするようお願いしているのだ。ここを変更することで、ずんだもん以外のキャラクターっぽい回答を生成することも可能なのだ。
155191

156-
#### ✨chat_bad_response(既定値 答えられないのだ)
192+
#### chat_bad_response(既定値 答えられないのだ)
157193

158194
何らかの原因でAIが回答できなかった場合に表示するセリフを設定するのだ。無理なお願いをするとAIが答えてくれない場合があるから気を付けるといいのだ。
159195

160-
#### ✨chat_history_size(既定値 6)
196+
#### chat_history_size(既定値 6)
161197

162198
AIに送信する過去の会話の履歴数を設定するのだ。この値が大きいほど前の回答、質問を考慮した回答をAIが生成するようになって、会話のつながりがよくなるのだ。ただ、その分利用料金も増えるので注意が必要なのだ。
163199

164200
この設定がある理由を考えればわかるけど、OpenAIのAIは過去の会話を覚えていないのだ。質問をするたびに、過去の会話もAIに送信することで、AIは会話のつながりを知ることができるのだ。ただ利用料金は送信するデータ量が増えるとその分加算されるので、バランスをとることが大事なのだ。
165201

166-
### ℹ️ OpenAI API利用量確認ファイル(閲覧のみ)
202+
#### ✨ chat_log_folder(既定値 log)v0.2.0から新設
203+
204+
チャットのログファイルを保存するフォルダを指定するのだ。この値が空文字の場合はログは保存されないのだ。
205+
206+
## 出力ファイル
207+
208+
### 🗒️ チャットログファイル
209+
210+
チャットのログはlogファルダに出力されるのだ。出力先はsettings.jsonファイルで変更することもできるのだ。アプリが起動してから終了するまでを1ファイルで出力するのだよ。
211+
212+
### 🗒️ OpenAI API利用量確認ファイル
167213

168214
`monthly_token_usage.json`ファイルは、このアプリで使用したOpenAI APIの利用量(トークン数)を月別に記録するファイルなのだ。利用料はトークン数(会話の量)で算出されるので、この値を参考にするといいのだ。
169215

@@ -222,6 +268,13 @@ WindowsのIME設定で「以前のバージョンのMicrosoft IMEを使う」と
222268

223269
- ファーストリリース
224270

271+
### 0.2.0 (2023/12/18)
272+
273+
- チャットのログを保存する機能を追加
274+
- ユーザー(あなた)のメッセージを読み上げる機能を追加
275+
- 設定用のコマンドを追加
276+
- chat_history_sizeが効かないバグを修正
277+
225278
## さいごに
226279

227280
楽しいと感じてくれると嬉しいのだ。また、使った感想などをissueなどに書き込んでくれるともっと嬉しいのだ。不定期でバージョンアップしていく予定なのでよろしくお願いしますなのだ。

build.bat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pyinstaller --onefile --icon=zundagpt.ico --name ZundaGPT main.py

chat.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,25 @@
66
# このソースコードは MITライセンス の下でライセンスされています。
77
# ライセンスの詳細については、このプロジェクトのLICENSEファイルを参照してください。
88

9+
import json
910
import os
11+
from datetime import datetime
1012
from typing import Tuple
1113

1214
from openai import OpenAI
1315
from openai import AzureOpenAI
1416

1517
# チャット基底クラス
1618
class Chat:
17-
def __init__(self, client, model: str, instruction: str, bad_response: str, history_size: int):
19+
def __init__(self, client, model: str, instruction: str, bad_response: str, history_size: int, log_folder: str):
1820
self.messages = []
1921
self.client = client
2022
self.model = model
2123
self.instruction = instruction
2224
self.bad_response = bad_response
2325
self.history_size = history_size
26+
self.log_folder = log_folder
27+
self.chat_start_time = datetime.now()
2428

2529
# メッセージを送信して回答を得る
2630
def send_message(self, text: str) -> Tuple[str, int]:
@@ -32,13 +36,27 @@ def send_message(self, text: str) -> Tuple[str, int]:
3236
content = response.choices[0].message.content
3337
if content:
3438
self.messages.append({"role": role, "content": content})
39+
self.write_chat_log()
3540
return content, response.usage.total_tokens
3641
else:
3742
return self.bad_response, 0
43+
44+
# チャットのログを保存する
45+
def write_chat_log(self):
46+
if self.log_folder == "":
47+
return
48+
49+
if not os.path.exists(self.log_folder):
50+
os.mkdir(self.log_folder)
51+
52+
filename = self.chat_start_time.strftime("chatlog-%Y%m%d-%H%M%S.txt")
53+
path = os.path.join(self.log_folder, filename)
54+
with open(path, "w", encoding="utf-8") as file:
55+
json.dump(self.messages, file, ensure_ascii=False, indent=4)
3856

3957
# OpenAI チャットクラス
4058
class ChatOpenAI(Chat):
41-
def __init__(self, model: str, instruction: str, bad_response: str, history_size: int):
59+
def __init__(self, model: str, instruction: str, bad_response: str, history_size: int, log_folder: str):
4260
api_key = os.environ.get("OPENAI_API_KEY")
4361
if api_key is None:
4462
raise ValueError("環境変数 OPENAI_API_KEY が設定されていません。")
@@ -49,12 +67,13 @@ def __init__(self, model: str, instruction: str, bad_response: str, history_size
4967
model = model,
5068
instruction = instruction,
5169
bad_response = bad_response,
52-
history_size = history_size
70+
history_size = history_size,
71+
log_folder = log_folder
5372
)
5473

5574
# Azure OpenAI チャットクラス
5675
class ChatAzureOpenAI(Chat):
57-
def __init__(self, model: str, instruction: str, bad_response: str, history_size: int):
76+
def __init__(self, model: str, instruction: str, bad_response: str, history_size: int, log_folder: str):
5877
endpoint = os.environ.get("AZURE_OPENAI_ENDPOINT")
5978
if endpoint is None:
6079
raise ValueError("環境変数 AZURE_OPENAI_ENDPOINT が設定されていません。")
@@ -69,17 +88,18 @@ def __init__(self, model: str, instruction: str, bad_response: str, history_size
6988
model = model,
7089
instruction = instruction,
7190
bad_response = bad_response,
72-
history_size = history_size
91+
history_size = history_size,
92+
log_folder = log_folder
7393
)
7494

7595
# チャットファクトリー
7696
class ChatFactory:
7797
# api_idに基づいてChatオブジェクトを作成する
7898
@classmethod
79-
def create(cls, api_id: str, model: str, instruction: str, bad_response: str, history_size: int) -> Chat:
99+
def create(cls, api_id: str, model: str, instruction: str, bad_response: str, history_size: int, log_folder: str) -> Chat:
80100
if api_id == "OpenAI":
81-
return ChatOpenAI(model, instruction, bad_response, history_size)
101+
return ChatOpenAI(model, instruction, bad_response, history_size, log_folder)
82102
elif api_id == "AzureOpenAI":
83-
return ChatAzureOpenAI(model, instruction, bad_response, history_size)
103+
return ChatAzureOpenAI(model, instruction, bad_response, history_size, log_folder)
84104
else:
85105
raise ValueError("API IDが間違っています。")

0 commit comments

Comments
 (0)