heysho commited on
Commit
04d6a57
1 Parent(s): ac46948

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +103 -0
app.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import traceback
2
+ import streamlit as st
3
+ from langchain_core.prompts import ChatPromptTemplate
4
+ from langchain_core.output_parsers import StrOutputParser
5
+ from langchain_openai import ChatOpenAI
6
+ from langchain_anthropic import ChatAnthropic
7
+ from langchain_google_genai import ChatGoogleGenerativeAI
8
+
9
+ ###### dotenv を利用する場合 ######
10
+ try:
11
+ from dotenv import load_dotenv
12
+ load_dotenv()
13
+ except ImportError:
14
+ import warnings
15
+ warnings.warn("dotenv not found. Please make sure to set your environment variables manually.", ImportWarning)
16
+ ################################################
17
+
18
+
19
+ PROMPT = """
20
+ あなたはユーザーがメール返信を生成するのを助けるAI言語モデルです。メール会話の文脈を踏まえ、提供された入力に基づいて適切な構造の応答を作成します。応答は指定されたトーンと長さに合わせてください。
21
+
22
+ 入力:
23
+ 1. 送信者: メールを送る人(例: 上司、クライアントなど)
24
+ 2. メールの件名: メールの件名(例: 会議のスケジュールについて)
25
+ 3. メールメッセージ: 送信者のメールの内容(例: 明日の会議の時間を調整したいのですが、午後は空いていますか?)
26
+ 4. あなたが言いたいこと: 希望する返答(例: 2時以降であれば対応可能です。)
27
+ 5. 長さ: 応答の希望する長さ(例: 100文字以内)
28
+
29
+ 出力:
30
+ 送信者のメッセージに対処し、ユーザーの希望する返答を取り入れ、プロフェッショナルなトーンを保ちながら返信を生成してください。
31
+
32
+ 例:
33
+ 送信者: クライアント
34
+ 件名: 会議のスケジュールについて
35
+ メッセージ: 明日の会議の時間を調整したいのですが、午後は空いていますか?
36
+ 返したい言葉: 2時以降であれば対応可能です。
37
+ 長さ: 100文字
38
+ 生成された返信: [クライアント名]様、ご連絡ありがとうございます。明日の会議について、2時以降でご都合がよろしいですね。この時間で問題ないかご確認ください。よろしくお願いいたします。[あなたの名前]
39
+
40
+ 提供された入力に基づいて返信を生成してください。
41
+ ---
42
+ - 送信者: {sender},
43
+ - メールの件名: {subject},
44
+ - 受信者のメールの内容:{message},
45
+ - あなたが言いたいこと:{reply},
46
+ ---
47
+ """
48
+
49
+ def init_page():
50
+ st.set_page_config(
51
+ page_title="Eメール返信AIエージェント",
52
+ page_icon="✉️"
53
+ )
54
+ st.header("Eメール返信AIエージェント ✉️")
55
+
56
+
57
+ def select_model(temperature=0):
58
+ models = ("GPT-4o","GPT-4o-mini", "Claude 3.5 Sonnet", "Gemini 1.5 Pro")
59
+ model_choice = st.radio("Choose a model:", models)
60
+ if model_choice == "GPT-4o":
61
+ return ChatOpenAI(temperature=temperature, model_name="gpt-4o")
62
+ elif model_choice == "GPT-4o-mini":
63
+ return ChatOpenAI(temperature=temperature, model_name="gpt-4o-mini")
64
+ elif model_choice == "Claude 3.5 Sonnet":
65
+ return ChatAnthropic(temperature=temperature, model_name="claude-3-5-sonnet-20240620")
66
+ elif model_choice == "Gemini 1.5 Pro":
67
+ return ChatGoogleGenerativeAI(temperature=temperature, model="gemini-1.5-pro-latest")
68
+
69
+ def init_chain():
70
+ llm = select_model()
71
+ prompt = ChatPromptTemplate.from_messages([
72
+ ("user", PROMPT),
73
+ ])
74
+ output_parser = StrOutputParser()
75
+ chain = prompt | llm | output_parser
76
+ return chain
77
+
78
+ def main():
79
+ init_page()
80
+ chain = init_chain()
81
+ if chain:
82
+ sender = st.selectbox("送信者",("同僚", "上司", "クライアント", "友人"),key="sender")
83
+ subject = st.text_input("メールの件名(例: 会議のスケジュールについて)", key="subject")
84
+ message = st.text_area("受信者のメールの内容:(例: 明日の会議の時間を調整したいのですが、午後は空いていますか?)", key="message")
85
+ reply = st.text_input("あなたが言いたいこと:(例: 2時以降で対応可能です。)", key="reply")
86
+ if st.button("Submit"):
87
+ result = chain.stream({"sender": sender, "subject": subject, "message": message, "reply": reply})
88
+ st.write(result)
89
+
90
+
91
+ if __name__ == '__main__':
92
+ main()
93
+
94
+ # Style adjustments (optional, remove if not needed)
95
+ st.markdown(
96
+ """
97
+ <style>
98
+ /* Custom style adjustments */
99
+ .st-emotion-cache-iiif1v { display: none !important; }
100
+ </style>
101
+ """,
102
+ unsafe_allow_html=True,
103
+ )