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

序:

        官方给的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、引入

import WebSocket from "ws";
import CryptoJS from 'crypto-js'

3、写初始化url

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

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

4、开始监听

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

function wsFun(userSay,callback){
    callback=callback||function(){};
		getWebsocketUrl().then(url => {
			
			let ws = new WebSocket(url);
			ws.on('error', console.error);
			ws.on('open', function open() {
			  var params = {
			      "header": {
			          "app_id":"你的app_id",//这里记得替换app_id
			          "uid": "fd3f47e4-d"
			      },
			      "parameter": {
			          "chat": {
			              "domain": "general",
			              "temperature": 0.5,
			              "max_tokens": 1024
			          }
			      },
			      "payload": {
			          "message": {
			              "text": [
			                  {
			                      "role": "user",
			                      "content": userSay
			                  }
			              ]
			          }
			      }
			  }
			  ws.send(JSON.stringify(params))
			});
			ws.on('close', function close() {
			  
			});
			ws.on('message', function message(data) {
				var msgData=JSON.parse(data)
				if (msgData.header.code !== 0) {
					callback("提问失败",2)
				}else{
					callback(msgData.payload.choices.text[0].content,msgData.header.status)// 这个就是返回啦
				}
			});

		})
		
	}
wsFun("你好啊");

5、断点运行代码

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

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

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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪狼之夜

打个赏,让博主知道博文没白写

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值