이전 내용
음성 인식봇, 문서 요약봇에 이어 일정 관리봇을 제작해 본다.
일정 관리봇 제작하기
◆ 일정 관리봇 레이아웃 구성하기
탭을 제외한 일정 관리봇의 레이아웃은 아래와 같이 세로로 총 4블록, 3번째 블록은 가로로 2블록으로 나뉘어 있다.
with gr.Tab("일정 관리봇"):
with gr.Row():
#1
gr.Markdown()
with gr.Row():
#2
gr.Chatbot()
with gr.Row():
#3
gr.Textbox()
#4
gr.Button()
with gr.Row():
#5
gr.File()
app.launch()
이제 구체적으로 하나씩 컴포넌트를 수정해 본다.
- 일정 관리봇 타이틀 구현
with gr.Row():
#1
gr.Markdown(
value="""
# <center>일정 관리봇</center>
<center> AI 인공지능 비서 DUDE 입니다. 일정 관리를 위한 봇입니다.</center>
""")
- 일정 관리봇 채팅 화면 구현
with gr.Row():
#2
gr.Chatbot(
value=[
[None, "안녕하세요, 일정 이름, 시간, 일정 설명으로 일정을 추가할 수 있습니다. \n\
예시: 크리스마스, 2024년 12월 25일 12시 00분, 올해의 크리스마스 일정 추가해 줘\n\
전체 일정이 보고 싶다면 전체일정 보여줘 라고 말해 주세요."],
],
show_label="일정 관리"
)
- 채팅 입력 창과 채팅 제출 버튼 및 엑셀 파일 업로드 구현
with gr.Row():
#3
gr.Textbox(
label="채팅",
lines=1,
placeholder="채팅 입력 창",
scale=8,
)
#4
gr.Button(
value="보내기",
scale=2,
visible="primary",
)
with gr.Row():
#5
gr.File(
label="일정 파일을 업로드해 주세요.",
scale=8,
visible="primary",
height=100
)
각각의 컴포넌트를 추가하면 하단과 같이 완성된다.
◆ 일정 관리봇 레이아웃 구성하기 - 상세 설정
각각의 컴포넌트에 변수명과 구체적인 매개변수를 설정한다.
◆ 일정 관리봇 기능 구현하기
일정 관리를 위해서는 일정을 따로 데이터베이스에 저장해야 한다. 챗봇에서는 엑셀 파일로 저장해 간단하게 일정을 기록하고 다시 불러들여와 일정을 확인할 수 있도록 한다.
- 프롬프트 정의
일정을 추가하고 관리하기 위해서는 JSON 형태로 답변을 받아야 한다. 따라서 답변을 받고자 하는 프롬프트를 좀 더 자세하게 설정하여 원하는 JSON 결과를 얻을 수 있도록 프롬프트를 작성해야 한다.
system_schedule_ko="""일정 관리에 대한 사용자 입력이 주어집니다.
'schedule_type,' 'schedule_content,' 'schedule_content_detail,' 'year,'
'month,' 'day,' 'hour,' 및 'min'과 같은 구성 요소가 있습니다.
'schedule_type'은 조회, 삭제, 추가, 업데이트 중 하나일 수 있습니다.
'year,' 'month,' 'day,' 'hour,' 및 'min'에 대한 값은 숫자여야 합니다.
'schedule_content,' 'schedule_content_detail,' 'year,' 'month,' 'day,' 'hour,' 및 'min'에 대한 입력은
json 문자열 형식으로 이루어져야 합니다."""
system_setting_schedule=SystemMessagePromptTemplate.from_template(system_schedule_ko)
# 프롬프트 설정
schedule_prompt=ChatPromptTemplate.from_messages([
system_setting_schedule,
MessagesPlaceholder(variable_name="DUDE_schedule"),
HumanMessagePromptTemplate.from_template("{master_user}"),
])
JSON 결과는 schedule_type 키 값에 삭제, 추가, 업데이트, 조회 중 하나가 입력된다.
그리고 schedule_content와 시간, schedule_content_detail로 받을 수 있도록 설정한다.
최종적으로 JSON 결과를 출력으로 받게 된다.
만약
크리스마스, 2024년 12월 25일 12시 00분, 올해의 화이트 크리스마스 일정 추가해 줘
라고 입력한다면 답변은 다음과 같이 JSON 형태로 받을 수 있다.
{
"schedule_type": "추가",
"schedule_content": "크리스마스",
"schedule_content_detail": "올해의 화이트 크리스마스",
"year": 2024,
"month": 12,
"day": 25,
"hour": 12,
"min": 0
}
챗GPT를 이용해 일정을 대략적으로 적었을 때 JSON으로 내용을 요약하여 답변을 받을 수 있다. 이렇게 받은 결과를 이용해서 JSON 파일에 저장하여 일정을 관리하는 챗봇을 만들 수 있다.
- 메모리 설정 및 랭체인 설정
# 메모리 설정
schedule_memory=ConversationBufferWindowMemory(
memory_key="DUDE_schedule",
ai_prefix="AI 비서 DUDE schedule",
human_prefix="사용자",
return_messages=True,
k=10
)
# llm 모델 정의
chatgpt=ChatOpenAI(
temperature=0,
max_tokens=2048,
model_name="gpt-3.5-turbo"
)
# llmchain 정의
conversation_schedule=LLMChain(
llm=chatgpt, # LLM
prompt=schedule_prompt,
verbose=True, # True 로 설정 시 로그 출력
memory=schedule_memory
)
◆ 챗봇 기능 추가
- 일정 관리 엑셀 파일 관리하기
- 엑셀 파일 업로드 시 저장하기
- 인공지능 답변 및 일정 저장하기
- 이벤트 리스너 추가하기
- 일정 관리 엑셀 파일 관리하기
일정을 추가하거나 전체 일정을 요청했을 때 저장된 엑셀 파일을 불러와 수정할 수 있도록 한다. 엑셀 파일은 주로 판다스 라이브러리를 이용해 관리할 수 있으므로, 판다스 설치가 선행되어야 한다.
또한, 파이썬에서 엑셀 파일을 열 수 있는 openpyxl 모듈도 없다면 설치해야 한다.
pip install pandas
pip install openpyxl # openpyxl 없을 경우
그리고 일정을 관리하기 위한 엑셀 파일을 생성한다.
# 일정 관리 excel 파일 관리
import pandas as pd
# 처음 파일 생성
initial_df=pd.DataFrame(columns=[
"schedule_type",
"schedule_content",
"schedule_content_detail",
"year",
"month",
"day",
"hour",
"min"
])
excel_file_path="schedule.xlsx"
initial_df.to_excel(excel_file_path, index=False)
- 엑셀 파일 업로드 시 저장하기
기존에 가지고 있던 일정 파일이 있다면 업로드할 수 있다. 형식에 맞춰 일정을 저장했다면 새로운 일정을 추가하게 된다.
def schedule_bot_save(submit_file):
temp_excel_file=pd.read_excel(submit_file)
temp_excel_file.to_excel(excel_file_path, index=False)
- temp_excle_file=pd.read_excel(submit_file): 데이터 프레임 형식으로 반환하여 temp_excel_file 변수에 저장
- temp_excel_file.to_excel(excel_file_path, index=False): 읽어들인 파일을 excel_file_path로 설정하여 저장
- 인공지능 답변 및 일정 저장하기
인공지능 답변 및 일정에 대한 질문에 답변할 수 있도록 함수를 작성한다.
import json
def schedule_bot_chat(message, chat_history):
answer=conversation_schedule({"master_user": message})
ai_answer=answer['text']
try:
schedule_dic=json.loads(ai_answer)
if schedule_dic["schedule_type"] == "추가":
schedule_df=pd.read_excel(excel_file_path)
schedule_df=pd.concat([schedule_df, pd.DataFrame([schedule_dic])],
ignore_index=True)
schedule_df.to_excel(excel_file_path, index=False)
chat_history.append([message, f"{schedule_dic['schedule_content']}_일정이 추가되었습니다."])
elif schedule_dic["schedule_type"] == "조회":
schedule_df=[]
if os.path.isfile(excel_file_path):
schedule_df=pd.read_excel(excel_file_path)
chat_history.append([message, "전체 일정을 말씀드리겠습니다."])
for idx, event in schedule_df.iterrows():
chat_history.append(
[None, f"{idx+1}. 일정: {event['schedule_content']}\n"
f"일정 설명: {event['schedule_content_detail']}\n"
f"일정 시간: {event['year']}년, {event['month']}월, {event['day']}일,"
f"{event['hour']}시, {event['min']}분"])
except:
chat_history.append((message, ai_answer))
return "", chat_history # 채팅 기록 반환
▶ try-except 구문을 활용하여 만약 일정을 추가해 달라고 했을 때는 JSON 형식으로 답변을 주게 되는데, 일정 추가가 아닌 일반 답변일 경우에는 except를 통해 출력되도록 하였다.
- ai_answer=conversation({"master_user": message})['text']: 인공지능 답변을 받아 ai_answer 변수로 지정한다.
- schedule_dic=json.loads(ai_answer): 인공지능 답변을 json.loads로 불러들이면 딕셔너리 형태로 받을 수 있다.
- if 문: schedule_type 이 "추가" 인 경우, 일정이 추가되며 schedule_df=pd.read_excel(excel_file_path)을 통해 엑셀 파일을 불러와 schedule_df의 변수에 데이터프레임 형태로 가져온다. pd.concat([schedule_df, pd.DataFrame([schedule_dic])]은 schedule_df에 새로운 일정인 schedule_dic를 추가한다. schedule_df.to_excel()은 추가된 일정을 엑셀 파일로 저장한다.
- elif문: schedule_type의 결과가 "조회"일 경우에 실행된다. os.path.isfile(excel_file_path)는 저장된 엑셀 파일을 불러들여와 schedule_df 변수에 바인딩한다. for idx, event in schedule_df.iterrows()는 schedule_df의 데이터프레임에서 한 줄씩 인덱스 값과 그 값을 가져오기 위한 코드이며, 데이터프레임에 저장된 내용을 한 줄씩 출력한다.
- 이벤트 리스너 추가하기
아래 세 가지 이벤트가 일어났을 때 실행되는 함수와 요소들을 연결한다.
- [보내기] 버튼 클릭
- ENTER 제출
- 엑셀 파일 업로드 시 저장
cb_schedule_submit_btn.click(
fn=schedule_bot_chat,
inputs=[msg_schedule, chatbot_schedule],
outputs=[msg_schedule, chatbot_schedule]
)
msg_schedule.submit(
fn=schedule_bot_chat,
inputs=[msg_schedule, chatbot_schedule],
outputs=[msg_schedule, chatbot_schedule]
)
schedule_file.change(
fn=schedule_bot_save,
inputs=[schedule_file]
)
- fn=schedule_bot_chat: 앞서 만든 schedule_bot_chat 함수를 적용하여 결괏값을 반환받는다.
- inputs=[msg_schedule, chatbot_schedule]: 입력으로는 msg_schedule에 입력된 일정 관련 내용을 받는다.
- outputs= [msg_schedule, chatbot_schedule]: 함수 처리 결과를 JSON으로 받아 처리한 결과를 출력한다.
- 가지고 있는 일정 관련 엑셀 파일이 있다면 저장한 후 동일하게 진행하게 된다.
해당 코드들은 하단에 보이는 위치에 작성하면 된다.
완성된 챗봇 구현해보기
완성된 음성 인식봇, 문서 요약봇, 일정 관리봇을 구현해 본다.
◆ 음성 인식봇
글이나 음성으로 입력된 질문에 답해 주는 봇이 완성되었고, 성공적으로 구현된다.
◆ 문서 요약봇
PDF 문서를 업로드했을 때 간단하게 요약해 주는 봇이 완성되었고, 잘 구현된다.
◆ 일정 관리봇
일정을 추가하거나 조회할 수 있는 일정 관리봇이 완성되었고, 일정 추가 작업이 성공적으로 구현된다.
전체 일정을 보여달라고 했을 때는 다음과 같이 저장된 일정이 출력된다.
또한, 첫 일정은 지정한 경로로 자동 저장되고, 추가되는 일정은 해당 파일에 자동으로 덮어쓰기 된다.
일정 관리봇 전체 코드
(음성 인식봇, 문서 요약봇 포함)
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferWindowMemory
from langchain.prompts import(
ChatPromptTemplate,
MessagesPlaceholder,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
import os
import openai
# 환경변수에서 OpenAI API 키를 읽어옴.
openai_api_key = os.getenv('OPENAI_API_KEY')
# API 키가 환경변수에 설정되어 있는지 확인.
if not openai_api_key:
raise ValueError("환경변수 'OPENAI_API_KEY'가 설정되지 않았습니다.")
# OpenAI API 키를 설정.
openai.api_key = openai_api_key
# OpenAI 클라이언트를 생성.
client = openai.OpenAI()
system_ai_ko = "당신은 인공지능 비서야, pdf 일기, 문서 요약하기, 일정 관리,
날씨, 최단 경로 검색, 웹 검색 등 다양한 내용에 답변할 수 있어야 해."
system_setting = SystemMessagePromptTemplate.from_template(system_ai_ko)
# 프롬프트 설정
voice_bot_prompt = ChatPromptTemplate.from_messages([
system_setting,
MessagesPlaceholder(variable_name="DUDE"),
HumanMessagePromptTemplate.from_template("{master_user}")])
# 메모리 설정
voice_bot_memory = ConversationBufferWindowMemory(memory_key="DUDE",
ai_prefix="AI 비서 DUDE",
human_prefix="사용자:",
return_messages=True,
k=10)
# llm 모델 설정
chatgpt = ChatOpenAI(
temperature=0,
max_tokens=2048,
model_name='gpt-3.5-turbo'
)
# llmchain 정의
conversation=LLMChain(
prompt=voice_bot_prompt,
memory=voice_bot_memory,
llm=chatgpt,
verbose=True
)
from pydub import AudioSegment
import numpy as np
def voice_bot_handle_audio(audio_record):
save_file_path="voice.mp3"
frame_rate=audio_record[0]
audio_data=audio_record[1].tobytes()
sample_width=audio_record[1].dtype.itemsize
audio=AudioSegment(
audio_data,
frame_rate=frame_rate,
sample_width=sample_width,
channels=1,
)
audio.export(save_file_path, format="mp3")
def voice_bot_create_stt():
file_path="voice.mp3"
audio_file=open(file_path, "rb")
transcript=client.audio.transcriptions.create(
model="whisper-1",
file=audio_file)
return transcript.text
def voice_bot_create_audio(text):
response=client.audio.speech.create(
model="tts-1",
voice="onyx",
input=text)
speech_file_path="output.mp3"
with open(speech_file_path, "wb") as audio_file:
audio_file.write(response.content)
def voice_bot_chat(message, cb_user_input_audio, chat_history):
if cb_user_input_audio:
message=voice_bot_create_stt()
ai_answer=conversation({"master_user":message})['text']
chat_history.append((message, ai_answer))
audio_file=voice_bot_create_audio(ai_answer)
return "", audio_file, chat_history
def voice_bot_undo(chat_history):
if len(chat_history) > 1:
chat_history.pop()
return chat_history
def voice_bot_reset(chat_history):
global voice_bot_memory
chat_init=[[None, "안녕하세요, 인공지능 비서 DUDE 입니다. 무엇이든 시켜만 주세요."]]
voice_bot_memory.clear() # 메모리 초기화
return "", chat_init
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.prompts import PromptTemplate
from langchain.chains import MapReduceDocumentsChain
def pdf_loader(pdf_path):
loader=PyPDFLoader(pdf_path)
pdf_doc=loader.load()
return pdf_doc
def pdf_bot_chatbot(pdf_path):
pages_content=pdf_loader(pdf_path)
text_splitter=RecursiveCharacterTextSplitter.from_tiktoken_encoder(
chunk_size=3000,
chunk_overlap=0,
)
# pages_content 내용 분할
split_docs=text_splitter.split_documents(pages_content)
# 분할된 문서의 수
# map template 설정, {pages_content} 분할된 내용이 입력
map_template=""" 다음은 문서 중 일부 내용입니다.
{pages_content}
이 문서의 주요 내용을 요약해 주세요.
"""
# map 기본 프롬프트
map_prompt=PromptTemplate.from_template(map_template)
# 문서 내용이 길 수 있기 때문에 model을 gpt-3.5-turbo-16k로 설정
llm=ChatOpenAI(temperature=0,
model_name='gpt-3.5-turbo-16k')
map_chain=LLMChain(llm=llm, prompt=map_prompt)
# reduce 단계에서 처리할 프롬프트 정의
reduce_template="""다음은 문서 요약의 집합입니다.
{summaries}
이 내용을 바탕으로 통합된 문서 요약을 작성해 주세요.
"""
# reduce 프롬프트
reduce_prompt=PromptTemplate.from_template(reduce_template)
# reduce에서 수행할 LLMChain 정의
reduce_chain=LLMChain(llm=llm, prompt=reduce_prompt)
from langchain.chains.combine_documents.stuff import StuffDocumentsChain
from langchain.chains import ReduceDocumentsChain
# 문서 목록 통합 체인 설정
combine_doc_chain=StuffDocumentsChain(
llm_chain=reduce_chain,
document_variable_name="summaries" # reduce 프롬프트에 대입되는 변수
)
# 분할된 문서 순차적으로 Reduce 처리
reduce_doc_chain=ReduceDocumentsChain(
combine_documents_chain=combine_doc_chain,
collapse_documents_chain=combine_doc_chain,
token_max=4000, # 토큰 최대 개수 설정
)
# 최종 체인 연결
final_chain=MapReduceDocumentsChain(
llm_chain=map_chain, # 각 문서 맵핑
reduce_documents_chain=reduce_doc_chain,
document_variable_name="pages_content",
return_intermediate_steps=False,
)
# 최종 결과 실행
result_summary=final_chain.run(split_docs)
# 요약 결과 출력
return result_summary
system_schedule_ko="""일정 관리에 대한 사용자 입력이 주어집니다.
'schedule_type,' 'schedule_content,' 'schedule_content_detail,' 'year,'
'month,' 'day,' 'hour,' 및 'min'과 같은 구성 요소가 있습니다.
'schedule_type'은 조회, 삭제, 추가, 업데이트 중 하나일 수 있습니다.
'year,' 'month,' 'day,' 'hour,' 및 'min'에 대한 값은 숫자여야 합니다.
'schedule_content,' 'schedule_content_detail,' 'year,' 'month,' 'day,' 'hour,' 및
'min'에 대한 입력은
json 문자열 형식으로 이루어져야 합니다."""
system_setting_schedule=SystemMessagePromptTemplate.from_template(system_schedule_ko)
# 프롬프트 설정
schedule_prompt=ChatPromptTemplate.from_messages([
system_setting_schedule,
MessagesPlaceholder(variable_name="DUDE_schedule"),
HumanMessagePromptTemplate.from_template("{master_user}"),
])
# 메모리 설정
schedule_memory=ConversationBufferWindowMemory(
memory_key="DUDE_schedule",
ai_prefix="AI 비서 DUDE schedule",
human_prefix="사용자",
return_messages=True,
k=10
)
# llm 모델 정의
chatgpt=ChatOpenAI(
temperature=0,
max_tokens=2048,
model_name="gpt-3.5-turbo"
)
# llmchain 정의
conversation_schedule=LLMChain(
llm=chatgpt, # LLM
prompt=schedule_prompt,
verbose=True, # True 로 설정 시 로그 출력
memory=schedule_memory
)
# 일정 관리 excel 파일 관리
import pandas as pd
# 처음 파일 생성
initial_df=pd.DataFrame(columns=[
"schedule_type",
"schedule_content",
"schedule_content_detail",
"year",
"month",
"day",
"hour",
"min"
])
excel_file_path="schedule.xlsx"
initial_df.to_excel(excel_file_path, index=False)
def schedule_bot_save(submit_file):
temp_excel_file=pd.read_excel(submit_file)
temp_excel_file.to_excel(excel_file_path, index=False)
import json
def schedule_bot_chat(message, chat_history):
answer=conversation_schedule({"master_user": message})
ai_answer=answer['text']
try:
schedule_dic=json.loads(ai_answer)
if schedule_dic["schedule_type"] == "추가":
schedule_df=pd.read_excel(excel_file_path)
schedule_df=pd.concat([schedule_df, pd.DataFrame([schedule_dic])],
ignore_index=True)
schedule_df.to_excel(excel_file_path, index=False)
chat_history.append([message, f"{schedule_dic['schedule_content']}_일정이 추가되었습니다."])
elif schedule_dic["schedule_type"] == "조회":
schedule_df=[]
if os.path.isfile(excel_file_path):
schedule_df=pd.read_excel(excel_file_path)
chat_history.append([message, "전체 일정을 말씀드리겠습니다."])
for idx, event in schedule_df.iterrows():
chat_history.append(
[None, f"{idx+1}. 일정: {event['schedule_content']}\n"
f"일정 설명: {event['schedule_content_detail']}\n"
f"일정 시간: {event['year']}년, {event['month']}월, {event['day']}일,"
f"{event['hour']}시, {event['min']}분"])
except:
chat_history.append((message, ai_answer))
return "", chat_history # 채팅 기록 반환
import gradio as gr
with gr.Blocks() as app:
with gr.Tab("음성 인식봇"):
with gr.Column():
#1
gr.Markdown(
value="""
# <center>음성 인식봇</center>
<center>AI 인공지능 비서 DUDE 입니다.
음성으로 묻거나, 문서 요약, 일정 관리를 할 수 있습니다.</center>
"""
)
#2
cb_chatbot=gr.Chatbot(
value=[[None, "안녕하세요, 인공지능 비서 DUDE 입니다. 무엇이든 시켜만 주세요."]],
show_label=False
)
with gr.Row():
#3
cb_user_input=gr.Textbox(
lines=1,
placeholder="입력 창",
container=False,
scale=7
)
#4
cb_audio_record=gr.Audio(
sources=["microphone"],
format="mp3",
scale=1,
min_width=200,
label="음성을 입력해 주세요."
)
# 음성 출력
cb_audio_chatbot=gr.Audio(autoplay=True,
visible=False)
#5
cb_submit_btn=gr.Button(
value="보내기",
scale=1,
visible="primary",
icon="https://cdn-icons-png.flaticon.com/128/12439/12439334.png"
)
# 음성 녹음 완료
cb_audio_record.stop_recording(
fn=voice_bot_handle_audio,
inputs=[cb_audio_record]
)
# [보내기] 버튼 클릭
cb_submit_btn.click(
fn=voice_bot_chat,
inputs=[cb_user_input, cb_audio_record, cb_chatbot],
outputs=[cb_user_input, cb_audio_record, cb_chatbot]
)
# ENTER 제출 입력
cb_user_input.submit(
fn=voice_bot_chat,
inputs=[cb_user_input, cb_audio_record, cb_chatbot],
outputs=[cb_user_input, cb_audio_record, cb_chatbot]
)
with gr.Row():
#6
gr.Button(value="↪️되돌리기").click(
fn=voice_bot_undo,
inputs=[cb_chatbot],
outputs=[cb_chatbot]
)
#7
gr.Button(value="🔄️초기화").click(
fn=voice_bot_reset,
inputs=[cb_chatbot],
outputs=[cb_chatbot]
)
with gr.Tab("문서 요약봇"):
with gr.Row():
#1
gr.Markdown(
value="""
# <center>문서 요약봇</center>
<center> AI 인공지능 비서 DUDE 입니다. PDF를 업로드하면 내용을 번역해 드립니다.</center>
"""
)
with gr.Row():
#2
pdf_input=gr.File()
with gr.Row():
#3
summary_btn=gr.Button(value="문서 요약하기")
with gr.Row():
#4
summary=gr.Textbox(
label="PDF 요약",
lines=8,
placeholder="PDF 요약 내용입니다.",
)
summary_btn.click(
fn=pdf_bot_chatbot,
inputs=[pdf_input],
outputs=[summary]
)
with gr.Tab("일정 관리봇"):
with gr.Row():
#1
gr.Markdown(
value="""
# <center>일정 관리봇</center>
<center> AI 인공지능 비서 DUDE 입니다. 일정 관리를 위한 봇입니다.</center>
""")
with gr.Row():
#2
chatbot_schedule=gr.Chatbot(
value=[
[None, "안녕하세요, 일정 이름, 시간, 일정 설명으로 일정을 추가할 수 있습니다. \n\
예시: 크리스마스, 2024년 12월 25일 12시 00분, 올해의 크리스마스 일정 추가해 줘\n\
전체 일정이 보고 싶다면 전체일정 보여줘 라고 말해 주세요."],
],
show_label=False
)
with gr.Row():
#3
msg_schedule=gr.Textbox(
label="채팅",
lines=1,
placeholder="채팅 입력 창",
scale=8,
)
#4
cb_schedule_submit_btn=gr.Button(
value="보내기",
scale=2,
visible="primary",
)
cb_schedule_submit_btn.click(
fn=schedule_bot_chat,
inputs=[msg_schedule, chatbot_schedule],
outputs=[msg_schedule, chatbot_schedule]
)
msg_schedule.submit(
fn=schedule_bot_chat,
inputs=[msg_schedule, chatbot_schedule],
outputs=[msg_schedule, chatbot_schedule]
)
schedule_file.change(
fn=schedule_bot_save,
inputs=[schedule_file]
)
with gr.Row():
#5
schedule_file=gr.File(
label="일정 파일을 업로드해 주세요.",
scale=8,
visible="primary",
height=100
)
app.launch()
다음 내용
[출처]
Hey, 파이썬! 생성형 AI 활용 앱 만들어줘
'[파이썬 Projects] > <파이썬 Gen AI>' 카테고리의 다른 글
[Gen AI] 스테이블 디퓨전 API (이 아닌 stability.ai API 사용법) (1) | 2024.12.22 |
---|---|
[Gen AI] 그라디오로 두 번째 챗봇 제작하기-2 (1) | 2024.12.21 |
[Gen AI] 그라디오로 두 번째 챗봇 제작하기-1 (1) | 2024.12.20 |
[Gen AI] 문서 요약 프롬프트 제작 (1) | 2024.12.20 |
[Gen AI] 음성 변환 기술 구현해보기(STT, TTS) (1) | 2024.12.19 |