Skip to content

Commit b21a6c0

Browse files
authored
Add files via upload
1 parent 63c200d commit b21a6c0

40 files changed

+1391
-0
lines changed

chap02/02/main.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from openai import OpenAI
2+
3+
client = OpenAI()
4+
5+
completion = client.chat.completions.create(
6+
model="gpt-4o-mini",
7+
messages=[
8+
{"role": "system", "content": "You are a helpful assistant."},
9+
{
10+
"role": "user",
11+
"content": "Write a haiku about recursion in programming."
12+
}
13+
]
14+
)
15+
# Returns a chat completion object
16+
print(completion)
17+
print(completion.choices[0].message)

chap02/05/main.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from openai import OpenAI
2+
3+
client = OpenAI()
4+
5+
completion = client.chat.completions.create(
6+
model="gpt-4o-mini",
7+
messages=[
8+
{"role": "system", "content": "あなたは大学教授です"},
9+
{"role": "user", "content": "AIについて少し解説してください"}
10+
],
11+
max_tokens=200
12+
)
13+
# Returns a chat completion object
14+
print(completion)
15+
print(completion.choices[0].message)

chap03/02/main.py

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from openai import OpenAI
2+
client = OpenAI()
3+
4+
# MODEL_ENGINE = "gpt-3.5-turbo"
5+
MODEL_ENGINE = "gpt-4o-mini"
6+
ROLE_SYSTEM = {"role": "system", "content":"あなたは優秀な教授です"}
7+
8+
messages = []
9+
messages.append(ROLE_SYSTEM)
10+
11+
def generate_chat_completion(user_input=""):
12+
messages.append({"role": "user", "content": user_input})
13+
response = client.chat.completions.create(
14+
model=MODEL_ENGINE,
15+
messages=messages,
16+
temperature=0.8,
17+
max_tokens=100,
18+
)
19+
message = response.choices[0].message
20+
messages.append(message)
21+
print("ボット: " + message.content.replace("\n", ""))
22+
print()
23+
print(messages)
24+
25+
def main():
26+
while True:
27+
print("\n----------------------------------------\n")
28+
print(" こんにちは AI-CHATBOT です\n")
29+
print("選択してください\n")
30+
print("1 -> チャット開始")
31+
print("2 -> 終了")
32+
choice = input("1か2を押してください: ")
33+
if choice == "1":
34+
start_chat()
35+
elif choice == "2":
36+
exit()
37+
else:
38+
print("正しく入力してください")
39+
40+
41+
def start_chat():
42+
print("チャットを終わるには End と入力してください")
43+
print("\n 新規チャット ")
44+
print("---------------------")
45+
46+
while True:
47+
user_input = input("あなた: ")
48+
49+
if user_input.lower() == "end":
50+
break
51+
else:
52+
generate_chat_completion(user_input)
53+
54+
55+
if __name__ == "__main__":
56+
main()

chap03/03/app_01.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#
2+
# streamlitのインスト-ル
3+
# pip install streamlit
4+
#
5+
# アプリの実行
6+
# streamlit run app.py
7+
#
8+
# 停止
9+
# Ctrl+c
10+
11+
import streamlit as st # 別名をstにすることが多い
12+
13+
# タイトル
14+
st.title("streamlitのページ")
15+
# ヘッダー
16+
st.header("header")
17+
# サブヘッダー
18+
st.subheader("subheader")
19+
# テキスト
20+
st.text("text")
21+
# st.write()はMarkdown対応
22+
st.write("# headline1")
23+
st.write("## headline1")
24+
st.write("### headline1")
25+
26+
# 明示的にmarkdown記法
27+
st.markdown("# Hello, streamlit!")

chap03/03/app_02.py

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import streamlit as st
2+
import time
3+
4+
#if st.button("Click me!"):
5+
6+
# テキスト入力ボックス
7+
text_input = st.text_input("Input", "テキストを入力してください")
8+
# テキストエリア
9+
text_area = st.text_area("Text Area", "テキストを入力してください")
10+
11+
if st.button("回答"):
12+
with st.spinner("回答を生成中・・・"):
13+
time.sleep(3)
14+
st.write("終了")

chap03/03/app_03.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import streamlit as st
2+
import time
3+
4+
with st.form("my_form", clear_on_submit=False):
5+
name = st.text_input('名前を入力してください')
6+
options = st.multiselect(
7+
"見たい競技は何ですか",
8+
["サッカー", "バレーボール", "陸上", "卓球", "柔道"],
9+
#default=['Yellow', 'Red'] # デフォルトの設定
10+
)
11+
description = st.text_area("詳細な希望を入力してください")
12+
submitted = st.form_submit_button("スケジュールを立てる")
13+
14+
15+
if submitted:
16+
with st.spinner("スケジュールを立てる..."):
17+
time.sleep(3)
18+
st.subheader(name + "様")
19+
st.text(description)
20+
st.text("あなたの旅行計画はこれです!")

chap03/04/app.py

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import streamlit as st
2+
3+
#
4+
# https://docs.streamlit.io/develop/tutorials/llms/build-conversational-apps
5+
#
6+
7+
st.title("Echo Bot")
8+
9+
if "messages" not in st.session_state:
10+
# リストの中にディクショナリー
11+
st.session_state["messages"] = []
12+
# チャット履歴を全て表示
13+
for message in st.session_state.messages:
14+
with st.chat_message(message["role"]):
15+
st.markdown(message["content"])
16+
17+
print(st.session_state.messages)
18+
19+
# ユーザーの入力を受け取るには、st.chat_inputを使用
20+
# st.chat_inputは第一引数にはプロンプト文字列を指定
21+
if prompt := st.chat_input("最近どう?"):
22+
23+
# ユーザの入力を表示
24+
with st.chat_message("user"):
25+
st.markdown(prompt)
26+
# ユーザの入力をチャット履歴に追加
27+
st.session_state.messages.append({"role": "user", "content": prompt})
28+
29+
response = f"Echo: {prompt}"
30+
# ChatBotの返答を表示
31+
with st.chat_message("assistant"):
32+
st.markdown(response)
33+
# ChatBotの返答をチャット履歴に追加
34+
st.session_state.messages.append({"role": "assistant", "content": response})

chap03/05/app.py

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import streamlit as st
2+
from generate_mess import generate_chat_completion
3+
4+
st.title("Echo Bot")
5+
6+
if "messages" not in st.session_state:
7+
st.session_state["messages"] = []
8+
9+
for message in st.session_state.messages:
10+
with st.chat_message(message["role"]):
11+
st.markdown(message["content"])
12+
13+
if prompt := st.chat_input("何か質問はありませんか?"):
14+
15+
with st.chat_message("user"):
16+
st.markdown(prompt)
17+
st.session_state.messages.append({"role": "user", "content": prompt})
18+
19+
response = generate_chat_completion(prompt)
20+
with st.chat_message("assistant"):
21+
st.markdown(response)
22+
st.session_state.messages.append({"role": "assistant", "content": response})

chap03/05/generate_mess.py

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from openai import OpenAI
2+
from dotenv import load_dotenv
3+
4+
load_dotenv() #上位フォルダにある.envファイルも読んでくれる
5+
client = OpenAI()
6+
7+
8+
9+
# MODEL_ENGINE = "gpt-3.5-turbo"
10+
MODEL_ENGINE = "gpt-4o-mini"
11+
ROLE_SYSTEM = {"role": "system", "content":"あなたは優秀な教授です"}
12+
13+
messages = []
14+
messages.append(ROLE_SYSTEM)
15+
16+
def to_dict(obj):
17+
return {
18+
"content": obj.content,
19+
"role": obj.role,
20+
}
21+
22+
def generate_chat_completion(user_input=""):
23+
messages.append({"role": "user", "content": user_input})
24+
response = client.chat.completions.create(
25+
model=MODEL_ENGINE,
26+
messages=messages,
27+
temperature=0.8,
28+
max_tokens=100,
29+
)
30+
message = response.choices[0].message
31+
messages.append(to_dict(message))
32+
return message.content

chap03/06/app.py

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import streamlit as st
2+
from generate_mess import generate_chat_completion
3+
4+
st.title("Echo Bot")
5+
6+
if "messages" not in st.session_state:
7+
st.session_state["messages"] = []
8+
9+
for message in st.session_state.messages:
10+
with st.chat_message(message["role"]):
11+
st.markdown(message["content"])
12+
13+
if prompt := st.chat_input("何か質問はありませんか?"):
14+
15+
with st.chat_message("user"):
16+
st.markdown(prompt)
17+
st.session_state.messages.append({"role": "user", "content": prompt})
18+
19+
response = generate_chat_completion(prompt)
20+
with st.chat_message("assistant"):
21+
st.markdown(response)
22+
st.session_state.messages.append({"role": "assistant", "content": response})

chap03/06/generate_mess.py

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from openai import OpenAI
2+
from dotenv import load_dotenv
3+
4+
load_dotenv() #上位フォルダにある.envファイルも読んでくれる
5+
client = OpenAI()
6+
7+
8+
9+
# MODEL_ENGINE = "gpt-3.5-turbo"
10+
MODEL_ENGINE = "gpt-4o-mini"
11+
ROLE_SYSTEM = {"role": "system", "content":"あなたは偏屈な知識人です。語尾に「だなす」と付けます"}
12+
13+
messages = []
14+
messages.append(ROLE_SYSTEM)
15+
16+
def to_dict(obj):
17+
return {
18+
"content": obj.content,
19+
"role": obj.role,
20+
}
21+
22+
def generate_chat_completion(user_input=""):
23+
messages.append({"role": "user", "content": user_input})
24+
response = client.chat.completions.create(
25+
model=MODEL_ENGINE,
26+
messages=messages,
27+
temperature=0.3,
28+
# max_tokens=150,
29+
)
30+
message = response.choices[0].message
31+
messages.append(to_dict(message))
32+
return message.content
33+
# print("ボット: " + message.content.replace("\n", ""))
34+

chap04/02/app.py

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import streamlit as st
2+
from openai import OpenAI
3+
from dotenv import load_dotenv
4+
5+
load_dotenv()
6+
client = OpenAI()
7+
8+
st.title("OpenAI TTS(音声合成)")
9+
user_input = st.text_area("音声にするテキストを入力してください", "")
10+
11+
# 利用可能な声のトーン
12+
tones = ["alloy", "echo", "fable", "onyx", "nova", "shimmer"]
13+
selected_tone = st.radio("トーンを選択してください", tones)
14+
15+
# 結果をファイルに保存
16+
speech_file = "speech.mp3"
17+
18+
if st.button('開始'):
19+
if user_input:
20+
with client.audio.speech.with_streaming_response.create(
21+
model="tts-1",
22+
voice=selected_tone,
23+
input=user_input,
24+
) as response:
25+
response.stream_to_file(speech_file)
26+
27+
# audioプレイヤー表示
28+
st.audio(speech_file)
29+
else:
30+
# 警告メッセージ
31+
st.warning("音声にするテキストを入力してください。")

chap04/02/main.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from openai import OpenAI
2+
client = OpenAI()
3+
4+
speech_file_path = "speech.mp3"
5+
with client.audio.speech.with_streaming_response.create(
6+
model="tts-1",
7+
voice="alloy",
8+
input="Today is a wonderful day to build something people love!"
9+
# input="Aujourd’hui est une journée merveilleuse pour construire quelque chose que les gens aiment!"
10+
# input="今日は、人々に愛されるものを構築するには素晴らしい日です。"
11+
) as response:
12+
response.stream_to_file(speech_file_path)

chap04/03/app.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import streamlit as st
2+
from openai import OpenAI
3+
from dotenv import load_dotenv
4+
5+
load_dotenv()
6+
7+
client = OpenAI()
8+
9+
st.title("OpenAI 音声文字起こし")
10+
11+
# 音声ファイルのアップロード
12+
audio_file = st.file_uploader("音声ファイルをアップロードしてください", type=["m4a", "mp3", "webm", "mp4", "mpga", "wav"])
13+
14+
15+
# 音声ファイルがアップロードされていたら、
16+
if audio_file is not None:
17+
st.audio(audio_file, format="audio/wav")
18+
if st.button("文字起こしを実行する"):
19+
with st.spinner("文字起こし中です..."):
20+
transcription = client.audio.transcriptions.create( # transcribe(文字に起こす)
21+
model="whisper-1",
22+
file=audio_file,
23+
# response_format="text"
24+
)
25+
st.success("文字起こしが完了しました!")
26+
st.text(transcription.text)

0 commit comments

Comments
 (0)