该代码直接可用,实现了流式输出,只需要在你自己的开发环境配置百度申请的QIANFAN_AK和QIANFAN_SK即可使用啦。// # 在.env文件中,设置以下内容,安全认证Access Key替换your_iam_ak,Secret Key替换your_iam_sk
不过需要注意:大模型输出目前无法设置成一个字一个字的返回。设置成流式清求能一段一段内容返回,如果您需要达到逐字输出的效果,你可以使用服务端接收到流式返回结果后,通过SSE的方式返还给客户端、客户端通过EventSource接收后使用js定时打印,Typed.js等方式实现逐字输出即可。或者前端处理使用setTimeout也是可以的。
我用的是node.js实现的,直接引入的SDK包,别的语言同理也可以实现。
const express = require('express')
const { ChatCompletion, Text2Image } = require('@baiducloud/qianfan')
const router = express.Router()
router.post('/', async function (req, res) {
let payload = req.body
const messageInput = payload.message
res.setHeader('Cache-Control', 'no-cache')
res.setHeader('Transfer-Encoding', 'chunked')
res.setHeader('X-Accel-Buffering', 'no')
try {
const messages = Array.isArray(messageInput) ? messageInput : [{ role: 'user', content: messageInput }]
const client = new ChatCompletion()
const stream = await client.chat(
{
messages: messages,
stream: true,
system: '你是Amarantine、沐风倩研发的一款私人AI助手',
max_output_tokens: 1024,
temperature: 0.95,
top_p: 0.8,
},
'ERNIE-3.5-8K'
)
for await (const chunk of stream) {
const result = chunk.result
if (result) {
res.write(result)
}
}
res.end()
} catch (error) {
console.error('Error:', error.message)
res.status(500).end('Internal service exception:' + error.message)
}
})
效果图如下: