打造学院知識問答系統的教學
目录
- 背景故事
- 项目介绍
- 构建项目的架构
- 使用MySQL数据库
- 编写OpenAI函数调用代码
- 创建DB助手模块
- 创建OpenAI助手模块
- 构建Streamlit前端界面
- 运行并测试应用程序
- 总结与未来展望
背景故事
🎭 Joy Pandey是Atlick商学院的学生,他的兄弟Peter Pandey是一名AI增强的数据专家。Peter使用开放式AI功能成功地为Joy的项目拯救了一命。Joy的项目因遭到院长的拒绝而感到沮丧。Joy成功地将ChatGPT与学院网站进行了集成,但院长希望更多。他希望他的Chatbot能够回答与学院内部知识有关的特定问题。院长说,把这些东西扔到垃圾桶里,你今年无法毕业。但Peter有其他打算,他想帮助Joy。他决定构建一个内部聊天GPT的原型,这是迈向巨大飞跃的第一小步。
项目介绍
👋 欢迎来到Atlick商学院的知识问答系统项目!这个项目旨在构建一个基于ChatGPT和MySQL数据库的问答系统,以回答关于学院内部知识的特定问题。我们将使用开放AI的函数调用来使ChatGPT能够调用数据库,并返回准确的答案。这个项目将帮助你掌握NLP和使用开放AI构建类似系统的技能。
构建项目的架构
🏗️ 为了构建这个项目,我们需要按照以下步骤进行操作:
-
设置MySQL数据库:我们将使用MySQL数据库存储学生的信息,例如分数、费用等。在这一步中,我们将创建数据库和表,并插入示例数据。
-
编写OpenAI函数调用代码:我们将使用OpenAI的函数调用功能,让ChatGPT能够调用我们的数据库并返回答案。我们将编写Python代码来实现这一功能,并设置必要的参数。
-
创建DB助手模块:为了更好地组织和管理与数据库交互的代码,我们将创建一个DB助手模块。这个模块将包含用于查询数据库和返回结果的函数。
-
创建OpenAI助手模块:为了更好地组织和管理与OpenAI函数调用的代码,我们将创建一个OpenAI助手模块。这个模块将包含用于调用OpenAI函数和处理返回结果的函数。
-
构建Streamlit前端界面:为了让用户能够方便地与问答系统进行交互,我们将使用Streamlit框架构建一个简单但直观的前端界面。这个界面将包含一个文本输入框和一个显示答案的标签。
-
运行并测试应用程序:最后,我们将运行应用程序并测试其功能。我们将输入一些问题,看看系统是否能正确地回答这些问题,并返回准确的结果。
使用MySQL数据库
💾 在这个项目中,我们将使用MySQL数据库来存储学生的信息,例如分数和费用。在这一步中,我们将创建一个MySQL数据库,并创建一个名为fees
的表和一个名为marks
的表。
首先,我们需要安装MySQL并设置您的数据库连接。接下来,我们将使用以下SQL脚本创建表:
CREATE TABLE fees (
student_name VARCHAR(50),
semester INT,
total_fees DECIMAL(10,2),
amount_paid DECIMAL(10,2)
);
CREATE TABLE marks (
student_name VARCHAR(50),
semester INT,
gpa DECIMAL(2,1)
);
然后,我们将插入一些示例数据:
INSERT INTO fees (student_name, semester, total_fees, amount_paid)
VALUES ('Bill Gates', 2, 6000.00, 6000.00),
('Elon Musk', 2, 6000.00, 2000.00);
INSERT INTO marks (student_name, semester, gpa)
VALUES ('Bill Gates', 2, 3.0),
('Elon Musk', 2, 2.7);
现在,我们的数据库架构和示例数据已经准备好了。
编写OpenAI函数调用代码
🤖 在这个步骤中,我们将编写用于调用OpenAI函数的Python代码。我们将使用OpenAI GPT-3模型来回答一般性问题,并使用自定义函数来回答与Atlick商学院数据库相关的特定问题。
首先,我们需要导入必要的Python包和模块:
import openai
import json
然后,我们需要设置OpenAI的API密钥,在此之前,请确保已经按照OpenAI官方文档的说明进行了安装和设置:
openai.api_key = "YOUR_API_KEY"
现在,我们可以编写一个函数来调用OpenAI函数并获取答案:
def get_answer(question):
messages = [
{
"role": "user",
"content": question
}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)
answer = response["choices"][0]["message"]["content"]
return answer
在这个函数中,我们将用户问题作为参数传递,并将其包装在messages
列表中。然后,我们使用openai.ChatCompletion.create
方法调用OpenAI函数来获取答案。最后,我们返回答案。
创建DB助手模块
💻 为了更好地组织和管理与数据库交互的代码,我们将创建一个名为db_helper.py
的模块。在这个模块中,我们将定义用于查询数据库和返回结果的函数。
首先,我们需要导入必要的Python包和模块:
import mysql.connector
然后,我们可以编写与数据库交互的函数。这里是一些示例函数:
def get_fees(student_name, semester):
# TODO: Implement function to get fees from database
pass
def get_marks(student_name, semester):
# TODO: Implement function to get marks from database
pass
在这些函数中,我们将使用Python的MySQL连接器进行数据库查询,并返回相应的结果。
创建OpenAI助手模块
💡 为了更好地组织和管理与OpenAI函数调用的代码,我们将创建一个名为openai_helper.py
的模块。在这个模块中,我们将定义用于调用OpenAI函数和处理返回结果的函数。
首先,我们需要导入必要的Python包和模块:
import openai
然后,我们可以编写用于调用OpenAI函数和处理返回结果的函数。这里是一些示例函数:
def call_openai_function(question):
# TODO: Implement function to call OpenAI function
pass
def get_function_name(response):
# TODO: Implement function to extract function name from response
pass
def get_function_arguments(response):
# TODO: Implement function to extract function arguments from response
pass
def call_database_function(function_name, function_arguments):
# TODO: Implement function to call database function and return result
pass
def format_response(response):
# TODO: Implement function to format response for display
pass
在这些函数中,我们将使用OpenAI的模型来调用函数,并使用Python代码处理返回的结果。我们将提取函数名和函数参数,并使用这些信息来调用数据库函数。最后,我们将对返回的结果进行格式化,以便在前端界面上进行显示。
构建Streamlit前端界面
🎨 为了让用户能够方便地与问答系统进行交互,我们将使用Streamlit框架构建一个简单但直观的前端界面。在这个界面中,用户可以输入问题,并在界面上看到返回的答案。
首先,我们需要导入必要的Python包和模块:
import streamlit as st
from openai_helper import call_openai_function, format_response
然后,我们可以开始构建前端界面。在这个界面中,我们将添加一个文本输入框和一个用于显示答案的标签。
st.title("Atlick College Q&A System")
question = st.text_input("Ask a question")
if question:
answer = call_openai_function(question)
formatted_answer = format_response(answer)
st.subheader("Answer:")
st.write(formatted_answer)
在这段代码中,我们使用st.title
函数添加了一个标题。然后,我们使用st.text_input
函数添加了一个文本输入框,允许用户输入问题。如果用户输入了问题,我们将调用OpenAI函数来获取答案,并将答案格式化后显示在界面上。
运行并测试应用程序
🚀 最后,我们只需要运行我们的应用程序并测试其功能。我们可以使用以下命令来运行应用程序:
streamlit run main.py
一旦应用程序运行起来,我们就可以输入一些问题并查看系统是否能正确地回答这些问题。
📝 在这个项目中,我们构建了一个基于ChatGPT和MySQL数据库的问答系统。通过集成OpenAI的函数调用功能,我们使ChatGPT能够调用数据库并返回准确的答案。这个项目将帮助您熟悉NLP和使用开放AI构建类似系统的技能。祝您好运!