LangChain 및 OpenAI로 CSV 데이터에 챗봇 구축
May 05 2023
메모리 챗봇으로 CSV 파일로 채팅하세요 | Langchain 및 OpenAI로 제작 이 기사에서는 자신의 CSV 데이터에 대한 질문에 답할 수 있는 메모리가 있는 간단한 챗봇을 구축하는 방법을 살펴보겠습니다. 안녕하세요 여러분! 지난 몇 주 동안 저는 모든 종류의 것을 생성할 수 있는 대규모 언어 모델의 매혹적인 잠재력을 실험해 왔으며 이제 제가 배운 것을 공유할 시간입니다! LangChain을 사용하여 gpt-3를 연결합니다.
메모리 챗봇으로 CSV 파일로 채팅하세요 | Langchain 및 OpenAI로 제작
이 기사에서는 자신의 CSV 데이터에 대한 질문에 답할 수 있는 메모리가 있는 간단한 챗봇을 구축하는 방법을 살펴보겠습니다.
안녕하세요 여러분! 지난 몇 주 동안 저는 모든 종류의 것을 생성할 수 있는 대규모 언어 모델의 매혹적인 잠재력을 실험해 왔으며 이제 제가 배운 것을 공유할 시간입니다!
LangChain 을 사용하여 gpt-3.5데이터에 연결 하고 Streamlit을 사용하여 챗봇용 사용자 인터페이스를 만들 것입니다.
데이터에 대해 제한된 컨텍스트를 제공하는 ChatGPT(최대 4096개의 토큰만 제공할 수 있음)와 달리 챗봇은 임베딩 및 벡터 저장소를 사용하여 CSV 데이터를 처리하고 대규모 데이터베이스를 관리할 수 있습니다.
코드
이제 실용화하자! Python 구문이 거의 없는 CSV 데이터에서 챗봇을 개발할 것입니다.
면책 조항 : 이 코드는 제가 만든 챗봇의 단순화된 버전이며, OpenAI API 비용을 줄이기 위해 최적화되지 않았습니다. 더 성능이 좋고 최적화된 챗봇을 위해 제 GitHub 프로젝트를 확인하십시오: yvann-hub/Robby-chatbot 또는 그냥 Robby-chatbot.com 에서 앱을 테스트하세요 .
- 먼저 필요한 라이브러리를 설치합니다.
pip install streamlit streamlit_chat langchain openai faiss-cpu tiktoken
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.document_loaders.csv_loader import CSVLoader
from langchain.vectorstores import FAISS
import tempfile
fishfry-locations.csvuser_api_key = st.sidebar.text_input(
label="#### Your OpenAI API key ",
placeholder="Paste your openAI API key, sk-",
type="password")
uploaded_file = st.sidebar.file_uploader("upload", type="csv")
if uploaded_file :
#use tempfile because CSVLoader only accepts a file_path
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
tmp_file.write(uploaded_file.getvalue())
tmp_file_path = tmp_file.name
loader = CSVLoader(file_path=tmp_file_path, encoding="utf-8", csv_args={
'delimiter': ','})
data = loader.load()
st.write(data)
0:"Document(page_content='venue_name: McGinnis Sisters\nvenue_type: Market\nvenue_address: 4311 Northern Pike, Monroeville, PA\nwebsite: http://www.mcginnis-sisters.com/\nmenu_url: \nmenu_text: \nphone: 412-858-7000\nemail: \nalcohol: \nlunch: True', metadata={'source': 'C:\\Users\\UTILIS~1\\AppData\\Local\\Temp\\tmp6_24nxby', 'row': 0})"
1:"Document(page_content='venue_name: Holy Cross (Reilly Center)\nvenue_type: Church\nvenue_address: 7100 West Ridge Road, Fairview PA\nwebsite: \nmenu_url: \nmenu_text: Fried pollack, fried shrimp, or combo. Adult $10, Child $5. Includes baked potato, homemade coleslaw, roll, butter, dessert, and beverage. Mac and cheese $5.\nphone: 814-474-2605\nemail: \nalcohol: \nlunch: ', metadata={'source': 'C:\\Users\\UTILIS~1\\AppData\\Local\\Temp\\tmp6_24nxby', 'row': 1})"
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(data, embeddings)
vectorstore이 체인을 사용하면 문서에서 관련 정보를 찾는 데 의존하면서 메모리가 있는 챗봇을 가질 수 있습니다 .chain = ConversationalRetrievalChain.from_llm(
llm = ChatOpenAI(temperature=0.0,model_name='gpt-3.5-turbo'),
retriever=vectorstore.as_retriever())
st.session_state[‘history’]Streamlit 사이트에 있을 때 사용자의 대화 기록을 저장합니다.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"]
[‘generated’]챗봇의 응답에 해당합니다.[‘past’]사용자가 제공한 메시지에 해당합니다.- 컨테이너는 필수는 아니지만 채팅 메시지 아래에 사용자의 질문 영역을 배치하여 UI를 개선하는 데 도움이 됩니다.
if 'history' not in st.session_state:
st.session_state['history'] = []
if 'generated' not in st.session_state:
st.session_state['generated'] = ["Hello ! Ask me anything about " + uploaded_file.name + " "]
if 'past' not in st.session_state:
st.session_state['past'] = ["Hey ! "]
#container for the chat history
response_container = st.container()
#container for the user's text input
container = st.container()
conversational_chat사용자의 질문을 인수로 사용하여 사용자가 질문을 입력하고 함수에 보낼 수 있도록 UI 부분을 설정할 수 있습니다 .with container:
with st.form(key='my_form', clear_on_submit=True):
user_input = st.text_input("Query:", placeholder="Talk about your csv data here (:", 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="big-smile")
message(st.session_state["generated"][i], key=str(i), avatar_style="thumbs")
streamlit run name_of_your_chatbot.py #run with the name of your file
The result after launch the last command
내 GitHub 에서 전체 프로젝트를 찾을 수도 있습니다 .

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































