浅谈人工智能之大模型的流式调用: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任务,如聊天机器人、自动写作等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔波儿灞爱霸波尔奔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值