Published: 25 Jul 2023 › Updated: 25 Jul 2023
ChatGLM流式传输 / ai #17
作为开发ChatGLM的主公司:智谱AI提供了很方便的API接口,只需在页面注册后就可得到API KEY, 然后就可以直接调用了,这些和OpenAI API的做法是一样的。
流式传输
流式传输就是每生成一段就传一段,在页面上就是那种打字机的效果:逐字生成。这种方法比较人性,生成多少就可以看到多少。ChatGLM也有类似的方法。
import zhipuai
zhipuai.api_key = 'ZHIPU_API_KEY'
def streaming(query, temperature):
response = zhipuai.model_api.sse_invoke(
model = "chatglm_lite",
prompt = query,
top_p = 0.7,
temperature = temperature,
)
for event in response.events():
if event.event == "add":
yield event.data
elif event.event == "error" or event.event == "interrupted":
return "error", 500
elif event.event == "finish":
return
else:
return
后台的代码感觉还是比较简洁,几行就全搞定啰。
前端代码
前端感觉就略显复杂了,这里采用的方法是原生地fetch, 其它的诸如 axios, useFetch方法都不好用,试了半天还是得放弃,只能采用fetch
let dataObj = {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: history,
temperature: 0.2
})
}
const response = await fetch(baseURL+'/zhipustreaming', dataObj)
messageDiv.innerHTML = " "
if (response.ok) {
let i = 0
let getStream = function (reader) {
return reader.read().then(function (result) {
// 如果数据已经读取完毕,直接返回
if (result.done) {
clearInterval(loadInterval)
loading.textContent = ''
return
}
// 取出本段数据(二进制格式)
let chunk = result.value
let text = utf8ArrayToStr(chunk)
if(i === 0){
text = text.replace(/\\n/g,'') //去除首段换行
} else{
text = text.replace(/\\n/g,'
')
}
// 将本段数据追加到网页之中
messageDiv.innerHTML += text
i ++
// 递归处理下一段数据
return getStream(reader)
})
}
getStream(response.body.getReader())
}
里面最关键的是getStream的方法,可以参考阮一峰的博客。试起来有点费劲,需要耐心地调试。好了,如果一切你都做好了,那么,你也可以开发个超级AI应用啰!
Leave ChatGLM流式传输 / ai #17 to:
Read more #cn posts
Best Posts From lemooljiang
We have not curated any of lemooljiang's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From lemooljiang
- Nextjs初体验,和Nuxt的异同
- DeepTutor:AI个性化辅导平台 / ai #57
- ComfyUI:可编程和自动化的PS / ai #56
- 将Neo4j封装进Agent / ai #55
- 闲鱼省钱大法:极限0.5折!
- 对Neo4j批量导入结构化数据 / ai #54
- langchain对neo4j进行交互,写入和查询数据 / ai #53
- 知识图谱和图数据库Neo4j的作用和使用场景 / ai #52
- SpaceX、美股和比特币
- 又是币圈血洗日!
- 链股合流,当币安也开始卖股票啰
- 天涯社区重启,爷青回?
- 诺基亚在AI时代重新杀回来啦
- 《2049:未来10000天的可能》书中的镜像世界为什么不叫元宇宙
- 今天适合吃披萨
- 开通即被封,别再给Claude送人头了!
- 两根内存条引发的“官司”
- AI·Joe V12更新, 更新GPT-5.5和DeepSeek V4 等
- 中医进校园活动反响热烈
- 猪价低伤农,猪价贵伤民