File size: 3,036 Bytes
02a63e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3f5aab0
02a63e4
 
 
 
5399754
 
 
3f5aab0
02a63e4
 
 
3f5aab0
 
02a63e4
 
 
3f5aab0
02a63e4
5399754
3f5aab0
 
 
 
 
 
 
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
import gradio as gr
from langchain.chains import RetrievalQAWithSourcesChain
from langchain.chat_models import ChatOpenAI
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.prompts.chat import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
    SystemMessagePromptTemplate,
)
from langchain.vectorstores import Chroma

from constants import persist_directory

embedding = OpenAIEmbeddings()
vector_store = Chroma(persist_directory=persist_directory, embedding_function=embedding)
retriever = vector_store.as_retriever(search_kwargs={"k": 5})

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

system_template = """Your name is Dale Carnegie. You act like Dale Carnegie. 
Never reveal that it is an AI. Use the following pieces of context to answer the users question shortly.
Given the following summaries of a long document and a question, create a final answer with references.
If you don't know the answer, just say that "I don't know", don't try to make up an answer.
----------------
{summaries}

You MUST answer in Korean and in Markdown format:"""

messages = [
    SystemMessagePromptTemplate.from_template(system_template),
    HumanMessagePromptTemplate.from_template("{question}"),
]

prompt = ChatPromptTemplate.from_messages(messages)

chain_type_kwargs = {"prompt": prompt}

chain = RetrievalQAWithSourcesChain.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    return_source_documents=True,
    chain_type_kwargs=chain_type_kwargs,
    reduce_k_below_max_tokens=True,
    verbose=False,
)


def respond(message, chat_history):
    if len(chat_history) == 0:
        initial_greeting = "안녕하세요!\n저는 데일 카네기처럼 경험과 지식을 갖춘 인공지능 ChatGPT입니다. 데일 카네기는 인간관계와 소통에 대한 전문가이며, 많은 사람들이 그의 조언을 참고하고 있습니다. 어떤 도움이 필요하신가요? 데일 카네기와 관련된 질문이 있으시면 편안하게 물어보세요!"
        chat_history.append(("Bot", initial_greeting))

    result = chain(message)

    bot_message = result["answer"]
    chat_history.append((message, bot_message))

    return "", chat_history


with gr.Blocks(theme=gr.themes.Soft()) as demo:
    gr.Markdown("# 안녕하세요. 데일 카네기와 대화해보세요.")
    initial_greeting = "안녕하세요!\n저는 데일 카네기처럼 경험과 지식을 갖춘 인공지능 ChatGPT입니다. 데일 카네기는 인간관계와 소통에 대한 전문가이며, 많은 사람들이 그의 조언을 참고하고 있습니다. 어떤 도움이 필요하신가요? 데일 카네기와 관련된 질문이 있으시면 편안하게 물어보세요!"
    chatbot = gr.Chatbot(label="채팅창", value=[(None, initial_greeting)])
    msg = gr.Textbox(label="입력")
    clear = gr.Button("초기화")
    msg.submit(respond, [msg, chatbot], [msg, chatbot])
    clear.click(lambda: None, None, chatbot, queue=False)

demo.launch(debug=False)