ChatJS:基于Next.js与AI SDK的全栈AI聊天应用开发框架实战

news2026/5/3 15:27:56
1. 项目概述ChatJS一个为AI聊天应用量身定制的全栈开发框架如果你和我一样在过去一年里尝试过从零搭建一个AI聊天应用那你一定对那种重复造轮子的痛苦感同身受。用户认证、模型集成、实时流式响应、文件上传、对话分支管理……每一个环节都需要投入大量精力去调研、选型和实现。更别提还要考虑生产环境的稳定性、可扩展性和维护成本。就在我几乎要放弃准备在下一个项目中继续“复制粘贴”旧代码时我发现了ChatJS。它不是一个简单的UI组件库而是一个开箱即用的、生产就绪的全栈AI聊天应用框架。简单来说它把构建一个现代化AI聊天应用所需的所有基础设施都打包好了让你能跳过那些繁琐的通用部分直接聚焦于打造你产品中真正独特和有价值的功能。ChatJS的核心价值在于“整合”与“提效”。它基于一个经过精心挑选和验证的现代技术栈Next.js, TypeScript, AI SDK等预先集成了超过120个AI模型包括OpenAI GPT系列、Anthropic Claude、Google Gemini、xAI Grok等的统一接口、多种身份验证方案GitHub、Google、匿名登录、完整的文件附件处理、可恢复的流式传输、对话分支、分享功能甚至内置了Web搜索、图像生成和代码执行等高级工具。这意味着开发者无需再为“如何接入Claude 3.5”或“如何实现PDF文件解析”这类通用问题耗费时间而是可以立即开始构建业务逻辑和用户体验。无论是想快速验证一个AI产品创意还是为企业内部打造一个定制化的AI助手平台ChatJS都提供了一个极高的起点。2. 核心架构与技术栈深度解析ChatJS之所以敢宣称“生产就绪”其底气来自于它对底层技术栈的极致打磨和深度集成。这不仅仅是一堆流行库的简单堆砌而是一个经过深思熟虑、各组件间紧密协作的有机整体。理解这套技术栈是高效使用和深度定制ChatJS的关键。2.1 全栈框架基石Next.js与TypeScriptChatJS选择Next.js作为其前端和后端的基础框架这是一个非常明智且主流的选择。Next.js的App Router和React Server Components (RSC) 架构为构建复杂的、数据驱动的AI应用提供了天然优势。App Router与文件式路由ChatJS利用App Router的app/目录结构将聊天界面、设置页面、认证回调等逻辑清晰地组织在不同的路由中。这种结构使得代码组织非常直观也便于利用Next.js的服务器端渲染、静态生成等特性来优化性能。React Server Components (RSC) 的优势在AI聊天场景中大量操作如模型调用、数据库查询本质上是服务器端的。RSC允许开发者直接在服务器组件中执行这些异步操作并将结果作为Props传递给客户端组件。这带来了几个好处1)更小的客户端Bundle减少了发送到客户端的JavaScript代码量2)直接访问后端资源在组件中可以直接调用数据库或第三方API无需创建额外的API路由3)提升安全性敏感逻辑和密钥始终运行在服务器端。ChatJS充分利用了这一点将模型调用、对话历史加载等核心逻辑放在RSC中处理。TypeScript的全栈类型安全从数据库Schema到前端组件PropsChatJS全程使用TypeScript。这不仅仅是“有类型”而是通过tRPC和Drizzle ORM实现了端到端的类型安全。当你修改了后端的某个API接口的返回值类型时前端的调用代码会立即在编译阶段报错彻底避免了运行时因数据类型不匹配导致的Bug。对于AI应用这种前后端交互极其频繁的场景类型安全是保障开发效率和代码质量的生命线。2.2 AI能力核心Vercel AI SDK与AI Gateway这是ChatJS的灵魂所在。它没有选择直接裸调各大厂商的SDK而是构建在Vercel AI SDK之上并通过AI Gateway进行统一调度。Vercel AI SDKAI应用的工具箱这个SDK提供了一套统一、简洁的API用于处理流式文本、工具调用、函数调用等。无论底层是OpenAI还是Anthropic你都可以用几乎相同的代码generateText或streamText。ChatJS在此基础上进一步封装了对话管理、上下文组装等业务逻辑让开发者只需关注Prompt本身。AI Gateway模型的中控台这是ChatJS支持120模型的秘密武器。AI Gateway是一个由Vercel提供的服务也可自托管它充当了所有AI模型API的统一代理。开发者只需配置一次Gateway的密钥和端点就可以在代码中通过指定model字段如claude-3-5-sonnet-20241022或gpt-4o来切换模型无需关心各个厂商不同的API地址、认证方式和速率限制。Gateway还提供了请求缓存、重试、回退fallback等生产级功能。ChatJS的配置中心chat.config.ts其核心任务之一就是引导你正确配置AI Gateway。工具Tools与MCP集成AI SDK支持定义“工具”让LLM能够调用外部函数如查询天气、执行计算。ChatJS内置了Web搜索、图像生成推测通过集成Replicate或类似服务、代码执行可能基于piston或自定义沙盒等工具。更值得一提的是其对Model Context Protocol (MCP)的支持。MCP是一个新兴标准旨在标准化LLM与外部数据源如数据库、文档库的连接方式。ChatJS对MCP的支持意味着你可以更容易地为你的聊天应用接入公司内部的文档、代码库或业务系统极大地扩展了其应用边界。2.3 数据与状态管理Drizzle ORM、PostgreSQL与Zustand一个聊天应用会产生大量结构化数据用户信息、对话会话、消息记录、文件元数据等。ChatJS选用了一套以类型安全为核心的数据层方案。Drizzle ORM PostgreSQLDrizzle是一个新兴的TypeScript ORM以其极致的类型安全和接近原生SQL的性能而闻名。ChatJS使用Drizzle定义所有数据库表结构Schema这些Schema本身就是TypeScript类型。任何数据库查询操作都会受到严格的类型检查自动补全体验极佳。PostgreSQL作为关系型数据库提供了事务、JSON字段、全文搜索等强大功能非常适合存储复杂的聊天记录和结构化元数据。Redis for Caching Resumable StreamsRedis在这里扮演了两个关键角色。一是作为缓存层加速频繁读取的数据如用户配置、热门对话。二是实现可恢复的流式传输Resumable Streams的核心。当AI生成长篇回复时如果用户刷新页面传统的流式响应会中断内容丢失。ChatJS的方案可能是将流式生成的每一个Token词元不仅发送给前端也实时存入Redis。当页面重新加载时前端可以从Redis中读取已生成的部分并继续接收新的流从而实现“断点续传”般的体验。这是提升用户体验的一个非常专业的细节。Zustand for Client State对于前端复杂的UI状态如侧边栏是否展开、当前选中的对话、主题模式等ChatJS选择了Zustand这个轻量级状态管理库。它API简单无需像Redux那样写大量模板代码且与React的并发特性兼容性好足以应对聊天应用客户端的状态管理需求。2.4 用户体验与工程化Shadcn/UI、Biome与可观测性Shadcn/UI Tailwind CSSChatJS的UI基于Shadcn/UI构建这是一个可以“复制粘贴”组件代码到自己项目中的组件库。这意味着你拥有完全的样式控制权可以轻松定制出符合你品牌风格的聊天界面同时保证了组件的可访问性a11y和质量。配合Tailwind CSS的原子化工具类UI开发效率很高。Biome Ultracite现代代码质量守护它用Biome替代了传统的ESLint Prettier组合。Biome是一个更快的、一体化的代码格式化与检查工具。Ultracite是其预设配置旨在生成更符合人类和AI如GPT阅读习惯的代码格式。这体现了项目对代码质量和团队协作的重视。可观测性Observability这是生产级应用不可或缺的一环。ChatJS集成了Langfuse用于LLM的观测。这意味着你可以追踪每一次AI调用的Prompt、Completion、耗时、消耗的Token数甚至进行成本核算和效果对比A/B测试。同时Vercel Analytics提供了基本的网站流量分析。Pino作为结构化的日志库确保了服务器日志的机器可读性和易于检索。3. 从零开始使用CLI快速初始化项目ChatJS提供了高度交互式的命令行工具CLI让项目初始化变得异常简单。这个过程不仅仅是生成文件更是一次对项目架构的配置。3.1 环境准备与项目创建首先确保你的开发环境已安装Node.js推荐LTS版本和Bun。Bun是一个新兴的、速度极快的JavaScript运行时ChatJS推荐使用它来获得最佳的开发体验。打开你的终端执行以下命令npx chat-js/clilatest create my-chat-app这条命令会做几件事从npm拉取最新的chat-js/cli包。启动一个交互式的创建向导。在你指定的目录这里是my-chat-app中搭建项目骨架。3.2 交互式配置详解CLI会引导你完成一系列选择这些选择直接决定了生成的应用具备哪些能力。以下是你可能会遇到的核心配置项及其背后的考量选择网关Gateway选项使用Vercel AI Gateway托管版或配置自定义网关端点。建议对于大多数用户尤其是刚开始时强烈建议选择Vercel AI Gateway。它会自动为你处理多模型路由、限流和缓存。你只需要在后一步填入Vercel AI Gateway的密钥即可。如果你所在的公司或地区有网络限制或者需要部署在私有环境才需要考虑自托管网关或自定义端点。选择功能FeaturesCLI会列出所有可选功能文件附件、对话分支、分享、Web搜索、图像生成、代码执行、桌面应用Electron等。建议初次尝试时可以全选以体验完整功能。在实际项目中你可以根据需求精简。例如如果你的应用不需要生成图片可以取消勾选“Image Generation”这会使生成的项目依赖更简洁。选择认证方式Authentication选项GitHub OAuth, Google OAuth, 匿名登录Anonymous或组合选择。解析GitHub/Google OAuth适用于面向开发者或普通用户的正式产品。ChatJS内部使用Better Auth库来处理复杂的OAuth流程、会话管理和数据库存储你只需要提供对应平台的Client ID和Secret。匿名登录这是一个非常实用的功能尤其适合需要降低试用门槛的场景。用户无需注册即可开始聊天其对话数据会保存在浏览器本地或关联到一个临时会话ID上。当用户决定注册时可以再将匿名会话迁移到正式账户下。ChatJS已经处理好了这背后的状态关联逻辑。完成选择后CLI会执行以下操作生成完整的项目文件结构。创建核心配置文件chat.config.ts其中已经根据你的选择生成了对应的功能开关和类型定义。在终端中清晰列出下一步需要设置的环境变量。这是最关键的一步。3.3 核心环境变量配置根据CLI的提示你需要在项目根目录创建.env.local文件并填入必要的密钥。一个典型的配置如下# 数据库连接 (使用本地PostgreSQL示例) DATABASE_URLpostgresql://postgres:passwordlocalhost:5432/chatjs_db # Redis连接 (用于缓存和可恢复流) REDIS_URLredis://localhost:6379 # Vercel AI Gateway 配置 AI_GATEWAY_URLhttps://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY/openai # 示例请替换为你的真实网关地址 AI_GATEWAY_KEYyour_ai_gateway_key_here # 认证配置 (如果选择了GitHub) BETTER_AUTH_GITHUB_CLIENT_IDyour_github_oauth_client_id BETTER_AUTH_GITHUB_CLIENT_SECRETyour_github_oauth_client_secret BETTER_AUTH_SECRETa_long_random_string_for_encryption # 用于加密会话可通过 openssl rand -base64 32 生成 # 文件存储 (如果选择了附件功能使用Vercel Blob示例) BLOB_READ_WRITE_TOKENyour_vercel_blob_token # 可选特定模型API密钥如果你绕开Gateway直连 OPENAI_API_KEYsk-... # 通常不需要除非自定义配置 ANTHROPIC_API_KEYsk-ant-... # 通常不需要重要提示AI_GATEWAY_KEY和BETTER_AUTH_SECRET是安全的重中之重绝不能泄露。DATABASE_URL和REDIS_URL在开发阶段可以指向本地服务生产环境需替换为云服务商如Supabase for PostgreSQL, Upstash for Redis的连接字符串。配置完成后运行bun install安装依赖然后执行bun dev:chat即可在本地启动开发服务器。首次运行会自动执行Drizzle的数据库迁移脚本在PostgreSQL中创建所有必要的表。4. 核心功能实战与自定义开发指南当项目成功跑起来后你将看到一个功能齐全的聊天界面。接下来我们深入几个核心功能模块看看如何理解并定制它们。4.1 模型调用与流式响应实现ChatJS将模型调用的复杂性封装在了服务器操作Server Action或API路由中。查看apps/chat/app/api/chat/route.ts或类似路径的文件你可以找到核心的聊天处理逻辑。其典型流程如下请求验证与上下文组装从请求中获取用户消息、对话历史、选定的模型标识符。从会话中获取用户身份。调用统一AI接口使用AI SDK的streamText函数传入配置好的AI Gateway设置、模型名称、以及组装好的消息历史格式化为统一的Message类型。处理工具调用如果AI的回复中包含工具调用请求如tool_use函数会中断流式响应执行对应的工具函数如执行一次网络搜索然后将工具执行结果作为新的上下文消息再次调用AI模型形成多轮对话直至完成。流式返回与持久化将AI返回的ReadableStream直接返回给前端。同时在一个异步任务中将完整的用户消息和AI回复保存到数据库。为了实现“可恢复流”它很可能同时将流式产生的数据块写入Redis。自定义模型或参数如果你想调整温度temperature、最大Token数等参数或者想接入一个AI Gateway尚未官方支持的模型你需要修改chat.config.ts和对应的调用逻辑。在chat.config.ts中你可以扩展models配置对象。在服务器端处理函数中你可以将自定义参数传递给streamText的选项。4.2 身份认证与用户系统集成ChatJS使用Better Auth处理认证它已经为你生成了完整的登录/注册页面、API路由和数据库表。用户数据关联所有的对话Conversation、消息Message表都会有一个userId字段关联到users表。这意味着你可以轻松实现用户数据的隔离。扩展用户信息如果你想在用户表中存储更多信息如头像、公司等需要修改Drizzle Schema定义packages/db/schema.ts中的users表然后生成并运行新的数据库迁移文件bun db:push或bun db:migrate。Better Auth支持扩展默认的Session和User对象类型你需要在配置中声明这些新字段的类型。角色与权限RBAC基础版本可能只区分登录用户和匿名用户。如果你需要更复杂的角色如管理员、付费用户需要在用户表或单独的表中添加role字段并在后端逻辑如tRPC中间件或Server Action中进行权限检查。Better Auth本身也支持简单的角色权限管理。4.3 文件附件处理流程文件上传功能涉及前端上传、后端存储、元数据记录和AI模型解析多个环节。前端上传ChatJS的UI组件提供了拖拽或点击上传的区域。上传时文件会被发送到配置的Blob存储服务如Vercel Blob。存储与链接生成Vercel Blob或其他适配器会返回一个永久的、可公开访问的URL如https://xxx.blob.vercel-storage.com/file.pdf。元数据记录这个URL、文件类型、大小、原始文件名等信息会被作为一条Attachment记录存入数据库并与当前对话或消息关联。AI模型处理当用户发送一条包含附件引用的消息时后端逻辑会将这些附件的URL和类型信息按照模型所要求的格式例如对于支持视觉的模型图片URL会以特定格式嵌入消息对于PDF可能需要先调用文本提取服务组装到发送给AI的请求中。自定义存储如果你不想使用Vercel BlobChatJS的存储层应该是可配置的。你需要查看并实现对应的存储适配器接口例如连接到AWS S3、Google Cloud Storage或自建的MinIO。4.4 部署与生产环境考量开发完成后部署到生产环境需要注意以下几点环境变量确保所有生产环境变量数据库、Redis、Blob存储、各API密钥、Auth Secret都已正确设置在部署平台如Vercel的环境变量配置中。数据库迁移在部署启动前需要运行数据库迁移。许多平台如Vercel支持在构建或启动时通过脚本自动执行bun db:migrate。构建优化Next.js应用在构建时会对Server Components进行优化。确保你的chat.config.ts中没有在顶层引入或访问环境变量否则可能导致构建错误。通常配置应在运行时动态读取。桌面应用打包如果启用了Electron桌面应用功能项目内应该会有相应的打包脚本如使用electron-builder。你需要为macOS、Windows、Linux分别配置代码签名和公证Notarization流程这对分发至关重要。监控与告警充分利用已集成的Langfuse。设置关键指标的告警如异常高的错误率、Token消耗激增或平均响应时间变长。5. 常见问题、排查技巧与进阶建议在实际使用和定制ChatJS的过程中你可能会遇到一些典型问题。以下是我在实践中总结的一些排查思路和进阶建议。5.1 常见问题速查表问题现象可能原因排查步骤与解决方案启动失败提示数据库连接错误1.DATABASE_URL环境变量未设置或错误。2. PostgreSQL服务未运行。3. 数据库不存在或权限不足。1. 检查.env.local文件是否存在且变量名正确。2. 运行pg_isready或通过GUI工具检查PostgreSQL服务状态。3. 确认连接字符串中的数据库名已创建createdb chatjs_db。认证登录成功后又跳回登录页1.BETTER_AUTH_SECRET环境变量在开发/生产环境不一致。2. Cookie域设置问题。3. 回调URL在OAuth提供商处配置错误。1. 确保所有运行实例使用相同的、强随机的Secret。2. 检查Better Auth配置中的basePath和cookie设置确保与你的应用域名匹配。3. 核对GitHub/Google OAuth应用设置中的授权回调URLCallback URL是否精确匹配你的应用地址如http://localhost:3000/api/auth/callback/github。AI模型无响应或返回超时1.AI_GATEWAY_KEY无效或过期。2. AI Gateway端点配置错误。3. 网络问题导致无法访问网关。4. 所选模型在当前区域不可用。1. 在Vercel AI Gateway控制台检查密钥状态和用量。2. 核对AI_GATEWAY_URL是否完全正确。3. 尝试在终端用curl命令测试网关连通性。4. 在chat.config.ts中尝试切换另一个模型进行测试。文件上传失败1. Blob存储配置如BLOB_READ_WRITE_TOKEN错误。2. 文件大小超过限制。3. 存储服务区域限制。1. 检查Vercel Blob或其他存储服务的控制台确认令牌有读写权限。2. 查看前端上传组件和后端API的文件大小限制配置并适当调整。3. 确认存储服务允许从你的应用所在区域上传。流式响应中断无法恢复1. Redis连接失败或配置错误。2. 流式数据保存逻辑出现异常。1. 检查REDIS_URL和环境确保Redis服务可用。2. 查看服务器日志Pino输出寻找在流式响应过程中是否有错误抛出。检查Redis中是否存入了预期的临时数据。5.2 性能优化与进阶定制建议数据库索引优化随着对话数据增长按userId和createdAt查询对话列表可能会变慢。确保在conversations表的userId和createdAt字段上建立了复合索引。Drizzle迁移文件可以方便地添加索引。Redis内存管理用于可恢复流的Redis数据是临时性的务必设置合理的TTL生存时间例如24小时避免内存被无限占满。可以在存储逻辑中添加EXPIRE命令。按需加载对话历史当单个对话包含成千上万条消息时一次性加载所有历史会严重影响性能。可以在前端实现分页加载或者在后端只加载最近N条消息当AI需要更早的上下文时再通过工具调用动态检索。实现模型回退Fallback策略在生产环境中某个主流模型API可能暂时不可用。你可以在AI Gateway层面或应用代码层面配置回退策略。例如当主要模型如GPT-4o请求失败时自动降级使用备用模型如Claude 3 Haiku。这能显著提升系统的鲁棒性。深度定制UI/UXShadcn/UI组件是复制到你项目中的你可以任意修改它们的样式和行为。例如你可以完全重写message组件为代码块添加更强大的编辑器、为AI回复添加“复制”或“朗读”按钮或者根据消息角色实现更复杂的布局动画。集成自定义工具这是发挥ChatJS威力的关键。假设你想让AI能查询公司内部的订单系统。你可以按照AI SDK的工具定义规范创建一个queryInternalOrder工具函数该函数接收订单号调用内部API并返回结果。然后在模型调用时将这个工具定义传入AI就能在合适的时机调用它了。记得在工具函数内做好权限验证和错误处理。ChatJS提供的是一套坚固的“毛坯房”和精良的“施工图纸”。它解决了水电网络基础架构和主体结构核心功能让你可以专注于室内装修业务逻辑和家具布置用户体验。对于想要快速进入AI应用赛道的团队或个人开发者来说它能节省数月的前期开发时间让你把宝贵的资源投入到真正创造差异化的地方。当然像任何框架一样深入理解和必要时定制其底层机制是将其潜力发挥到极致的前提。

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