分类: Github项目

GitHub是全球最大的开源社区​​:
•​​海量开源项目​​:数百万的开源项目托管于此,涵盖了几乎所有编程语言和技术领域。
•​​参与和贡献​​:任何开发者都可以轻松地 Fork 项目,进行修改并通过 Pull Request 贡献代码。
•​​探索与学习​​:开发者可以通过 GitHub 发现新技术、学习最佳实践并了解行业趋势

  • GitHub热门智能体开源项目,让你秒变AI大神!

    GitHub热门智能体开源项目,让你秒变AI大神!

    AI发烧友们,大家好!最近是不是感觉哪里都在谈“智能体(Agent)”?从自动编程到智能决策,它俨然成了AI界的新晋“顶流”。但面对海量信息,你是否也曾感到无从下手:教程太浅、门槛太高,想亲手实践却找不到合适的项目?别担心!今天,我们就为大家精选了GitHub上10个高星智能体开源项目,涵盖从通用框架到垂直工具,从单机作战到多体协同,并附上保姆级介绍与实战指南。收藏这篇文章,你的智能体学习之路将事半功倍!

    智能体是什么?为什么它值得关注?

    简单来说,智能体是一个“会独立思考、自主行动的AI助手”。你只需给定一个目标,它便能自主规划任务、调用工具、执行步骤,甚至与其他智能体协同完成复杂工作。目前,智能体已广泛应用于科研、办公、游戏开发等领域。而开源项目,正是我们快速入门的“捷径”——无需从零造轮子,基于成熟代码稍作修改,你就能打造属于自己的智能体,高效又实用!

    先唠两句:啥是智能体?为啥要学?

    说白了,智能体就是“能自己干活的AI助手”——给它个目标,它会自己拆解任务、调用工具、调整策略,甚至和其他AI“组队打工”。现在从科研、办公到游戏、机器人,到处都能看到它的身影。而开源项目就是咱普通人的“快车道”:不用从零造轮子,直接改改代码就能搭自己的智能体,香到不行!

    10个必玩智能体开源项目,按头安利!

    1. AutoGPT:智能体界的“开山网红”

    介绍:当年一句“AI自主完成任务”直接引爆GitHub的狠角色!基于GPT模型,能自己规划、搜索、执行任务,堪称“AI版自动化脚本”。

    10个项目横向对比表(选项目不纠结!)

    项目名核心优势适用人群技术门槛部署难度最佳场景
    AutoGPT入门简单,自主性强新手、小白简单任务自动化
    MetaGPT分工清晰,输出质量高开发者、产品软件开发、项目规划
    LangChain万能工具箱,兼容性强全阶段开发者自定义智能体开发
    AutoGen多智能体协作,微软背书进阶开发者中高复杂决策、团队协作
    BabyAGI代码极简,原理清晰学习者、新手理解智能体逻辑
    HuggingGPT多模型联合,成本低开发者、研究者中高中高多模态任务、本地部署
    AgentGPT零代码,网页直接用纯新手、体验党快速测试、简单任务
    GPT-Researcher学术向专业,文献整理学生、研究员论文写作、文献综述
    CrewAI团队管理逻辑强项目管理者多角色协作、复杂任务
    AgentQL自然语言查数据业务、数据岗数据分析、报表生成


    主要功能

    • 自主拆解复杂任务(比如“写一篇AI发展报告”→ 拆成查资料、整理数据、写初稿、润色)
    • 调用搜索引擎、文件工具,甚至控制其他软件
    • 支持自定义目标和规则,灵活性拉满

    应用场景:自动写报告、数据整理、批量处理文件、简单的科研辅助
    部署方法

    1. 克隆仓库:git clone https://github.com/Significant-Gravitas/AutoGPT.git
    2. 安装依赖:pip install -r requirements.txt
    3. 配置OpenAI API密钥和目标,运行python -m autogpt即可
      亮点&小槽点:入门简单,适合新手练手;但偶尔会“钻牛角尖”,需要手动干预调整目标。
      GitHub链接:https://github.com/Significant-Gravitas/AutoGPT

    2. MetaGPT:多智能体“职场协作”神器

    介绍:由国内团队开发的“全流程智能体框架”,核心是模拟“职场团队分工”——比如产品经理、开发、测试各司其职,合力完成项目。
    主要功能

    • 内置“角色分工”系统:支持产品经理(提需求)、架构师(画方案)、开发(写代码)等角色
    • 自动生成文档、代码、测试用例,甚至能输出项目计划
    • 多智能体实时沟通协作,像真人团队一样推进任务
      应用场景:小型软件开发、项目规划、团队协作流程模拟、创业项目原型设计
      部署方法
    1. 克隆仓库:git clone https://github.com/geekan/MetaGPT.git
    2. 安装依赖:pip install -r requirements.txt
    3. 配置API密钥,输入需求(比如“开发一个贪吃蛇游戏”),运行python startup.py "你的需求"
      亮点&小槽点:分工超清晰,输出质量高;但对硬件和API额度要求稍高,新手可能需要先调参。
      GitHub链接:https://github.com/geekan/MetaGPT

    3. LangChain:智能体的“工具箱”(必学!)

    介绍:虽然不算纯智能体,但绝对是构建智能体的“基础设施”!把各种AI模型、工具、数据串起来,让你轻松搭出复杂智能体。
    主要功能

    • 集成主流大模型(GPT、LLaMA、文心一言等)和工具(搜索、数据库、API调用)
    • 提供“记忆模块”:让智能体记住对话历史和任务状态
    • 支持“链(Chain)”和“智能体(Agent)”两种模式,灵活组合功能
      应用场景:自定义智能体开发、聊天机器人、知识库问答、数据分析助手
      部署方法
    1. 直接安装库:pip install langchain
    2. 搭配具体模型(如OpenAI):pip install openai
    3. 参考文档写代码:定义工具→设置智能体→调用执行
      亮点&小槽点:兼容性超强,几乎所有智能体项目都绕不开它;但需要点代码基础,纯小白可能要先补Python。
      GitHub链接:https://github.com/langchain-ai/langchain

    4. AutoGen:微软出品的“智能体协作平台”

    介绍:微软研究院开源的多智能体框架,主打“让多个AI智能体聊天协作”,甚至能和人类实时互动,解决复杂问题。
    主要功能

    • 支持“智能体-智能体”“智能体-人类”混合协作
    • 自动分配任务、调用工具,还能辩论优化方案(比如两个智能体吵架改代码哈哈)
    • 兼容多种大模型,支持本地部署(不用依赖OpenAI)
      应用场景:复杂决策、代码审查、学术研究协作、多人任务分配
      部署方法
    1. 安装:pip install pyautogen
    2. 写配置文件:定义智能体角色、模型、工具权限
    3. 启动对话:python your_script.py 让智能体们开始“打工”
      亮点&小槽点:微软背书,稳定性强;协作逻辑超灵活,但配置稍复杂,建议先看官方示例。
      GitHub链接:https://github.com/microsoft/autogen

    5. BabyAGI:极简任务智能体

    介绍:名字萌但功能硬核!用不到200行代码实现“目标-任务-执行”闭环,适合新手理解智能体核心逻辑。
    主要功能

    • 核心逻辑:设定目标→生成任务→执行任务→更新任务列表
    • 支持用向量数据库存储任务记忆,避免重复劳动
    • 可自定义执行工具(比如加个网页爬虫、计算器)
      应用场景:学习智能体原理、搭建轻量任务助手(如定时查天气、整理邮件)
      部署方法
    1. 克隆仓库:git clone https://github.com/yoheinakajima/babyagi.git
    2. 安装依赖:pip install -r requirements.txt
    3. 配置OpenAI和向量数据库密钥,运行python babyagi.py输入目标
      亮点&小槽点:代码极简,新手能看懂;但功能基础,复杂任务需要自己加工具。
      GitHub链接:https://github.com/yoheinakajima/babyagi.git

    6. HuggingGPT: Hugging Face+GPT的“强强联合”

    介绍:浙大团队开源的“大模型调度官”!让GPT当“指挥官”,调用Hugging Face上的1000+开源模型干活,成本低还强。
    主要功能

    • GPT负责拆解任务、选模型,Hugging Face模型负责具体执行(如图像识别、翻译、代码生成)
    • 支持文本、图像、语音等多模态任务,全能选手
    • 本地部署可选,不用完全依赖API
      应用场景:多模态任务处理(如“给图片写文案+翻译”)、低成本智能体开发
      部署方法
    1. 克隆仓库:git clone https://github.com/microsoft/HuggingGPT.git
    2. 安装依赖:pip install -r requirements.txt
    3. 配置OpenAI和Hugging Face密钥,运行示例脚本
      亮点&小槽点:模型资源丰富,成本可控;但对设备算力有要求,本地跑大模型可能卡。
      GitHub链接:https://github.com/microsoft/HuggingGPT

    7. AgentGPT:浏览器直接玩的“零代码智能体”

    介绍:懒人福音!不用装环境,打开网页就能创建智能体,输入目标直接跑,新手友好度拉满。
    主要功能

    • 网页端可视化操作,填个目标就能启动智能体
    • 实时显示任务拆解和执行过程,像“看AI打工直播”
    • 支持保存历史记录,随时复盘调整
      应用场景:快速测试智能体效果、新手入门体验、简单任务自动化(如写提纲、查信息)
      部署方法
    1. 直接用在线版:https://agentgpt.reworkd.ai/(偶尔需要排队)
    2. 本地部署:克隆仓库后按文档配置Next.js环境,启动即可
      亮点&小槽点:零代码门槛,谁都能玩;但功能有限,复杂任务还是得用本地项目。
      GitHub链接:https://github.com/reworkd/AgentGPT

    8. GPT-Researcher:学术党狂喜的“论文助手”

    介绍:专注“学术研究”的智能体!输入研究主题,自动搜文献、读论文、整理观点,还能生成带引用的报告。
    主要功能

    • 自动搜索学术数据库(Google Scholar、Arxiv等)和权威来源
    • 提取核心观点、对比不同研究,生成结构化报告(带参考文献格式)
    • 支持自定义研究深度和报告风格(如摘要、综述、批判性分析)
      应用场景:写论文查资料、文献综述、快速了解研究领域进展
      部署方法
    1. 克隆仓库:git clone https://github.com/assafelovic/gpt-researcher.git
    2. 安装依赖:pip install -r requirements.txt
    3. 配置API密钥,运行python main.py输入研究主题
      亮点&小槽点:学术向超专业,省超多查文献时间;但依赖英文资源,中文文献支持一般。
      GitHub链接:https://github.com/assafelovic/gpt-researcher

    9. CrewAI:多智能体“团队管理”框架

    介绍:把智能体变成“团队成员”,你当“老板”给任务,它自动分配角色、设目标、追进度,主打一个省心。
    主要功能

    • 可视化定义角色(如“市场分析师”“文案写手”)、技能和目标
    • 智能体间自动沟通协作,遇到问题会“请示”你
    • 支持集成各种工具(API、数据库、爬虫)扩展能力
      应用场景:内容创作团队、市场调研、项目管理、多步骤任务处理
      部署方法
    1. 安装库:pip install crewai
    2. 写代码定义角色、任务和工具
    3. 启动团队:crew.kickoff() 坐等结果
      亮点&小槽点:团队管理逻辑超清晰,适合复杂协作;但文档较少,新手可能需要多试。
      GitHub链接:https://github.com/joaomdmoura/crewai

    10. AgentQL:智能体+数据库的“数据查询神器”

    介绍:让智能体直接“懂数据库”!输入自然语言问题(比如“查下上月销售额前5的产品”),自动生成SQL并查结果。
    主要功能

    • 自然语言转SQL,不用学代码也能查数据库
    • 支持MySQL、PostgreSQL等主流数据库,兼容性强
    • 自动校验SQL正确性,避免查错数据
      应用场景:数据分析、业务报表生成、非技术人员查数据
      部署方法
    1. 安装:pip install agentql
    2. 连接数据库,配置API密钥
    3. 用自然语言提问:agent.query("你的问题")
      亮点&小槽点:数据查询超方便,非技术党狂喜;但复杂查询可能需要手动调整SQL。
      GitHub链接:https://github.com/AgentQL/agentql

  • AI开源项目推荐清单赶紧收藏,开启你的开源AI宝藏库!

    在AI技术日新月异的今天,你是否也曾面临这些困惑:强大的模型总是闭源收费?想动手实践却不知从何开始?工具繁多却难以找到真正高效可靠的选项?本文正是为你量身打造的“寻宝图”。我们深入GitHub,为你精挑细选了10个涵盖不同领域的顶级开源AI项目

    10个必收藏的AI开源项目 | GitHub高星推荐 | 大模型/图像生成/语音识别/目标检测

    从驱动对话的大语言模型(LLaMA),到创造视觉奇迹的图像生成器(Stable Diffusion);从精准的语音识别工具(Whisper),到实时目标检测系统(YOLOv8);乃至帮助你快速构建应用的开发框架(LangChain, Gradio)——每一款都经过社区验证,兼具创新性与实用性。无论你是开发者、研究者、学生还是技术爱好者,这份清单都将为你提供从学习探索到项目实战的强力支持。现在,就让我们一起解锁这些开源神器,将 cutting-edge 的AI能力,转化为你手中的利刃。

    不管你是想练手、做项目,还是直接薅来干活,这篇清单都能让你直呼“捡到宝”!话不多说,上硬菜~

    1. LLaMA:Meta家的“平民大模型”

    详细介绍:这是Meta(脸书母公司)开源的大语言模型家族,从70亿参数到700亿参数应有尽有,主打一个“轻量能跑、开源免费”。普通人下载后,在消费级显卡上就能微调,不用再眼巴巴看着大厂模型流口水~

    核心特点

    • 尺寸灵活:从7B到70B参数,电脑配置不够也能玩小规格;
    • 微调友好:社区有超多现成工具(比如Alpaca-LoRA),新手也能快速调教;
    • 多语言支持:对中文、英文等主流语言适配都不错。

    应用场景:做聊天机器人、个性化问答系统、内容生成工具,甚至训练垂直领域小模型(比如法律、医疗)都合适。

    项目对比:和闭源的GPT-4比,LLaMA胜在“免费开源”,普通人也能下载微调;但论综合能力,GPT-4还是老大哥。和其他开源大模型(比如Mistral)比,LLaMA的生态更成熟,社区工具多到用不完~

    GitHub地址:https://github.com/facebookresearch/llama

    2. Stable Diffusion:AI绘画界的“扛把子”

    详细介绍:提到AI画图,没人能绕开Stable Diffusion!由Stability AI开源,支持文本生成图像、图像修复、风格迁移,关键是完全免费商用(非商用更没问题),普通电脑装个WebUI就能玩到飞起。

    核心特点

    • 插件狂魔:千种风格模型、LoRA微调、ControlNet控图,玩法多到离谱;
    • 本地化部署:不用蹭在线接口,自己电脑就能生成,隐私性拉满;
    • 社区活跃:每天都有新模型、新教程,小白也能快速出“大作”。

    应用场景:设计插画、海报制作、游戏美术辅助、表情包生成,甚至修复老照片、给线稿上色都超好用。

    项目对比:和Midjourney比,Stable Diffusion胜在“免费开源+本地化”,但出图效率和精细度稍弱;和DALL-E比,它的可控性更强,插件生态甩对手十条街~

    GitHub地址:https://github.com/Stability-AI/stablediffusion

    3. Whisper:OpenAI的“语音魔术师”

    详细介绍:OpenAI开源的语音识别模型,能把语音转文字、文字转语音,还支持99种语言!关键是准确率超高,连带口音的中文、英文都能轻松识别,简直是会议记录、视频字幕的救星。

    核心特点

    • 多任务全能:语音转文字、文字转语音、翻译(比如日语语音直接转中文文字)全拿下;
    • 小模型也能打:哪怕用base(基础)模型,准确率也甩很多商用工具一条街;
    • 开箱即用:Python几行代码就能调用,不用复杂配置。

    应用场景:会议纪要自动生成、视频字幕批量制作、播客转文字、多语言语音翻译工具开发。

    项目对比:和百度语音API比,Whisper胜在“本地部署+免费”,但实时性稍弱;和Google Speech-to-Text比,它对小语种和口音的兼容性更好~

    GitHub地址:https://github.com/openai/whisper

    4. LangChain:LLM应用的“胶水框架”

    详细介绍:想把大模型和数据库、API、知识库结合起来?LangChain就是干这个的!它像“乐高积木”一样,把各种AI组件拼起来,让你轻松开发聊天机器人、问答系统、智能助手,不用从零写代码。

    核心特点

    • 组件丰富:支持连接各种大模型(GPT、LLaMA、Claude)、数据库(MySQL、MongoDB)、搜索引擎;
    • 流程可控:能设计AI的思考步骤(比如“先查资料再回答”),避免大模型“瞎编”;
    • 入门简单:文档超详细,跟着教程走,半小时就能搭个简单的问答工具。

    应用场景:开发企业知识库问答机器人、带记忆功能的聊天助手、基于私有数据的AI分析工具。

    项目对比:和同类框架LlamaIndex比,LangChain更侧重“流程编排”,适合复杂应用;LlamaIndex则强在“数据处理”,新手入门可能更简单~

    GitHub地址:https://github.com/langchain-ai/langchain

    5. YOLOv8:目标检测界的“闪电侠”

    详细介绍:YOLO系列的最新版,主打“又快又准”的目标检测。能瞬间识别图片/视频里的人、车、动物、物体,在普通显卡上就能实时处理视频流,工业级场景都在用它。

    核心特点

    • 速度狂魔:每秒能处理几十帧视频,监控摄像头实时分析毫无压力;
    • 轻量化:小模型能在手机、嵌入式设备上跑,大模型精度堪比专业工具;
    • 开箱即用:预训练模型直接丢图就能识别,微调自己的数据也超简单。

    应用场景:智能监控(比如识别异常行为)、自动驾驶辅助(识别行人车辆)、工业质检(检测产品缺陷)、手机拍照识物APP。

    项目对比:和Faster R-CNN比,YOLOv8速度快10倍以上,精度稍低但够用;和SSD比,它的小目标识别能力更强,适合复杂场景~

    GitHub地址:https://github.com/ultralytics/ultralytics

    6. AutoGPT:AI界的“自律打工人”

    详细介绍:让AI自己“思考、规划、执行”的工具!你只需要给它一个目标(比如“写一篇关于AI开源项目的推文”),它会自动查资料、生成大纲、写内容,甚至能调用其他工具,全程不用你插手。

    核心特点

    • 自主决策:不用一步步指挥,AI自己拆解任务、调整策略;
    • 工具集成:能联网查信息、用搜索引擎、调用API,像个真人助理;
    • 开源免费:虽然还在完善中,但基础功能已经能用,适合尝鲜。

    应用场景:自动写报告、市场调研分析、内容创作辅助、复杂问题拆解(比如“规划一场AI技术分享会”)。

    项目对比:和ChatGPT的“单次对话”比,AutoGPT胜在“多步骤自主执行”,但容易“走偏”;和同类工具BabyAGI比,它的界面更友好,新手更容易上手~

    GitHub地址:https://github.com/Significant-Gravitas/AutoGPT

    7. Diffusers:AI生成的“工具箱”

    详细介绍:Hugging Face开源的生成模型库,里面不仅有Stable Diffusion的核心代码,还有各种图像生成、音频生成、视频生成模型。相当于给开发者搭了个“AI生成工厂”,想调参、改模型?用它就对了。

    核心特点

    • 模型丰富:除了图像生成,还有文生视频(如Video Diffusion)、图像修复等模型;
    • 代码简洁:几行代码就能调用复杂模型,调参改配置超方便;
    • 和Hugging Face生态无缝衔接:能直接用Hub上的模型,不用自己下载。

    应用场景:开发自定义AI绘画工具、研究生成模型原理、二次开发生成模型(比如加新功能)。

    项目对比:和Stable Diffusion的WebUI比,Diffusers更适合“开发者”做二次开发;WebUI则适合“普通用户”直接用~

    GitHub地址:https://github.com/huggingface/diffusers

    8. FastChat:大模型的“聊天服务员”

    详细介绍:想给你的LLaMA、Mistral等开源大模型加个聊天界面?FastChat一键搞定!它支持多模型部署、对话历史管理、API调用,还能搭个网页版聊天框,小白也能快速拥有自己的“ChatGPT”。

    核心特点

    • 多模型兼容:主流开源大模型都能装,切换模型像换手机壁纸一样简单;
    • 部署方便:一条命令启动服务,网页端、API端同时可用;
    • 支持多用户:能当服务器让多人同时用,适合小团队共享。

    应用场景:搭建私有聊天机器人、测试开源大模型效果、给模型加个可视化界面方便演示。

    项目对比:和同类工具vLLM比,FastChat更侧重“聊天交互”,界面更友好;vLLM则强在“高并发部署”,适合大规模使用~

    GitHub地址:https://github.com/lm-sys/FastChat

    9. MONAI:医疗AI的“专业助手”

    详细介绍:专门为医疗影像AI开发的框架,基于PyTorch,集成了各种医学图像预处理、分割、分类工具。医生和开发者用它能快速开发肿瘤检测、器官分割等模型,不用再从零处理DICOM这类特殊格式。

    核心特点

    • 医疗专用:支持DICOM格式、3D影像处理(CT/MRI常用),贴合医疗场景;
    • 模型丰富:内置肿瘤分割、病灶检测等预训练模型,开箱即用;
    • 合规友好:遵循医疗数据隐私规范,适合医院、科研机构使用。

    应用场景:医学影像辅助诊断(比如CT肺结节检测)、病灶分割、医疗图像分析研究。

    项目对比:和普通CV框架(如PyTorch Lightning)比,MONAI胜在“医疗专用工具多”,不用自己写医学图像预处理代码~

    GitHub地址:https://github.com/Project-MONAI/MONAI

    10. Gradio:AI模型的“快速装裱师”

    详细介绍:开发者的“界面救星”!不用学前端,几行Python代码就能给你的AI模型(不管是图像生成、语音识别还是分类模型)加个网页交互界面,支持上传图片、输入文字、实时显示结果,演示、测试超方便。

    核心特点

    • 代码极简:哪怕只会写print,也能搭出能用的界面;
    • 实时更新:改代码不用重启服务,刷新网页就能看效果;
    • 支持多类型输入输出:文字、图片、音频、视频都能搞定。

    应用场景:快速演示AI模型效果、给客户/老板展示项目、收集用户反馈、教学中的模型可视化。

    项目对比:和Streamlit比,Gradio更侧重“快速交互”,界面组件更丰富;Streamlit则强在“数据可视化”,适合展示分析结果~

    GitHub地址:https://github.com/gradio-app/gradio


    以上10个AI开源项目,从大模型、绘画、语音到开发工具,基本覆盖了当下最火的AI应用场景。

  • ComfyUI-GGUF-VLM 结合 llama.cpp GPU 加速:实现图像反推秒级效率

    众所周知,ComfyUI中QwenVL节点通过Qwen3VL模型能够将视觉内容转化为详细的文字描述,它广泛应用于图像反推提示词、智能标注、视觉问答等场景。同时把它接入到最近出的Z-Image模型中反推生图是leepoet感觉最合适的搭配组合,毕竟都是阿里出品,在反推生图方面语义对齐这一块应该会更兼容。事实也是如此,在lee poet不断的测试下,拿来反推的图相似度个人觉得大部份生图与原图能达到70%以上。

    但是Qwen3VL的缺点就是有些慢,对于4060Ti 16G而言,反推大概在1分钟以内。而3060 12G大概在2分钟左右。自从Z-Image前段时间出了之后,Leepoet就一直在用它接入到Z-Image洗图。就拿4060TI16G来讲,反推50秒出图20秒,这样的效率相较于一些专为速度优化的模型(如Florence2、Joy)存在一定差距,导致其在需要高频、批量处理的“洗图”等场景下略显尴尬,但这种效率上的差异本质上源于模型在设计目标上的根本不同,从而使得它们在应用场景上“各有千秋” 。

    但基于Qwen3VL在反推理解能力准确性、丰富度较好的基础上,所以这段时间也就一直这样将就的用着。

    一直到昨天从群友处了解另一个好使的节点ComfyUI-GGUF-VLM。才知道除了GGUF加速模型外还可以使用 llama.cpp对模型进行加速。

    以下是ComfyUI-GGUF-VLM节点的简介:

    ComfyUI 的多模态模型推理插件,专注于 Qwen 系列视觉语言模型,支持多种推理后端。
    
    ## ✨ 核心功能
    
    ### 主要侧重
    
    **🎯 视觉语言模型 (VLM)**
    
    - **Qwen2.5-VL** / **Qwen3-VL** - 主要支持的视觉模型
    - LLaVA、MiniCPM-V 等其他视觉模型
    - 单图分析、多图对比、视频分析
    
    **💬 文本生成模型**
    
    - Qwen3、LLaMA3、DeepSeek-R1、Mistral 等
    - 支持思维模式 (Thinking Mode)
    
    ### 推理方式
    
    - ✅ **GGUF 模式** - 使用 llama-cpp-python 进行量化模型推理
    - ✅ **Transformers 模式** - 使用 HuggingFace Transformers 加载完整模型
    - ✅ **远程 API 模式** - 通过 Ollama、Nexa SDK、OpenAI 兼容 API 调用
    
    ### 主要特性
    
    - ✅ **多推理后端** - GGUF、Transformers、远程 API 灵活切换
    - ✅ **Qwen-VL 优化** - 针对 Qwen 视觉模型的参数优化
    - ✅ **多图分析** - 最多同时分析 6 张图像
    - ✅ **设备优化** - CUDA、MPS、CPU 自动检测
    - ✅ **Ollama 集成** - 无缝对接 Ollama 服务
    
    ## 🤖 支持的模型
    
    ### 🎯 主要支持 (推荐)
    
    **视觉模型:**
    
    - **Qwen2.5-VL** (GGUF / Transformers)
    - **Qwen3-VL** (GGUF / Transformers)
    
    **文本模型:**
    
    - Qwen3、Qwen2.5 (GGUF / Ollama)
    - LLaMA-3.x (GGUF / Ollama)
    
    ### 🔧 其他支持
    
    **视觉模型:** LLaVA、MiniCPM-V、Phi-3-Vision、InternVL 等
    
    **文本模型:** Mistral、DeepSeek-R1、Phi-3、Gemma、Yi 等
    
    > 💡 **推理方式:**
    >
    > - GGUF 格式 → llama-cpp-python 本地推理
    > - Transformers → HuggingFace 模型加载
    > - Ollama/Nexa → 远程 API 调用
    
    ## 📦 安装
    
    ```bash
    cd ComfyUI/custom_nodes
    git clone https://github.com/walke2019/ComfyUI-GGUF-VLM.git
    cd ComfyUI-GGUF-VLM
    pip install -r requirements.txt
    
    # 可选: 安装 Nexa SDK 支持
    pip install nexaai
    ```
    
    ## 🚀 快速开始
    
    ### 本地 GGUF 模式
    
    1. 将 GGUF 模型文件放到 `ComfyUI/models/LLM/GGUF/` 目录
    2. 在 ComfyUI 中添加节点:
       - **Text Model Loader** - 加载模型
       - **Text Generation** - 生成文本
    
    ### 远程 API 模式
    
    1. 启动 API 服务 (Nexa/Ollama):
    
       ```bash
       nexa serve  # 或 ollama serve
       ```
    
    2. 在 ComfyUI 中添加节点:
    
       - **Remote API Config** - 配置 API 地址
       - **Remote Text Generation** - 生成文本
    
    ## 📋 可用节点
    
    ### 文本生成节点
    
    - **Text Model Loader** - 加载本地 GGUF 模型
    - **Text Generation** - 文本生成
    - **Remote API Config** - 远程 API 配置
    - **Remote Text Generation** - 远程文本生成
    
    ### 视觉分析节点
    
    - **Vision Model Loader (GGUF)** - 加载 GGUF 视觉模型
    - **Vision Model Loader (Transformers)** - 加载 Transformers 模型
    - **Vision Analysis** - 单图分析
    - **Multi-Image Analysis** - 多图对比分析
    
    ### 🆕 工具节点
    
    - **Memory Manager (GGUF)** - 显存/内存管理工具
      - 清理已加载的模型
      - 强制垃圾回收
      - 清理GPU缓存
      - 显示显存使用情况
    
    ### 工具节点
    
    - **System Prompt Config** - 系统提示词配置
    - **Model Manager** - 模型管理器
    
    ## 💭 思维模式
    
    支持 DeepSeek-R1、Qwen3-Thinking 等模型的思维过程提取。
    
    启用 `enable_thinking` 参数后,会自动提取并分离思维过程和最终答案。
    
    ## 📁 项目结构
    
    ```
    ComfyUI-GGUF-VLM/
    ├── config/          # 配置文件
    ├── core/            # 核心推理引擎
    │   └── inference/   # 多后端推理实现
    ├── nodes/           # ComfyUI 节点定义
    ├── utils/           # 工具函数
    └── web/             # 前端扩展
    ```
    
    ## 

    节点github地址:https://github.com/walke2019/ComfyUI-GGUF-VLM

    安装好节点后,可以先通过启动安装一次该节点的依赖、库。然后再下载GGUF模型:

    模型地址:https://huggingface.co/mradermacher/Qwen2.5-VL-7B-NSFW-Caption-V3-abliterated-GGUF/tree/main?not-for-all-audiences=true

    放到对应的模型文件夹:

    .\ComfyUI\models\text_encoders\qwenclip

    .\ComfyUI\models\LLM\GGUF

    这里建议配置好的可以用以下这两个模型,因为官方的推是

    GGUFQ6_K6.4very good quality
    GGUFQ8_08.2fast, best quality

    以上基本上就已经安装好节点,并把模型下载好并可进入使用了。但是在这种情况下只能通过CPU进行推理(在速度方面跟QWEN3VL其实并没有太大的区别,有区别的就是这些模型是破限的)。并没有使用llama-cpp-python

    可以这么说,同样为3060 12G的显卡,ComfyUI-QwenVL节点反推一张图的时间在2分左右,而ComfyUI-GGUF-VLM通过llama-cpp-python调用GPU加速可以让反推时间缩短到几秒钟。

    那么什么是llama-cpp-python

    llama-cpp-python​ 是 llama.cpp 的 Python 绑定库,提供高性能的本地大语言模型推理能力,支持 CPU、CUDA GPU、Metal 等多种硬件加速,是部署本地 LLM 应用的常用工具。支持 CPU、CUDA(NVIDIA GPU)、Metal(Apple Silicon)、OpenCL 等多种后端的高性能推理

    话虽如此,正常使用ComfyUI-GGUF-VLM这个节点,在没有安装llama-cpp-python这个库的情况反推是不支持GPU的,但是要想让反推达到秒级的速度,就要先准备一些环境。

    步骤前瞻:

    先安装好节点并下载模型->安装Visual Studio->配置MSVC系统变量->安装配置对应版本的CUDA->通过CUDA调用MSVC构建llama-cpp-python

    1.安装Visual Studio,并配置好MSVC系统变量。

    lee poet之前写过一个怎么配置环境篇:加载ComfyUI出现WARNING: Failed to find MSVC解决方案,配置好记得重启。。

    2.验证cl,rc,link。如果有返回路径说明已经配置好。

    3.安装CUDA及cudnn,并配置CUDA环境变量。

    因为lee poet所使用的comfyui环境是的pytorch version: 2.5.1+cu124

    所以要下载对应的cuda版本,我下载的是CUDA Toolkit 12.4CUDA Toolkit 12.4 Downloads Installer for Windows 10 x86_64

    同时再下载cudnn,下载地址:https://developer.nvidia.com/rdp/cudnn-archive,找到对应的CUDA版本号

    Download cuDNN v8.9.7 (December 5th, 2023), for CUDA 12.x

    下载好用,先进行cuda的安装,*如果之前您有安装其它低版本的CUDA,在不使用的情况下可以先通过卸载程序的控制面板里先卸载。再进行安装:

    OK

    以上安装都说有报错,重启电脑再继续安装即可。安装完后,我们先配置环境变量。

    添加CUDA的环境变量(如果已经存在,则不需要重复添加)

    配置好后,解压cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip,可以看到三个文件夹

    把红框圈住的地方COPY到刚刚安装好的CUDA的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4这个文件夹内

    继续给cuDNN添加相应的环境变量

    #leepoet的CUDA及cuDNN的环境变量如下:
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\include
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\lib
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\libnvvp

    配置好环境变量后,验证:nvcc -V

    找到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\extras\visual_studio_integration\MSBuildExtentions里的这四个文件复制

    粘贴到C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\BuildCustomizations这个目录下

    以上就算是把llama-cpp-python安装的环境配置好了。下面再通过虚拟环境构建安装llama-cpp-python

    打开启动器命令提示符,可以通过这个直接到这个整合包的虚拟环境。

    可以看到红框框住的这个标识,实际上就是这个整合包的虚拟环境的标识

    set CMAKE_ARGS=-DGGML_CUDA=on
    python.exe -m pip install llama-cpp-python --force-reinstall --no-cache-dir
    命令/参数解释
    set CMAKE_ARGS="-DGGML_CUDA=on"设置一个名为 CMAKE_ARGS的环境变量,其值为 -DGGML_CUDA=on。这个变量会传递给后续的编译过程,指示构建系统启用对CUDA的支持。
    python.exe -m pip install使用Python模块方式运行pip进行安装,这通常比直接运行pip命令更可靠。
    llama-cpp-python要安装的Python包名称,它是对C++库llama.cpp的Python封装。
    --force-reinstall强制重新安装该包及其所有依赖。如果已存在安装版本,会先卸载再安装,确保是最新编译的版本。
    --no-cache-dir禁用pip的缓存。这能确保pip不会使用之前下载或编译的缓存文件,而是从头开始获取源码并进行编译。

    这条命令组合起来的效果是:强制pip忽略缓存,重新从源码编译并安装支持CUDA的llama-cpp-python。通过pip install llama-cpp-python安装的是仅支持CPU的版本。通过从源码编译并设置CMAKE_ARGS,可以解锁GPU加速功能,在处理大语言模型时能获得数倍的速度提升。

    执行命令后

    先是下载库从源码编译,可能需要十几到二十分钟。

    可以看到已经安装成功了。*安装后完有其它库的冲突能解决就自己解决,LeePoet是选择性忽略,主打一个能用就行。

    后面就是关掉启动器,重新启动。它会自己解析并检验各种依赖。

    启动完进入UI后,这次从反推到Z-image生图768x1536px的图片大概在40秒左右了。

    李诗人这次使用的是家用电脑配置相对一般,但是能有这个速度还是相对满意的。

    相关文章:Custom_Nodes篇:ComfyUI-QwenVL反推节点

    Custom_Nodes篇:ComfyUI-QwenVL3-image反推节点

  • NAS玩家必备:Lucky实现域名解析、自动证书与安全反代全攻略

    Lucky是@古大羊开发的一款家庭公网利器,专为NAS、软路由等内网设备打造的全能网络工具,集成动态域名解析(DDNS)、反向代理、SSL证书自动续签、端口转发、内网穿透等核心功能,支持IPv4/IPv6双栈访问,是2025年NAS玩家必备的免费实用神器。

    对于国内的家庭网络环境,Lucky尤其适合搭建在 NAS(如威联通 QNAP)、软路由或轻量级 Linux 服务器上,用于实现外网访问(内网穿透和反向代理)家庭设备或服务,简单易用稳定也基本不需要怎么折腾。

     前言 

    多家DNS服务商(阿里云、腾讯云、Cloudflare等),可自动将动态公网IP与固定域名绑定,实现域名访问NAS。配置时需获取域名服务商的API密钥(AccessKey ID和Secret),填写主域名和泛域名(如example.com和*.example.com),Lucky会自动同步解析记录,

    通过ACME协议自动申请Let’s Encrypt免费SSL证书,支持泛域名证书,证书到期前约36天自动续签,无需手动操作。配置时选择ACME方式,填写域名列表和DNS服务商Token,开启DNS查询强制IPv4和仅使用TCP通道即可。

    支持HTTP/HTTPS反向代理,可将不同服务统一到单一入口端口,通过二级域名区分访问(如movie.example.com → Jellyfin服务)。监听端口可自定义(如443、8443等),需在路由器中设置端口转发。支持TLS加密,可隐藏真实端口,提升安全性。

    配置流程

    1. 设置DDNS:添加DDNS任务,选择服务商并填写API密钥,配置域名解析
    2. 申请SSL证书:选择ACME方式,关联DNS服务商,申请泛域名证书
    3. 配置反向代理:添加Web服务规则,设置监听端口和TLS,添加子规则指定前端域名和后端服务地址
    4. 端口转发:在路由器中将监听端口转发到NAS内网IP

    部署平台:威联通NAS TS-673A

    Lucky版本:2.17.3 linux(x86_64)

    部署方式:Docker Compose

    网络状况:默认已经折腾好公网IP

    另外还需要我们提前准备Token,这个可从域名托管商处获得,我们以DNSPod为例。

    将ID和Token复制下来备用。

     部署方式 

    打开威联通的Container Station,创建新的应用程序。部署代码如下:

    services:

       lucky:
          image: gdy666/lucky
          container_name: lucky
          restart: always
          volumes:
             -'/share/Container/lucky:/goodluck'# 这步必须做,否则重启配置会消失,可直接照抄配置。
          network_mode: host
    # host模式, 同时支持IPv4/IPv6, Liunx系统推荐
    # 桥接模式, 只支持IPv4,windows 不推荐使用docker版本
    # 我仍然不建议使用默认的桥接模式,如作者所说很容易出问题,已经试验过

     修改基础配置 

    内网环境下,输入NAS_IP:16601即可访问管理界面。默认的账户密码为 666/666

    但如果像我一样,远程折腾,可以利用威联通自带的Browser Station。也可将16601端口通过路由器转发到公网,通过外网访问(公网IP:16601)进行配置。

    从版本2.13.9开始,在默认配置中,外网访问开关处于关闭状态。然而,在 lucky_base.lkcf 配置初始化后的十分钟内,系统允许外网访问。如果在这十分钟内执行了配置保存操作,则外网访问开关的设置将优先生效。如果错过了这个时间,您需要通过删除 lucky_base.lkcf 配置文件并重启 Lucky 进程的方式,使 lucky_base.lkcf 配置再次初始化。

    登入后如下图所示进行设置,除了登陆验证修改默认账号密码外,其他凭大家需求。

    安全入口部分为了安全考虑能改则改,比如若修改为/ydxian,则内外网无论那个想要访问Lucky的登陆面板,最后都要在完整的访问地址后加上/ydxian。如果不加,会得到如下结果。

     动态域名(DDNS) 

    这里需要使用到上文域名托管商所获的Token。

    左侧栏第三项「动态域名」,点击「添加任务」。

    选择托管商,我这里选择的是DnspodCN(如果你的DNS服务商不在列表当中,则使用万能的自定义Callback模式),粘贴ID与Token。根据你的网络情况选择启用同步类型(IPv4或IPv6),我的为IPv4公网。

    接着下拉界面,点击「添加同步记录」。

    记录栏中先填写主域名(二级域名),回车换到下一行,再填写通配符域名(所有三级子域名),如果你有更多需求则回车另起一行再继续添加即可。

    点击「添加任务」,Lucky就会自动保存并自动进行同步。成功后的界面如下。

     SSL/TLS证书 

    这里依然需要使用到上文域名托管商所获的Token。

    左侧栏点击「SSL/TLS证书」,接着点击「添加证书」。

    对证书进行备注,添加方式选择ACEM,ACME类型证书会在到期前约36天自动续签。证书颁发机构选择Let’s Encrypt。验证方式要与上文动态域名解析的保持一致。粘贴ID和Token,补充域名列表,这里同样与上文一致。更多设置勾选DNS查询强制IPv4和DNS查询仅使用TCP。搞定后直接点击「添加」。

    如果你有其他证书需求,也可自行上传或指定证书路径。

    稍等一会儿,成功的结果界面如下。

     Web服务 

    这里开始配置反向代理相关。

    左侧栏点击「Web服务」,点击「添加Web服务规则」。

    对服务规则进行命名。监听类型同样根据实际网络情况选择。监听端口自定(我预设为7086,但IPv6可忽略这项),要是未被占用的可用端口,后面还要对这个端口进行转发,可惜国内IPv4的443基本不能用。我们已然申请证书要通过HTTPS访问,TLS需要开启。

    接着是默认规则,选择关闭链接,会对下面的子规则生效。就是如果访问的地址与子规则的配置不符,不会返回任何响应(如 403、404、503 等),而是直接丢弃请求。这里其实完全没必要管,官方文档也有提示。

    最后添加子规则。现在的Lucky支持批量修改前端域名,如果我们实行域名年抛策略会非常方便。

    以上一篇部署的TR下载器为例,服务类型选择反向代理。前端地址填写纯粹的域名,不要带杂七杂八内容,域名前缀自定义即可。后端地址则要填写内网完整的访问地址,如下图所示。

    确认无误后,右下角点击「添加/修改子规则」即可。如下图的红色框标注部分便是以后外网访问TR的地址。

    最后还差一步,就是IPv4用户需要对监听端口进行转发。

    来到路由器,设置端口转发/映射,内网地址填写为NAS内网IP,端口则为上文设置的监听端口,最后保存即可。

    至此已经实现家庭NAS外网访问方案。后续也可以将Lucky本身以及其他服务都加入进去。

     情况补充 

    当时写Lucky流程试验后碰到的问题:

    在手机浏览器输入域名+监听端口时,会连接失败,必须要手动再补上https://。

    因此我们要添加 HTTP → HTTPS 的自动跳转规则。

    继续点击「添加Web服务规则」。

    配置如下。

    监听端口和前面的保持一致。TLS不要开。

    接着下拉界面编辑默认规则。

    服务类型选择重定向。

    默认目标地址填写https://{host}:{port}。

    修改/保存即可。

    Lucky特别适合家庭NAS环境,可将Jellyfin、Emby、qBittorrent等各类服务通过二级域名统一访问,实现”一个域名+N个服务”的便捷管理。相比传统方案(DDNS-GO + Nginx Proxy Manager),Lucky将多个工具功能整合到一个界面,操作更简单,配置更直观,适合新手玩家快速上手。

    安全建议:首次使用后务必修改默认密码,设置安全入口路径,关闭外网访问开关,定期备份配置文件。对于公网IPv4用户,建议在路由器中设置端口转发;IPv6用户需确保光猫和路由器开启IPv6桥接模式。

  • “魔改”it-tools前端界面与Docker镜像构建实录

    “魔改”it-tools前端界面与Docker镜像构建实录

    “都是自己人,咱就捞干的说。”兄弟们,不知道你们有没有这种体验:网上找个JSON格式化、密码生成之类的小工具,要么广告满天飞,要么就得扫码关注,用起来那叫一个憋屈。反正李哥我是受够了!这不,就在Github上发现了这个叫 it-tools​ 的宝贝,一个集成了50多种开发者工具的纯前端网站,干净、免费、即开即用。官方提供了Docker镜像,一键部署是爽,但默认全是英文界面,Logo、标题啥的也都是人家的,用着总感觉是“寄人篱下”,不够得劲。

    所以,李哥今儿个要干票啥?咱不满足于“能用”,咱要的是“好用”,而且是“完全属于自己”的好用!这篇笔记,就手把手带你“扒掉”it-tools的官方外衣,给它换上咱自己的“皮肤”。从怎么克隆源码、修改标题Logo,到如何亲手构建一个写着咱自己大名的Docker镜像,最后部署上线。整个过程,说白了就是一次轻量级的“二次开发”。你放心,不需要你有多深的前端功底,跟着李哥的步骤,改改文字、换换图片,就跟给WordPress换个主题差不多简单。但做完之后,成就感绝对拉满——访问自己服务器上那个完全定制化的工具站,那感觉,就跟开盲盒开出了隐藏款一样爽!“工具嘛,就得驯服得贴贴心心,用起来才顺手。”​ 废话不多说,开整!

    一、核心思路

    it-tools是纯前端项目(Vue.js框架),所有界面内容都在源码的src/目录中。修改流程为: 克隆源码 → 修改前端文件 → 本地构建Docker镜像 → 运行自定义镜像

    二、详细步骤

    1. 准备环境

    确保安装Git、Node.js(16+)、Docker:

    # 安装依赖(Ubuntu示例)
    sudo apt install -y git nodejs npm docker.io

    2. 克隆源码并修改内容

    # 克隆仓库
    git clone https://github.com/CorentinTh/it-tools.git
    cd it-tools

    # 安装前端依赖
    npm install

    根据红框位置修改对应文件(以常见修改为例):

    修改内容文件路径示例操作
    顶部标题/Logosrc/App.vue搜索<header>标签,替换<h1>内容或<img>的src属性(Logo建议用Base64编码)
    工具分类名称src/tools/index.ts修改categories数组中的name字段(如将”Converter”改为”格式转换”)
    工具卡片名称/描述src/tools/[工具类型]/[工具名].ts如修改JSON格式化工具:src/tools/formatters/json-formatter.ts中的name和description
    页脚版权信息src/components/layout/Footer.vue修改<footer>标签内的文本

    修改后可本地预览效果:npm run dev(访问http://localhost:5173)。

    3. 构建自定义Docker镜像

    修改完成后,用官方Dockerfile构建镜像:

    # 在源码目录执行构建(约5分钟,依赖网络环境)
    docker build -t my-it-tools:custom . # 镜像名自定义,如my-it-tools:custom

    构建成功后,本地镜像列表会新增my-it-tools:custom。

    4. 运行自定义镜像

    用修改后的镜像启动容器,命令与官方类似:

    # 先停止并删除旧容器(如有)
    docker stop it-tools && docker rm it-tools

    # 启动自定义镜像
    docker run -d \
    --name it-tools \
    --restart unless-stopped \
    -p 9580:80 \ # 主机端口9580,可自定义
    my-it-tools:custom # 使用本地构建的镜像名

    三、验证与更新

    1. 访问验证:浏览器打开http://IP:9580,确认红框内容已修改。
    2. 后续更新:若官方源码更新,需重新克隆并合并修改(git pull),再重复构建步骤。

    四、注意事项

    1. 不建议直接修改容器内文件:通过docker exec进入容器修改文件会随容器删除丢失,且无法同步到新镜像。
    2. 保留官方镜像:自定义镜像命名避免与官方corentinth/it-tools冲突,便于区分。
    3. 复杂修改需前端基础:如调整样式需修改src/assets/styles/下的CSS文件,或通过src/main.ts注入全局样式。

    这种方式本质是“二次开发”,适合需要深度定制的场景。若仅需简单修改(如标题),10分钟即可完成;若涉及工具功能逻辑调整,需参考Vue.js和项目的开发文档。修改后的镜像可推送到私有仓库,方便多服务器部署。


    进阶容器持久化:

    通过Docker安装it-tools(开发者在线工具集)仅需三步,官方提供了两种镜像源选择,适用于Linux、Windows和macOS系统。以下是基于官方文档的完整部署指南。

    一、环境准备

    首先确保已安装Docker和Docker Compose。验证命令:

    docker -v          # 需显示20.10+版本
    docker compose version # 需显示v2.0+版本

    未安装可参考Docker官方文档,或使用简化脚本(Ubuntu示例):

    sudo apt update && sudo apt install -y docker.io docker-compose
    sudo systemctl enable docker --now

    二、核心部署步骤

    选项1:从Docker Hub拉取镜像(推荐)

    官方镜像体积约150MB,包含所有工具功能。执行以下命令启动容器:

    docker run -d \
    --name it-tools \         # 容器名称
    --restart unless-stopped \ # 异常退出时自动重启
    -p 8080:80 \               # 端口映射(主机端口:容器端口)
    corentinth/it-tools:latest # 镜像名称:版本标签
    • 参数说明:-d后台运行,-p 8080:80将主机8080端口映射到容器80端口(可修改主机端口避免冲突,如-p 9000:80)。

    选项2:从GitHub Packages拉取镜像

    若Docker Hub访问缓慢,可使用GitHub容器仓库:

    docker run -d \
    --name it-tools \
    --restart unless-stopped \
    -p 8080:80 \
    ghcr.io/corentinth/it-tools:latest

    三、验证与访问

    检查容器状态

      docker ps | grep it-tools  # 应显示STATUS为Up
      docker logs it-tools       # 查看启动日志,无报错即可

      访问工具网站: 在浏览器输入 http://服务器IP:8080(本地部署用http://localhost:8080),即可看到it-tools的工具列表,包含Base64编码、JSON格式化、正则表达式测试等50+开发者工具。

        四、进阶配置(可选)

        1. 数据持久化(针对未来版本)

        当前官方镜像未提供持久化目录(工具数据保存在浏览器本地存储),若需保存配置,可关注项目后续更新或通过Docker卷挂载:

        docker run -d \
        --name it-tools \
        --restart unless-stopped \
        -p 8080:80 \
        -v ./it-tools-data:/app/data \ # 挂载本地目录(需提前创建)
        corentinth/it-tools:latest

        2. HTTPS配置(生产环境)

        配合Nginx反向代理实现SSL加密:

        安装Nginx并配置虚拟主机,示例配置(/etc/nginx/sites-available/it-tools):

          server {
              listen 443 ssl;
              server_name tools.yourdomain.com;
             
              ssl_certificate /path/to/cert.pem;
              ssl_certificate_key /path/to/key.pem;
             
              location / {
                proxy_pass http://localhost:8080;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
              }
            }

          重启Nginx:sudo systemctl restart nginx。

            五、更新与卸载

            • 更新镜像
            docker stop it-tools && docker rm it-tools
            docker pull corentinth/it-tools:latest # 拉取最新版本
            # 重新执行docker run命令
            • 完全卸载
            docker stop it-tools && docker rm it-tools  # 停止并删除容器
            docker rmi corentinth/it-tools:latest       # 删除镜像

            通过Docker部署的it-tools保持与官方同步更新,单容器设计使其资源占用极低( idle状态内存<50MB),适合个人开发者或小型团队内部部署。若需自定义工具或贡献代码,可参考项目README中的开发指南。访问时遇到端口冲突,只需修改-p参数的主机端口即可快速解决。


            其它说明:

            sudo mkdir -p /www/wwwroot/it-tools-data && sudo chmod 777 /www/wwwroot/it-tools-data  #先手动创建主机目录(避免权限问题)
            docker run -d \
              --name it-tools \
              --restart unless-stopped \
              -p 9090:80 \  # 主机端口9090 → 容器端口80(正确映射)
              -v /www/wwwroot/it-tools-data:/data \  # 绝对路径挂载(当前无实际作用)
              corentinth/it-tools:latest
            docker exec -it it-tools /bin/sh   #进入容器
            docker ps | grep it-tools   #查看容器运行状态(应显示 Up X分钟)
            docker logs it-tools   #若状态异常,查看错误日志
            docker stop it-tools && docker rm it-tools     #通过容器名称删除
            docker ps -a | grep it-tools  # 找到名为"it-tools"的容器
            docker images | grep it-tools  #  查看it-tools镜像ID
            docker rmi def67890  #删除镜像(替换def67890为实际镜像ID)
            docker images | grep it-tools # 应无输出(镜像已删除)
            ls -la /www/wwwroot/it-tools  #先检查目录内容(避免误删)
            sudo rm -rf /www/wwwroot/it-tools   #确认无重要文件后删除

            通过GIT项目安装:

            IT-TOOLS如果需要定制LOGO修改前端内容最好是通过GIT在本地修改后再用DOCKER进行构建再次部署。因为你直接部署的话就不能自定义一些自己的内容

            sudo mkdir -p /www/wwwroot/it-tools-dev && sudo chmod 777 /www/wwwroot/it-tools-dev
            cd /www/wwwroot/it-tools-dev
            git clone https://github.com/CorentinTh/it-tools.git
            cd it-tools
            apt install npm
            npm install

            构建DOCKER镜像:

            docker build -t leepoet-tools:custom .

            如果遇到问题解决方案:

            # 1. 删除错误的 Dockerfile
            rm Dockerfile
            
            # 2. 创建正确的 Dockerfile
            cat > Dockerfile << 'EOF'
            FROM node:20.19.5-alpine AS builder
            WORKDIR /app
            COPY package.json pnpm-lock.yaml ./
            RUN npm install -g pnpm && pnpm install
            COPY . .
            ENV NODE_OPTIONS="--max_old_space_size=8192"
            RUN npx vite build
            FROM nginx:alpine
            COPY --from=builder /app/dist /usr/share/nginx/html
            EXPOSE 80
            CMD ["nginx", "-g", "daemon off;"]
            EOF
            
            # 3. 验证文件内容
            cat Dockerfile
            
            # 4. 构建镜像
            docker build -t leepoet-tools:custom .
            
            # 5. 运行容器
            docker run -d -p 3000:80 --name it-tools-container leepoet-tools:custom

            后续管理指令:

            # 停止容器
            docker stop it-tools-container
            
            # 启动容器
            docker start it-tools-container
            
            # 重启容器
            docker restart it-tools-container
            
            # 进入容器内部(调试用)
            docker exec -it it-tools-container sh
            
            # 删除容器
            docker rm it-tools-container
            
            # 查看容器详细信息
            docker inspect it-tools-container
            
            # 查看容器使用的资源
            docker stats it-tools-container

            构建完镜像后打包:

            使用镜像保存/加载(适合内网环境)

            # 保存镜像为文件
            docker save -o leepoet-tools.tar leepoet-tools:custom

            传输到服务器

            # 使用 scp 传输(替换为你的服务器信息)
            scp leepoet-tools.tar root@你的服务器IP:/tmp/

            在服务器上加载运行

            # 在服务器上加载镜像
            docker load -i /tmp/leepoet-tools.tar
            
            # 运行容器
            docker run -d -p 3000:80 --name it-tools-container leepoet-tools:custom
            
            # 停止并删除现有容器(如果存在)
            docker stop it-tools-container
            docker rm it-tools-container
            
              # 假设容器内网站根目录是/usr/share/nginx/html
            # 重新运行容器并挂载目录
            docker run -d \
              -p 3000:80 \
              --name it-tools-container \
              -v /www/wwwroot/tools.leepoet.cn:/usr/share/nginx/html \
              leepoet-tools:custom


          1. 立省万元!李哥教你如何使用translate.js实现WP菜单的JavaScript翻译

            立省万元!李哥教你如何使用translate.js实现WP菜单的JavaScript翻译

            你是不是也在为WordPress网站加个多语言菜单而发愁?一想到那些名声在外的翻译插件,脑海里

            是不是立刻浮现出每年上千元的续费账单?

            是不是受够了那个一旦启用就让网站速度变慢的“庞然大物”?

            是不是在面对复杂的设置界面时,感觉像是在操作一架航天飞机,而你只是想骑个自行车出门买个菜?

            兄弟,我懂你。这种感觉,就像是只想拧一颗螺丝,却被迫买下整个五金店。别再忍受了!今天,李哥(LeePoet.cn)就带你彻底摆脱这种“高消费、低体验”的困境。这篇文章,将为你揭开一条“技术平权”之路。

            我们不用求助于任何重型插件,不花一分钱授权费,仅凭几行简洁的JavaScript代码,就能为你的WordPress菜单实现流畅、优雅的多语言切换功能。我们要用的神器,就是轻量级前端翻译库——translate.js

            学完这一招,你不仅能立刻省下未来几年上万元的插件费用,更能收获一个速度更快、完全受你掌控的网站。从此,插件更新、兼容性冲突、账单提醒,这些都与你无关。这不仅是省钱的技巧,更是一种技术的自由。跟着我的步骤,让我们一起对臃肿的翻译插件说“不”,亲手打造属于你自己的极速多语言方案!

            接下来,我们将从第一步“准备translate.js库文件”开始……

            1.先把translate.js上传到服务器,本地调用比https://cdn.staticfile.net/translate.js/3.18.66/translate.js速度更快。

            2.安装插入代码插件,如 “Header and Footer Scripts” 或 “Insert Headers and Footers”。把translate.js的JavaScript代码放到footer或才head里。

            <script src="https://www.你的域名及JS路径.cn/leepoetjs/translate.js"></script> 
            
            <script>
            translate.selectLanguageTag.languages = 'english,chinese_simplified,japanese,spanish,deutsch,french,korean';
            translate.request.listener.delayExecuteTime = 500;
            translate.service.use('client.edge'); //设置机器翻译服务通道
            translate.listener.start(); //开启页面元素动态监控
            translate.selectLanguageTag.show = false;//false隐藏选择框,true打开
            translate.execute();//完成翻译初始化,进行翻译
            </script>

            3.通过函数文件添加需要调用的translate.js,在主题的functions.php文件中添加:

            //调用翻译translate.js
            function add_language_switcher_script() {
                ?>
                <script>
            //添加switchToEnglish()英文函数
                function switchToEnglish() {
                    if (typeof translate !== 'undefined' && typeof translate.changeLanguage === 'function') {
                        translate.changeLanguage('english');
                    }
                }
            //添加switchToChineseSimplified()中文函数
                function switchTochinese_simplified() {
                    if (typeof translate !== 'undefined' && typeof translate.changeLanguage === 'function') {
                        translate.changeLanguage('chinese_simplified');
                    }
                }		
                </script>
                <?php
            }
            add_action('wp_head', 'add_language_switcher_script');

            2.进入WordPress后台 → 外观​ → 菜单,点击创建新菜单或选择现有菜单,在左侧自定义链接部分添加:

            点击添加到菜单,在菜单编辑器中,点击该菜单项展开设置

            • URL:#
            • 链接文字:English或您想要的文字
            • URL字段中替换为:javascript:translate.changeLanguage(‘english’);
            #导航标签字段
            <li href="#" onclick="javascript:switchToEnglish(); return false;">English</li>
            <li href="#" onclick="javascript:switchTochinese_simplified(); return false;">简体中文</li>

            然后保存菜单。*如果需要其它语言,可以继续在主题文件functions.php里继续填加调用。

            然后刷新前台基本搞定。

            相关文章:translate.js:两行代码实现网页全自动多语言内容动态翻译

            现在的WordPress多语言解决方案,尤其是主流插件,确实让人又爱又恨,痛苦主要集中在以下几点:

            沉重的年度费用,如同“数字税”,像WPML、Polylang Premium这类插件,需要每年支付高昂的授权费来获得更新和支持。对于一个长期运营的网站来说,这成了一笔沉重的、持续的固定支出。网站不赚钱时,这笔钱尤其肉疼;网站赚钱了,又会觉得为什么我要一直为这个“基础设施”付钱?感觉就像被“套牢”了。

            “全家桶”式捆绑,资源浪费严重,大型插件功能大而全,但你可能只需要其中最核心的菜单和静态内容翻译功能。它却强行塞给你一整套复杂的翻译管理系统、字符串翻译、媒体翻译等。这导致插件异常臃肿,严重拖慢网站速度,为了一个“点”的需求,背上了整个“面”的负担。

            架构复杂,学习成本高,配置过程繁琐,需要在不同标签页之间来回切换,理解“字符串”、“翻译编辑器”等专业概念。对于只是想给网站加个中英文菜单的博主来说,学习成本太高,一不小心就配错了。

            与主题/插件兼容性噩梦,一旦主题更新或更换,或者安装了新的插件,兼容性问题就可能出现,导致翻译失效或页面错乱。排查问题非常困难,往往需要深度技术知识。

            机器翻译API的隐藏成本,一些方案鼓励你接入Google Translate或DeepL的API来自动翻译。初期感觉方便,但随着内容增长,API调用的费用会悄无声息地累积,成为一个不可预测的成本黑洞。

            总结来说,当下的痛苦是:我们只是想要一个“轻量、快速、便宜、能控制”的翻译方案,尤其是针对菜单和前端静态内容。但市场给出的答案往往是“沉重、昂贵、复杂、受制于人”的庞然大物。

          2. translate.js:两行代码实现网页全自动多语言内容动态翻译

            translate.js:两行代码实现网页全自动多语言内容动态翻译

            在全球化日益深入的今天,为网站提供多语言支持已成为提升用户体验和扩大受众范围的关键。传统多语言解决方案通常需要复杂的配置、大量的翻译文件以及繁琐的代码修改,而translate.js的出现彻底改变了这一现状。

            寻找简单高效的网站翻译方案?translate.js 仅用两行JavaScript代码,即可为你的网站添加全自动多语言翻译功能,支持动态内容翻译,是WordPress插件和Google API的轻量级替代方案。

            什么是translate.js?

            translate.js是一款创新的开源JavaScript库,专注于网页多语言切换。它采用MIT开源协议,完全免费商用,只需两行核心代码即可实现HTML页面的全自动翻译,无需修改页面结构,无需语言配置文件,无需API Key,同时对SEO友好。

            核心优势

            1. 极简接入:无需复杂配置,快速集成
            2. 全自动翻译:智能识别页面内容并自动翻译
            3. 无侵入设计:对现有代码几乎零影响
            4. SEO友好:保持搜索引擎优化效果
            5. 开源免费:MIT协议,商业应用无忧

            translate.js是一个免费、开源的翻译工具库,支持多种语言之间的互译,如中英文、法文、日语、韩语、德语等。它避免了API调用次数的限制和费用问题,且使用方法简单,方便快捷。

            普通网页快速测试示例

            1. 随便打开一个网页
            2. F12(审查元素)
            3. 在控制台页签下粘贴入以下代码: 
              var head= document.getElementsByTagName('head')[0];
             var script= document.createElement('script');
             script.type= 'text/javascript';
             script.src= 'https://res.zvo.cn/translate/inspector_v2.js';
             head.appendChild(script);

            普通网页快速接入示例

            <script src="https://cdn.staticfile.net/translate.js/3.18.66/translate.js"></script>
            <script>
            translate.service.use('client.edge'); //设置机器翻译服务通道,相关说明参考 http://translate.zvo.cn/545867.html
            translate.listener.start(); //开启页面元素动态监控,js改变的内容也会被翻译,参考文档: http://translate.zvo.cn/4067.html
            translate.execute();//完成翻译初始化,进行翻译
            </script>

            在网页最末尾, </html> 之前,加入以下代码,一般在页面的最底部,就会出现选择语言的 select 切换标签。添加上述代码后,页面底部将自动出现语言选择下拉框,用户可以轻松切换界面语言。    详细解说

            工作原理

            translate.js的工作原理十分巧妙:

            1. 内容扫描:对页面所有DOM元素进行扫描,识别可翻译文本
            2. 文本抽离:提取需要翻译的文本内容
            3. API翻译:通过配置的翻译服务通道进行翻译
            4. 结果渲染:将翻译结果重新赋予对应元素

            整个过程自动完成,无需人工干预。

            高级功能与微调

            虽然基础使用极其简单,但translate.js提供了丰富的微调指令,满足各种复杂需求:

            语言控制

            translate.changeLanguage('english'); // 主动切换语言
            translate.language.setLocal('chinese_simplified'); // 设置本地语种
            translate.language.getCurrent(); // 获取当前显示语种

            内容过滤

            translate.ignore.text.push('你好'); // 忽略特定文本
            translate.ignore.id.push('test'); // 忽略特定ID元素
            translate.ignore.class.push('test'); // 忽略特定class元素

            高级配置

            translate.setAutoDiscriminateLocalLanguage(); // 自动识别用户语种
            translate.language.setUrlParamControl(); // URL参数控制显示语种
            translate.selectionTranslate.start(); // 启用划词翻译

            除了基础翻译功能,translate.js还提供了一系列高级特性,例如自动识别并翻译图片中的文字内容,监控AJAX请求,实时翻译动态加载的内容,自定义翻译术语,确保专业词汇准确一致,且监控翻译性能,优化用户体验。

            最佳实践建议

            1. 自托管JS文件:将translate.js下载到自己的服务器,确保稳定加载
            2. 合理配置缓存:根据业务特点设置合适的缓存策略
            3. 选择性翻译:对不需要翻译的内容进行排除,提升性能
            4. 渐进式实施:先在小范围测试,再全面推广

            translate.js重新定义了网页多语言实现的范式,将复杂的技术难题简化为几行优雅的代码。无论是个人项目还是企业级应用,它都能提供高效、稳定、易用的多语言解决方案。其开源免费的特性更是降低了技术门槛,让更多开发者能够轻松实现产品的国际化。随着人工智能技术的不断发展,translate.js也在持续进化,集成更先进的翻译引擎,提供更精准的翻译结果。未来,它将继续致力于降低多语言实现的复杂度,助力更多产品走向全球市场。


            DEMO:

            <!DOCTYPE html>
            <html lang="zh-CN">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>多语言网站示例</title>
                <!-- 引入本地的 translate.js -->
                <script src="./translate.js"></script>
                <style>
                    body {
                        font-family: Arial, sans-serif;
                        max-width: 800px;
                        margin: 0 auto;
                        padding: 20px;
                    }
                    .language-switcher {
                        margin: 20px 0;
                        padding: 10px;
                        background: #f5f5f5;
                        border-radius: 5px;
                    }
                    .language-btn {
                        padding: 8px 16px;
                        margin: 0 5px;
                        border: 1px solid #ddd;
                        background: white;
                        cursor: pointer;
                        border-radius: 3px;
                    }
                    .language-btn.active {
                        background: #007bff;
                        color: white;
                        border-color: #007bff;
                    }
                    .content {
                        margin-top: 20px;
                        padding: 20px;
                        border: 1px solid #eee;
                        border-radius: 5px;
                    }
                </style>
            </head>
            <body>
                <div class="language-switcher">
                    <h3>选择语言 / Select Language:</h3>
                    <button class="language-btn active" onclick="switchLanguage('chinese_simplified')">中文</button>
                    <button class="language-btn" onclick="switchLanguage('english')">English</button>
                    <button class="language-btn" onclick="switchLanguage('japanese')">日本語</button>
                    <button class="language-btn" onclick="switchLanguage('korean')">한국어</button>
                    <button class="language-btn" onclick="switchLanguage('french')">Français</button>
                    <button class="language-btn" onclick="switchLanguage('german')">Deutsch</button>
                </div>
            
                <div class="content" id="translatable-content">
                    <h1>欢迎来到我的多语言网站</h1>
                    <p>这是一个演示如何使用 translate.js 实现多语言切换的示例。</p>
                    
                    <h2>功能特点</h2>
                    <ul>
                        <li>支持多种语言实时切换</li>
                        <li>无需刷新页面</li>
                        <li>自动翻译页面内容</li>
                        <li>简单易用的API</li>
                    </ul>
                    
                    <h2>联系我们</h2>
                    <p>电子邮件:contact@example.com</p>
                    <p>电话:+86 123-4567-8900</p>
                    
                    <div class="no-translate">
                        <p><em>这个区域的内容不会被翻译(class="no-translate")</em></p>
                    </div>
                </div>
            
                <script>
                    // 页面加载完成后初始化翻译功能
                    document.addEventListener('DOMContentLoaded', function() {
                        // 初始化翻译配置
                        translate.service.use('client.edge'); // 使用浏览器内置翻译(免费)
                        // 或者使用自有翻译服务:translate.service.use('translate.service');
                        
                        // 设置页面默认语言
                        translate.language.setLocal('chinese_simplified');
                        
                        // 设置忽略翻译的元素(可选)
                        translate.ignore.class.push('no-translate');
                        
                        // 启动监听器,自动检测页面变化
                        translate.listener.start();
                        
                        // 根据浏览器语言自动切换(可选)
                        autoDetectLanguage();
                        
                        console.log('translate.js 初始化完成!');
                    });
            
                    // 语言切换函数
                    function switchLanguage(lang) {
                        // 更新按钮状态
                        document.querySelectorAll('.language-btn').forEach(btn => {
                            btn.classList.remove('active');
                        });
                        event.target.classList.add('active');
                        
                        // 切换语言并执行翻译
                        translate.changeLanguage(lang);
                        translate.execute();
                        
                        // 保存语言偏好到本地存储
                        localStorage.setItem('preferred-language', lang);
                        
                        console.log('切换到语言:', lang);
                    }
            
                    // 自动检测浏览器语言
                    function autoDetectLanguage() {
                        const savedLang = localStorage.getItem('preferred-language');
                        if (savedLang) {
                            // 使用用户之前选择的语言
                            setActiveButton(savedLang);
                            return;
                        }
                        
                        // 检测浏览器语言
                        const browserLang = navigator.language.toLowerCase();
                        let detectedLang = 'chinese_simplified'; // 默认中文
                        
                        if (browserLang.includes('en')) {
                            detectedLang = 'english';
                        } else if (browserLang.includes('ja')) {
                            detectedLang = 'japanese';
                        } else if (browserLang.includes('ko')) {
                            detectedLang = 'korean';
                        } else if (browserLang.includes('fr')) {
                            detectedLang = 'french';
                        } else if (browserLang.includes('de')) {
                            detectedLang = 'german';
                        }
                        
                        // 如果检测到的语言不是中文,自动切换
                        if (detectedLang !== 'chinese_simplified') {
                            setTimeout(() => {
                                switchLanguage(detectedLang);
                            }, 1000);
                        }
                    }
            
                    // 设置活动按钮样式
                    function setActiveButton(lang) {
                        document.querySelectorAll('.language-btn').forEach(btn => {
                            btn.classList.remove('active');
                            if (btn.textContent.toLowerCase().includes(getLanguageText(lang).toLowerCase())) {
                                btn.classList.add('active');
                            }
                        });
                    }
            
                    // 获取语言显示文本
                    function getLanguageText(lang) {
                        const langMap = {
                            'chinese_simplified': '中文',
                            'english': 'English',
                            'japanese': '日本語',
                            'korean': '한국어',
                            'french': 'Français',
                            'german': 'Deutsch'
                        };
                        return langMap[lang] || lang;
                    }
            
                    // 手动触发翻译函数(如果需要)
                    function manualTranslate() {
                        translate.execute();
                    }
            
                    // 重置翻译(恢复原始语言)
                    function resetTranslation() {
                        translate.reset();
                    }
                </script>
            </body>
            </html>

            [members_only]

            <div style="text-align: center;">
                <span id="timeDate"></span><span id="times"></span> 
            </div>
            
            <script language="javascript"> 
            var now = new Date();
            function createtime(){
                var grt= new Date("01/01/2024 00:00:00");
                now.setTime(now.getTime()+250);
                days = (now - grt ) / 1000 / 60 / 60 / 24;
                dnum = Math.floor(days);
                hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum);
                hnum = Math.floor(hours);
                if(String(hnum).length ==1 ){hnum = "0" + hnum;}
                minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
                mnum = Math.floor(minutes);
                if(String(mnum).length ==1 ){mnum = "0" + mnum;}
                seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
                snum = Math.round(seconds);
                if(String(snum).length ==1 ){snum = "0" + snum;}
                document.getElementById("timeDate").innerHTML = "本网站己运行"+dnum+"天";
                document.getElementById("times").innerHTML = hnum + "小时" + mnum + "分" + snum + "秒";
            }
            setInterval("createtime()",250); 
            </script>
            
            <div style="text-align: center;"><strong>
            	切换语言:</strong>
            	<a class="ignore" href="javascript:translate.changeLanguage('english');">English</a> | 
            	<a class="ignore" href="javascript:translate.changeLanguage('chinese_simplified');">简体中文</a>
            </div>
            <script src="http://naver.19901117.xyz/translate.js/translate.js"></script>
            
            <script>
            translate.selectLanguageTag.languages = 'english,chinese_simplified,japanese,spanish,deutsch,french,korean';
            translate.request.listener.delayExecuteTime = 500;
            translate.service.use('client.edge'); //设置机器翻译服务通道
            translate.listener.start(); //开启页面元素动态监控
            translate.selectLanguageTag.show = false;//false隐藏选择框,true打开
            translate.execute();//完成翻译初始化,进行翻译
            </script>

            支持的语种表 – translate.service通道

            corsican:科西嘉语
            guarani:瓜拉尼语
            kinyarwanda:卢旺达语
            hausa:豪萨语
            norwegian:挪威语
            dutch:荷兰语
            yoruba:约鲁巴语
            english:英语
            gongen:贡根语
            latin:拉丁语
            nepali:尼泊尔语
            french:法语
            czech:捷克语
            hawaiian:夏威夷语
            georgian:格鲁吉亚语
            russian:俄语
            chinese_simplified:简体中文
            persian:波斯语
            bhojpuri:博杰普尔语
            hindi:印地语
            belarusian:白俄罗斯语
            swahili:斯瓦希里语
            icelandic:冰岛语
            yiddish:意第绪语
            twi:契维语
            irish:爱尔兰语
            gujarati:古吉拉特语
            khmer:高棉语
            slovak:斯洛伐克语
            hebrew:希伯来语
            kannada:卡纳达语
            hungarian:匈牙利语
            tamil:泰米尔语
            arabic:阿拉伯语
            bengali:孟加拉语
            azerbaijani:阿塞拜疆语
            samoan:萨摩亚语
            afrikaans:南非荷兰语
            indonesian:印尼语
            danish:丹麦语
            shona:修纳语
            bambara:班巴拉语
            lithuanian:立陶宛语
            vietnamese:越南语
            maltese:马耳他语
            turkmen:土库曼语
            assamese:阿萨姆语
            catalan:加泰罗尼亚语
            singapore:僧伽罗语
            cebuano:宿务语
            scottish_gaelic:苏格兰盖尔语
            sanskrit:梵语
            polish:波兰语
            galician:加利西亚语
            latvian:拉脱维亚语
            ukrainian:乌克兰语
            tatar:鞑靼语
            welsh:威尔士语
            japanese:日语
            filipino:菲律宾语
            aymara:艾马拉语
            lao:老挝语
            telugu:泰卢固语
            romanian:罗马尼亚语
            haitian_creole:海地克里奥尔语
            dogrid:多格来语
            swedish:瑞典语
            maithili:迈蒂利语
            thai:泰语
            armenian:亚美尼亚语
            burmese:缅甸语
            pashto:普什图语
            hmong:苗语
            dhivehi:迪维希语
            chinese_traditional:繁體中文
            luxembourgish:卢森堡语
            sindhi:信德语
            kurdish:库尔德语(库尔曼吉语)
            turkish:土耳其语
            macedonian:马其顿语
            bulgarian:保加利亚语
            malay:马来语
            luganda:卢干达语
            marathi:马拉地语
            estonian:爱沙尼亚语
            malayalam:马拉雅拉姆语
            deutsch:德语
            slovene:斯洛文尼亚语
            urdu:乌尔都语
            portuguese:葡萄牙语
            igbo:伊博语
            kurdish_sorani:库尔德语(索拉尼)
            oromo:奥罗莫语
            greek:希腊语
            spanish:西班牙语
            frisian:弗里西语
            somali:索马里语
            amharic:阿姆哈拉语
            nyanja:齐切瓦语
            punjabi:旁遮普语
            basque:巴斯克语
            italian:意大利语
            albanian:阿尔巴尼亚语
            korean:韩语
            tajik:塔吉克语
            finnish:芬兰语
            kyrgyz:吉尔吉斯语
            ewe:埃维语
            croatian:克罗地亚语
            creole:克里奥尔语
            quechua:克丘亚语
            bosnian:波斯尼亚语
            maori:毛利语

            [/members_only]

            相关文章:立省万元!李哥教你如何使用translate.js实现WP菜单的JavaScript翻译

          3. Custom_Nodes篇:ComfyUI-QwenVL反推节点

            Custom_Nodes篇:ComfyUI-QwenVL反推节点

            这个插件对于 ComfyUI 用户来说,实用性非常高,而且考虑到了不同的硬件配置需求

            技术整合很到位:它直接把像 Qwen3-VL 这样领先的视觉语言模型带到了 ComfyUI 的节点式工作流中,让用户能以更直观的方式使用多模态能力,无论是图片分析还是未来的视频处理(根据介绍),都提供了强大的基础。它不仅追赶最新的 Qwen3-VL 模型,还保持对早期 Qwen2.5 的支持,这让拥有不同模型的用户都能受益。最值得称赞的是它加入了多种量化(4-bit/8-bit)和模型缓存的选项。这意味着开发者清晰地认识到 VRAM 是限制许多 AI 玩家的主要瓶颈,通过这些优化,可以让更多配置没那么“壕”的用户也能体验到高性能 VL 模型,这大大提升了它的普及潜力。

            总体来看,这是一个强大、灵活且注重实用的节点集,为 ComfyUI 的多模态能力添加了重要的一块拼图。

            节点官方介绍:

            ComfyUI-QwenVL 自定义节点集成了 Qwen-VL 系列,包括最新的 Qwen3-VL 型号,以及 Qwen2.5-VL 和最新的 Qwen3-VL,从而实现了用于生成文本、图像理解和视频分析的高级多模态 AI。


            开源地址:https://github.com/1038lab/ComfyUI-QwenVL

            ComfyUI-QwenVL 自定义节点集成了阿里云强大的 Qwen-VL 系列视觉语言模型 (LVLM),包括最新的 Qwen3-VL 和 Qwen2.5-VL。该高级节点可在 ComfyUI 工作流程中实现无缝的多模态 AI 功能,从而高效地生成文本、理解图像和分析视频。

            ✨ 特点

            • 标准节点和高级节点:包含一个用于快速使用的简单 QwenVL 节点和一个可对生成进行精细控制的 QwenVL(高级)节点。
            • 预设和自定义提示:您可以从一系列便捷的预设提示中进行选择,也可以编写自己的提示以实现完全控制。
            • 多型号支持:轻松切换各种官方 Qwen-VL 型号。
            • 自动模型下载:模型会在首次使用时自动下载。
            • 智能量化:通过 4 位、8 位和 FP16 选项平衡 VRAM 和性能。
            • 硬件感知:自动检测 GPU 功能,防止与不兼容的型号(例如 FP8)发生错误。
            • 可复现生成:使用种子参数以获得一致的输出。
            • 内存管理:“保持模型加载”选项可将模型保留在 VRAM 中,以加快处理速度。
            • 图像和视频支持:接受单个图像和视频帧序列作为输入。
            • 强大的错误处理能力:针对硬件或内存问题提供清晰的错误消息。
            • 简洁的控制台输出:运行期间输出简洁明了的控制台日志。Flash -Attention v2 集成:可用时自动启用,以加快注意力层速度。Torch 编译优化:可选的 JIT 编译,use_torch_compile以提高吞吐量。 高级设备处理:自动检测 CUDA、Apple Silicon (MPS) 或 CPU;可手动覆盖。 动态内存强制执行:根据 VRAM 可用性自动调整量化级别。

            🚀 安装

            1. 将此仓库克隆到您的 ComfyUI/custom_nodes 目录:cd ComfyUI/custom\_nodes git clone https://github.com/1038lab/ComfyUI-QwenVL.git
            2. 安装所需的依赖项:cd ComfyUI/custom_nodes/ComfyUI-QwenVL pip install -r requirements.txt
            3. 重启ComfyUI。

            📥 下载模型

            首次使用时,模型将自动下载。如果您希望手动下载,请将其放置在 ComfyUI/models/LLM/Qwen-VL/ 目录中。

            模型关联
            Qwen3-VL-2B-指令下载
            Qwen3-VL-2B-思考下载
            Qwen3-VL-2B-指令-FP8下载
            Qwen3-VL-2B-思考-FP8下载
            Qwen3-VL-4B-指令下载
            Qwen3-VL-4B-思考下载
            Qwen3-VL-4B-指令-FP8下载
            Qwen3-VL-4B-思考-FP8下载
            Qwen3-VL-8B-指令下载
            Qwen3-VL-8B-思考下载
            Qwen3-VL-8B-指令-FP8下载
            Qwen3-VL-8B-思考-FP8下载
            Qwen3-VL-32B-指令下载
            Qwen3-VL-32B-思考下载
            Qwen3-VL-32B-指令-FP8下载
            Qwen3-VL-32B-思考-FP8下载
            Qwen2.5-VL-3B-指令下载
            Qwen2.5-VL-7B-指令下载

            📖 用法

            基本用法

            1. 从 🧪AILab/QwenVL 类别中添加“QwenVL”节点。
            2. 选择您要使用的模型名称。
            3. 将图像或视频(图像序列)源连接到节点。
            4. 您可以使用预设字段或自定义字段编写提示信息。
            5. 运行工作流程。

            高级用法

            如需更精细的控制,请使用“QwenVL(高级)”节点。该节点可让您访问详细的生成参数,例如温度、top_p、光束搜索和器件选择。

            ⚙️ 参数

            范围描述默认范围节点
            模型名称要使用的Qwen-VL模型。Qwen3-VL-4B-指令标准版和高级版
            量化即时量化。对于预量化模型(例如 FP8),此操作将被忽略。8 位(平衡)4 位、8 位、无标准版和高级版
            注意模式注意后端。auto如果可用,则尝试使用 Flash-Attn v2,否则回退到 SDPA。汽车自动、闪光灯_注意_2、SDPA标准版和高级版
            使用 torch 编译启用torch.compile('reduce-overhead')以提高 CUDA 吞吐量(Torch 2.1+)。仅限高级用户
            设备取消自动设备选择。汽车自动、CUDA、CPU仅限高级用户
            预设提示针对常见任务的一系列预定义提示。请描述一下……任何文本标准版和高级版
            自定义提示如果提供了预设提示,则覆盖该提示。任何文本标准版和高级版
            最大令牌数要生成的新代币的最大数量。102464-2048标准版和高级版
            保持模型加载将模型保存在显存中,以便后续运行速度更快。真的真/假标准版和高级版
            种子可重复结果的种子。11 – 2^64-1标准版和高级版
            温度控制随机性。数值越高,随机性越强。(当 num_beams 为 1 时使用)。0.60.1-1.0仅限高级用户
            顶部_p细胞核采样阈值。(当 num_beams 为 1 时使用)。0.90.0-1.0仅限高级用户
            光束数用于光束搜索的光束数量。大于 1 则禁用温度/top_p 采样。11-10仅限高级用户
            重复惩罚不鼓励重复使用令牌。1.20.0-2.0仅限高级用户
            帧数要从视频输入中采样的帧数。161-64仅限高级用户

            💡 量化选项

            模式精确内存使用情况速度质量推荐用于
            无(FP16)16 位浮点数高的最快最好的高显存显卡(16GB+)
            8 位(平衡)8位整数中等的快速地非常好均衡性能(8GB+)
            4 位(对显存友好)4位整数低的慢点*好的低显存显卡(<8GB)

            *关于 4 位速度的说明:4 位量化可以显著降低 VRAM 使用量,但由于实时反量化的计算开销,可能会导致某些系统的性能变慢。

            🤔 设置技巧

            环境推荐
            模型选择对于大多数用户来说,Qwen3-VL-4B-Instruct 是一个很好的起点。如果您使用的是 40 系列 GPU,请尝试使用 -FP8 版本以获得更好的性能。
            内存模式如果您计划多次运行该节点,请保持 keep_model_loaded 启用(True)以获得最佳性能。仅当其他节点的显存不足时才禁用它。
            量子化首先使用默认的 8 位模式。如果显存充足(>16GB),请切换到“无”(FP16)模式以获得最佳速度和质量。如果显存不足,请使用 4 位模式。
            表现首次使用特定量化方式加载模型时,速度可能会较慢。后续运行(启用 keep_model_loaded 参数)速度会快得多。

            🧠 关于模型

            该节点采用阿里云Qwen团队开发的Qwen-VL系列模型。这些强大的开源大型视觉语言模型(LVLM)旨在理解和处理视觉和文本信息,因此非常适合图像和视频详细描述等任务。

          4. Custom_Nodes篇:ComfyUI-QwenVL3-image反推节点

            Custom_Nodes篇:ComfyUI-QwenVL3-image反推节点

            这是一个 ComfyUI 自定义节点,它集成了阿里巴巴的 Qwen3-VL-4B-Instruct-FP8 视觉语言模型。

            核心功能: 它的主要作用是分析输入的图像并生成相应的文本描述

            主要特点是高效运行,由于使用了 FP8 量化技术,该模型运行所需的显存较低,大约 10GB 左右。开发者提到,它适合用在图像放大的工作流程中,作为图像理解(“看懂”图片内容)的工具。需要注意的是,因为它依赖 FP8 技术,所以它有特定的硬件门槛,要求使用 NVIDIA RTX 4090 或计算能力更强的 GPU。简单来说,它是一个能帮你“读取”图片内容并将其转换成文字的工具节点,特别适合显存有限但又想使用先进视觉模型的用户(前提是你的 GPU 支持 FP8)。

            节点官方介绍:


            开源地址:https://github.com/yamanacn/ComfyUI-QwenVL3-image

            使用qwen3vl-4b快速分析图片内容,用于在放大中替代florence

            📖 简介

            一个为 ComfyUI 设计的自定义节点,集成了 Qwen3-VL-4B-Instruct-FP8 视觉语言模型,用于高效的图像理解和描述。

            ✨ 主要特性

            • 🚀 高效 FP8 量化:仅需约 10GB 显存
            • 📦 批量处理支持:一次处理多张图片
            • 💾 智能内存管理:可选模型保持加载,优化显存
            • 🔧 辅助工具链:提供文本分割、列表处理等节点

            📋 硬件要求

            • GPU: NVIDIA RTX 4090 或更高(计算能力 ≥ 8.9)
            • 显存: ≥ 10GB
            • 系统内存: 8GB+

            ⚠️ 重要提示: 此插件仅支持 FP8 量化模型,需要计算能力 8.9 或更高的 GPU。

            🔧 安装方法

            使用 Git Clone(推荐)

            cd ComfyUI/custom_nodes/
            git clone https://github.com/yamanacn/ComfyUI-QwenVL3-image.git
            cd ComfyUI-QwenVL3-image
            pip install -r requirements.txt

            使用 ComfyUI Manager

            1. 在 ComfyUI 中打开 Manager
            2. 搜索 “QwenVL3”
            3. 点击安装

            📦 模型下载

            模型会在首次使用时自动下载。你也可以从 HuggingFace 手动下载模型,并将其放置在 ComfyUI/models/Qwen/ 目录下。

            🎮 基础工作流

            对于批量处理,可连接 Text Batch Splitter 和 List Selector 节点来分别查看每张图片的描述。

            图片输入 → QwenVL3 Image (FP8) → 文本输出

          5. 从本地部署好的it-tools项目再部署到服务器并上线

            从本地部署好的it-tools项目再部署到服务器并上线

            随着开发工作的日益复杂,高效、集成的开发工具成为提升生产力的关键。IT-Tools 作为一个开源的工具集合项目,将多种常用开发工具(如编码转换、格式化、加密解密等)聚合于一体,为开发者提供了极大的便利。

            之前在本地部署了一个it-tools,因为感觉它比较轻便,于是想部署到服务器上来。

            1.首先,在本地的it-tools目录中构建镜像文件并在本地保存镜像:

            # 在当前it-tools根目录下构建并取名为leepoet-tools
            docker build -t leepoet-tools:custom .
            
            # 打包镜像为leepoet-tools.tar
            docker save -o leepoet-tools.tar leepoet-tools:custom

            2.然后把镜像上传到服务器的/tmp目录下:

            # 使用 scp 传输(替换为你的服务器信息)
            scp leepoet-tools.tar root@你的服务器IP:/tmp/

            3.在服务器上用docker加载镜像:

            # 在服务器上加载镜像
            docker load -i /tmp/leepoet-tools.tar

            可以通过docker ps -a查看一下:

            4.在服务器上通过docker生成容器并运行:

            # 运行容器
            docker run -d -p 3000:80 --name leepoet-toolkit leepoet-tools:custom

            *注:

            这里有几个点要注意,因为it-tools镜像是一个基于 Alpine Linux​ 的 Nginx​ 镜像,并且将 /app/dist目录的内容复制到了 /usr/share/nginx/html(标准的 Nginx 静态文件目录)。目前我无法通过:

            # 假设容器内网站根目录是/usr/share/nginx/html
            # 重新运行容器并挂载目录
            docker run -d \
              -p 3000:80 \
              --name it-tools-container \
              -v /www/wwwroot/tools.leepoet.cn:/usr/share/nginx/html \
              leepoet-tools:custom
            
            或者
            
            docker run -d \
              --name it-tools \
              -p 3000:3000 \
              -v /www/wwwroot/tools.leepoet.cn:/data \
              corentinth/it-tools:latest

            这样的命令去持久化生成它。

            如果直接用这个目录/usr/share/nginx/html挂载到/www/wwwroot/tools.leepoet.cn,网站打不开。

            如果用/data目录挂载到/www/wwwroot/tools.leepoet.cn的话,网站是可以打开的。但是 /www/wwwroot/tools.leepoet.cn是空的,因为 Nginx 默认不向 /data写入数据,它只从 /usr/share/nginx/html读取静态文件。所以挂载到/data目录没有什么意义。最后我还是直接:

            docker run -d -p 3000:80 --name leepoet-toolkit leepoet-tools:custom

            生成了容器并运行起来。

            然后通过复制容器内的文件到宿主机:

            docker cp leepoet-toolkit:/usr/share/nginx/html/. /www/wwwroot/tools.leepoet.cn/

            这样的话我是想直接通过正向代理到这个目录。

            他现在读取的路径就是/www/wwwroot/tools.leepoet.cn/

            https://tools.leepoet.cn/ 然后通过BING提交验证,并通过

            为什么要这么操作?

            因为之前我是直接把上传的镜像生成在服务器的容器内部,并用域名反向代理到这个内部的容器。也就是DOCKER里的/usr/share/nginx/html这个目录。如果想做SEO验证就必须把XML的文件个人感觉还是比较麻烦。所以如果把/usr/share/nginx/html/直接复制到/www/wwwroot/tools.leepoet.cn/这里的话,再上传BING的XLM验证文件会更合适。当然这是我个人的理解与实践结果。