| import os |
| from langchain_openai import ChatOpenAI |
|
|
| |
| |
|
|
| from dotenv import load_dotenv |
| import os |
| from langchain_openai import ChatOpenAI |
|
|
| load_dotenv() |
| llm = ChatOpenAI(model="gpt-3.5-turbo") |
| import bs4 |
| from langchain import hub |
| from langchain_chroma import Chroma |
| from langchain_community.document_loaders import WebBaseLoader |
| from langchain_core.output_parsers import StrOutputParser |
| from langchain_core.runnables import RunnablePassthrough |
| from langchain_openai import OpenAIEmbeddings |
| from langchain_text_splitters import RecursiveCharacterTextSplitter |
| from langchain.document_loaders import TextLoader |
| import gradio as gr |
|
|
| |
| loader = TextLoader("cleaned_yu_sgc_content.txt", encoding='utf-8') |
| docs = loader.load() |
|
|
| text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) |
| splits = text_splitter.split_documents(docs) |
| vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings()) |
| retriever = vectorstore.as_retriever() |
|
|
| |
| def format_docs(docs): |
| """Format documents into a single string.""" |
| return "\n\n".join(doc.page_content for doc in docs) |
|
|
| def format_chat_history(history): |
| """Format chat history into a string.""" |
| formatted_history = "" |
| for human, assistant in history: |
| formatted_history += f"\nHuman: {human}\nAssistant: {assistant}" |
| return formatted_history |
|
|
| def generate_prompt(context, question, chat_history): |
| """Generate a custom prompt including chat history.""" |
| return f"""You are a helpful assistant designed to answer questions about Yeshiva University's Career Center. |
| |
| Previous conversation history: |
| {chat_history} |
| |
| Use the following context to answer the question. If the context doesn't contain the relevant information, |
| you can provide general information about career center services. |
| |
| Context: {context} |
| |
| For questions about YU Career Center services (appointments, location, assistance): |
| - Use the information from the context if available |
| - Include this link when relevant: [Yeshiva University Career Center](https://www.yu.edu/sgc) |
| - Be specific, clear, and concise |
| - Maintain consistency with previous responses in the conversation |
| |
| If you cannot find the answer in the context, provide a general response based on the Career Center website. |
| If you cannot help at all, respond with: "Sorry, I'm not able to help with that, but feel free to ask me something else!" |
| |
| Current Question: {question} |
| Response:""" |
|
|
|
|
| def chatbot_response(message, history): |
| """Process user input and return chatbot response with history.""" |
| try: |
| |
| chat_history = format_chat_history(history) |
| |
| |
| relevant_docs = retriever.get_relevant_documents(message) |
| context = format_docs(relevant_docs) |
| |
| |
| prompt = generate_prompt(context, message, chat_history) |
| |
| |
| response = llm.invoke(prompt).content |
| |
| return response |
| except Exception as e: |
| return f"I apologize, but I encountered an error: {str(e)}. Please try again." |
|
|
|
|
|
|
| |
| iface = gr.ChatInterface( |
| chatbot_response, |
| title="YU Career Center Assistant", |
| description="""Get help with Yeshiva University Career Center services and information. |
| Ask questions about appointments, services, locations, and more.""", |
| examples=[ |
| "How can I schedule a career counseling appointment?", |
| "What services does the Career Center offer?", |
| "Where is the Career Center located?", |
| "What are the Career Center's hours of operation?", |
| "How can I access resume writing resources?" |
| ], |
| theme="default" |
| ) |
|
|
| |
| print("Starting YU Career Center Chatbot...") |
| print("Access the interface in your browser when the URL appears.") |
| iface.launch(share=True) |