slacrawl:用Go+SQLite实现Slack数据本地化与离线分析

news2026/5/13 17:16:02
1. 项目概述slacrawl一个将Slack数据本地化的命令行工具如果你和我一样每天的工作都泡在Slack里那你肯定也遇到过这样的困境想找一个几周前讨论过的技术细节Slack的搜索框要么慢要么搜不全想分析一下团队在某个项目上的沟通密度却发现数据都锁在云端自己根本拿不到。更别提那些因为公司政策、网络限制或者单纯想离线查看历史记录的场景了。这就是我当初动手写slacrawl的初衷——一个用Go语言写的命令行工具它能把你Slack工作区的所有元数据、历史消息一股脑儿地“爬”下来存到你本地的SQLite数据库里。从此搜索、查询、离线分析全由你自己说了算。简单来说slacrawl是一个数据同步与本地化工具。它的核心价值在于“数据主权回归”和“分析能力解放”。它不依赖Slack官方的UI和搜索而是通过Slack API或直接读取本地Slack Desktop的缓存文件将结构化数据工作区、频道、用户、消息、线程回复、提及等镜像到你的电脑上。数据就躺在你的~/.slacrawl/slacrawl.db文件里你可以用SQL直接查询也可以用内置的全文搜索快速定位甚至可以通过Git仓库在团队内安全地共享数据快照。这个工具适合谁任何对Slack数据有“二次处理”需求的人。比如想对团队沟通做量化分析的工程师或管理者需要长期归档重要技术讨论的开发者在弱网环境下工作需要离线查阅历史记录的远程团队成员或者是像我这样单纯不喜欢关键数据被锁在第三方服务里总想有个本地备份的“数据囤积癖”患者。2. 核心设计思路与架构解析slacrawl的设计哲学非常明确轻量、离线优先、可组合。它不是要再造一个Slack客户端而是专注于成为一个高效、可靠的数据管道和本地查询引擎。整个架构围绕几个核心选择展开每一个选择背后都有其深思熟虑的考量。2.1 为什么选择Go语言和SQLite这是项目基石。Go语言以其出色的并发性能、简洁的语法和强大的标准库成为编写CLI工具和网络服务的绝佳选择。对于slacrawl这种需要频繁与Slack API交互可能涉及大量HTTP请求、并可能同时处理多个工作区数据同步的工具来说Go的goroutine和channel机制能让并发逻辑变得清晰且高效。编译后的单一二进制文件没有任何外部依赖分发和部署极其简单符合一个优秀CLI工具“开箱即用”的特性。存储层选择SQLite则是一个更具战略性的决定。它完美契合了“本地化”和“离线分析”的核心场景。零运维无需安装和配置任何数据库服务一个文件就是整个数据库备份、迁移都极其方便。功能强大SQLite远不止是一个简单的键值存储。它支持完整的SQL语法、事务、索引特别是其内置的FTS5全文搜索扩展让slacrawl能够在不引入Elasticsearch或MeiliSearch等重型组件的情况下提供媲美云端体验的快速本地全文检索。工具生态成熟你可以用任何支持SQLite的图形化工具如DB Browser for SQLite, TablePlus或命令行工具sqlite3直接打开slacrawl.db进行探索分析能力瞬间被放大。这个组合Go SQLite确保了工具在保持强大功能的同时拥有极低的入门和使用门槛。2.2 双数据源架构API同步与桌面模式slacrawl提供了两种数据获取方式这构成了其灵活性的核心。1. API同步模式 (--source api)这是最标准、功能最全的模式。它通过Slack提供的各类API令牌Bot Token, User Token, App Token来获取数据。Bot Token这是基础。用于获取工作区、公开频道、用户列表等元数据以及频道内的历史消息。权限相对受限但足以覆盖大部分公开协作场景。User Token这是关键增强。如果你想同步私密频道Private Channels的历史消息、完整的线程回复Thread Replies以及直接消息DM和群组直接消息MPIM就必须提供具有相应OAuth权限范围的User Token。这是因为这些数据涉及用户隐私Slack API只允许代表具体用户身份而非机器人来访问。App Token用于tail命令的实时监听模式。它启用Socket Mode让Slack服务器可以将实时事件如新消息、反应、频道创建等主动推送给你的slacrawl实例实现近乎实时的数据同步。实操心得令牌权限管理在Slack API后台创建App和配置OAuth Scope时一定要仔细。对于User Token确保勾选channels:history(公开频道),groups:history(私密频道),im:history(DM),mpim:history(群组DM), 以及channels:read,groups:read,im:read,mpim:read等读取权限。一个常见的坑是只给了channels:history却想同步私密频道结果会发现数据拉取失败或不全。slacrawl doctor命令可以帮你初步检查令牌的有效性和权限范围。2. 桌面模式 (--source desktop)这是一个非常巧妙且实用的“后门”设计目前主要支持macOS。它直接读取Slack Desktop客户端在本地的缓存文件位于~/Library/Containers/com.tinyspeck.slackmacgap/Data/Library/Application Support/Slack/。应用场景当你没有API令牌例如公司严格管控令牌发放或者网络无法访问Slack API但又急需恢复或查看近期聊天记录时。桌面客户端为了快速加载会在本地缓存大量数据slacrawl可以解析这些数据并导入SQLite。覆盖范围它可以获取工作区元数据、频道列表、用户列表、以及频道内最近缓存的消息、草稿、已读标记、最近频道提示等。这相当于一个“本地应急恢复”方案。局限性它无法获取完整的历史记录取决于客户端缓存策略也无法获取线程回复除非该回复恰好被缓存。它更像是一个数据源的补充而非替代。混合工作流你可以通过sync --source all或分别执行sync --source api和sync --source desktop来结合两者。例如用API拉取完整历史然后用桌面模式定期快速刷新最新消息通过watch命令形成一个互补的数据流。2.3 增量同步与智能更新策略直接全量拉取所有历史消息在数据量大的时候是灾难性的不仅慢还可能触发API速率限制。slacrawl的同步逻辑设计得非常智能默认增量同步sync --source api默认就是增量模式。工具会记录每个频道最后同步的消息时间戳下次同步时只请求这个时间点之后的新消息。这极大地减少了不必要的API调用和数据传输。全量回填 (--full)这个标志需要显式指定。它用于首次建立本地存档或者当你明确需要重新拉取某个频道的全部历史时比如之前同步中断。慎用此选项因为它会忽略本地已有记录从头开始拉取。仅同步最新 (--latest-only)这是一个轻量级刷新选项。它只同步那些已经在本地数据库中有记录的频道的最新消息而不会去尝试同步新加入的频道本地尚无记录。这对于日常快速更新、保持数据新鲜度非常高效。这种策略确保了工具在长期运行中的效率和友好性避免了对Slack API的滥用。3. 从零开始安装、配置与首次同步理论说再多不如动手跑一遍。下面我将带你完成一个从安装到首次数据同步的完整流程并穿插我踩过的一些坑和最佳实践。3.1 环境准备与安装首先确保你的系统满足基本要求Go 1.25。如果你打算使用桌面模式或需要更完善的IndexedDB解析针对Slack桌面客户端缓存还需要Node.js。安装方式有多种我推荐使用HomebrewmacOS或直接下载预编译的二进制文件这样最省事。对于macOS用户brew tap vincentkoc/tap brew install slacrawl安装完成后直接在终端输入slacrawl --help验证是否成功。对于Linux用户去项目的 GitHub Releases页面 下载对应你系统架构的.deb或.rpm包。# Debian/Ubuntu 示例 curl -LO https://github.com/vincentkoc/slacrawl/releases/latest/download/slacrawl_0.5.0_amd64.deb sudo dpkg -i slacrawl_0.5.0_amd64.deb # RHEL/Fedora 示例 curl -LO https://github.com/vincentkoc/slacrawl/releases/latest/download/slacrawl-0.5.0-1.x86_64.rpm sudo rpm -i slacrawl-0.5.0-1.x86_64.rpm从源码构建如果你想体验最新特性或参与开发可以克隆源码自己编译。git clone https://github.com/vincentkoc/slacrawl.git cd slacrawl go build -o bin/slacrawl ./cmd/slacrawl # 之后使用 ./bin/slacrawl 代替 slacrawl 命令3.2 获取并配置Slack API令牌这是最关键也最容易出错的一步。你需要去Slack API门户https://api.slack.com/apps创建一个新的App。创建App点击“Create New App”选择“From scratch”给它起个名字比如My Local Archive并选择要关联的工作区。配置Bot Token OAuth Scope在“OAuth Permissions”页面找到“Bot Token Scopes”。添加以下权限channels:history,channels:read,groups:history,groups:read,users:read,team:read。这些是拉取公开/私密频道历史和基本信息所必需的。安装App到工作区你会获得一个以xoxb-开头的Bot User OAuth Token。将它设置为环境变量export SLACK_BOT_TOKENxoxb-your-token-here。可选但推荐配置User Token OAuth Scope在同一个页面的“User Token Scopes”部分添加权限channels:history,groups:history,im:history,mpim:history,channels:read,groups:read,im:read,mpim:read。这样你才能同步私聊和完整的线程。重新安装App你会获得一个以xoxp-开头的User OAuth Token。设置为环境变量export SLACK_USER_TOKENxoxp-your-token-here。可选用于实时监听配置App Token在“Basic Information”页面找到“App-Level Tokens”。点击“Generate Token and Scopes”给它起名如socket-mode并添加connections:write这个Scope。你会获得一个以xapp-开头的App Token。设置为环境变量export SLACK_APP_TOKENxapp-your-token-here。重要你还需要在“Socket Mode”设置页面将“Enable Socket Mode”开关打开。注意事项令牌安全永远不要将令牌硬编码在脚本或提交到版本控制系统。使用环境变量是最佳实践。你可以将export命令写入~/.bashrc,~/.zshrc或使用dotenv工具管理。slacrawl的配置文件也支持从环境变量读取这是更安全的方式。3.3 初始化配置与健康检查令牌准备好后就可以初始化slacrawl了。# 生成默认配置文件 ~/.slacrawl/config.toml slacrawl init # 运行健康检查验证配置、数据库、令牌和桌面源 slacrawl doctordoctor命令是你的好朋友。它会详细检查配置文件是否存在且格式正确。能否成功连接并创建SQLite数据库。配置的Slack令牌是否有效、权限是否足够。如果启用了桌面模式能否找到Slack Desktop的本地数据路径。全文搜索索引FTS5是否正常。 首次运行doctor时如果一切正常你会看到类似“All checks passed”的输出。如果有问题比如令牌无效它会给出明确的错误信息指导你修复。3.4 执行首次数据同步现在开始拉取数据对于首次运行我建议先从一个保守的命令开始观察一下。# 使用API源进行同步默认增量但首次运行会拉取可访问的历史 slacrawl sync --source api这个命令会开始工作。根据你工作区的频道数量和消息历史首次同步可能需要一些时间。工具会显示进度列出正在同步的频道和已获取的消息数。如果你想一劳永逸地拉取所有可能的历史记录在令牌权限允许的范围内可以使用全量模式slacrawl sync --source api --full警告--full标志会尝试拉取每个频道的全部历史可能触发API速率限制并且非常耗时。建议首次同步后在非工作时间进行或者先对少数频道进行测试。同步完成后你可以用以下命令快速查看成果# 查看同步状态概览 slacrawl status # 列出所有已同步的频道 slacrawl channels # 列出所有已同步的用户 slacrawl users # 生成过去7天的活动摘要 slacrawl analytics digest --since 7d4. 核心功能实操与高级用法数据同步只是第一步slacrawl的强大之处在于本地数据的利用。下面我们深入几个核心功能。4.1 本地全文搜索告别缓慢的云端搜索这是最常用的功能之一。所有消息在存入数据库时都会自动被SQLite的FTS5引擎索引。# 在整个存档中搜索关键词“incident” slacrawl search incident # 在特定工作区ID为T01234567中搜索 slacrawl search --workspace T01234567 部署失败 # 使用更复杂的搜索语法FTS5支持AND, OR, NOT等 slacrawl search error AND (production OR staging) # 以JSON格式输出便于脚本处理 slacrawl search --format json TODO | jq . # 假设你安装了jq搜索速度极快因为所有数据都在本地。你还可以用--limit和--offset进行分页。slacrawl在索引前会对文本进行清理处理掉异常的UTF-8字符和空白符避免污染搜索索引。4.2 直接SQL查询释放数据的全部潜力当内置命令无法满足你的复杂查询需求时直接使用SQL吧。这是将数据控制权完全交给你的终极体现。# 进入交互式SQLite shell直接操作 slacrawl.db slacrawl sql # 或者执行单条查询语句 slacrawl sql SELECT channel_id, COUNT(*) as msg_count FROM messages GROUP BY channel_id ORDER BY msg_count DESC LIMIT 10; # 查找被提及最多的用户 slacrawl sql SELECT user_id, COUNT(*) as mention_count FROM mentions GROUP BY user_id ORDER BY mention_count DESC LIMIT 5; # 结合频道表获取更易读的结果 slacrawl sql SELECT c.name as channel_name, COUNT(m.id) as message_count, MAX(m.timestamp) as latest_message FROM messages m JOIN channels c ON m.channel_id c.id WHERE m.timestamp strftime(%s, now, -7 days) GROUP BY c.id ORDER BY message_count DESC; 你可以尽情发挥SQL的威力进行连接查询、聚合、时间序列分析等。数据库模式Schema是公开的主要表包括workspaces,channels,users,messages,threads,mentions等关系清晰易于理解。4.3 实时监听与定时刷新如果你配置了App Token并开启了Socket Mode那么tail命令可以让你的本地存档保持实时更新。# 启动实时事件监听 slacrawl tail # 监听时每30分钟尝试修复一次可能遗漏的线程回复需要User Token slacrawl tail --repair-every 30mtail命令会启动一个常驻进程监听Slack服务器推送的各类事件消息、反应、频道更新等并实时写入本地数据库。这对于需要近乎零延迟的数据镜像场景非常有用。另一方面watch命令则专注于桌面模式的定期轮询。# 每5分钟检查一次Slack Desktop本地缓存并更新到数据库 slacrawl watch --desktop-every 5m这个命令适合作为后台服务运行在你使用Slack桌面客户端的同时默默地将其缓存数据同步到你的slacrawl存档中。4.4 多工作区管理如果你管理或参与多个Slack工作区slacrawl可以统一处理。关键在于配置文件~/.slacrawl/config.toml中的[[workspaces]]部分。# 示例配置两个工作区 [[workspaces]] id T01234567 # 工作区A的ID default true # 默认工作区 [[workspaces]] id T08976543 # 工作区B的ID # 为工作区B指定不同的环境变量名 bot_token_env SLACK_CLIENT_BOT_TOKEN app_token_env SLACK_CLIENT_APP_TOKEN user_token_env SLACK_CLIENT_USER_TOKEN配置好后slacrawl会自动为每个工作区ID寻找对应的环境变量如SLACK_T01234567_BOT_TOKEN。运行sync --source api或tail时如果不指定--workspace它会自动在所有已配置且启用的工作区间并行执行同步或监听。查询命令如search,messages则可以通过--workspace参数来限定范围。4.5 Git归档共享团队内的只读数据分发这是一个非常酷的功能解决了“一人有令牌多人想分析”的问题。它通过Git仓库来分发数据快照。发布者有Slack令牌的机器同步最新数据slacrawl sync --source api --latest-only将数据发布到Git仓库slacrawl publish --remote gitgithub.com:your-org/private-slack-archive.git --push这个命令会将本地SQLite数据库的内容以压缩的JSONL分片格式导出并提交、推送到指定的Git仓库。订阅者无需Slack令牌的机器订阅Git归档slacrawl subscribe --remote gitgithub.com:your-org/private-slack-archive.git这个命令会克隆仓库并配置本地slacrawl进入“只读模式”后续所有数据读取都来自这个Git快照。像平常一样搜索和查询slacrawl search budget discussion slacrawl analytics trends --weeks 4如果配置中设置了auto_update true那么在执行搜索等读操作时工具会自动检查远程仓库是否有更新并在数据过期stale_after设置的时间后拉取最新快照。这种模式非常适合团队报告、审计或知识库构建在保证数据源统一和安全Git仓库可私有的前提下实现了数据的便捷共享。5. 常见问题、故障排查与优化技巧在实际使用中你可能会遇到一些问题。下面是我总结的一些常见情况及解决方法。5.1 同步相关问题问题同步速度很慢或者中途失败。原因与排查API速率限制Slack对API调用有严格的速率限制Tier。slacrawl内置了简单的退避重试机制但如果历史消息太多首次全量同步仍可能超限。网络问题不稳定的网络连接会导致请求超时。令牌权限不足特别是尝试同步私密频道或DM时没有提供User Token或User Token的Scope不全。解决方案分而治之不要一开始就用--full同步所有频道。可以先同步几个关键频道或者使用--latest-only模式只获取最新数据。使用增量同步首次同步后后续务必使用默认的增量同步或--latest-only。检查令牌运行slacrawl doctor确认令牌状态。在Slack API后台的“OAuth Permissions”页面仔细核对Bot/User Token的Scopes。查看日志slacrawl的日志在~/.slacrawl/logs/目录下。错误信息通常会在这里有更详细的记录。问题无法同步私密频道Private Channels或直接消息DM。原因这几乎总是因为缺少具有足够权限的User Token。Bot Token无法访问这些资源。解决方案确保你创建并配置了User Token并且赋予了groups:history私密频道、im:historyDM、mpim:history群组DM以及对应的read权限。将User Token设置为SLACK_USER_TOKEN环境变量。在配置文件中确保[slack.user]部分的enabled true。重新运行slacrawl doctor确认User Token被识别且有效。5.2 搜索与查询问题问题搜索不到某些我知道存在的关键词。原因与排查数据未同步确认包含该关键词的消息是否在已同步的频道和时间范围内。FTS5索引延迟虽然消息插入后索引通常会很快更新但在大量数据批量导入后有时需要手动触发一下。特殊字符搜索查询可能被FTS5语法解析。比如-在FTS5中代表“NOT”。解决方案用slacrawl messages --channel channel_id --limit 50查看该频道最近的消息确认数据存在。可以尝试重建FTS索引这是一个底层操作通常不需要但极端情况下可以尝试关闭并重新打开数据库连接或者通过slacrawl sql执行INSERT INTO messages_fts(messages_fts) VALUES(rebuild);但请务必谨慎并在了解后果后操作。对于包含特殊符号的搜索可以尝试用引号包裹短语例如slacrawl search error-404。问题SQL查询报错“no such table”或“no such column”。原因数据库模式可能随版本升级而变化。你使用的表名或列名可能已过时。解决方案使用slacrawl sql进入交互模式然后执行.schema命令查看当前数据库的所有表和字段定义。这是最可靠的方法。查阅项目文档或源码中的SPEC.md了解最新的数据模式。5.3 配置与运行环境问题问题在Linux上桌面模式 (--source desktop) 不可用或报错。原因目前slacrawl的桌面模式深度集成依赖于macOS上Slack Desktop特定的数据存储路径和格式基于Electron/Chromium的IndexedDB。Linux和Windows版本的Slack客户端数据存储位置和结构可能不同。解决方案主要依赖API同步模式 (--source api)。可以尝试在配置文件中手动指定Slack Desktop的数据路径[slack.desktop].path但这需要你自行探索客户端在Linux上的存储位置且不能保证完全兼容。关注项目的GitHub Issues看是否有社区贡献了其他平台的桌面模式支持。问题tail命令启动后立即退出报错Socket Mode连接失败。原因App Token未启用或Scope不对App Token必须具有connections:writescope且需要在Slack App配置中手动启用“Socket Mode”。网络代理问题你的网络环境可能阻止了WebSocket连接。解决方案登录Slack API门户进入你的App设置在“Socket Mode”页面确认“Enable Socket Mode”开关是打开的。在“Basic Information” - “App-Level Tokens”下确认你的App Token存在且拥有connections:write权限。检查SLACK_APP_TOKEN环境变量是否正确设置。如果有网络代理需要配置Go的HTTP客户端使用代理这可能需要你修改slacrawl的源码或通过系统环境变量设置。5.4 性能与存储优化问题SQLite数据库文件 (slacrawl.db) 越来越大。原因随着同步的消息、用户、频道数据增多数据库自然增长。此外FTS5全文搜索索引也会占用额外空间。解决方案定期清理谨慎你可以通过slacrawl sql执行VACUUM;命令来重建数据库文件释放未使用的空间。但请注意这会在操作期间锁定数据库并可能暂时占用更多磁盘空间。选择性同步目前slacrawl不支持在频道级别选择性同步。如果你只需要某些频道的数据一种变通方法是同步完成后手动通过SQL删除其他频道的数据但这会破坏增量同步的逻辑。归档旧数据对于历史分析你可以定期将旧的slacrawl.db文件压缩备份然后重新开始同步。使用publish命令生成Git快照也是一种轻量的归档方式。问题同步大量历史数据时内存占用高。原因Go程序在处理大量HTTP响应和数据库写入时如果一次性加载太多数据到内存可能导致内存峰值。解决方案分批次同步避免一次性使用--full同步所有频道。可以按频道逐个同步或使用脚本分批进行。调整Go垃圾回收对于高级用户可以通过设置Go的环境变量如GOGC来调整垃圾回收器的行为但这通常不是必需的。监控资源使用top或htop工具监控slacrawl进程的资源使用情况。通常同步完成后内存会释放。5.5 我的独家避坑技巧令牌轮换与安全Slack令牌权限很高。定期检查并轮换令牌是个好习惯。如果令牌意外泄露立即在Slack API后台撤销它。slacrawl的配置支持从环境变量读取建议使用像1password或pass这样的密码管理器来管理这些敏感环境变量而不是写在明文脚本里。善用--dry-run标志在执行可能产生大量变更的操作如import一个巨大的Slack导出ZIP之前先加上--dry-run看看它会做什么。这能帮你避免意外覆盖或导入错误数据。理解“增量”的含义slacrawl的增量同步是基于每个频道最后一条消息的时间戳。如果你手动从数据库删除了某个频道的部分消息下次增量同步不会补全这些被删除的消息因为它认为这些消息的时间戳早于“最后同步时间”。要重新获取需要对该频道使用--full标志或手动更新数据库中的同步状态元数据不推荐新手操作。桌面模式作为补充不要完全依赖桌面模式获取历史数据。它的缓存是有限且不可靠的。最佳实践是将API同步作为主数据源桌面模式的watch作为近实时消息的补充抓取手段尤其是在API调用受限或需要极低延迟感知新消息的场景下。备份配置文件你的~/.slacrawl/config.toml文件包含了工作区ID等重要配置。在升级slacrawl或迁移到新机器前备份这个文件。数据库文件 (slacrawl.db) 当然也需要定期备份。

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