当前位置:   article > 正文

node的服务端对接科大讯飞-火星ai解决方案_nodejs接入讯飞星火

nodejs接入讯飞星火

序:

        官方给的node对接火星的demo其实只适用于node开发的web应用,但是对于纯node 作为服务端,也就是作为webapi来调用,你会发现,location.host直接是获取不到location的。这个时候,其实要单独起个wss的服务的,关于这点,雪狼写了本篇教程,

        1、博主的node:v18.12.1

        2、ws:v8.14.1(WebSocket

        3、CryptoJS:4.0.0

        4、有小伙伴反馈,message返回提示401的报错!到公众号:“ 程序员野区 ” 回复“科大讯飞401报错”,会返回解决方案。

正文:

1.、来首先我们安装依赖,下面两个命令

cnpm install crypto-js@4.0.0 -S
cnpm install ws@8.14.1 -S

2、引入

  1. import WebSocket from "ws";
  2. import CryptoJS from 'crypto-js'

3、写初始化url

  1. function getWebsocketUrl(){
  2. return new Promise((resolve, reject) => {
  3. var apiKey = "你的apiKey"
  4. var apiSecret = "你的apiSecret"
  5. var url = 'wss://spark-api.xf-yun.com/v1.1/chat'
  6. var host = "localhost:8001"
  7. var date = new Date().toGMTString()
  8. var algorithm = 'hmac-sha256'
  9. var headers = 'host date request-line'
  10. var signatureOrigin = `host: ${host}\ndate: ${date}\nGET /v1.1/chat HTTP/1.1`
  11. var signatureSha = CryptoJS.HmacSHA256(signatureOrigin, apiSecret)
  12. var signature = CryptoJS.enc.Base64.stringify(signatureSha)
  13. var authorizationOrigin = `api_key="${apiKey}", algorithm="${algorithm}", headers="${headers}", signature="${signature}"`
  14. var authorization = btoa(authorizationOrigin)
  15. url = `${url}?authorization=${authorization}&date=${date}&host=${host}`
  16. resolve(url)
  17. })
  18. }

注意,这里localhost:8001你直接写8001!,后续你调试直接监听这个端口接口

4、开始监听

注意下面那个app_id要替换成你直接的app_id

  1. function wsFun(userSay,callback){
  2. callback=callback||function(){};
  3. getWebsocketUrl().then(url => {
  4. let ws = new WebSocket(url);
  5. ws.on('error', console.error);
  6. ws.on('open', function open() {
  7. var params = {
  8. "header": {
  9. "app_id":"你的app_id",//这里记得替换app_id
  10. "uid": "fd3f47e4-d"
  11. },
  12. "parameter": {
  13. "chat": {
  14. "domain": "general",
  15. "temperature": 0.5,
  16. "max_tokens": 1024
  17. }
  18. },
  19. "payload": {
  20. "message": {
  21. "text": [
  22. {
  23. "role": "user",
  24. "content": userSay
  25. }
  26. ]
  27. }
  28. }
  29. }
  30. ws.send(JSON.stringify(params))
  31. });
  32. ws.on('close', function close() {
  33. });
  34. ws.on('message', function message(data) {
  35. var msgData=JSON.parse(data)
  36. if (msgData.header.code !== 0) {
  37. callback("提问失败",2)
  38. }else{
  39. callback(msgData.payload.choices.text[0].content,msgData.header.status)// 这个就是返回啦
  40. }
  41. });
  42. })
  43. }
  44. wsFun("你好啊");

5、断点运行代码

$ node --inspect-brk=8001 index.js

注意,这个8001就是咱刚host写的端口, message里面是火星的回复,大家可以自行监听并回调

注意!!!!!有小伙伴反馈,message返回提示401的报错!到公众号:“ 程序员野区 ” 回复“科大讯飞401报错”,会返回解决方案。

#程序员干货  #人间清醒  #前端回忆录  #争议话题  #程序员圈子热点

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/894519
推荐阅读
相关标签
  

闽ICP备14008679号