lemooljiang avatar

ChatGLM流式传输 / ai #17

lemooljiang

Published: 25 Jul 2023 › Updated: 25 Jul 2023ChatGLM流式传输 / ai #17

ChatGLM流式传输 / ai #17

zhipu.jpg

https://www.zhipuai.cn

作为开发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:

Written by

Designer , Poet , Technology enthusiasts

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