AI大语言模型LLM学习-WebAPI搭建

系列文章


1. AI大语言模型LLM学习-入门篇
2. AI大语言模型LLM学习-Token及流式响应


前言


在上一篇博文中,我们调用了在线大模型API,并用 Python 写了一个控制台流式对话客户端,基本能愉快的与大模型对话聊天了。但控制台总归太技术化,我们希望能有个类似 ChatGPT 那样的 Web 聊天对话界面。为了实现这一目标,计划采用两篇博文进行实现,本篇为后端WebAPI的搭建流程,下一篇将介绍使用vue3实现前端界面的编写。


一、python的web开发框架


python的web开发框架很多,这里只简单介绍了三款在国内比较流行的开发框架。本博文及后续博文根据各自框架的特点,选择了入手简单的轻量级Flask作为web开发框架。

1.Django 框架

优 点:是一个高层次 Python Web 开发框架,特点是开发快速、代码较少、可扩展性强。Django 采用 MTV(Model、Template、View)模型组织资源,框架功能丰富,模板扩展选择最多。对于专业人员来说,Django 是当之无愧的 Python 排名第一的 Web 开发框架。

缺 点:包括一些轻量级应用不需要的功能模块,不如 Flask 轻便。过度封装很多类和方法,直接使用比较简单,但改动起来比较困难。相比于 C,C++ 性能,Djang 性能偏低。模板实现了代码和样式完全分离,不允许模板里出现 Python 代码,灵活度不够。另外学习曲线也相对陡峭。

2.Flask

优 点:Flask 是一个 Python Web 开发的微框架,严格来说,它仅提供 Web 服务器支持,不提供全栈开发支持。然而,Flask 非常轻量、非常简单,基于它搭建 Web 系统都以分钟来计时,特别适合小微原型系统的开发。花少时间、产生可用系统,是非常划算的选择。

缺 点:对于大型网站开发,需要设计路由映射的规则,否则导致代码混乱。对新手来说,容易使用低质量的代码创建 “不良的 web 应用程序”。

3.FastAPI

优 点:FastAPI 是一个现代、快速(高性能)的 Web 框架,用于基于标准 Python 类型提示使用 Python 3.6+ 构建 API。非常高的性能,与 NodeJS 和 Go 相当(感谢 Starlette 和 Pydantic)。可用的最快的 Python 框架之一。减少大约 40% 的人为(开发人员)引发的错误。简短,简单,直观,健壮。

缺 点:本身不带模板语法,需要安装模板语法


二、flask的使用介绍


1.依赖安装

pip install flask

2.一个简单webAPI接口

代码如下:

# 导入flask类
from flask import Flask
# 初始化
app = Flask(__name__)


# 使用route()装饰器来告诉Flask触发函数的URL。
@app.route('/')
def index():
    return 'Hello World!'


if __name__ == "__main__":
    # 调用run方法,设定端口号,启动服务
    app.run(port=2024, host="0.0.0.0", debug=True)

运行代码:
在这里插入图片描述
使用浏览器访问:
在这里插入图片描述

3.基于LLM搭建的WebAPI接口

# 导入flask类
from flask import Flask ,request
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
api_key = "api_key(平台注册获得)"

# 初始化
app = Flask(__name__)


# 将大模型的调用封装成方法
def call(question):
    model = "qwen2-72b-instruct"
    llm = ChatOpenAI(
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
        api_key=api_key,
        model=model,
        streaming=True,
    )
    prompt_template = ChatPromptTemplate.from_messages([
        ("system", "你是一个很出色的历史老师,给我讲讲历史人物的故事吧。"),
        ("user", "{input}")
    ])

    # 使用|操作符将prompt_template和llm连接在一起,创建一个chain对象。
    chain = prompt_template | llm
    for token in chain.stream({"input": question}):
        data = token.content
        # web模型的流式输出
        yield data


# 定义请求路径为/chat,访问方法为post,本方法要求请求格式为json
@app.route('/chat', methods=['post'])
def chat():
    data = request.json
    # 接收用户输入的问题
    question = ""
    if (data["question"]):
        question = data["question"]
    print(question)
    return call(question)


if __name__ == "__main__":
    # 调用run方法,设定端口号,启动服务
    app.run(port=2024, host="0.0.0.0", debug=True)

使用postman工具进行测试:
在这里插入图片描述
思考:你敢确定是流式输出吗?上证据,注意动图中鼠标指向的地方,你可以尝试下非流式输出是不是一步到位,更为生动的证据需要后续配合前端页面的搭建及接口调用

在这里插入图片描述


服务部署


1.window环境的部署

1)简单粗暴:cmd黑窗口

python web.py

2)优雅高大:封装成服务

本文不做过多介绍,可参考我的好兄弟大佬超的博文中有关【WinSW】的使用介绍:
Windows部署Jar包的三种方式

2.linux环境的部署

1)简单粗暴:nohup后台运行

nohup python web.py > web.log  &

2)优雅高大:封装成服务

本文不做过多介绍,后续有空整理一篇linux环境下的服务封装方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值