基于MCP协议构建阿里云SLS日志AI查询助手:原理、部署与实战

news2026/5/16 1:17:42
1. 项目概述当阿里云SLS遇上MCP如果你正在用阿里云日志服务SLS做日志分析同时又想用上像Claude、Cursor这类AI编程助手来帮你写查询、分析数据那你可能已经感受到了一个痛点如何在AI助手和你的日志数据之间搭建一座安全、高效且能理解业务语义的桥梁SuxyEE/aliyun-sls-mcp这个项目就是为了解决这个问题而生的。简单来说它是一个MCPModel Context Protocol服务器专门为阿里云SLS设计。MCP是Anthropic提出的一套协议旨在让AI模型能够安全、可控地访问和使用外部工具与数据。这个项目就是把你的阿里云SLS日志库变成了AI助手可以“直接对话”和“查询”的一个强大工具。它不是一个独立的软件而是一个“翻译官”和“安全网关”运行在你的本地或受信环境中将AI助手的自然语言请求翻译成精准的SLS查询语句并返回结构化的结果。想象一下这个场景你正在排查一个线上服务的延迟问题。以前你可能需要打开SLS控制台在查询框里反复尝试不同的查询语法筛选时间范围拼接复杂的分析语句。现在你只需要在AI助手的对话框里输入“帮我查一下过去一小时order-service这个应用响应时间超过500毫秒的请求按接口路径分组并统计一下数量和平均耗时。” 几秒钟后一份清晰的表格或总结就呈现在你面前。这背后正是这个MCP服务器在默默工作。它适合谁任何频繁使用SLS进行运维监控、业务分析、安全审计的开发者、运维工程师和数据分析师。特别是那些已经习惯使用AI编程助手来提升效率的团队这个项目能将AI的“智能”与你已有的“数据”资产无缝结合让数据查询和分析变得像日常对话一样自然。接下来我将带你深入拆解这个项目的设计思路、核心实现并分享从零搭建到实战避坑的全过程。2. 核心设计思路与架构拆解要理解这个项目我们得先搞明白两个核心概念MCP协议和阿里云SLS以及它们是如何被巧妙地结合在一起的。2.1 MCP协议AI的“手”和“眼”MCP即模型上下文协议你可以把它理解为AI模型的“外设驱动”标准。在没有MCP之前AI模型比如Claude的能力被禁锢在其训练数据截止的知识范围内它无法感知实时数据也无法操作外部系统。MCP定义了一套标准化的通信方式允许AI模型通过一个中间服务器即MCP Server来发现工具Tools服务器告诉AI“我这里有这些工具可以用。”调用工具Call ToolsAI说“请用工具A参数是X, Y, Z。”返回结果服务器执行操作并将结果以结构化格式返回给AI。这个项目就是一个实现了MCP Server协议的应用程序。它的核心职责就是向AI助手“宣告”“我提供了查询阿里云SLS日志的工具。” 当AI助手需要查日志时它就调用这个工具。2.2 阿里云SLS数据之源阿里云日志服务是一个强大的日志数据平台它提供了日志采集、存储、查询分析、可视化告警等全套能力。其核心查询语言是SLS Query这是一种功能强大但有一定学习成本的类SQL语言。对于非专业的数据分析师或者在不熟悉的业务日志面前快速写出准确的查询并非易事。项目的核心价值就在于它将非结构化的自然语言查询意图转化为结构化的SLS Query。这不仅仅是简单的关键词替换而是需要理解查询的语义比如“过去一小时”对应__time__ now() - 3600“分组统计”对应stats count(*) as cnt, avg(response_time) as avg_time by path。2.3 架构设计安全与效率的平衡项目的架构设计遵循了MCP Server的典型模式并针对SLS的特性做了优化协议层基于MCP的SDK如TypeScript的modelcontextprotocol/sdk实现。这一层处理与AI客户端如Claude Desktop的WebSocket或Stdio通信解析MCP格式的请求tools/list,tools/call并封装响应。业务逻辑层这是项目的“大脑”。它接收来自协议层的工具调用请求解析参数如项目名称、日志库名称、查询语句、时间范围然后构造出符合SLS API要求的请求体。SLS客户端层使用阿里云官方的SDK如alicloud/sls20201230来与SLS服务端进行安全通信。这里负责处理身份认证通常使用AccessKey、重试逻辑、错误处理等。结果处理层SLS返回的原始数据可能是海量日志行或聚合结果。这一层负责对结果进行初步的格式化、裁剪避免返回过多数据导致AI上下文溢出并转换成MCP协议要求的JSON格式返回。一个关键的设计考量是安全性。MCP服务器运行在用户侧它需要阿里云SLS的访问凭证AccessKey。项目设计上绝不会要求你将AccessKey提交给任何第三方。所有的认证和查询都发生在你本地环境与阿里云之间数据流不经过项目作者或其他中间服务器这从根本上保障了企业数据的安全。注意AccessKey是访问阿里云资源的最高权限凭证之一务必像保管密码一样保管它。最佳实践是使用RAM子账号并授予其仅限于特定SLS项目日志库的只读权限遵循最小权限原则。3. 环境准备与项目部署实操理论讲完我们动手把它跑起来。这里以最常见的本地开发环境macOS/Linux配合Claude Desktop为例演示从零开始的部署流程。3.1 前置条件检查在开始之前请确保你已准备好以下三样东西Node.js环境项目通常基于Node.js开发。你需要安装Node.js建议版本18或以上和包管理器npm或yarn。可以通过node -v和npm -v命令验证。阿里云AccessKey登录阿里云控制台进入“访问控制RAM”页面。强烈建议创建一个专用于此项目的RAM用户不要使用主账号AK。为该RAM用户创建AccessKey保存好AccessKey ID和Secret。为该RAM用户授权一个自定义策略策略内容至少包含目标SLS项目Project和日志库Logstore的读权限。例如{ Version: 1, Statement: [ { Effect: Allow, Action: [ log:GetProject, log:GetLogStore, log:GetIndex, log:GetLogs, log:GetHistograms ], Resource: [ acs:log:region:account-id:project/your-project-name, acs:log:region:account-id:project/your-project-name/logstore/your-logstore-name ] } ] }请将region,account-id,your-project-name,your-logstore-name替换为你的实际信息。Claude Desktop应用从Anthropic官网下载并安装。这是目前最主流的使用MCP协议的客户端之一。3.2 获取与配置项目代码由于这是一个开源项目我们通常从GitHub克隆代码。# 克隆项目到本地 git clone https://github.com/SuxyEE/aliyun-sls-mcp.git cd aliyun-sls-mcp # 安装项目依赖 npm install # 或使用 yarn/pnpm接下来是关键的配置环节。项目一般会通过环境变量或配置文件来读取阿里云的认证信息。查看项目根目录下的README.md或.env.example文件来确认配置方式。最常见的方式是使用环境变量# 在项目根目录下创建 .env 文件 cp .env.example .env # 然后编辑 .env 文件填入你的信息.env文件内容可能类似这样# 阿里云访问密钥 ALIYUN_ACCESS_KEY_ID你的AccessKeyId ALIYUN_ACCESS_KEY_SECRET你的AccessKeySecret # SLS项目所在区域如 cn-hangzhou ALIYUN_REGIONcn-hangzhou # 默认查询的SLS项目名称可选可在工具调用时指定 ALIYUN_SLS_PROJECTyour-default-project # 默认查询的日志库名称可选 ALIYUN_SLS_LOGSTOREyour-default-logstore实操心得环境变量管理永远不要将.env文件提交到版本控制系统确保它在.gitignore中。对于团队协作可以考虑使用dotenv库配合不同的环境文件如.env.development,.env.production或者在部署平台如Vercel, Railway的界面中直接设置环境变量。在本地使用环境变量加载工具可以避免敏感信息泄露。3.3 配置Claude Desktop以连接MCP服务器这是让AI助手认识我们这个新“工具”的关键一步。Claude Desktop的配置通常通过一个JSON配置文件完成。找到Claude Desktop的配置目录macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.jsonLinux:~/.config/Claude/claude_desktop_config.json编辑配置文件如果文件不存在就创建它。我们需要在其中添加mcpServers配置项。配置方式取决于你如何运行MCP服务器。方案A直接运行Node.js脚本开发调试常用假设你在项目目录下通过npm start或node server.js来启动服务器它可能会监听一个端口或使用Stdio。你需要知道服务器的启动命令。例如如果项目设计为Stdio方式MCP常见方式配置如下{ mcpServers: { aliyun-sls: { command: node, args: [/ABSOLUTE/PATH/TO/aliyun-sls-mcp/build/index.js], env: { ALIYUN_ACCESS_KEY_ID: 你的ID, ALIYUN_ACCESS_KEY_SECRET: 你的Secret, ALIYUN_REGION: cn-hangzhou } } } }command: 解释器这里是node。args: 传递给解释器的参数第一个是脚本的绝对路径。注意这里通常需要指向编译后的JS文件如build/index.js或dist/index.js而不是源码src/index.ts。你需要先运行npm run build进行构建。env: 直接在这里设置环境变量。这种方式将密钥写在了配置文件中安全性较低仅适用于本地测试。方案B使用已安装的全局命令行工具推荐用于生产更优雅的方式是将这个MCP服务器打包成一个全局可执行的命令行工具。这样配置会更简洁。假设项目提供了此功能并且你已通过npm install -g .全局安装那么配置可能简化为{ mcpServers: { aliyun-sls: { command: aliyun-sls-mcp-server } } }环境变量则通过系统环境或.env文件提供不写在配置里更安全。重启Claude Desktop保存配置文件后完全退出并重启Claude Desktop应用使其加载新的MCP服务器配置。3.4 验证连接与工具发现重启Claude后打开Claude你可以通过一些方式验证MCP服务器是否连接成功直接询问尝试输入“你能用什么工具”或“你有什么能力”。如果配置成功Claude的回复中应该会列出它从MCP服务器获取到的工具例如可能会看到query_aliyun_sls或类似名称的工具描述。查看日志运行MCP服务器的终端会输出连接和请求日志。当你启动Claude时如果看到类似[info] MCP server connected或工具列表被请求的日志说明连接成功。如果连接失败请依次检查MCP服务器进程是否成功启动且无报错。Claude配置文件的JSON格式是否正确可以用在线JSON校验工具。命令路径是否为绝对路径且该路径下的文件可执行。环境变量中的阿里云AK是否有权限区域是否正确。4. 核心功能深度解析与使用指南当MCP服务器成功连接后AI助手就获得了查询SLS的超能力。我们来深入看看这个“工具”具体能做什么以及如何高效地使用它。4.1 工具定义与能力边界一个设计良好的MCP工具会通过“模式Schema”清晰定义其输入参数和输出。对于SLS查询工具其核心参数通常包括project(string, 可选): 指定的SLS项目名。如果不提供则使用环境变量中的默认值。logstore(string, 可选): 指定的日志库名。如果不提供则使用默认值。query(string,必需): SLS查询语句。这是最核心的部分。from(number, 可选): 查询开始时间的时间戳秒级或毫秒级。to(number, 可选): 查询结束时间的时间戳。limit(number, 可选): 返回日志条数的上限防止数据量过大。工具被调用后它会使用阿里云SDK向指定的SLS端点发起GetLogs或GetHistograms请求。接收原始的日志数据。对数据进行清洗和格式化例如将时间戳转换为可读格式截断过长的字段。将处理后的结果以结构化JSON或简洁文本的形式返回给AI助手。AI助手再根据这些数据生成人类友好的回答、总结或图表建议。4.2 从自然语言到SLS查询的“魔法”用户不会直接输入SLS查询语句。真正的交互流程是用户用自然语言描述需求 - AI助手理解并生成工具调用参数包括SLS Query - MCP服务器执行 - AI助手解析结果并回复用户。例如用户说“看看订单服务最近10分钟有没有错误。”AI助手如Claude理解意图需要查询order-service相关的日志时间范围是最近10分钟日志级别为“错误”。AI助手需要知道日志的字段结构。它可能会先通过对话询问用户或者依赖项目预设的常见模式如level:ERROR。假设它知道错误级别字段是level服务名字段是service。AI助手构造工具调用project: “my-app-prod”logstore: “app-log”query:service: \order-service\ and level: \ERROR\from:Math.floor(Date.now() / 1000) - 600(当前时间戳-600秒)to:Math.floor(Date.now() / 1000)limit: 50MCP服务器执行该查询并返回结果。AI助手收到结果后可能会分析“过去10分钟内发现了3条错误日志主要涉及支付超时和库存校验失败。第一条发生在...”。它甚至能根据错误信息给出初步的排查建议。这里的“魔法”在于AI助手自身对自然语言的理解和代码生成能力。MCP服务器本身不负责将“最近10分钟”翻译成时间戳这个翻译工作是由AI助手完成的。MCP服务器只是忠实地执行AI助手生成的、语法正确的SLS Query。4.3 高级查询场景示例掌握了基础查询我们可以玩得更溜。以下是一些高级场景展示了结合AI与SLS MCP的强大之处场景一多维分析与统计用户提问“分析一下网关api-gateway昨天的访问情况按状态码分组看看2xx、4xx、5xx的比例各是多少并且列出4xx中最多的前5个请求路径。”AI可能构造的查询# 首先获取分时统计 status200 and status300 | select count(*) as 2xx from log status400 and status500 | select count(*) as 4xx from log status500 | select count(*) as 5xx from log # 或者更高级的使用CASE WHEN * | select count(*) as total_count, sum(case when status200 and status300 then 1 else 0 end) as 2xx, sum(case when status400 and status500 then 1 else 0 end) as 4xx, sum(case when status500 then 1 else 0 end) as 5xx, 2xx*100.0/total_count as 2xx_rate, 4xx*100.0/total_count as 4xx_rate, 5xx*100.0/total_count as 5xx_rate from log # 查询4xx中最多的路径 status400 and status500 | select request_path, count(*) as cnt from log group by request_path order by cnt desc limit 5AI助手可能会分两次调用工具然后将结果整合生成一个包含比例和Top路径列表的完整报告。场景二关联追踪与链路查询用户提问“有一个traceId是abc123def帮我找出这个请求在微服务A、B、C中的所有相关日志按时间排序。”AI可能构造的查询traceId: \abc123def\。这个查询会在指定的多个Logstore如果工具支持跨库查询或者用户分别查询中执行。AI助手可以依次查询不同服务的日志库然后将结果按时间字段__time__合并排序还原出完整的请求调用链。场景三模式识别与异常检测用户提问“感觉今天数据库响应有点慢帮我看看slow-query日志库里有没有出现新的、不常见的慢查询模式”AI可能构造的查询这需要更复杂的分析。AI可能会先执行一个基础查询获取今天的慢查询query_time 5.0 | select * from log limit 100。然后它可以基于返回的日志内容利用其强大的文本分析能力识别出SQL语句的结构、访问的表、条件等并与历史模式进行对比如果上下文中有历史信息指出哪些查询是新出现的或执行计划可能发生了变化。这超出了单纯SLS查询的能力体现了AI在结果后处理上的价值。实操心得教会AI你的日志格式AI助手并非天生知道你的日志里哪个字段叫service哪个叫traceId。为了获得最佳效果你可以在第一次使用前或者在对话中主动“告诉”AI你的日志结构。例如“我的应用日志格式是JSON主要字段包括timestamp,level,service,message,traceId,userId。错误日志的level字段值为ERROR或FATAL。” 这样AI在生成查询时会更加精准。5. 性能优化、安全加固与高级配置当工具用起来之后我们就要考虑如何让它更稳定、更安全、更高效。这部分是区分普通使用和深度应用的关键。5.1 查询性能优化策略SLS查询可能涉及扫描海量数据不当的查询会导致响应缓慢甚至超时。通过MCP服务器我们可以实现智能优化。强制时间范围限制在MCP服务器代码中可以为所有查询自动加上一个默认的、安全的时间范围限制如最近24小时除非用户显式指定了更宽的范围。这能防止有人误操作查询全量历史数据。// 伪代码示例 let fromTime userProvidedFrom || Math.floor(Date.now() / 1000) - 86400; // 默认最近24小时 let toTime userProvidedTo || Math.floor(Date.now() / 1000); // 确保查询范围不超过最大允许范围如30天 const MAX_RANGE 30 * 86400; if (toTime - fromTime MAX_RANGE) { fromTime toTime - MAX_RANGE; // 可以返回一个警告信息给AI告知时间范围已被调整 }自动添加索引字段过滤SLS查询性能高度依赖于索引。在工具实现中可以优先引导或自动在查询条件中包含已建立索引的字段如__topic__,__source__, 或业务关键字段。这需要MCP服务器预先知道或能动态获取日志库的索引配置。分页与采样查询对于探索性查询可以先进行采样或限制返回极少量数据如limit: 5让用户确认数据是否符合预期再进行全量查询。AI助手可以主动采用这种策略。结果集大小限制在MCP服务器端硬性限制单次查询返回的日志条数例如1000条并在返回信息中提示“结果已被截断如需更多请细化查询条件”。这保护了AI的上下文窗口不被撑爆也提升了响应速度。5.2 安全加固实践安全无小事尤其是涉及生产日志访问时。最小权限的RAM策略如前所述这是第一道也是最重要的防线。创建仅具有必要SLS项目只读权限的RAM用户。环境变量与密钥管理绝对不要在代码或配置文件中硬编码AccessKey。使用.env文件并确保其在.gitignore中。在生产环境如服务器上使用操作系统的密钥管理服务如AWS Secrets Manager, Azure Key Vault或阿里云自己的KMS或容器平台的Secret对象来注入环境变量。网络访问控制如果MCP服务器部署在云上而非纯本地确保其安全组/防火墙规则仅允许来自可信IP如你的办公网络、CI/CD服务器的访问或者根本不暴露公网IP通过SSH隧道或内网访问。请求审计与日志为MCP服务器添加详细的运行日志记录每一条查询请求的来源IP/用户标识、查询参数、执行时间、返回数据行数。这有助于事后审计和异常行为分析。查询语句白名单/黑名单高级对于极度敏感的环境可以在MCP服务器端实现简单的规则引擎禁止执行包含特定敏感字段如password,token,phone的查询或者只允许执行预定义的安全查询模式。5.3 扩展性与自定义开发开源项目的魅力在于可以按需定制。你可能需要扩展这个MCP服务器以满足特定需求添加新工具除了基础的query_logs你可以实现更多工具list_projects: 列出有权限的SLS项目。list_logstores: 列出指定项目下的日志库。get_logstore_schema: 获取某个日志库的字段索引信息帮助AI更好地理解数据结构。create_alert: 根据当前查询结果快速创建一个SLS告警规则这需要写权限。支持更多数据源项目的架构是解耦的。你可以仿照SLS客户端的实现为其他数据源如Elasticsearch、MySQL、Prometheus编写类似的“适配器”让同一个AI助手能查询多个系统。结果后处理插件在将结果返回给AI前可以插入一些处理逻辑比如自动脱敏屏蔽手机号、邮箱、数据聚合、格式转换将JSON日志转换为更易读的表格。修改后你需要重新构建项目并更新Claude Desktop的配置指向新的服务器入口文件。6. 常见问题排查与实战避坑指南在实际使用中你肯定会遇到各种问题。下面是我在部署和使用过程中踩过的一些坑以及解决办法。6.1 连接与配置类问题问题现象可能原因排查步骤与解决方案Claude启动后完全不提及其有SLS查询工具。1. MCP服务器未启动。2. Claude配置错误未找到服务器。3. 服务器启动失败。1. 检查运行MCP服务器的终端是否有错误输出。2. 仔细检查claude_desktop_config.json的语法特别是路径和参数。使用绝对路径。3. 尝试在终端直接运行配置中的command和args看是否能独立启动服务器。Claude提示连接MCP服务器失败。1. 命令执行权限不足。2. Node.js版本不兼容。3. 项目依赖未安装或安装失败。1. 确保启动命令有执行权限。2. 检查项目要求的Node.js版本 (package.json中的engines字段)。3. 删除node_modules和package-lock.json重新运行npm install注意看安装过程有无报错。服务器启动报错提示Missing required environment variable。环境变量未正确设置。1. 确认.env文件是否存在且格式正确每行KEYVALUE。2. 确认运行服务器的环境如终端、IDE是否加载了该.env文件。有些环境需要显式加载如source .env。3. 尝试在启动命令前直接设置环境变量ALIYUN_ACCESS_KEY_IDxxx node index.js。6.2 查询执行类问题问题现象可能原因排查步骤与解决方案AI调用工具后返回“权限不足”或“Authentication Failed”。1. AccessKey ID或Secret错误。2. RAM用户无相应SLS资源权限。3. AK已禁用或过期。1. 使用阿里云CLI或SDK测试AK有效性aliyunlog log get_project --project_name你的项目。2. 在RAM控制台检查该用户的授权策略确保资源ARN包含项目名和日志库名完全匹配。3. 检查AK状态必要时创建新的AK。查询超时或无结果。1. 查询时间范围太大。2. 查询语句未命中索引或过于复杂。3. 网络问题。1. 让AI先尝试一个很小的时间范围如最近5分钟和简单的查询如 *返回结果混乱或字段不对。1. AI生成的查询语句有误。2. 日志格式与AI理解的不一致。1. 让AI展示它准备执行的完整查询语句。将其复制到SLS控制台验证。2. 明确告知AI你的日志字段名。例如“我的日志里没有level字段错误日志是通过severity: ERROR标识的。”AI无法理解复杂的查询意图。AI的上下文理解能力有限或缺乏领域知识。将复杂查询拆解成多个简单的步骤分步引导AI。例如先让AI查“有哪些服务”再针对特定服务查“错误日志”最后对错误日志进行“分组统计”。你也可以提供更详细的提示词。6.3 性能与稳定性问题查询慢除了优化查询语句可以考虑在SLS中为高频查询字段建立索引并利用分区和主题Topic来缩小查询扫描范围。在MCP服务器端可以设置查询超时时间如30秒避免长时间阻塞。内存占用高如果查询返回大量数据MCP服务器的Node.js进程可能会消耗较多内存。确保在代码中对返回结果进行分页和截断。对于聚合查询优先使用SLS的stats、sql等功能在服务端完成计算只返回聚合结果而不是原始日志。服务器意外退出使用进程守护工具如pm2、systemd来管理MCP服务器进程实现崩溃后自动重启。同时确保服务器代码有完善的异常捕获避免未处理的错误导致进程崩溃。6.4 一个典型的排错流程假设你遇到“查询无结果”的问题可以按以下步骤排查隔离问题在Claude中让AI执行一个最简单的测试查询如* | limit 1时间范围设为最近5分钟。检查MCP服务器日志查看运行服务器的终端输出看是否有错误信息。如果服务器收到了请求并返回了错误日志会显示。手动验证将AI生成的完整查询语句从日志或让AI提供复制到阿里云SLS控制台执行。这是黄金标准。如果控制台也没结果问题在查询本身或数据是否存在。如果控制台有结果而MCP没有问题在MCP服务器代码或网络。网络与权限检查如果控制台有结果检查MCP服务器所在环境到阿里云的网络以及使用的AK权限是否足够可以尝试用同一个AK在另一个环境如本地Python脚本测试查询。代码调试如果怀疑是MCP服务器代码问题可以在代码中关键位置如构造请求前、收到响应后添加详细的调试日志打印出请求URL、参数和响应体。遵循这个流程大部分问题都能被定位和解决。记住SLS控制台是你的最佳参照物。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2616643.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…