当前位置: 首页 > news >正文

全球十大网站排名网站建设人员职责分布

全球十大网站排名,网站建设人员职责分布,手工做刀网站,wordpress做登陆界面前言 最近写的开源项目核心功能跑通了#xff0c;前两天突发奇想。关于项目可否介入大模型来辅助用户使用平台#xff0c;就跑去研究了最近比较活火的国内大模型–讯飞星火大模型。 大模型api获取 控制台登录 地址#xff1a;https://console.xfyun.cn/app/myapp 新建应…前言 最近写的开源项目核心功能跑通了前两天突发奇想。关于项目可否介入大模型来辅助用户使用平台就跑去研究了最近比较活火的国内大模型–讯飞星火大模型。 大模型api获取 控制台登录 地址https://console.xfyun.cn/app/myapp 新建应用后点进去 获取api地址和其key 左侧选用大模型版本右侧圈起来的地方就是咱api要调用的数据了 如果没有正常的token或key可能没有实名认证需要先实名认证下 下面有关于web的调用接口这是咱们后面要调用的api接口地址 技术栈 react hooks TypeScript semi-ui组件库可选 下载工具包 npm i crypto-js base-64 -d 实现 api和key都获取到了咱就直接开始上代码操作吧 目录 utils工具类 以下工具类getWebsocketUrl方法负责构建api的URL地址具体原因可以查阅对应的官方文档说明 import * as base64 from base-64; import CryptoJs from crypto-js; import { requestObj } from ../config; export const getWebsocketUrl () {return new Promisestring((resovle, reject) {let url ws://spark-api.xf-yun.com/v1.1/chat;let host spark-api.xf-yun.com;let apiKeyName api_key;// let date new Date().toGMTString();let date new Date().toUTCString();let algorithm hmac-sha256;let headers host date request-line;let signatureOrigin host: ${host}\ndate: ${date}\nGET /v1.1/chat HTTP/1.1;let signatureSha CryptoJs.HmacSHA256(signatureOrigin, requestObj.APISecret);let signature CryptoJs.enc.Base64.stringify(signatureSha);let authorizationOrigin ${apiKeyName}${requestObj.APIKey}, algorithm${algorithm}, headers${headers}, signature${signature};let authorization base64.encode(authorizationOrigin);// 将空格编码url ${url}?authorization${authorization}date${encodeURI(date)}host${host};resovle(url);}); };config配置类 前言说的 key 在此处分别填入即可Uid无关紧要 server/AiToolws服务工具 该工具类负责接收父类组件传来的问题并对相关数据信息进行返回。 **forwardRefuseImperativeHandleprops **实现父子通信通过 **getWebsocketUrl **返回url地址构建ws通信**websocket **返回相关ai回应数据并对数据加载状态进行实时通信 import { FC, forwardRef, useImperativeHandle, useState } from react; import { requestObj } from ../config; import { getWebsocketUrl } from ../utils; interface AiToolProps {isText?: boolean;respondHoodle: (result: string) void; //关联数据loadHoodle?: (isLoading: boolean) void; //加载状态errorHoodle?: (isLoading: boolean) void; //失败调用 }interface CropperRef {submitHoodle: (v: any) void; //父类调用 }const AiTool forwardRefCropperRef, AiToolProps(function AiTool({ isText, respondHoodle, loadHoodle, errorHoodle },ref ) {let result: string ;const [historyMessage, setHistoryMessage] useStateany[]([{ role: user, content: 你是谁 }, //# 用户的历史问题{ role: assistant, content: 我是AI助手 }]);useImperativeHandle(ref, () ({submitHoodle: sendMsg}));const sendMsg async (questionText: string) {result ;// 获取请求地址let myUrl await getWebsocketUrl();// 获取输入框中的内容// 每次发送问题 都是一个新的websocket请求let socket new WebSocket(myUrl);// 监听websocket的各阶段事件 并做相应处理socket.addEventListener(open, (event) {if (loadHoodle) loadHoodle(true);// 发送消息let params {header: {app_id: requestObj.APPID,uid: wzz},parameter: {chat: {domain: general,temperature: 0.5,max_tokens: 1024}},payload: {message: {// 如果想获取结合上下文的回答需要开发者每次将历史问答信息一起传给服务端如下示例// 注意text里面的所有content内容加一起的tokens需要控制在8192以内开发者如有较长对话需求需要适当裁剪历史信息text: [...historyMessage,// ....... 省略的历史对话{ role: user, content: questionText } //# 最新的一条问题如无需上下文可只传最新一条问题]}}};socket.send(JSON.stringify(params));});socket.addEventListener(message, (event) {let data JSON.parse(event.data);if (!data.payload) {socket.close();return;}result data.payload.choices.text[0].content;respondHoodle(result);if (data.header.code ! 0) {console.log(出错了, data.header.code, :, data.header.message);// 出错了手动关闭连接socket.close();}if (data.header.code 0) {// 对话已经完成if (data.payload.choices.text data.header.status 2) {setTimeout(() {// 对话完成手动关闭连接socket.close();}, 1000);}}});socket.addEventListener(close, (event) {setHistoryMessage([...historyMessage,{ role: user, content: questionText },{ role: assistant, content: result }]);if (loadHoodle) loadHoodle(false);// 对话完成后socket会关闭将聊天记录换行处理});socket.addEventListener(error, (event) {if (errorHoodle) errorHoodle(true);console.log(连接发送错误, event);});};// return result;return ; }); export default AiTool; Chat.tsx(具体组件) chat组件的具体实现 messageList 记录信息数据submit 发送问题函数overRespond 介绍信息函数**moveY **返回底部 import { memo, useRef, useState } from react; //type import type { FC } from react; import styles from ./index.module.scss; import { Button, Spin } from douyinfe/semi-ui; import AiTool from /ai/server/AiTool; interface IProps {datas?: any[]; } //usertrue代表用户信息反之ai interface messageInfo {text: string;user: boolean; }const Chat: FCIProps () {const [question, setQuestion] useStatestring();// const [result, setResult] useStatestring();let result ;const [isLoading, setIsLoading] useStateboolean(false);const [messageList, setMessageList] useStatemessageInfo[]([]);const ref useRefany(null);const messageContainerRef useRefany(null);const loadingRef useRefany(null);const submit () {setQuestion();console.log(messageList);if (!messageList.length) {setMessageList([{user: true,text: question}]);console.log(messageList);} else {setMessageList([...messageList,{user: true,text: question}]);console.log(messageList);}moveY();if (ref.current) {ref.current.submitHoodle(question);}};const respondHoodle (respond: string) {result respond;loadingRef.current.innerText result;moveY();// loadingRef.current};const overRespond (v: boolean) {if (!v) {setMessageList((prevList) [...prevList, { user: false, text: result }]);console.log(messageList);moveY();}setIsLoading(v);};const handleSendMessage (e: any) {e.preventDefault();};const handleKeyPress (e: any) {if (e.keyCode 13) {submit();}};//返回底部const moveY () {const h messageContainerRef.current.scrollHeight;messageContainerRef.current.scrollTop h 20;};return (div className{styles.chat}div className{styles.chat__main}header className{styles.chat__mainHeader}p欢迎使用青邮AI助手/pdivButton onClick{moveY} style{{ marginRight: 4 }}返回底部/ButtonButton typedanger themesolid onClick{() setMessageList([])}清除聊天记录/Button/div/header{/* 显示你发送消息的内容 */}div className{styles.message__container} ref{messageContainerRef}{messageList.map((item, index) {return item.user ? (div key{item.user.toString() index} className{styles.message__chats}p className{styles.sender__name}You/pdiv className{styles.message__sender}p{item.text}/p/div/div) : (div className{styles.message__chats}pAi/pdiv className{styles.message__recipient}p{item.text}/p/div/div);})}{isLoading ? (div className{styles.message__chats}pAi/pdiv className{styles.message__recipient}p ref{loadingRef}{result}/pSpin //div/div) : ()}/divdiv className{styles.chat__footer}form classNameform onSubmit{handleSendMessage}inputtypetextplaceholder编写消息className{styles.message}value{question}onChange{(e) setQuestion(e.target.value)}onKeyUp{handleKeyPress}/Button onClick{submit} typeprimary themesolid className{styles.sendBtn}发送/Button/form/divAiTool loadHoodle{overRespond} respondHoodle{respondHoodle} ref{ref} //div/div); };export default memo(Chat); scss就不v了如需要可以在评论区喊我 结果 效果图 后言 关于使用server的AiTool.tsx工具其实还能产生不少其他的扩展接下来着重研究下加油加油
http://www.zqtcl.cn/news/988828/

相关文章:

  • 比较有名的diy制作网站做照片视频的网站
  • 河北石家庄建设网站wordpress nginx apache
  • 上海免费网站建设品牌wordpress主题安装失败下载失败
  • 买公司的网站商城系统开发
  • 网页设计国外设计欣赏网站深夜视频在线免费
  • 做网站怎么租用服务器杭州网站建设hzyze
  • .asp 网站北京最新防疫信息
  • 网站上传用什么软件做视频教程114查询
  • 网站小图标素材网站开发需要提供哪些东西
  • 阿里巴巴国际站买家入口百度建网站多少钱
  • 为网站网站做代理怎么判wordpress 调用当前分类名称
  • 多用户网站管理系统定制网站建设与运营案例
  • 毕业设计做的网站抄袭网站开发执行文档
  • 自己做网站都要什么软件网址你懂我意思正能量不用下载
  • 网站内容的创新wordpress美食主题
  • 程序员做游戏还是做网站好雅安移动网站建设
  • wordpress伪静态大学seo诊断网站免费诊断平台
  • 企业网站模板下载软件商务网站规划与建设心得
  • 做网站的像素是多少钱郑州公司网页
  • 北京游戏网站建设特殊符号网站
  • c 网站开发技术代注册公司要多少钱
  • 设计师参考效果图网站如何写网站建设实验结果分析
  • 网站备案 营业执照做企业网站注意些啥
  • 网站建设公司济南网络教学平台昆明理工大学
  • 原网站开发新功能世赛网站开发
  • 做一款小程序需要多少钱凡科的网站做seo比较难
  • 北京网页设计与网站建设最专业的手机网站建设
  • 做一个网站广州网站备案拍照
  • 做平面图片的网站wordpress批量添加连接
  • 做ppt哪些网站的图片质量高做电商网站需要多少时间