yowot0088

yowot0088

V2EX 第 431234 号会员,加入于 2019-07-22 22:52:38 +08:00
今日活跃度排名 29297
根据 yowot0088 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
yowot0088 最近回复了
154 天前
回复了 412999826 创建的主题 Apple macOS 15 beta3 ARC 浏览器很多按钮鼠标无法点击
target 是_blank 的 a 标签,点击之后会弹一个小窗出来,右上角有一个按钮可以放大,但是我怎么点都是关闭( macOS 15 Developer Beta3 + Arc 1.52.0 (51895))
2023-07-03 20:45:44 +08:00
回复了 s609926202 创建的主题 Node.js 使用 fetch 请求 openai stream 响应时,内容偶尔会被“切断”
附上我做的 ws api 的源码

```js
wss.on('connection', ws => {
let isConnected = true

ws.on('message', async e => {
let message = JSON.parse(e.toString())
if(message.type == 'conversation') {
let es = await fetch('https://api.openai.com/v1/chat/completions', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + 'YOUR_OPENAI_API_KEY'
},
method: 'POST',
body: JSON.stringify({
model: message.data.model,
messages: message.data.messages,
stream: true
})
})

const reader = es.body.pipeThrough(new TextDecoderStream()).getReader()

let errObj = ''

while(true) {
if(!isConnected) {
process.stdout.write('\n')
break
}
const res = await reader.read()
if(res.done) {
break
}
let chunk = res.value
chunk = chunk.replace(/data: /g, '').split('\n')

chunk.map(item => {
if(item != '[DONE]' && item != '' && item != undefined) {
let json

try {
if(errObj != '') {
item = errObj + item
errObj = ''
}

json = JSON.parse(item)

if(json.choices[0].delta.content == undefined) return
ws.send(JSON.stringify({
type: 'conversation',
data: {
type: 'continue',
text: json.choices[0].delta.content
}
}))
process.stdout.write(json.choices[0].delta.content)
}catch {
errObj = item
return
}

}else if(item == '[DONE]') {
ws.send(JSON.stringify({
type: 'conversation',
data: {
type: 'done',
text: null
}
}))
process.stdout.write('\n')
}
})
}
}
})

ws.onclose = () => {
isConnected = false
}
})
```
2023-07-03 20:44:06 +08:00
回复了 s609926202 创建的主题 Node.js 使用 fetch 请求 openai stream 响应时,内容偶尔会被“切断”
我的解决方法是,先判断一个 chunk 里最后的 data: 是否为一个合法的 json ,如果不是,则将下一次最开始接收到的字符串与前一次的非法 json 拼接,可以完美解决
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2009 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 16:13 · PVG 00:13 · LAX 08:13 · JFK 11:13
Developed with CodeLauncher
♥ Do have faith in what you're doing.