File size: 4,333 Bytes
04d6a57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f45e188
04d6a57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0342615
dd6d5fe
 
 
04d6a57
 
383e439
04d6a57
 
383e439
2b066df
04d6a57
 
 
dd6d5fe
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import traceback
import streamlit as st
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_google_genai import ChatGoogleGenerativeAI

PROMPT = """
あなたはユーザーがメール返信を生成するのを助けるAI言語モデルです。メール会話の文脈を踏まえ、提供された入力に基づいて適切な構造の応答を作成します。応答は指定されたトーンと長さに合わせてください。

入力:
1. 送信者: メールを送る人(例: 上司、クライアントなど)
2. メールの件名: メールの件名(例: 会議のスケジュールについて)
3. メールメッセージ: 送信者のメールの内容(例: 明日の会議の時間を調整したいのですが、午後は空いていますか?)
4. あなたが言いたいこと: 希望する返答(例: 2時以降であれば対応可能です。)
5. 長さ: 応答の希望する長さ(例: 100文字以内)

出力:
送信者のメッセージに対処し、ユーザーの希望する返答を取り入れ、プロフェッショナルなトーンを保ちながら返信を生成してください。

例:
 送信者: クライアント
 件名: 会議のスケジュールについて
 メッセージ: 明日の会議の時間を調整したいのですが、午後は空いていますか?
 返したい言葉: 2時以降であれば対応可能です。
 長さ: 100文字
 生成された返信: [クライアント名]様、ご連絡ありがとうございます。明日の会議について、2時以降でご都合がよろしいですね。この時間で問題ないかご確認ください。よろしくお願いいたします。[あなたの名前]

提供された入力に基づいて返信を生成してください。
---
- 送信者: {sender},
- メールの件名: {subject},
- 受信者のメールの内容:{message},
- あなたが言いたいこと:{reply},
---
"""

def init_page():
    st.set_page_config(
        page_title="Eメール返信AIエージェント",
        page_icon="✉️"
    )
    st.header("Eメール返信AIエージェント ✉️")


def select_model(temperature=0):
    models = ("GPT-4o","GPT-4o-mini", "Claude 3.5 Sonnet", "Gemini 1.5 Pro")
    model_choice = st.radio("モデルを選択:", models)
    if model_choice == "GPT-4o":
        return ChatOpenAI(temperature=temperature, model_name="gpt-4o")
    elif model_choice == "GPT-4o-mini":
        return ChatOpenAI(temperature=temperature, model_name="gpt-4o-mini")
    elif model_choice == "Claude 3.5 Sonnet":
        return ChatAnthropic(temperature=temperature, model_name="claude-3-5-sonnet-20240620")
    elif model_choice == "Gemini 1.5 Pro":
        return ChatGoogleGenerativeAI(temperature=temperature, model="gemini-1.5-pro-latest")

def init_chain():
    llm = select_model()
    prompt = ChatPromptTemplate.from_messages([
        ("user", PROMPT),
    ])
    output_parser = StrOutputParser()
    chain = prompt | llm | output_parser
    return chain

def main():
    init_page()
    # Style adjustments (optional, remove if not needed)
    st.markdown("""<style>.st-emotion-cache-15ecox0 { display: none !important; }
    @media (max-width: 50.5rem) {.st-emotion-cache-13ln4jf {max-width: calc(0rem + 100vw);}}
    </style>""",unsafe_allow_html=True,)
    chain = init_chain()
    if chain:
        sender = st.selectbox("送信者",("同僚", "上司", "クライアント", "外注先のベンダー","友人"),key="sender")
        subject = st.text_input("メールの件名(例: 会議のスケジュールについて)", key="subject")
        message = st.text_area("受信者のメールの内容:(例: 明日の会議の時間を調整したいのですが、午後は空いていますか?)", key="message")
        reply = st.text_area("あなたが言いたいこと:(例: 2時以降で対応可能です。)", key="reply")
        if st.button("返信内容を生成する"):
            result = chain.stream({"sender": sender, "subject": subject, "message": message, "reply": reply})
            st.write(result)   
      
if __name__ == '__main__':
    main()