当前位置: 首页 > article >正文

浅谈人工智能之大模型的流式调用:Python版

浅谈人工智能之大模型的流式调用:Python版

前言

在深度学习和自然语言处理领域,大模型的应用日益广泛,它们能够处理更复杂、更精细的任务,但同时也带来了计算资源和内存占用的挑战。为了有效利用资源并实时响应用户请求,流式调用成为了一种重要的技术手段。本文将分为两部分,分别介绍纯后端版本和前后端结合版本的流式调用实现方法。

纯后端版本:使用Python进行流式调用

在纯后端场景下,我们通常使用Python来开发服务端应用,直接处理大模型的流式调用。以下是一个基于千问大模型作为实例,展示如何使用OpenAI库进行流式文本生成。

# coding:utf-8
from openai import OpenAI
openai_api_base = "http://XX.XX.XX.XX:8889/v1"
openai_api_key = "none"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
response = client.chat.completions.create(
    model="QWen",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "请你发表你对自己的看法?"
            },
    ],
    stream=True,
    temperature=0,
)
for chunk in response:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end='', flush=True)
print('\n')

前后端结合版本:使用Python和Web框架进行流式调用

在前后端结合的场景下,我们需要在前端显示实时生成的文本,并在后端使用Python处理流式调用。这里以Flask作为Web框架,展示如何构建一个简单的流式文本生成服务。

前端实现

前端可以使用JavaScript的Fetch API来消费这个流式服务。下面是一个简单的HTML页面,展示了如何动态显示生成的文本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Stream Example</title>
</head>
<body>
    <pre id="output"></pre>

    <script>
        const output = document.getElementById('output');
        fetch('http://127.0.0.1:5000/stream', { method: 'GET' })
            .then(response => response.body)
            .then(stream => {
                const reader = stream.getReader();
                const decoder = new TextDecoder();

                async function readAndLog() {
                    const { value, done } = await reader.read();
                    if (done) {
                        console.log('Stream ended');
                        return;
                    }
                    const chunk = decoder.decode(value, { stream: true });
                    output.textContent += chunk;
                    await readAndLog();
                }

                readAndLog().catch(err => console.error('Failed to read stream: ', err));
            })
            .catch(error => console.error('Failed to fetch stream: ', error));
    </script>
</body>
</html>

后端实现

from flask import Flask, Response
from openai import OpenAI
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

client = OpenAI(
    api_key="YOUR_OPENAI_API_KEY",
    base_url="http://XX.XX.XX.XX:8889/v1",
)

@app.route('/stream', methods=['GET'])
def chat():
    
    response = client.chat.completions.create(
        model="QWen",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "请你自我介绍下?"},
        ],
        stream=True,
        temperature=0,
    )

    def generate():
        for chunk in response:
            content = chunk.choices[0].delta.content
            if content:
                yield content
    return Response(generate(), mimetype='text/plain')


if __name__ == '__main__':
    app.run(debug=True)

结论

流式调用是处理大模型实时任务的有效方式,无论是纯后端还是前后端结合的场景,都可以通过适当的技术实现。上述示例展示了如何使用Python和Flask构建一个基本的流式文本生成服务,并在前端动态显示生成的文本。这种方法可以应用于各种需要实时反馈的NLP任务,如聊天机器人、自动写作等。


http://www.kler.cn/news/339609.html

相关文章:

  • Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式
  • 基于PHP+uniapp微信小程序的个性化影视推荐系统的设计54lfb
  • 单片机教案 2.1 ATmega2560单片机最小应用系统
  • Python:使用itertools.permutations实现全排列
  • DepthB2R靶机打靶记录
  • 深度学习的应用
  • opencv学习:图像拼接及完整代码实现
  • JS设计模式之职责链模式:优雅地处理请求流程
  • 智能电子价签:助力零售效率升级的关键
  • 基于Python的自然语言处理系列(28):spaCy基础介绍
  • 微积分复习笔记 Calculus Volume 1 - 2.2 The Limit of a Function
  • 机器学习实战27-基于双向长短期记忆网络 BiLSTM 的黄金价格模型研究
  • 科技云报到:云服务的中场战事,从AI应用开始
  • CSRF | GET 型 CSRF 漏洞攻击
  • 旅游管理智能化:SpringBoot框架的应用
  • 对换脸、动嘴生成的视频做初筛
  • 国庆作业
  • 【记录】PPT|PPT 箭头相交怎么跨过
  • 【玩转动态规划专题】70. 爬楼梯【简单】
  • 【数学分析笔记】第4章第5节 高阶导数和高阶微分(1)