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

news2024/11/24 13:51:47

序:

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

正文:

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、开始监听

function wsFun(userSay,callback){
		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里面是火星的回复,大家可以自行监听并回调

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C盘满了,应该清理哪些地方

有时候电脑用着用着C盘就满了,其实大多数原因是因为C:\Users\用户名\AppData下的文件夹下被你的程序软件不断地塞入了各种文件导致的。几乎你在电脑上安装的每个程序都会在AppData 文件夹中创建自己的文件夹,并将该程序的所有相关信息存储在那里。 为了…

类模板深度剖析

类模板可以定义任意多个不同的类型参数 类模板可以被特化 可以指定类模板的特定实现 部分类型参数必须显示指定 根据类型参数分开实现类模板 类模板的特化类型 部分特化 - 用特定规则约束类型参数 完全特化 - 完全显示指定类型参数 类模板特化注意事项 特化只是模板的分开…

官宣 | 2023第四届ISIG中国产业智能大会报名开启

由企智未来科技(RPA中国、LowCode低码时代、AIGC开放社区)主办的第四届「ISIG中国产业智能大会」将于12月初在上海召开,本届主题为“与科技共赢,与产业共进”。在此次大会中,我们将设立RPA超自动化、低代码/零代码、流…

docker-compose使用

docker-compose docker的项目编排 一、安装docker-compose Rocky Linux Rocky Linux安装Docker Compose的步骤如下: 安装Docker。您可以使用以下命令安装Docker: sudo dnf install docker-ce docker-ce-cli containerd.io安装Docker Compose。您可以…

渗透中 POC、EXP、Payload、Shellcode 的区别

渗透中 PoC、Exp、Payload、Shellcode 的区别 不同含义: POC Proof of Concept中文意思是“观点证明”。这个短语并非仅仅在漏洞报告中使用,甲方在项目招标过程中也常常要求乙方提供POC,即证明你的方案或者产品能达到声称的功能或性能&…

VMware ESXI vCenter 开启 SNMP 方法:

需要监控 ESXI 和 vSphere 系统的状态,开启默认的 SNMP 一、VMware ESXI 开启 SSH 登录到ESXI上执行命令如下: [rootESXI:~] esxcli system snmp set --enable true [rootESXI:~] esxcli system snmp set --communities public [rootESXI:~] esxcli …

IPO解读丨“停车场”以外的故事,智慧互通如何书写?

智能交通赛道或将迎来一家上市公司。 近日,智慧互通科技股份有限公司(下称“智慧互通”)在河北证监局进行上市辅导备案登记,辅导机构为中信证券。 这家成立于2015年的公司,致力于用AI赋能交通,打造城市级…

中国又一利器”遥遥领先″?纳米RAM市场增长趋势正式超越美国!

纳米RAM是一种前沿的存储技术,利用纳米级工艺技术制造而成,具有极高的存储密度和读写速度。相较于传统的RAM技术,纳米RAM具有更高的可靠性、更低的能耗以及更强的耐久性。这些优势使得纳米RAM成为未来高密度存储和高速计算领域极具潜力的技术…

ros2 安装UR机器人仿真包

1.ros2的版本如下 2.在码云上找到UR驱动包 GitHub很多时候都是无法打开的,但是码云可以复制这个GitHub上的包,别人已经复制好了。可以用连接如下: universal_robots_ros2_driver 3.查看该包的readme文件 这里面有介绍使用二进制安装&#…

RHEL8安装FreeIPA客户端

RHEL8安装FreeIPA客户端 1、在FreeIPA服务器上创建一个用户2、为ipa客户端机器添加DNS记录2.1 在ipa客户机器上配置hosts 3、在客户机上安装FreeIPA客户端4、配置FreeIPA 客户端5、测试FreeIPA客户端5.1 首次登录修改密码 1、在FreeIPA服务器上创建一个用户 参考:h…

可以实时监控电脑的软件有哪些?

在当今的数字化世界中,计算机已经成为我们生活和工作中不可或缺的一部分。然而,随着计算机使用的普及,安全问题也日益突出。为了保护我们的计算机和数据,实时监控电脑的使用情况变得越来越重要。本文将为您介绍一些实时监控电脑的…

1688全店商品采集教程,1688店铺所有商品接口(详解1688店铺所有商品数据采集步骤方法和代码示例)

随着电商行业的快速发展,1688已成为国内的电商平台之一,拥有着海量的商品资源。对于一些需要大量商品数据的商家或者需求方来说,1688全店采集是非常必要的。本文将详细介绍1688全店采集的步骤和技巧,帮助大家更好地完成数据采集任…

如何理解数据要素?如何推进数据要素的价值化和市场化?

近几年大家都在谈我们进入了数字经济时代,数据是重要的生产要素,要努力推进数据要素的价值化和市场化。这里面涉及的相关概念还是挺多的,比如:数据、生产要素、数据资源、数据资产、数据要素等。今天结合对数据要素化的理解来谈谈…

【教程】微信小程序导入外部字体详细流程

前言 在微信小程序中,我们在wxss文件中通过font-family这一CSS属性来设置文本的字体,并且微信小程序有自身支持的内置字体,可以通过代码提示查看微信小程序支持字体: 这些字体具体是什么样式可以参考: 微信小程序--字…

【Spatial-Temporal Action Localization(四)】论文阅读2019年

文章目录 1. You Only Watch Once: A Unified CNN Architecture for Real-Time Spatiotemporal Action Localization摘要和结论引言:针对痛点和贡献相关工作模型框架实验 2. STEP: Spatio-Temporal Progressive Learning for Video Action Detection摘要和结论引言&…

云原生之深入解析Jenkins多分支管道

一、 前言 多分支管道是一种基于 Git 分支自动创建 Jenkins Pipeline 的概念,这意味着,它可以在 SCM(Github)中创建时自动发现新的 Git 分支,并自动为该分支创建管道,当管道构建开始时,Jenkins…

Https中间人攻击

Https中间人攻击 https协议由 http ssl 协议构成,具体的链接过程可参考SSL或TLS握手的概述 中间人攻击过程如下: 服务器向客户端发送公钥。攻击者截获公钥,保留在自己手上。然后攻击者自己生成一个【伪造的】公钥,发给客户端。…

【Ubuntu】【grpc】grpc接口测试的工具--BloomRPC

目录 1下载 2 安装 3 使用 1下载 下载地址:https://github.com/bloomrpc/bloomrpc/releases 从地址下载选择你需要对应的版本,例如:bloomrpc_1.5.3_amd64.deb 2 安装 双击bloomrpc_1.5.3_amd64.deb文件直接安装。

【无标题】mysql 截取两个,之间字符串

截取两个,之间字符串 select area,SUBSTRING_INDEX(et.area,,,1) as XZQH1,if(length(et.area)-length(replace(et.area,,,))>1,SUBSTRING_INDEX(SUBSTRING_INDEX(et.area,,,2),,,-1),NULL) AS XZQH2,if(length(et.area)-length(replace(et.area,,,))>2,SUBS…

【后端速成 Vue】初识指令(上)

前言&#xff1a; Vue 会根据不同的指令&#xff0c;针对标签实现不同的功能。 在 Vue 中&#xff0c;指定就是带有 v- 前缀 的特殊 标签属性&#xff0c;比如&#xff1a; <div v-htmlstr> </div> 这里问题就来了&#xff0c;既然 Vue 会更具不同的指令&#…