LangChain ve OpenAI ile CSV Verileriniz Üzerinde Bir Chatbot Oluşturun
Bellek sohbet robotu ile CSV dosyalarınızla sohbet edin | Langchain ve OpenAI ile yapılmıştır

Bu makalede, kendi CSV verilerinizle ilgili sorularınızı yanıtlayabilen, belleğe sahip basit bir chatbot oluşturmayı göreceğiz.
Herkese selam! Geçtiğimiz birkaç hafta içinde, her türlü şeyi yaratmak için büyük dil modellerinin büyüleyici potansiyeli üzerinde deneyler yapıyordum ve öğrendiklerimi paylaşmanın zamanı geldi!
Verilerimize bağlanmak için LangChain 'i ve sohbet robotumuz için bir kullanıcı arayüzü oluşturmak için Streamlit'i kullanacağız .gpt-3.5
Verilerimiz üzerinde sınırlı bağlam sunan ChatGPT'den farklı olarak (yalnızca maksimum 4096 belirteç sağlayabiliriz), chatbot'umuz katıştırmalar ve vektör deposu kullanımı sayesinde CSV verilerini işleyebilecek ve büyük bir veritabanını yönetebilecektir.

kod
Şimdi pratik yapalım! Çok az Python sözdizimi ile CSV verileri üzerinde sohbet robotumuzu geliştireceğiz.
Feragatname : Bu kod, oluşturduğum sohbet robotunun basitleştirilmiş bir sürümüdür, OpenAI API maliyetlerini azaltmak için optimize edilmemiştir, daha performanslı ve optimize edilmiş bir sohbet robotu için, GitHub projeme göz atmaktan çekinmeyin: yvann-hub/Robby-chatbot veya sadece Robby-chatbot.com adresinde uygulamayı test edin .
- Öncelikle gerekli kütüphaneleri kuracağız:
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.csv
user_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
Bu zincir , belgemizden ilgili bilgileri bulmak için a'ya güvenirken, belleğe sahip bir sohbet robotuna sahip olmamızı sağlar .chain = ConversationalRetrievalChain.from_llm(
llm = ChatOpenAI(temperature=0.0,model_name='gpt-3.5-turbo'),
retriever=vectorstore.as_retriever())
st.session_state[‘history’]
kullanıcının Streamlit sitesindeyken konuşma geçmişini saklar.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’]
chatbot'un yanıtlarına karşılık gelir.[‘past’]
kullanıcı tarafından sağlanan mesajlara karşılık gelir.- Konteynerler gerekli değildir ancak kullanıcının soru alanını sohbet mesajlarının altına yerleştirerek kullanıcı arayüzünün geliştirilmesine yardımcı olur.
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
Kullanıcının sorusunu argüman olarak girerek fonksiyonumuza göndermesini sağlayan UI kısmını kurabiliriz .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
Ayrıca projenin tamamını GitHub'ımda bulabilirsiniz .