• 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、引入

    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报错”,会返回解决方案。

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

  • 相关阅读:
    算法竞赛——数论(一),数论内容的介绍,基础数论
    论文阅读: A Unified Sequence Interface for Vision Tasks
    rman异机恢复的异常处理
    ReduceSum算子性能问题
    JavaScript中的作用域及作用域链(es6)
    【太阳能多电平逆变器】采用SPWM技术的太阳能供电多电平逆变器研究(simulink)
    html中a标签的属性
    编写函数实现简单的插值进入有序数组问题
    天津WEB前端培训哪家好?Web机构推荐!
    k8s简单架构图
  • 原文地址:https://blog.csdn.net/xuelang532777032/article/details/133017772