Cogito-V1-Preview-Llama-3B开发:微信小程序智能客服对接实战

news2026/3/28 7:39:20
Cogito-V1-Preview-Llama-3B开发微信小程序智能客服对接实战最近有不少朋友在问把大模型部署到服务器上之后怎么才能让微信小程序用起来今天我就以星图GPU平台上部署的Cogito-V1-Preview-Llama-3B模型为例跟大家聊聊怎么把它变成一个能跟用户聊天的智能客服并且无缝对接到微信小程序里。这个场景其实挺常见的比如你的小程序需要个24小时在线的客服助手或者想给用户提供个智能问答功能。自己从头训练一个大模型成本太高用现成的API又担心数据安全和调用费用。把模型部署在自己的服务器上再通过小程序来调用算是个折中又实用的方案。接下来我会从后端接口设计、小程序前端对接、对话逻辑处理这几个核心环节一步步带你走通这个流程。整个过程我会尽量用大白话讲清楚即使你之前没怎么接触过小程序开发或者模型部署也能跟着做出来。1. 项目准备与环境梳理在开始写代码之前我们先理清楚整个链路是怎么跑的。简单来说就是用户在小程序里输入问题小程序把这个问题发给我们的后端服务器后端服务器调用部署好的Cogito模型生成回答然后再把回答返回给小程序展示出来。1.1 技术栈与分工为了让你有个整体概念我先画个简单的技术分工图前端微信小程序负责聊天界面展示就是用户看到的那部分收集用户输入的问题打包成网络请求发出去接收后端返回的回答并展示在聊天界面上后端模型服务提供一个HTTP接口专门处理小程序的请求收到问题后调用本地的Cogito模型进行推理把模型生成的结果整理好返回给小程序模型服务Cogito-V1-Preview-Llama-3B已经部署在星图GPU平台上的模型通过特定的API比如OpenAI兼容的接口来调用负责真正的“思考”和“回答”生成1.2 模型服务确认假设你已经按照官方文档在星图GPU平台上成功部署了Cogito-V1-Preview-Llama-3B模型。部署完成后通常会得到一个服务地址比如http://你的服务器IP:端口。关键是要确认这个服务提供了什么样的接口。现在很多模型部署方案都兼容OpenAI的API格式这样我们调用起来就方便多了。你可以用下面的命令测试一下服务是否正常curl http://你的服务器IP:端口/v1/chat/completions \ -H Content-Type: application/json \ -d { model: cogito-v1-preview-llama-3b, messages: [ {role: user, content: 你好} ] }如果能看到返回的JSON数据里面包含模型生成的回答那就说明模型服务跑起来了。记下这个接口地址和调用方式我们后面写后端代码时要用到。2. 后端服务搭建与接口设计后端在这里扮演的是“中间人”的角色既要跟小程序打交道又要跟模型服务通信。我们用Python的FastAPI来搭建这个服务因为它简单、快速特别适合这种API服务。2.1 创建后端项目先创建一个新的项目目录然后安装必要的依赖# 创建项目目录 mkdir wechat-miniprogram-ai-assistant cd wechat-miniprogram-ai-assistant # 创建虚拟环境可选但推荐 python -m venv venv source venv/bin/activate # Linux/Mac # 或者 venv\Scripts\activate # Windows # 安装依赖 pip install fastapi uvicorn httpx python-multipart这里简单说一下这几个包是干什么的fastapi用来快速构建Web APIuvicornASGI服务器用来运行我们的FastAPI应用httpx用来向模型服务发送HTTP请求python-multipart处理表单数据虽然我们这次用不到但装了也没坏处2.2 编写核心API接口接下来创建主要的后端代码文件main.pyfrom fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware import httpx import json from typing import List, Dict, Optional from pydantic import BaseModel import time # 定义请求和响应的数据模型 class ChatMessage(BaseModel): role: str # user 或 assistant content: str class ChatRequest(BaseModel): messages: List[ChatMessage] session_id: Optional[str] None # 用于区分不同用户的会话 class ChatResponse(BaseModel): reply: str session_id: str timestamp: int # 初始化FastAPI应用 app FastAPI(title微信小程序AI助手后端, version1.0.0) # 配置CORS允许微信小程序的域名访问 # 注意实际部署时需要替换为你的小程序域名 app.add_middleware( CORSMiddleware, allow_origins[ https://servicewechat.com, # 微信小程序通用域名 # 这里还可以添加你开发时用的本地调试域名 ], allow_credentialsTrue, allow_methods[*], allow_headers[*], ) # 配置模型服务地址 # 这里替换成你实际的模型服务地址 MODEL_SERVICE_URL http://你的模型服务器IP:端口/v1/chat/completions MODEL_NAME cogito-v1-preview-llama-3b # 简单的会话管理生产环境建议用Redis或数据库 sessions {} app.post(/api/chat, response_modelChatResponse) async def chat_with_ai(request: ChatRequest): 处理小程序的聊天请求 try: # 1. 获取或创建会话 session_id request.session_id if not session_id or session_id not in sessions: session_id session_id or fsession_{int(time.time())} sessions[session_id] { history: [], created_at: time.time() } # 2. 获取当前会话的历史记录 session_history sessions[session_id][history] # 3. 构建发送给模型的完整消息历史 # 这里可以控制保留多少轮历史对话避免上下文太长 max_history 5 # 最多保留5轮历史对话 recent_history session_history[-max_history*2:] if session_history else [] # 合并历史消息和当前消息 messages_for_model [] for msg in recent_history: messages_for_model.append({role: msg.role, content: msg.content}) # 添加当前用户消息 for msg in request.messages: messages_for_model.append({role: msg.role, content: msg.content}) # 4. 调用模型服务 async with httpx.AsyncClient(timeout30.0) as client: response await client.post( MODEL_SERVICE_URL, json{ model: MODEL_NAME, messages: messages_for_model, max_tokens: 500, # 控制生成的最大长度 temperature: 0.7, # 控制随机性0.7是个比较平衡的值 } ) if response.status_code ! 200: raise HTTPException( status_coderesponse.status_code, detailf模型服务错误: {response.text} ) result response.json() ai_reply result[choices][0][message][content] # 5. 更新会话历史 # 添加用户消息到历史 for msg in request.messages: sessions[session_id][history].append({ role: msg.role, content: msg.content, timestamp: time.time() }) # 添加AI回复到历史 sessions[session_id][history].append({ role: assistant, content: ai_reply, timestamp: time.time() }) # 6. 清理过期的会话示例24小时无活动则清理 cleanup_expired_sessions() # 7. 返回响应 return ChatResponse( replyai_reply, session_idsession_id, timestampint(time.time()) ) except httpx.RequestError as e: raise HTTPException(status_code503, detailf连接模型服务失败: {str(e)}) except Exception as e: raise HTTPException(status_code500, detailf服务器内部错误: {str(e)}) def cleanup_expired_sessions(): 清理过期会话 current_time time.time() expired_sessions [] for session_id, session_data in sessions.items(): # 如果会话超过24小时没有新消息则标记为过期 if session_data[history]: last_msg_time session_data[history][-1][timestamp] if current_time - last_msg_time 24 * 3600: # 24小时 expired_sessions.append(session_id) for session_id in expired_sessions: sessions.pop(session_id, None) app.get(/api/health) async def health_check(): 健康检查接口 return {status: healthy, timestamp: int(time.time())} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)这段代码虽然看起来有点长但逻辑其实挺清晰的。我简单解释几个关键点CORS配置为了让微信小程序能访问我们的后端必须设置跨域资源共享。这里我配置了微信小程序的通用域名。会话管理用一个简单的字典来存储不同用户的对话历史。实际项目中你可能需要用到数据库或者Redis来存这里为了演示就简化了。历史记录控制通过max_history参数控制保留多少轮历史对话避免上下文太长导致模型处理变慢。错误处理对网络错误、模型服务错误等都有相应的处理保证服务稳定性。健康检查提供了一个简单的健康检查接口方便监控服务状态。2.3 运行与测试后端服务保存好代码后可以直接运行python main.py服务启动后默认会在http://localhost:8000监听。你可以用下面的命令测试一下接口是否正常# 测试健康检查 curl http://localhost:8000/api/health # 测试聊天接口 curl -X POST http://localhost:8000/api/chat \ -H Content-Type: application/json \ -d { messages: [ {role: user, content: 你好介绍一下你自己} ] }如果能看到返回的JSON数据包含模型生成的回答那后端服务就基本跑通了。3. 微信小程序前端开发后端准备好了现在我们来搞小程序前端。小程序这边主要负责展示聊天界面处理用户输入然后跟我们的后端服务通信。3.1 创建小程序项目如果你还没有微信开发者工具先去微信官方下载安装。然后创建一个新的小程序项目选择JavaScript基础模板就行。3.2 封装网络请求在小程序里我们经常需要跟后端服务器通信所以先封装一个通用的请求工具。在项目根目录下创建utils/request.js// utils/request.js const BASE_URL http://你的后端服务器IP:8000; // 替换为你的实际后端地址 /** * 封装微信小程序的网络请求 * param {string} url - 请求地址 * param {string} method - 请求方法 GET/POST * param {object} data - 请求数据 * param {object} headers - 请求头 * returns {Promise} - 返回Promise对象 */ function request(url, method GET, data {}, headers {}) { return new Promise((resolve, reject) { wx.request({ url: ${BASE_URL}${url}, method: method, data: data, header: { Content-Type: application/json, ...headers }, success: (res) { if (res.statusCode 200) { resolve(res.data); } else { reject(new Error(请求失败: ${res.statusCode})); } }, fail: (err) { reject(new Error(网络请求失败)); } }); }); } /** * 专门用于聊天请求的函数 * param {Array} messages - 消息数组 * param {string} sessionId - 会话ID * returns {Promise} - 返回Promise对象 */ export function chatWithAI(messages, sessionId null) { return request(/api/chat, POST, { messages: messages, session_id: sessionId }); } /** * 健康检查 * returns {Promise} - 返回Promise对象 */ export function checkHealth() { return request(/api/health, GET); } export default { request, chatWithAI, checkHealth };这个封装有几个好处统一管理基础URL以后如果要换服务器地址只需要改这一个地方错误处理统一网络错误、服务器错误都有统一的处理使用Promise可以用async/await来写代码更清晰3.3 实现聊天页面现在我们来创建主要的聊天页面。在pages目录下新建一个chat目录里面创建三个文件chat.js、chat.wxml、chat.wxss。先看chat.js这是页面的逻辑部分// pages/chat/chat.js import { chatWithAI, checkHealth } from ../../utils/request; Page({ data: { messages: [], // 聊天消息列表 inputValue: , // 输入框内容 sessionId: null, // 当前会话ID isLoading: false, // 是否正在加载 isConnected: true, // 后端连接状态 }, onLoad() { // 页面加载时检查后端服务状态 this.checkServerStatus(); // 初始化会话ID this.setData({ sessionId: session_${Date.now()} }); // 可以添加一个欢迎消息 this.addMessage({ role: assistant, content: 你好我是AI助手有什么可以帮你的吗 }); }, // 检查服务器状态 async checkServerStatus() { try { await checkHealth(); this.setData({ isConnected: true }); } catch (err) { console.error(服务器连接失败:, err); this.setData({ isConnected: false }); wx.showToast({ title: 服务暂时不可用, icon: none }); } }, // 添加消息到列表 addMessage(message) { const newMessage { ...message, id: Date.now(), // 用时间戳作为唯一ID time: this.formatTime(new Date()) }; this.setData({ messages: [...this.data.messages, newMessage] }); // 滚动到底部 setTimeout(() { wx.pageScrollTo({ scrollTop: 99999, duration: 300 }); }, 100); }, // 格式化时间 formatTime(date) { const hours date.getHours().toString().padStart(2, 0); const minutes date.getMinutes().toString().padStart(2, 0); return ${hours}:${minutes}; }, // 处理输入框变化 onInputChange(e) { this.setData({ inputValue: e.detail.value }); }, // 发送消息 async sendMessage() { const content this.data.inputValue.trim(); if (!content) { wx.showToast({ title: 请输入内容, icon: none }); return; } if (!this.data.isConnected) { wx.showToast({ title: 服务未连接, icon: none }); return; } // 清空输入框 this.setData({ inputValue: , isLoading: true }); // 添加用户消息到界面 this.addMessage({ role: user, content: content }); try { // 构建消息历史 const messages this.data.messages .filter(msg msg.role user || msg.role assistant) .map(msg ({ role: msg.role, content: msg.content })); // 调用后端API const response await chatWithAI( [{ role: user, content: content }], this.data.sessionId ); // 添加AI回复到界面 this.addMessage({ role: assistant, content: response.reply }); } catch (err) { console.error(发送消息失败:, err); // 添加错误提示 this.addMessage({ role: assistant, content: 抱歉我暂时无法回答这个问题。请稍后再试。 }); wx.showToast({ title: 请求失败, icon: none }); } finally { this.setData({ isLoading: false }); } }, // 清空聊天记录 clearChat() { wx.showModal({ title: 提示, content: 确定要清空聊天记录吗, success: (res) { if (res.confirm) { this.setData({ messages: [], sessionId: session_${Date.now()} }); // 重新添加欢迎消息 this.addMessage({ role: assistant, content: 你好我是AI助手有什么可以帮你的吗 }); } } }); }, // 复制消息内容 copyMessage(e) { const content e.currentTarget.dataset.content; wx.setClipboardData({ data: content, success: () { wx.showToast({ title: 已复制, icon: success }); } }); } });然后是chat.wxml这是页面的结构部分!-- pages/chat/chat.wxml -- view classchat-container !-- 顶部状态栏 -- view classstatus-bar wx:if{{!isConnected}} text classstatus-text服务连接异常请检查网络/text /view !-- 聊天消息区域 -- scroll-view classmessage-list scroll-y scroll-with-animation view classmessage-item wx:for{{messages}} wx:keyid !-- 用户消息 -- view classmessage-user wx:if{{item.role user}} view classmessage-content user-message text{{item.content}}/text /view view classmessage-avatar user-avatar text我/text /view view classmessage-time{{item.time}}/view /view !-- AI消息 -- view classmessage-ai wx:if{{item.role assistant}} view classmessage-avatar ai-avatar textAI/text /view view classmessage-content ai-message text{{item.content}}/text view classmessage-actions bindtapcopyMessage>/* pages/chat/chat.wxss */ .chat-container { height: 100vh; display: flex; flex-direction: column; background-color: #f5f5f5; } /* 状态栏 */ .status-bar { background-color: #ff6b6b; padding: 10rpx; text-align: center; } .status-text { color: white; font-size: 24rpx; } /* 消息列表 */ .message-list { flex: 1; padding: 20rpx; box-sizing: border-box; } /* 消息项 */ .message-item { margin-bottom: 30rpx; } /* 用户消息 */ .message-user { display: flex; flex-direction: column; align-items: flex-end; } .user-message { background-color: #95ec69; border-radius: 20rpx 20rpx 0 20rpx; max-width: 70%; padding: 20rpx; margin-bottom: 10rpx; } .user-avatar { background-color: #95ec69; color: white; width: 60rpx; height: 60rpx; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 24rpx; margin-left: 10rpx; } /* AI消息 */ .message-ai { display: flex; flex-direction: column; align-items: flex-start; } .ai-message { background-color: white; border-radius: 20rpx 20rpx 20rpx 0; max-width: 70%; padding: 20rpx; margin-bottom: 10rpx; box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1); } .ai-avatar { background-color: #1890ff; color: white; width: 60rpx; height: 60rpx; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 24rpx; margin-right: 10rpx; } /* 消息时间 */ .message-time { font-size: 22rpx; color: #999; margin-top: 5rpx; } /* 消息操作 */ .message-actions { margin-top: 15rpx; padding-top: 10rpx; border-top: 1rpx solid #eee; } .action-text { color: #1890ff; font-size: 24rpx; } /* 加载指示器 */ .loading-indicator { display: flex; align-items: center; justify-content: center; padding: 30rpx; } .loading-dots { display: flex; margin-right: 15rpx; } .dot { width: 12rpx; height: 12rpx; border-radius: 50%; background-color: #1890ff; margin: 0 4rpx; animation: dotPulse 1.5s infinite ease-in-out; } .dot:nth-child(2) { animation-delay: 0.2s; } .dot:nth-child(3) { animation-delay: 0.4s; } keyframes dotPulse { 0%, 100% { opacity: 0.4; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1); } } .loading-text { color: #666; font-size: 26rpx; } /* 输入区域 */ .input-area { display: flex; padding: 20rpx; background-color: white; border-top: 1rpx solid #eee; } .message-input { flex: 1; background-color: #f8f8f8; border-radius: 40rpx; padding: 20rpx 30rpx; font-size: 28rpx; margin-right: 20rpx; } .send-button { background-color: #1890ff; color: white; border-radius: 40rpx; padding: 0 40rpx; font-size: 28rpx; line-height: 2.5; } .send-button[disabled] { background-color: #ccc; } /* 操作栏 */ .action-bar { padding: 20rpx; background-color: white; border-top: 1rpx solid #eee; } .clear-button { background-color: #f5f5f5; color: #666; border-radius: 40rpx; font-size: 26rpx; line-height: 2.2; }3.4 配置小程序为了让小程序能访问我们的后端服务还需要在project.config.json里配置域名白名单。找到项目根目录下的这个文件添加以下配置{ setting: { urlCheck: false, es6: true, postcss: true, minified: true, newFeature: true }, appid: 你的小程序AppID, projectname: AI智能客服, condition: { search: { list: [] }, conversation: { list: [] } } }另外你需要在微信小程序后台的“开发”-“开发设置”-“服务器域名”中添加你的后端服务器域名到request合法域名列表中。4. 功能测试与优化建议代码都写好了现在我们来测试一下整个流程是否跑得通。4.1 完整测试流程启动后端服务python main.py看到类似这样的输出就说明启动成功了INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000启动微信小程序打开微信开发者工具导入我们刚才创建的项目在模拟器里选择聊天页面测试聊天功能在输入框里输入“你好”点击发送按钮应该能看到用户消息出现在界面上稍等一会儿模型推理需要时间就能看到AI的回复测试连续对话继续问一些问题比如“你能做什么”观察AI的回答是否考虑了之前的对话历史测试清空聊天功能是否正常工作4.2 可能遇到的问题和解决方案在实际测试中你可能会遇到一些问题这里我列几个常见的问题1网络请求失败可能原因后端服务没启动或者IP地址、端口不对解决方案检查后端服务是否正常运行确认小程序里配置的服务器地址是否正确问题2跨域错误可能原因后端CORS配置有问题解决方案检查后端的CORS配置确保包含了微信小程序的域名问题3模型响应慢可能原因模型推理需要时间或者服务器配置不够解决方案可以在前端添加加载动画给用户更好的等待体验。也可以考虑优化模型参数比如减少max_tokens的值问题4回答质量不高可能原因提示词不够好或者模型需要调优解决方案可以尝试调整temperature参数或者在发送给模型的消息里添加系统提示词4.3 生产环境优化建议如果要把这个项目用到实际生产环境还有一些地方可以优化会话管理现在用的是内存存储重启服务就没了。可以考虑用Redis或者数据库来存会话数据。性能优化如果用户量大了可以考虑添加请求队列避免同时太多请求把模型服务打垮实现流式响应让用户能边生成边看到结果添加缓存机制对常见问题缓存回答安全性添加API密钥验证实现请求频率限制对用户输入做内容过滤监控和日志添加详细的日志记录监控服务健康状态统计使用情况用户体验添加打字机效果让回复一个字一个字显示支持图片、文件上传如果模型支持添加常用问题快捷输入5. 总结与扩展思路走完这一整套流程你应该已经能把部署在星图GPU平台上的Cogito模型通过一个完整的后端服务对接到微信小程序里了。虽然这只是一个基础版本但核心功能都已经实现了。实际用下来这种方案的优点挺明显的。首先是数据安全所有的对话数据都在你自己的服务器上不用担心隐私泄露。其次是成本可控不像调用公有云API那样按次数收费用多少算多少。还有就是灵活性高你可以根据自己的业务需求对模型进行微调或者定制特殊的对话逻辑。当然这个基础版本还有很多可以扩展的地方。比如你可以加入用户身份验证让不同用户看到不同的对话历史。或者集成知识库让AI能回答更专业的问题。还可以加入多轮对话的上下文管理让AI能记住更长的对话历史。如果你对性能要求比较高可以考虑用WebSocket来实现实时通信这样响应速度会更快。或者在前端加入消息的本地缓存这样即使网络不好用户也能看到之前的对话记录。最让我觉得有意思的是这个框架其实很灵活。不只是Cogito模型其他部署在星图平台上的模型比如图像生成、语音合成这些都可以用类似的思路来对接。你只需要稍微调整一下后端的接口前端基本上不用大改。技术实现上其实没什么特别难的地方关键是把各个环节打通。后端服务要稳定可靠前端交互要流畅自然模型调用要高效准确。把这些都做好了一个实用的智能客服系统就出来了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…