基于Laravel与私有AI的Noton文档平台:自托管部署与实战指南

news2026/5/14 7:13:10
1. 项目概述一个为团队知识管理而生的自托管文档平台如果你和我一样经历过在十几个不同的文档工具、聊天记录和邮件里翻找某个技术方案或者为了一份过期的API文档和同事争论半天那你一定能理解一个统一、清晰、可私有化部署的文档平台有多重要。今天要聊的这个项目——Noton就是为解决这类问题而生的。它不是一个简单的Wiki而是一个融合了现代Web开发框架和本地化AI能力的、专注于“清晰、结构化”的文档系统。简单来说你可以把它理解为你团队内部的“私有化Notion”但更轻量、更可控并且所有数据包括AI生成的内容都牢牢掌握在你自己的服务器上。它的核心价值在于“自托管”和“私有AI”。对于中小型技术团队、创业公司或者任何对数据隐私有高要求的组织比如金融、医疗、法律行业将核心知识库放在公有云上总让人有些不安。Noton让你可以用自己的硬件或云服务器搭建一个完全属于团队的文档中心。更酷的是它通过集成Ollama和OpenClaw让你能在不泄露任何内部信息的前提下使用AI来辅助文档的整理、摘要甚至问答这相当于给你的知识库配了一个24小时在线的、精通你公司业务的智能助手。2. 技术栈深度解析为什么是这些组合Noton的技术选型非常有意思它没有追逐最时髦的“全栈JavaScript”而是选择了一套在PHP生态中成熟且高效的组合拳。这背后反映的是项目对开发效率、后台管理体验和AI集成便利性的深度考量。2.1 基石Laravel与Filament的黄金搭档项目的基础是 Laravel 这是一个在PHP社区享有盛誉的Web应用框架。选择Laravel意味着开发者可以快速构建稳健的后端API、处理用户认证、权限管理、数据库迁移等繁琐但核心的业务逻辑。Laravel的Eloquent ORM让数据操作变得异常优雅而其强大的队列、任务调度系统也为后续集成耗时的AI处理任务打下了基础。对于需要快速迭代、同时又要求代码结构清晰的项目来说Laravel是一个经过时间检验的可靠选择。而 Filament 则是点睛之笔。它是一个基于Laravel和Livewire构建的后台管理面板生成工具。传统的后台开发表单、列表、详情页要写大量重复的样板代码。Filament通过一套声明式的PHP代码就能快速生成功能完整、界面美观的管理后台。对于Noton这样一个以内容管理为核心的平台Filament能极大加速“文档管理”、“用户管理”、“系统设置”等后台功能的开发让开发者能把精力集中在更独特的业务逻辑比如文档的树形结构、AI集成上而不是重复造轮子。实操心得如果你之前主要用Vue或React做后台初次接触Filament可能会觉得有些“魔法”。但一旦熟悉其基于Livewire的响应式组件模式你会发现开发CRUD界面的速度是惊人的。不过要注意它的学习曲线初期较陡需要适应其“PHP驱动前端”的思维模式。2.2 灵魂Ollama与OpenClaw带来的私有智能这才是Noton区别于普通文档平台的核心。它没有选择调用OpenAI或Anthropic的公有API而是集成了两个支持本地部署的AI引擎。Ollama是目前最流行的本地大语言模型LLM运行和管理的工具。它就像一个模型的应用商店和运行时容器让你可以一条命令就在本地拉取并运行Llama 3、Mistral、Gemma等开源模型。Ollama提供了简单的API使得像Noton这样的应用可以像调用本地服务一样与LLM对话所有数据都在内存中处理无需出网。OpenClaw的角色则更偏向于AI应用框架。它可能提供了比单纯调用模型更高级的功能比如智能体Agent工作流、工具调用Function Calling、或者对长文本处理的优化。Noton集成它可能是为了利用其更强大的文档理解、总结或结构化提取能力。为什么这个组合至关重要数据隐私绝对可控所有文档内容、用户的提问、AI的回复整个交互闭环都在你的服务器内完成。这对于处理敏感商业计划、客户数据、源代码的团队来说是刚需。成本确定无调用费用一次性的硬件投入或云服务器成本替代了按Token计费的API调用对于高频使用的场景长期来看更经济。可定制化模型你可以为Ollama选择最适合你场景的模型。如果团队文档多是中文可以选择Qwen或DeepSeek如果更注重代码理解可以选CodeLlama。这种灵活性是公有API难以提供的。注意事项“AI模型是资源密集型的”——这是官方提醒也是最大的实践坑点。一个7B参数的模型流畅运行至少需要8GB以上空闲内存推荐16GB。如果你的服务器只有2核4G跑起模型来整个文档系统都可能卡顿。务必根据硬件资源谨慎选择模型可以从较小的2B或3B参数模型开始试水。3. 从零开始基于Docker的自托管部署实战官方推荐使用Docker部署这是保证环境一致性、简化依赖管理的最佳实践。下面我以一个全新的Ubuntu 22.04服务器为例拆解从零部署Noton的全过程。3.1 前置环境准备首先确保你的服务器有基础的运行环境。通过SSH连接到你的服务器。# 更新系统包列表 sudo apt update sudo apt upgrade -y # 安装Docker所需的依赖 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加Docker稳定版仓库 echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker引擎 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # 启动Docker并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 验证安装 sudo docker --version接下来安装Docker Compose。虽然现在Docker Desktop包含了Compose但对于Linux服务器我们通常单独安装。# 下载Docker Compose的特定版本例如v2.20.0 DOCKER_COMPOSE_VERSIONv2.20.0 sudo curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 赋予执行权限 sudo chmod x /usr/local/bin/docker-compose # 验证安装 docker-compose --version3.2 获取与配置NotonNoton的代码托管在GitHub我们需要将其克隆到服务器。假设我们将其放在/opt目录下。# 安装Git如果尚未安装 sudo apt install -y git # 切换到/opt目录并克隆项目请替换为实际仓库地址假设为示例 cd /opt sudo git clone https://github.com/bartvantuijn/noton.git cd noton # 此时你应该能看到项目根目录下的 docker-compose.yml 文件 ls -la关键一步环境变量配置。Noton像大多数Laravel应用一样通过.env文件配置。通常项目会提供一个.env.example模板。# 复制环境变量模板 cp .env.example .env # 使用文本编辑器如nano编辑.env文件 nano .env在.env文件中你需要重点关注并修改以下几个配置项# 数据库配置 - 使用Docker Compose中定义的MySQL服务 DB_CONNECTIONmysql DB_HOSTmysql # 注意这里不是localhost而是Docker服务名 DB_PORT3306 DB_DATABASEnoton DB_USERNAMEnoton_user DB_PASSWORD这里设置一个强密码 # 例如A_Strong_Password_123! # 应用密钥用于加密等操作首次安装必须生成 # 先留空我们后面用命令生成 # 应用URL填写你访问Noton的域名或IP APP_URLhttp://你的服务器IP:8000 # 或 https://docs.your-company.com # AI提供商配置可选如果暂时不用AI可先关闭 AI_PROVIDERollama # 或 openclaw OLLAMA_BASE_URLhttp://ollama:11434 # 指向Ollama容器的服务名和端口 # OPENCLAW_API_KEYyour_key_here # 如果使用OpenClaw则需要保存并退出编辑器。然后生成Laravel应用密钥# 我们可以在宿主机运行一个临时的PHP容器来执行Artisan命令或者等容器启动后再执行。 # 更简单的方法是先启动基础服务数据库再在应用容器内执行。 # 但为了流程清晰我们可以先通过docker run来生成key sudo docker run --rm -it -v $(pwd):/app -w /app php:8.2-cli php artisan key:generate --show这条命令会输出一个长字符串将其复制再次编辑.env文件找到APP_KEY这一行将值替换为刚才生成的字符串。3.3 使用Docker Compose启动服务Noton的docker-compose.yml文件定义了多个服务Web应用NginxPHP、MySQL数据库可能还有Ollama和Redis用于缓存和队列。让我们先启动基础服务。# 在项目根目录下启动服务-d 表示后台运行 sudo docker-compose up -d这个命令会拉取所需的镜像如nginx:alpine,mysql:8.0,php:8.2-fpm等并创建容器网络、挂载卷然后启动所有服务。启动后使用以下命令检查服务状态sudo docker-compose ps你应该看到noton-app,noton-nginx,noton-mysql等容器状态为Up。3.4 应用初始化与数据库迁移容器运行后我们需要在应用容器内执行初始化命令来创建数据库表结构、填充初始数据等。# 进入应用容器的命令行假设服务名在compose文件中定义为‘app’ sudo docker-compose exec app bash # 现在你已经在容器内部了执行以下命令 # 1. 安装PHP依赖Composer通常在构建镜像时已完成但可确保 composer install --no-dev --optimize-autoloader # 2. 运行数据库迁移创建所有表 php artisan migrate --force # 3. 可选如果需要可以运行数据填充器创建初始管理员用户等 # php artisan db:seed --force # 注意请先查看项目文档确认是否有预设的Seeder以及初始账号密码。 # 退出容器 exit常见问题与排查数据库连接失败检查.env中的DB_HOST是否设置为mysqlDocker服务名而不是127.0.0.1。确保noton-mysql容器已正常运行 (docker-compose logs mysql查看日志)。权限错误Laravel需要storage和bootstrap/cache目录有写权限。在Docker中通常通过镜像的Dockerfile或启动脚本已经设置好。如果遇到权限问题可以在容器内执行chmod -R 775 storage bootstrap/cache。端口冲突默认docker-compose.yml可能将80端口映射到宿主机。如果宿主机80端口已被占用如已有Nginx/Apache需要修改compose文件中nginx服务的端口映射例如改为8000:80然后通过http://服务器IP:8000访问。完成以上步骤后你应该就能通过浏览器访问APP_URL中设置的地址如http://你的服务器IP:8000看到Noton的登录/注册界面了。4. 核心功能体验与AI集成配置成功部署后我们进入Noton的后台来看看它作为一个文档平台的核心功能以及如何激活其“私有AI”能力。4.1 文档管理与结构化首次登录你需要创建一个管理员账户如果之前没有运行Seeder。进入后台典型的Filament界面会让你感到熟悉。左侧是导航菜单应该包含“文档”、“页面”、“用户”、“团队”、“设置”等模块。空间Workspace与树形结构Noton的核心是文档的树形组织。你可以创建不同的“空间”来区分部门或项目如“产品部”、“后端开发”、“XX项目”。在每个空间内可以创建无限层级的页面形成清晰的目录树。这比扁平的标签系统更符合人类对知识的结构化认知。富文本编辑器文档编辑体验是重中之重。Noton应该会集成一个功能丰富的编辑器支持Markdown、拖拽图片、代码块高亮、表格等。实测中需要关注其编辑的流畅度、自动保存机制以及从其他平台如Notion、Confluence导入内容的能力。权限与协作通过Filament构建的后台可以方便地管理用户和团队并为空间或单个页面设置细粒度的权限查看、编辑、管理。这对于企业知识库至关重要。4.2 集成并配置Ollama本地AI这是最令人兴奋的部分。要让Noton的AI功能工作你需要确保Ollama服务正常运行并且Noton能连接到它。第一步启动Ollama服务Noton的docker-compose.yml文件可能已经包含了Ollama服务定义。如果没有你需要手动添加或者单独启动一个Ollama容器。# 在 noton 的 docker-compose.yml 中可能已有或需要添加如下服务 services: # ... 其他服务 (app, nginx, mysql) ollama: image: ollama/ollama:latest container_name: noton-ollama restart: unless-stopped volumes: - ollama_data:/root/.ollama # 持久化存储模型数据 ports: - 11434:11434 # 将Ollama的API端口映射到宿主机可选仅用于管理 networks: - noton-network # 确保与noton-app在同一网络 volumes: ollama_data:然后启动或更新服务sudo docker-compose up -d ollama第二步在Ollama容器内下载模型Ollama容器启动后你需要进入容器拉取一个合适的模型。模型大小需匹配你的服务器资源。# 进入Ollama容器 sudo docker exec -it noton-ollama bash # 在容器内拉取模型例如轻量级的 Llama 3.2 3B 指令微调版 ollama pull llama3.2:3b-instruct-q4_K_M # 或者中文表现较好的 Qwen2.5 7B 版本需要更多内存 # ollama pull qwen2.5:7b-instruct-q4_K_M # 退出容器 exit第三步在Noton后台配置AI提供商登录Noton后台进入系统设置通常是一个齿轮图标。找到“AI集成”或类似的配置区域。将“AI提供商”选择为“Ollama”。在“Ollama API地址”中填写http://ollama:11434。这里的ollama是Docker Compose中定义的服务名Docker的内部DNS会将其解析为对应容器的IP。保存设置。第四步功能测试现在在文档编辑页面你应该能看到一个AI助手按钮可能是一个魔法棒图标。尝试选中一段文本点击按钮选择“总结”或“扩写”看看AI是否能正常工作。也可以在专门的AI聊天界面向它提问关于你文档内容的问题。实操心得与性能调优模型选择是平衡的艺术3b-instruct模型响应快1-2秒占用内存少约3GB但理解和生成能力有限。7b-instruct模型能力显著提升但需要约8GB内存响应时间可能到5-10秒。根据你的服务器配置和耐心程度选择。提示词工程Noton内置的AI功能如总结、润色背后是预设的提示词Prompt。如果效果不理想可以查阅项目文档看是否支持自定义这些提示词。例如你可以将总结的提示词从“请总结上文”改为“请以技术要点的形式分条总结上文的核心内容”。资源监控使用docker stats命令监控容器资源占用。当AI工作时Ollama容器的CPU和内存使用率会飙升。确保服务器有足够的交换空间Swap作为缓冲避免因内存不足导致Ollama进程被系统杀死。5. 生产环境部署进阶与维护指南将Noton用于小团队内部测试和真正投入生产环境中间还有一些关键的步骤。5.1 安全加固配置使用HTTPS绝不能在生产环境使用HTTP。你可以方案A推荐在Noton的Nginx容器前再部署一个反向代理如宿主机的Nginx或Traefik由它来处理SSL证书使用Let‘s Encrypt的Certbot自动申请和续签。方案B修改Noton自带的Nginx配置直接集成SSL。这需要你将证书文件挂载到容器内并修改Nginx配置。这里给出方案A的简单示例在宿主机上配置一个Nginx反向代理# 在宿主机安装Nginx和Certbot sudo apt install -y nginx certbot python3-certbot-nginx # 为你的域名创建Nginx配置文件例如 /etc/nginx/sites-available/noton sudo nano /etc/nginx/sites-available/noton配置文件内容示例server { listen 80; server_name docs.your-company.com; # 你的域名 return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name docs.your-company.com; # SSL证书路径由Certbot自动生成 ssl_certificate /etc/letsencrypt/live/docs.your-company.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/docs.your-company.com/privkey.pem; # 其他SSL优化配置... location / { proxy_pass http://localhost:8000; # 指向Noton容器映射的端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 如果Filament/Livewire使用WebSocket可能需要额外配置 # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection upgrade; } }启用配置并申请证书sudo ln -s /etc/nginx/sites-available/noton /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置 sudo systemctl reload nginx # 使用Certbot自动获取并配置SSL证书 sudo certbot --nginx -d docs.your-company.com最后记得将Noton.env文件中的APP_URL改为https://docs.your-company.com。强化数据库为MySQL的root用户设置强密码并创建仅具有Noton所需权限的专用用户我们在.env里已经做了。定期备份数据库docker-compose exec mysql mysqldump -u noton_user -p noton backup.sql。环境变量保护确保.env文件不被纳入版本控制它已在.gitignore中。在生产服务器上其文件权限应设置为仅所有者可读 (chmod 600 .env)。5.2 数据持久化与备份策略Docker Compose中应该已经定义了数据卷volumes用于MySQL和Ollama的数据。你需要知道这些数据存储在哪里并建立备份机制。# 查看docker-compose.yml中定义的卷 cat docker-compose.yml | grep -A2 -B2 volumes: # 通常会有类似定义 # volumes: # mysql_data: # ollama_data: # 列出所有docker卷 sudo docker volume ls # 找到对应的卷名例如 noton_mysql_data然后可以将其备份到宿主机 sudo docker run --rm -v noton_mysql_data:/source -v $(pwd):/backup alpine tar czf /backup/mysql_backup_$(date %Y%m%d).tar.gz -C /source .建议的备份方案数据库每日通过mysqldump进行逻辑备份并压缩传输到远程存储或另一台服务器。上传文件如果Noton支持上传附件这些文件通常存储在storage/app/public目录该目录应通过卷挂载持久化。定期同步此目录到备份位置。Ollama模型模型文件体积巨大首次下载耗时。备份ollama_data卷可以避免重新下载。但更经济的做法是记录所使用的模型名称在恢复时重新拉取。5.3 性能优化与监控配置队列Laravel的队列系统可以将耗时的任务如处理AI请求、发送通知异步化。确保docker-compose.yml中启动了队列处理器queue worker容器并正确配置了Redis或数据库作为队列驱动在.env中设置QUEUE_CONNECTIONredis。缓存驱动将CACHE_DRIVER和SESSION_DRIVER设置为redis可以显著提升性能。同样需要在Compose文件中添加Redis服务。资源限制在docker-compose.yml中为每个服务尤其是Ollama设置合理的资源限制cpus,mem_limit防止某个服务耗尽所有资源导致系统不稳定。services: ollama: # ... deploy: resources: limits: cpus: 2.0 memory: 8G日志管理使用docker-compose logs -f app可以实时查看应用日志。对于生产环境考虑将容器日志收集到ELKElasticsearch, Logstash, Kibana或LokiGrafana等集中式日志系统中。6. 开源协议解读与项目贡献Noton采用的Functional Source License, Version 1.1 (FSL 1.1)是一个比较新的、有特定限制的开源协议。理解它对你能否使用这个项目至关重要。FSL 1.1的核心要点免费用于内部和非商业用途你可以在公司内部搭建、使用、修改Noton用于团队知识管理这没有任何问题。禁止竞争性商业使用你不能将Noton或其修改版本作为一个商业产品或服务的一部分去与Noton项目本身竞争。例如你不能基于Noton代码开发一个类似的SaaS文档平台去售卖。许可证转换FSL通常有一个“转换期”例如2年在此之后代码可能会转换为更宽松的许可证如Apache 2.0。这为项目的长期开源友好性提供了可能。对你的影响如果你是最终用户只想在内部团队使用FSL 1.1对你几乎没有限制可以放心使用。如果你是希望提供商业托管服务的厂商则需要非常仔细地评估是否构成“竞争性使用”。最稳妥的方式是联系项目作者进行澄清。如果你是开发者想修复Bug或增加功能你的贡献在FSL下是受欢迎的。项目处于活跃开发阶段贡献流程通常是在GitHub上Fork项目修改后提交Pull Request。注意事项在采用任何开源软件尤其是采用非主流协议如FSL、SSPL的软件前务必让法务或相关决策者仔细阅读其完整许可证文本本项目中的LICENSE.md文件确保其条款符合你的使用场景特别是商业场景。部署和把玩这样一个集成了私有AI的文档平台整个过程就像在组装一台属于自己的精密仪器。从Laravel和Filament提供的坚实底座到Ollama带来的本地智能每一步的配置和调优都充满了技术实践的乐趣。最大的成就感莫过于看到团队成员开始在这个完全由自己掌控的平台上沉淀知识并用AI助手提升效率。当然这条路也布满了“坑”从内存不足导致Ollama崩溃到Nginx代理配置错误每一个问题的解决都是经验的积累。我的建议是先从一台配置尚可的测试服务器开始跟着本文的步骤走一遍感受一下私有化AI文档平台的魅力与挑战再决定是否将其推向更核心的生产环境。

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