当前位置: 首页 > article >正文

开源AI对话界面chat-ui:快速部署与定制化LLM前端实践

1. 项目概述一个开源的AI对话界面如果你最近在折腾大语言模型LLM不管是想部署一个私有的ChatGPT替代品还是想给自己训练或微调的模型配一个像样的“脸面”那你大概率绕不开一个核心问题前端界面。模型本身再强大没有一个直观、稳定、功能齐全的交互界面终究是“茶壶里煮饺子——有货倒不出”。今天要聊的这个项目——run-llama/chat-ui就是为解决这个问题而生的一个开源利器。简单来说chat-ui是一个专门为大型语言模型设计的现代化、可自托管的聊天用户界面。你可以把它理解为一个“壳”一个“驾驶舱”它的核心任务是把后端比如Llama、GPT-NeoX、Vicuna等模型的API能力通过一个美观、易用、功能丰富的Web界面暴露给最终用户。它不是一个模型而是一个连接用户与模型的桥梁。这个项目由run-llama团队维护目标非常明确为开源LLM生态提供一个生产就绪级的对话前端。它适合谁呢首先是开发者与研究者当你本地跑通了一个模型想快速测试其对话能力或展示成果时chat-ui能让你几分钟内就拥有一个媲美商业产品的界面。其次是企业或团队希望在内网安全地部署一个AI助手用于知识问答、代码辅助或客服场景chat-ui的开源和可定制性提供了坚实的基础。最后对于AI爱好者它也是一个极佳的学习项目你可以通过它了解如何构建一个完整的AI应用前端包括消息流、上下文管理、提示词工程界面等。2. 核心架构与技术栈解析chat-ui之所以能成为众多开源LLM项目的首选前端离不开其清晰、现代且健壮的技术选型。它不是简单拼凑的Demo而是一个考虑了工程化、可维护性和扩展性的产品级项目。2.1 前端技术栈Next.js TypeScript Tailwind CSS项目的前端部分构建于Next.js框架之上。这是一个基于React的元框架选择它有几个关键考量首先是服务端渲染SSR和静态生成SSG能力这对于提升首屏加载速度、优化搜索引擎友好性虽然聊天应用不太需要以及改善用户体验至关重要。其次是API Routes功能它允许你在同一个Next.js项目中无缝创建后端API端点这为chat-ui与各种LLM后端API的通信提供了极大的便利架构上可以保持前后端一体部署简单。TypeScript的全面采用是项目稳健性的保障。在涉及复杂状态管理如聊天会话、消息历史、模型参数和与不同后端API交互的场景下TypeScript的静态类型检查能极大减少运行时错误提升代码的可读性和可维护性。对于想要二次开发的开发者来说清晰的类型定义就是最好的文档。UI层面项目使用了Tailwind CSS这个实用优先的CSS框架。这使得构建响应式、高度定制化的界面变得异常高效。你可以在代码中直接使用功能类来定义样式避免了传统CSS中样式命名和管理的负担。从项目代码中可以看到整个聊天界面的布局、主题色、组件状态样式如按钮禁用、消息气泡都通过Tailwind类优雅地实现保持了UI的一致性和可定制性。2.2 状态管理与数据流聊天应用的核心状态是会话和消息。chat-ui在这方面设计得较为直观。通常它会使用React的Context API或像Zustand这样的轻量级状态管理库具体需看项目版本来管理全局状态例如当前活动会话包含会话ID、标题、使用的模型等元数据。消息列表当前会话中所有消息的数组每条消息包含角色user/assistant、内容、时间戳以及可能的附加数据如生成状态、引用来源。应用设置如默认模型、温度temperature、最大生成长度等参数。数据流通常是单向的用户在前端输入消息 - 前端通过调用Next.js API Route或直接配置的后端地址将消息和参数发送给LLM后端 - 后端流式Streaming或非流式返回响应 - 前端接收数据并更新消息列表和UI状态。对于流式响应前端会使用Server-Sent Events (SSE)或WebSocket来实时接收token并逐步渲染这是实现类似ChatGPT“打字机效果”的关键。2.3 后端适配层API路由与模型抽象chat-ui本身不包含模型推理代码。它的后端角色主要由Next.js的API Routes充当形成一个适配层。这个适配层的主要职责是接收标准化请求接收来自前端界面的统一格式的聊天请求。转换与路由根据配置将请求转换成目标LLM后端如OpenAI API格式、Llama.cpp的server格式、Ollama的API格式、或是自定义的本地API所要求的特定格式。代理与流式转发将转换后的请求发送给真正的模型服务并将模型服务的响应尤其是流式响应代理回前端。这种设计带来了巨大的灵活性。你只需要修改配置或适配层代码就可以让同一个chat-ui前端对接截然不同的后端无论是云端OpenAI、本地运行的text-generation-webui还是企业内部的推理平台。注意项目的默认配置可能针对特定后端如OpenAI。在对接自定义后端时你需要仔细阅读项目文档了解如何编写或修改适配器adapter这是部署成功的关键一步也是主要的定制化工作所在。3. 核心功能与部署实操详解了解了架构我们来看看如何把它真正跑起来并理解其核心功能点。部署chat-ui主要有两种主流方式基于Docker的一键部署和从源码手动部署。前者适合快速体验和稳定运行后者适合深度定制和开发。3.1 基于Docker的快速部署这是最推荐新手和大多数生产场景使用的方式能最大程度避免环境依赖问题。步骤一环境准备确保你的机器上已经安装了Docker和Docker Compose。这是唯一的前提条件。步骤二获取配置通常项目会提供一个docker-compose.yml示例文件。你需要将其下载到本地并重点关注其中的环境变量配置文件如.env.local或.env.example。# 克隆项目或直接下载docker-compose文件 git clone https://github.com/run-llama/chat-ui.git cd chat-ui步骤三配置环境变量这是核心步骤。复制环境变量示例文件并编辑cp .env.example .env.local用文本编辑器打开.env.local你需要配置的关键项通常包括OPENAI_API_KEY: 如果你要对接OpenAI官方API。OPENAI_API_HOST: 更重要的配置如果你对接的是本地或其他兼容OpenAI API协议的后端如text-generation-webui、Ollama、vLLM等这里需要改为你的后端服务地址例如http://localhost:8000/v1。将OPENAI_API_KEY设置为任意非空字符串即可如dummy。DEFAULT_MODEL: 指定前端默认选择的模型名称这个名称需要与你的后端提供的模型列表匹配。NEXT_PUBLIC_DEFAULT_SYSTEM_PROMPT: 设置默认的系统提示词用于引导AI助手的行为。步骤四启动服务在包含docker-compose.yml的目录下运行docker-compose up -dDocker会自动拉取镜像、构建容器并启动服务。访问http://localhost:3000即可看到聊天界面。实操心得使用Docker部署时如果修改了前端代码或环境变量需要重建容器才能生效docker-compose up -d --build。另外务必通过docker-compose logs -f命令查看容器日志这是排查连接后端失败等问题的最直接手段。3.2 从源码部署与开发如果你想修改UI、添加功能或深入研究代码就需要从源码部署。步骤一克隆与安装git clone https://github.com/run-llama/chat-ui.git cd chat-ui npm install # 或使用 pnpm/yarn步骤二环境配置同样复制并配置.env.local文件内容与Docker部署时一致。步骤三运行开发服务器npm run dev这将启动一个热重载的开发服务器通常运行在http://localhost:3000。你对代码的任何修改都会实时反映在浏览器中。步骤四构建生产版本开发完成后可以构建优化后的生产版本npm run build npm start3.3 核心功能界面解析成功部署后你会看到一个功能齐全的聊天界面主要包含以下区域侧边栏会话管理左侧通常是一个可折叠的侧边栏列出所有历史聊天会话。你可以创建新会话、重命名或删除现有会话。这是管理多轮、多主题对话的关键。主聊天区域中间是核心区域以气泡形式展示用户和AI的对话消息。AI的回复如果是流式生成会以“打字机”效果逐字出现。消息输入与参数设置输入框支持多行输入通常有快捷键如Shift Enter换行Ctrl Enter或Cmd Enter发送。模型选择器下拉菜单列出从后端获取的可用模型列表。这是前端动态从配置的API端点如/v1/models获取的。参数调节滑块最重要的几个参数包括温度Temperature控制生成随机性的浮点数如0.1到2.0。值越低输出越确定、保守值越高输出越随机、有创造性。最大生成长度Max Tokens单次回复允许生成的最大token数量用于控制回复篇幅。Top-p核采样另一种控制随机性的方法通常与温度二选一使用。系统提示词System Prompt编辑这是一个高级但至关重要的功能。允许你定义AI助手的角色、行为规范和知识边界。例如你可以设置为“你是一个专业的编程助手只回答技术问题用中文回复”。这个提示词会在每次对话开始时隐式地发送给模型极大地影响对话质量。消息操作可能包含复制消息内容、重新生成Regenerate上一条AI回复等功能。重新生成功能在遇到不满意的回答时非常有用它会让模型基于相同的上下文重新生成一次。4. 对接不同LLM后端的配置实战chat-ui的强大之处在于其适配能力。下面以几个最常见的后端为例详细说明如何配置。4.1 对接 OpenAI 官方API这是最简单的场景因为chat-ui默认就兼容OpenAI API格式。环境变量配置OPENAI_API_KEYsk-your-actual-openai-api-key-here OPENAI_API_HOSThttps://api.openai.com DEFAULT_MODELgpt-3.5-turbo说明无需修改任何代码。启动后前端所有请求都会发送到https://api.openai.com/v1/chat/completions。4.2 对接本地 OllamaOllama 是一个流行的本地LLM运行和管理的工具它提供了兼容OpenAI的API接口。首先启动Ollama服务并拉取模型ollama run llama2 # 这会拉取并运行llama2模型同时启动API服务默认端口11434然后配置chat-ui的环境变量OPENAI_API_KEYdummy-key # Ollama API不需要鉴权但字段不能为空 OPENAI_API_HOSThttp://localhost:11434 # 指向Ollama服务地址 DEFAULT_MODELllama2 # 必须与Ollama中运行的模型名一致关键点Ollama的API路径是/v1在根目录下所以OPENAI_API_HOST直接写http://localhost:11434即可chat-ui会自动拼接到/v1/chat/completions。4.3 对接 text-generation-webui (Oobabooga)text-generation-webui是另一个功能极其强大的本地LLM WebUI它也提供了OpenAI风格的扩展API。首先在text-generation-webui中启用OpenAI风格的API 在启动时添加参数--api或者在其Web界面中加载扩展。API默认运行在http://localhost:5000或http://localhost:5001。然后配置chat-uiOPENAI_API_KEYdummy-key OPENAI_API_HOSThttp://localhost:5000 # 或5001根据你的实际端口 DEFAULT_MODELyour-loaded-model-name # 需要与text-generation-webui中加载的模型名对应注意事项text-generation-webui的API端点可能略有不同有时需要将OPENAI_API_HOST设置为http://localhost:5000/v1。最可靠的方法是查看其启动日志或文档确认API地址。此外确保在text-generation-webui的“模型”选项卡下正确加载了模型。4.4 对接自定义后端通用方法如果你的后端提供了标准的OpenAI/v1/chat/completions接口配置方法与上述相同。如果没有你可能需要修改chat-ui的API路由代码通常在/pages/api/chat/目录下编写一个适配器来将chat-ui的内部请求格式转换为你后端所需的格式。这需要一定的Node.js/Next.js开发经验。5. 高级定制与问题排查指南部署上线只是第一步要让chat-ui完全贴合你的需求还需要进行一些定制和优化。5.1 界面与功能定制修改主题与样式由于使用了Tailwind CSS你可以通过修改tailwind.config.js文件来更改主题色、字体、间距等。例如更改主色// tailwind.config.js module.exports { theme: { extend: { colors: { primary: #your-brand-color, }, }, }, }然后在组件中将bg-blue-500改为bg-primary即可。添加自定义功能例如你想在每条AI回复下方添加一个“点赞/点踩”的反馈按钮。你需要在前端组件如消息气泡组件中添加按钮UI。在状态管理中定义处理反馈的逻辑。可能需要创建一个新的API路由如/api/feedback来将反馈数据发送到你的后端进行分析。集成知识库RAG这是更高级的定制。chat-ui本身可能不直接包含检索增强生成RAG的UI。你需要在后端实现RAG逻辑使用向量数据库进行检索。修改chat-ui的API路由在发送给LLM的请求中除了用户消息还要附加上从知识库检索到的相关上下文。可以在前端界面上增加一个“上传文档”或“选择知识库”的入口。5.2 常见问题与排查技巧在部署和使用过程中你几乎一定会遇到一些问题。下面是一个快速排查清单问题现象可能原因排查步骤与解决方案访问localhost:3000白屏或报错前端服务未启动或构建失败1. 检查npm run dev或docker-compose logs的输出看是否有编译错误。2. 检查Node.js版本是否符合项目要求查看package.json中的engines字段。3. 尝试清除.next缓存目录并重新安装依赖rm -rf .next node_modules npm install。发送消息后长时间无响应或报“Network Error”后端LLM服务连接失败1.检查环境变量确认OPENAI_API_HOST和端口是否正确。2.检查后端服务确认你的LLM后端Ollama、text-generation-webui等正在运行且API可访问。用curl测试curl http://localhost:11434/v1/models。3.检查CORS如果前端和后端在不同域名/端口可能存在跨域问题。需要在后端服务或chat-ui的Next.js配置中启用CORS。对于开发可以在Next.js的next.config.js中配置async headers()函数添加CORS头。模型列表为空或下拉框显示“Error fetching models”前端无法从后端获取模型列表1. 确认后端API的/v1/models端点是否存在且返回正确JSON格式。用curl或浏览器直接访问该端点测试。2. 检查chat-ui的API路由中获取模型列表的逻辑看其是否与你后端的响应格式匹配。可能需要修改适配代码。流式响应不工作一次性返回全部内容后端不支持流式或前端配置有误1. 确认你的LLM后端是否支持stream: true参数。例如Ollama和text-generation-webui的API默认支持。2. 检查chat-ui发送的请求体是否包含了stream: true。3. 查看浏览器开发者工具的“网络”选项卡查看对/api/chat的请求响应类型是否为“事件流”EventStream。部署到服务器后外网无法访问防火墙或服务绑定地址限制1. 检查服务器安全组/防火墙是否放行了3000端口前端和你的后端API端口。2. 在Docker或Next.js启动时确保服务绑定到0.0.0.0而不是127.0.0.1。对于Next.js开发服务器使用npm run dev -- -H 0.0.0.0。对于生产启动环境变量HOSTNAME0.0.0.0。内存或CPU占用过高模型推理本身资源消耗大或前端有内存泄漏1. 高占用主要来自LLM后端推理过程这是正常的。确保服务器有足够资源。2. 如果是前端容器或进程占用异常检查是否有大量会话历史未清理或者开发模式下的热重载问题。尝试重启服务。5.3 性能优化与安全考量启用生产模式务必使用npm run build npm start或Docker生产镜像来运行而不是开发模式 (npm run dev)以获得最佳的代码压缩和性能。使用反向代理在生产环境中不要直接将Next.js服务暴露在公网。使用Nginx或Caddy作为反向代理放在chat-ui前面。这可以处理SSL/TLS加密HTTPS、负载均衡、静态文件缓存和基础的安全防护。环境变量安全永远不要将包含API密钥的.env.local文件提交到代码仓库。使用Docker secrets、云服务商提供的密钥管理服务或部署平台的环境变量配置功能来管理敏感信息。身份验证基础的chat-ui可能不包含用户登录认证功能。如果你需要限制访问可以考虑在反向代理层Nginx配置HTTP基本认证。使用云平台的访问控制如Cloudflare Access。为chat-ui项目添加Next.js的认证中间件集成Auth.js原NextAuth.js等方案。在我自己多次部署和定制chat-ui的过程中最大的体会是它完美地平衡了“开箱即用”和“深度可定制”。对于简单的对接需求改个环境变量就能跑起来当你需要特殊功能时由于其代码结构清晰、技术栈主流深入进去修改也不会感到无从下手。它就像是开源LLM世界的一个标准“插座”让各种各样的“电器”模型后端都能通过它为用户提供统一而优质的交互体验。如果你正苦恼于如何展示或使用你的大模型run-llama/chat-ui绝对是一个值得投入时间研究和使用的起点。

相关文章:

开源AI对话界面chat-ui:快速部署与定制化LLM前端实践

1. 项目概述:一个开源的AI对话界面如果你最近在折腾大语言模型(LLM),不管是想部署一个私有的ChatGPT替代品,还是想给自己训练或微调的模型配一个像样的“脸面”,那你大概率绕不开一个核心问题:前…...

【Oracle数据库指南】第45篇:Oracle SQL优化基础

上一篇【第44篇】Oracle性能监控——关键指标与工具 下一篇【第46篇】# Oracle内存与参数调优 摘要 SQL优化是Oracle DBA和开发人员必须掌握的核心技能。一条低效的SQL不仅自身执行慢,还会消耗大量CPU、I/O和内存资源,影响整个数据库的性能。本文从执行…...

Python小红书数据采集终极指南:xhs工具完整使用教程

Python小红书数据采集终极指南:xhs工具完整使用教程 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 小红书作为中国领先的生活方式分享平台,蕴含着丰…...

彩色血流成像(三):滤波

文章目录1回波信号1.1 杂波信号1.2血流信号1.3噪声信号1.4回波信号模拟方法2滤波目的3滤波限制4滤波算法5高通数字滤波器5.1单一回波抵消器5.2FIR滤波器5.3IIR滤波器 无限冲激响应滤波器定义:实现缺点:5.4回归滤波器5.5优化6参数化方法7非参数化方法7.1特…...

从‘一片黑’到重点突出:手把手教你用ArcGIS为乡镇规划图添加专业级影像蒙版

从‘一片黑’到重点突出:手把手教你用ArcGIS为乡镇规划图添加专业级影像蒙版 在乡镇规划汇报中,一张能清晰传达重点区域的地图往往比千言万语更有说服力。想象一下这样的场景:当决策者面对一张全区域亮度均一的遥感影像时,他们的视…...

【Oracle数据库指南】第43篇:Oracle ASM磁盘组使用与维护

上一篇【第42篇】Oracle ASM实例与磁盘组管理详解 下一篇【第44篇】Oracle性能监控——关键指标与工具 摘要 ASM(Automatic Storage Management,自动存储管理)是Oracle提供的专用文件系统和卷管理器,专为Oracle数据库设计。本文在…...

Spinning Up模型保存终极指南:checkpoint管理完整教程

Spinning Up模型保存终极指南:checkpoint管理完整教程 【免费下载链接】spinningup An educational resource to help anyone learn deep reinforcement learning. 项目地址: https://gitcode.com/gh_mirrors/sp/spinningup 深度强化学习训练过程中&#xff…...

如何在3分钟内掌握PowerPoint专业公式编辑:LaTeX-PPT终极指南

如何在3分钟内掌握PowerPoint专业公式编辑:LaTeX-PPT终极指南 【免费下载链接】latex-ppt Use LaTeX in PowerPoint 项目地址: https://gitcode.com/gh_mirrors/la/latex-ppt 还在为PowerPoint中编辑复杂的数学公式而头疼吗?LaTeX-PPT这款开源插件…...

基于RAG的德国开放数据智能问答助手:从原理到工程实践

1. 项目概述:当德国开放数据遇上GPT最近在折腾一个挺有意思的项目,叫 OpenDataGermanyGPT。光看名字,你可能觉得这又是一个“GPT套壳”应用,但实际玩下来,我发现它的核心价值远不止于此。简单来说,这是一个…...

Zotero文献去重终极指南:3步快速清理重复文献库的完整教程

Zotero文献去重终极指南:3步快速清理重复文献库的完整教程 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 在学术研究过程中&#…...

Open3D内存检测终极指南:LeakSanitizer的完整应用教程

Open3D内存检测终极指南:LeakSanitizer的完整应用教程 【免费下载链接】Open3D Open3D: A Modern Library for 3D Data Processing 项目地址: https://gitcode.com/gh_mirrors/op/Open3D Open3D作为现代3D数据处理库,在处理大规模点云、网格等数据…...

LZ4压缩算法演进:从r131到v1.9.5的终极速度革命 [特殊字符]

LZ4压缩算法演进:从r131到v1.9.5的终极速度革命 🚀 【免费下载链接】lz4 Extremely Fast Compression algorithm 项目地址: https://gitcode.com/GitHub_Trending/lz/lz4 LZ4作为当今最快的无损压缩算法之一,自诞生以来经历了令人瞩目…...

Java动态代理终极指南:JDK与CGLIB原理对比详解

Java动态代理终极指南:JDK与CGLIB原理对比详解 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能…...

如何快速掌握Spinning Up超参数调优:提升深度强化学习性能的终极指南

如何快速掌握Spinning Up超参数调优:提升深度强化学习性能的终极指南 【免费下载链接】spinningup An educational resource to help anyone learn deep reinforcement learning. 项目地址: https://gitcode.com/gh_mirrors/sp/spinningup Spinning Up是一款…...

Marko恢复机制:hydration过程中的状态恢复终极指南

Marko恢复机制:hydration过程中的状态恢复终极指南 【免费下载链接】marko A declarative, HTML-based language that makes building web apps fun 项目地址: https://gitcode.com/gh_mirrors/ma/marko Marko是一个基于HTML的声明式语言,专注于构…...

机器视觉 Vs 智能体视觉(29)

重磅预告:本专栏将独家连载新书《智能体视觉技术与应用》(系列丛书)部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。…...

如何利用Google Cloud服务加速OR-Tools大规模优化求解:完整实践指南

如何利用Google Cloud服务加速OR-Tools大规模优化求解:完整实践指南 【免费下载链接】or-tools Googles Operations Research tools: 项目地址: https://gitcode.com/gh_mirrors/or/or-tools OR-Tools是Google开发的强大运筹学工具库,能够高效解决…...

AI智能体通信基站:统一HTTP请求管理,提升开发效率与稳定性

1. 项目概述:一个为AI智能体构建的“通信基站”如果你正在开发一个AI智能体(Agent),并且需要让它与各种外部服务(比如OpenAI、Anthropic的Claude,或者任何自定义的HTTP API)进行对话&#xff0c…...

从零到一:在Linux上构建USRP与GNU Radio的完整信号处理工坊

1. 环境准备:打造你的信号处理工坊基础 搭建信号处理工坊就像装修新房,得先打好地基。我强烈推荐使用Ubuntu 20.04 LTS系统,这个版本不仅稳定,而且社区支持完善。记得第一次尝试时用了最新版系统,结果各种依赖冲突让我…...

LRCGET:如何用500行代码重定义你的离线音乐体验

LRCGET:如何用500行代码重定义你的离线音乐体验 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 在数字音乐流媒体盛行的时代,我…...

如何快速掌握多尺度地理加权回归:面向数据分析师的完整指南

如何快速掌握多尺度地理加权回归:面向数据分析师的完整指南 【免费下载链接】mgwr Multiscale Geographically Weighted Regression (MGWR) 项目地址: https://gitcode.com/gh_mirrors/mg/mgwr **多尺度地理加权回归(MGWR)**是空间统计…...

如何快速掌握ta-lib-python与Pandas集成:金融时间序列分析的终极指南 [特殊字符]

如何快速掌握ta-lib-python与Pandas集成:金融时间序列分析的终极指南 🚀 【免费下载链接】ta-lib-python Python wrapper for TA-Lib (http://ta-lib.org/). 项目地址: https://gitcode.com/gh_mirrors/ta/ta-lib-python 在金融数据分析和量化交易…...

如何快速掌握DevPod:开源远程开发环境的完整指南

如何快速掌握DevPod:开源远程开发环境的完整指南 【免费下载链接】devpod Codespaces but open-source, client-only and unopinionated: Works with any IDE and lets you use any cloud, kubernetes or just localhost docker. 项目地址: https://gitcode.com/g…...

Notion 发布开发者平台扩展协作软件,治理与执行决定能否突破试验阶段!

Notion 发布开发者平台扩展协作软件,治理与执行成突破试验阶段关键!此次发布让 Notion 在企业软件栈中扮演更重要的角色,但分析师表示,治理和执行情况将决定它能否突破试验阶段。Notion 正在通过一个开发者平台扩展其协作工作空间…...

GridTravel:当地人定制旅行指南,开启真实步行探索之旅!

当地人为您量身定制旅行指南GridTravel能将您的旅行变成一段精彩故事。从隐秘小巷中的美食到令人惊叹的美景,它为您规划路线,助您探寻城市的灵魂。还能在App Store下载。由当地人带领,领略城市风情GridTravel是一个由当地人组成的社区&#x…...

NoFences:完全免费的Windows桌面分区工具终极指南

NoFences:完全免费的Windows桌面分区工具终极指南 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为杂乱的Windows桌面而烦恼吗?每天在散落各处的…...

7步轻松完成PostgreSQL云服务迁移:从自建到PaaS的平滑过渡指南

7步轻松完成PostgreSQL云服务迁移:从自建到PaaS的平滑过渡指南 【免费下载链接】awesome-postgres A curated list of awesome PostgreSQL software, libraries, tools and resources, inspired by awesome-mysql 项目地址: https://gitcode.com/gh_mirrors/aw/aw…...

Laravel-Admin单元测试终极指南:10个技巧确保后台代码质量 [特殊字符]

Laravel-Admin单元测试终极指南:10个技巧确保后台代码质量 🚀 【免费下载链接】laravel-admin Build a full-featured administrative interface in ten minutes 项目地址: https://gitcode.com/gh_mirrors/la/laravel-admin Laravel-Admin是一个…...

NoFences:彻底告别混乱桌面的免费开源分区神器

NoFences:彻底告别混乱桌面的免费开源分区神器 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天面对杂乱无章的Windows桌面感到焦虑?在几十个…...

Nginx Server Configs Node.js配置:Node应用部署最佳实践终极指南

Nginx Server Configs Node.js配置:Node应用部署最佳实践终极指南 【免费下载链接】server-configs-nginx Nginx HTTP server boilerplate configs 项目地址: https://gitcode.com/gh_mirrors/se/server-configs-nginx Node.js应用部署常常面临性能优化、安全…...