ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ญ์ฒด์ธ์ผ๋ก LLM ๊ธฐ๋ฐ์ AI ์๋น์ค ๊ฐ๋ฐํ๊ธฐ - ์ 5์ฅ ๋ญ์ฒด์ธ์ผ๋ก RAG ๊ตฌํํ๊ธฐ (2)
ggasoon2 2024. 8. 27. 23:46
๋ค์ฏ๋ฒ์งธ ์น์
RAG ๊ธฐ๋ฐ ๋ํํ ์ฑ๋ด ๋ง๋ค๊ธฐ์ ๋๋ค.
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋๋ค.
!pip install streamlit-chat
!pip install streamlit
!pip install langchain
!pip install faiss-cpu
์ค์น ์ดํ ์ฃผ์์ฒ๋ฆฌ ํด์ค๋๋ค
RAG์ ์ฐ์ผ ๋ฐ์ดํฐ๋ PDF์ ๋๋ค.
PDF๋ฅผ loadํ ๋ค, ๊ฐ์ ธ์จ ํ ์คํธ๋ฅผ ์๋ฒ ๋ฉ ์ฒ๋ฆฌ ์ดํ ํ์ด์์ค์ ์ ์ฅํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์ค๊ณ , open ai key๋ฅผ ์ ๋ ฅํฉ๋๋ค sk-
import streamlit as st
from streamlit_chat import message
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationalRetrievalChain
from langchain.vectorstores import FAISS
import tempfile
from langchain.document_loaders import PyPDFLoader
import os
os.environ["OPENAI_API_KEY"] = "sk" #openai ํค ์
๋ ฅ
uploaded_file = st.sidebar.file_uploader("upload", type="pdf")
๊ทธ๋ฆฌ๊ณ pdf๋ฅผ upload ํ๋๋ก ํฉ๋๋ค
์ดํ
๊ฐ์ ธ์จ data(pdf)๋ฅผ embding ์ฒ๋ฆฌ ์ดํ FAISS vectorDB์ ์ ์ฅํด์ค๋๋ค
if uploaded_file :
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
tmp_file.write(uploaded_file.getvalue())
tmp_file_path = tmp_file.name
loader = PyPDFLoader(tmp_file_path)
data = loader.load()
embeddings = OpenAIEmbeddings()
vectors = FAISS.from_documents(data, embeddings)
chain = ConversationalRetrievalChain.from_llm(llm = ChatOpenAI(temperature=0.0,model_name='gpt-4'), retriever=vectors.as_retriever())
def conversational_chat(query): #๋ฌธ๋งฅ ์ ์ง๋ฅผ ์ํด ๊ณผ๊ฑฐ ๋ํ ์ ์ฅ ์ด๋ ฅ์ ๋ํ ์ฒ๋ฆฌ
result = chain({"question": query, "chat_history": st.session_state['history']})
st.session_state['history'].append((query, result["answer"]))
return result["answer"]
if 'history' not in st.session_state:
st.session_state['history'] = []
if 'generated' not in st.session_state:
st.session_state['generated'] = ["์๋
ํ์ธ์! " + uploaded_file.name + "์ ๊ดํด ์ง๋ฌธ์ฃผ์ธ์."]
if 'past' not in st.session_state:
st.session_state['past'] = ["์๋
ํ์ธ์!"]
#์ฑ๋ด ์ด๋ ฅ์ ๋ํ ์ปจํ
์ด๋
response_container = st.container()
#์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฌธ์ฅ์ ๋ํ ์ปจํ
์ด๋
container = st.container()
with container: #๋ํ ๋ด์ฉ ์ ์ฅ(๊ธฐ์ต)
with st.form(key='Conv_Question', clear_on_submit=True):
user_input = st.text_input("Query:", placeholder="PDFํ์ผ์ ๋ํด ์๊ธฐํด๋ณผ๊น์? (:", key='input')
submit_button = st.form_submit_button(label='Send')
if submit_button and user_input:
output = conversational_chat(user_input)
st.session_state['past'].append(user_input)
st.session_state['generated'].append(output)
if st.session_state['generated']:
with response_container:
for i in range(len(st.session_state['generated'])):
message(st.session_state["past"][i], is_user=True, key=str(i) + '_user', avatar_style = "fun-emoji", seed = "Nala")
message(st.session_state["generated"][i], key=str(i), avatar_style = "bottts", seed = "Fluffy")
์ฌ์ฉ์๊ฐ query๋ฅผ ์ ์ถํ๋ฉด conversational_chat() ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ history ๋ฆฌ์คํธ์ (query, answer) ํํ๋ก ๊ฐ์ด ์ ์ฅ๋๊ณ ,
history๋ฅผ ํตํด ๋ํ๊ฐ ๊ธฐ๋ก๋๊ณ ๊ธฐ๋ก๋ ๋ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ๋ต์ด ์ด์ด์ง๋๋ค.
- past, generated๋ streamlit ui์์ ์ฒ๋ฆฌ๋๋ ๋ฌธ๋ต ๋ฐฐ์ด
์ดํ streamlit์์ ์คํํ๋ฉด
์ ๋์ค๋ ๋ชจ์ต
์ฌ์ฏ๋ฒ์งธ ์น์
๋ฒ์ญ ์๋น์ค ๋ง๋ค๊ธฐ ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํฉ๋๋ค
!pip install langchain
!pip install streamlit
!pip install openai
์ค์น๊ฐ ๋๋๋ฉด ์ฃผ์์ฒ๋ฆฌ ํด์ค๋๋ค
์ดํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๊ณ api ํค๋ฅผ ๋ฃ์ด์ค๋๋ค.
import streamlit as st
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
import os
os.environ["OPENAI_API_KEY"] = "sk" #openai ํค ์
๋ ฅ
๊ทธ๋ฆฌ๊ณ
ํด๋น ์ง๋ฌธ์ ํน์ ์ธ์ด๋ก ๋ฒ์ญํด๋ฌ๋ผํ๋ template์ผ๋ก
prompt๋ฅผ ๋ฒ์ญํ๋๋ก ์ง์ํฉ๋๋ค.
# ์นํ์ด์ง์ ๋ณด์ฌ์ง ๋ด์ฉ
langs = ["Korean", "Japanese", "chinese", "English"] #๋ฒ์ญ์ ํ ์ธ์ด๋ฅผ ๋์ด
left_co, cent_co,last_co = st.columns(3)
#์นํ์ด์ง ์ผ์ชฝ์ ์ธ์ด๋ฅผ ์ ํํ ์ ์๋ ๋ผ๋์ค ๋ฒํผ
with st.sidebar:
language = st.radio('๋ฒ์ญ์ ์ํ๋ ์ธ์ด๋ฅผ ์ ํํด์ฃผ์ธ์.:', langs)
st.markdown('### ์ธ์ด ๋ฒ์ญ ์๋น์ค์์~')
prompt = st.text_input('๋ฒ์ญ์ ์ํ๋ ํ
์คํธ๋ฅผ ์
๋ ฅํ์ธ์') #์ฌ์ฉ์์ ํ
์คํธ ์
๋ ฅ
trans_template = PromptTemplate(
input_variables=['trans'],
template='Your task is to translate this text to ' + language + 'TEXT: {trans}'
) #ํด๋น ์๋น์ค๊ฐ ๋ฒ์ญ์ ๋ํ ๊ฒ์์ ์ง์
#momory๋ ํ
์คํธ ์ ์ฅ ์ฉ๋
memory = ConversationBufferMemory(input_key='trans', memory_key='chat_history')
llm = ChatOpenAI(temperature=0.0,model_name='gpt-4')
trans_chain = LLMChain(llm=llm, prompt=trans_template, verbose=True, output_key='translate', memory=memory)
# ํ๋กฌํํธ(trans_template)๊ฐ ์์ผ๋ฉด ์ด๋ฅผ ์ฒ๋ฆฌํ๊ณ ํ๋ฉด์ ์๋ต์ ์์ฑ
if st.button("๋ฒ์ญ"):
if prompt:
response = trans_chain({'trans': prompt})
st.info(response['translate'])
๊ทธ๋ฆฌ๊ณ
ConversationBufferMemory๋ก ๋ํ ๋ฌธ๋งฅ์ ์ ์ฅํ์ฌ LLMChain์ memory์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ค๋๋ค
๋ต๋ณ(๋ฒ์ญ)ํ ๋ ๋ํ ๋ฌธ๋งฅ ์ดํดํ๊ธฐ ์ํด ์์ฑ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋์ํ๋ ๋ชจ์ต
์ผ๊ณฑ๋ฒ์งธ ์น์
๋ฉ์ผ ๋์ ์์ฑํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
๋จผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํด์ค ๋ค
!pip install streamlit
!pip install langchain
!pip install openai
์ฃผ์์ฒ๋ฆฌํด์ค๋๋ค (์คํธ๋ฆผ๋ฆฟ์ผ๋ก ์คํํด์ผํด์)
์ดํ open ai key๋ฅผ ๋ฑ๋กํด์ฃผ๊ณ
import streamlit as st
import os
os.environ["OPENAI_API_KEY"] = "sk" #openai ํค ์
๋ ฅ
st.set_page_config(page_title="์ด๋ฉ์ผ ์์ฑ ์๋น์ค์์~", page_icon=":robot:")
st.header("์ด๋ฉ์ผ ์์ฑ๊ธฐ")
streamlit์ header์ page title์ ์์ฑํด์ค๋๋ค.
์ด๋ค ๋ด์ฉ์ผ๋ก ์ด๋ฉ์ผ์ ์์ฑํ ์ง ์ ๋ ฅ๋ฐ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค
def getEmail():
input_text = st.text_area(label="๋ฉ์ผ ์
๋ ฅ", label_visibility='collapsed',
placeholder="์ด๋ค ๋ฉ์ผ์ ์์ฑํ์๊ฒ ์ต๋๊น?", key="input_text")
return input_text
input_text = getEmail()
PromptTemplate์ ์ฌ์ฉ๋ ํ ํ๋ฆฟ์ ์์ฑํด์ฃผ๊ณ
(๋ฉ์ผ์ ์์ฑํด๋ฌ๋ผ๋ ํ ํ๋ฆฟ)
# ์ด๋ฉ์ผ ๋ณํ ์์
์ ์ํ ํ
ํ๋ฆฟ ์ ์
query_template = """
๋ฉ์ผ์ ์์ฑํด์ฃผ์ธ์.
์๋๋ ์ด๋ฉ์ผ์
๋๋ค:
์ด๋ฉ์ผ: {email}
"""
PromptTemplate ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค
from langchain import PromptTemplate
# PromptTemplate ์ธ์คํด์ค ์์ฑ
prompt = PromptTemplate(
input_variables=["email"],
template=query_template,
)
๊ทธ๋ฆฌ๊ณ gpt llm์ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์์ฑํฉ๋๋ค
from langchain.chat_models import ChatOpenAI
# ์ธ์ด ๋ชจ๋ธ์ ํธ์ถํฉ๋๋ค
def loadLanguageModel():
llm = ChatOpenAI(temperature=0.0,model_name='gpt-4')
return llm
์ดํ ์ ๋ ฅ๋ฐ์ ๋ด์ฉ์ template ํํ๋ก ํ์ฌ llm prompt๋ก ํธ์ถํฉ๋๋ค
# ์์ ์ด๋ฉ์ผ์ ํ์
st.button("*์์ ๋ฅผ ๋ณด์ฌ์ฃผ์ธ์*", type='secondary', help="๋ด์ด ์์ฑํ ๋ฉ์ผ์ ํ์ธํด๋ณด์ธ์.")
st.markdown("### ๋ด์ด ์์ฑํ ๋ฉ์ผ์:")
if input_text:
llm = loadLanguageModel()
# PromptTemplate ๋ฐ ์ธ์ด ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ด๋ฉ์ผ ํ์์ ์ง์
prompt_with_email = prompt.format(email=input_text)
formatted_email = llm.predict(prompt_with_email)
# ์์์ด ์ง์ ๋ ์ด๋ฉ์ผ ํ์
st.write(formatted_email)
์ดํ streamlit ์ผ๋ก ์คํํ๋ฉด
์ ๋์ค๋ ๋ชจ์ต
์ฌ๋๋ฒ์งธ ์น์
CSVํ์ผ ๋ถ์ ์๋น์ค ๋ง๋ค๊ธฐ ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค
!pip install langchain-experimental
!pip install tabulate
!pip install pandas
!pip install openai
pandas๋ ๋ฐ์ดํฐ ์กฐ์ ๋ถ์ ์ฉ๋,
tabulate๋ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ์ฑ ์ข๊ฒ ์ถ๋ ฅํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค
csv ํ์ผ์ ๊ฒฝ๋ก์ ๋ง๊ฒ ์ค์ ํด์ค๋๋ค.
import pandas as pd #ํ์ด์ฌ ์ธ์ด๋ก ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ ๋ฐ ์กฐ์ํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
#csv ํ์ผ์ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ
df = df = pd.read_csv('Order_v3.csv', encoding='ISO-8859-1') # ํ์ผ์ด ์์นํ ๊ฒฝ๋ก ์ง์
df.head()
key๋ฅผ ์ ๋ ฅํด์ฃผ๊ณ pandas langchain agent๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType
import os
os.environ["OPENAI_API_KEY"] = "sk" #openai ํค ์
๋ ฅ
#์์ด์ ํธ ์์ฑ
agent = create_pandas_dataframe_agent(
ChatOpenAI(temperature=0.7, model='gpt-4o'), #gpt-3.5-turbo ์ฌ์ฉ
df, #๋ฐ์ดํฐ๊ฐ ๋ด๊ธด ๊ณณ
verbose=False, #์ถ๋ก ๊ณผ์ ์ ์ถ๋ ฅํ์ง ์์
agent_type=AgentType.OPENAI_FUNCTIONS,
allow_dangerous_code=True,
)
๊ทธ๋ฆฌ๊ณ jupyter notebook์์
agent.run('์ด๋ค csv ํ์ผ์ธ์ง ์์ฝํด์ค')
์ง๋ฌธ์ ๋ด์ agent ๋ฅผ ์คํํด์ค๋๋ค
์ ๋์ค๋ ๋ชจ์ต
- Total
- Today
- Yesterday
- swift ์์ ์ฝ๊ธฐ
- deep timer
- swift excel read
- ํ์ด๋จธ ์ดํ
- swift get excel
- swift ๋คํธ์ํฌ ๋ชจ๋ํ
- llm csv
- google timer application
- swift network refactoring
- rag ๊ธฐ๋ฐ llm ์ฑ๋ด
- swift urlsession refactoring
- ๊ตฌ๊ธ ํ์ด๋จธ ์ดํ
- swift urlcomponent encode
- swift ์์ ๊ฐ์ ธ์ค๊ธฐ
- google timer ์ดํ
- swift network module
- swift queryitem encode
- llm pdf rag
- swift urlsession ๊ณตํตํ
- swift network ๊ณตํตํ
- filemanager excel read
- swift urlsession network module
- focus timer ์ดํ
- rag ๊ธฐ๋ฐ llm
- rag llm pdf
- chatgpt rag llm
- swift urlsession module
- swift filemanager get excel
- swift filemanager excel
- swift ์๊ฐ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |