当前位置:   article > 正文

用Flask打造一个大模型智能问答WEB网站_大模型flask

大模型flask

目前已经有很多类似GPT的大模型开源,可以提供类似ChatGPT的智能问答功能。我也基于这些开源模型,用Flask来建立一个智能问答网站,可以方便用户建立自己的ChatGPT系统。

这个网站需要提供用户登录功能,对已登录的用户,可以在网站上提出问题,并由大模型处理后返回答案。演示效果如下:

chatbot_

FLASK APP配置

先定义一个config.py文件,里面定义Flask APP的secret key和数据库的配置,这里简单起见采用SQLITE作为数据库,用来存储用户数据:

  1. import os
  2. basedir = os.path.abspath(os.path.dirname(__file__))
  3. class Config:
  4. SECRET_KEY = "some words hard to guess"
  5. SQLALCHEMY_TRACK_MODIFICATIONS = False
  6. @staticmethod
  7. def init_app(app):
  8. pass
  9. class DevelopmentConfig(Config):
  10. SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, 'data.sqlite')
  11. config = {
  12. 'dev': DevelopmentConfig,
  13. 'default': DevelopmentConfig
  14. }

定义Flask App

新建一个app目录,然后新建一个__init__.py文件,内容如下:

  1. from flask import Flask
  2. from flask_bootstrap import Bootstrap4
  3. from flask_moment import Moment
  4. from flask_sqlalchemy import SQLAlchemy
  5. from flask_login import LoginManager
  6. from flask_toastr import Toastr
  7. from flask_wtf.csrf import CSRFProtect
  8. from config import config
  9. bootstrap = Bootstrap4()
  10. moment = Moment()
  11. db = SQLAlchemy()
  12. login_manager = LoginManager()
  13. login_manager.login_view = 'auth.login'
  14. toastr = Toastr()
  15. csrf = CSRFProtect()
  16. def create_app(config_name):
  17. app = Flask(__name__)
  18. app.config.from_object(config[config_name])
  19. app.config.update(
  20. TOASTR_POSITION_CLASS = 'toast-top-center'
  21. )
  22. bootstrap.init_app(app)
  23. moment.init_app(app)
  24. db.init_app(app)
  25. login_manager.init_app(app)
  26. toastr.init_app(app)
  27. csrf.init_app(app)
  28. from .main import main as main_blueprint
  29. app.register_blueprint(main_blueprint)
  30. from .auth import auth as auth_blueprint
  31. app.register_blueprint(auth_blueprint, url_prefix='/auth')
  32. return app

这里定义了我们需要用到的Flask扩展并进行实例化,然后也用到了blueprint来管理路由。

定义用户数据模型

在app目录新建一个models.py文件,定义用户数据模型,内容如下:

  1. from flask_login import UserMixin
  2. from werkzeug.security import generate_password_hash, check_password_hash
  3. from . import db
  4. from . import login_manager
  5. class User(UserMixin, db.Model):
  6. __tablename__ = 'users'
  7. id = db.Column(db.Integer, primary_key=True)
  8. username = db.Column(db.String(64), unique=True, index=True)
  9. password_hash = db.Column(db.String(128))
  10. @property
  11. def password(self):
  12. raise AttributeError("password is not a readable attribute")
  13. @password.setter
  14. def password(self, password):
  15. self.password_hash = generate_password_hash(password)
  16. def verify_password(self, password):
  17. return check_password_hash(self.password_hash, password)
  18. def __repr__(self):
  19. return '<User %r>' % self.username
  20. @login_manager.user_loader
  21. def load_user(user_id):
  22. return User.query.get(int(user_id))

在这个文件里,定义了一张名为users的数据表,里面有用户名和password_hash这两个字段。用户的密码将通过werkzeug提供的功能来进行hash以提高安全性。这样即使数据库泄漏,其他人也无法通过password_hash来获取原密码。

用户登录功能

在app目录下新建一个auth目录,新建一个__init__.py文件,定义蓝图

  1. from flask import Blueprint
  2. auth = Blueprint('auth', __name__)
  3. from . import views

采用flask_wtf这个扩展来实现我们的登录表单和验证。在auth目录新建一个form.py文件,内容如下:

  1. from flask_wtf import FlaskForm
  2. from wtforms import StringField, PasswordField, BooleanField, SubmitField
  3. from wtforms.validators import DataRequired, Length, Email
  4. class LoginForm(FlaskForm):
  5. username = StringField('Username', validators=[DataRequired(), Length(1, 64)], name="username")
  6. password = PasswordField('Password', validators=[DataRequired()], name="password")
  7. remember_me = BooleanField('Keep me logged in', name="remember_me")
  8. submit = SubmitField('Log In')

创建一个views

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/563284
推荐阅读
相关标签
  

闽ICP备14008679号