news 2026/10/13 8:46:21

RAGFlow 0.17.2 在 Windows Docker Desktop 上的完整部署与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RAGFlow 0.17.2 在 Windows Docker Desktop 上的完整部署与避坑指南

简介:RAGFlow 0.17.2 部署包面向需要在 Windows 环境借助 Docker Desktop 快速搭建检索增强生成(RAG)服务的开发者与运维人员,目标是省去源码编译和繁琐依赖配置,让本地部署与内网测试直接可用。压缩包共收录 1409 个文件,总体积 45.6MB,以 Python 后端脚本(237 个 py)、前端 React/TypeScript 组件(474 个 tsx 与 153 个 ts)、SVG 图标(203 个)和 Less 样式(93 个)为主体,同时包含 JSON 配置、Markdown 文档、YAML 部署编排、Shell 脚本以及 dockerfile、conf、nginx 配置等辅助文件,类型覆盖前后端、样式、配置与文档,目录结构便于按模块检索学习。已有 283 人浏览学习这份部署资源。读者拿到的是一个可直接启动的完整工程:既能通过 Docker Desktop 快速运行,也可参照源码与关键配置梳理 RAGFlow 的模块关系;需要二次开发或调整界面样式时,包内现成的源码、样式表和部署文件能提供清晰的修改入口。

1. RAGFlow 0.17.2 落地 Windows:这套 RAG 检索库值得装进 Docker Desktop

做 RAG 的朋友都知道,最烦的不是模型效果差,而是知识库管不住。断句错位、召回不准、文件格式一多就乱,这些问题在开源方案里 RAGFlow 算是把"文档解析"做得最像产品的——它对 PDF、Word、Excel 的版面解析比裸调 LangChain 那套成熟得多。ragflow-0.17.2.zip 这个压缩包解决了 Windows 用户最大的一个尴尬:官方文档默认你跑 Linux + Docker Compose,但很多从业者的主力机就是 Windows,装个 Docker Desktop 跑起来才是真实工作流。适合两类人:一是想本地验证 RAGFlow 能力、不想买服务器的个人开发者,二是企业里需要在内网快速搭一套知识库原型的运维或算法工程师。先说结论:0.17.2 在 Docker Desktop + WSL2 后端下能稳跑,但三个前置条件缺一个就起不来——虚拟化、WSL2 版本、内存分配,下面逐项拆。

2. 部署前环境摸底:版本组合、虚拟化检测与 WSL2 三个前提

2.1 为什么 RAGFlow 0.17.2 在 Windows 上绕不开 Docker Desktop

RAGFlow 的服务编排不是单个容器,而是 web 服务、API、任务执行器、关系数据库、对象存储加 Elasticsearch 这一整组。官方 docker-compose.yml 里有七个服务,相互之间靠网络桥接和卷共享通信。在 Windows 上要跑这组服务,常见做法是两条路:一是 WSL2 里装原生 Docker Engine,二是用 Docker Desktop 接管 WSL2 后端。我用的是后者,原因很直接——Docker Desktop 对磁盘卷的权限处理和 Windows 文件系统打通得更好,RAGFlow 的挂载目录可以直接指向 Windows 路径,调试时用 VS Code 打开宿主机目录就能看到容器产出的文件,不用绕进 WSL 的 ext4 虚拟磁盘里捞东西。

0.17.2 这个版本号值得注意:它的 docker-compose.yml 里 ES 用的是 8.x,和旧版 7.x 的初始化流程不一样,首次启动要等 ES 安全认证就绪后才开始初始化索引。如果你之前玩过 0.15 或更早版本,别把旧经验直接套上来。

2.2 先查虚拟化:Docker Desktop 起不来的头号原因

Docker Desktop 在 Windows 上依赖 Hyper-V 或 WSL2 的虚拟化支持。超过一半的"启动失败"不是软件问题,而是 BIOS 里的虚拟化没开,或者 Windows 功能没启用。部署前先跑一次检测,打开 PowerShell(管理员):

# 查看系统虚拟化支持状态 systeminfo | Select-String "Hyper-V|虚拟化" # 如果上面输出为空或显示"已检测到虚拟机监控程序",再查 Windows 功能状态 Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All | Select-Object State Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform | Select-Object State Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux | Select-Object State

第二组命令是关键。VirtualMachinePlatform 和 WSL 两个功能必须显示为 Enabled,缺哪个装哪个:

# 启用 WSL 和虚拟机平台,完成后按提示重启 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

BIOS 层面的虚拟化用系统信息就能看到,但要注意:某些品牌机默认关闭 VT-x/AMD-V,而且 Windows 设置里看不出来,必须进 BIOS。判断方法是看任务管理器—性能—CPU—虚拟化是否显示"已启用"。如果显示禁用,那就别折腾软件了,重启进 BIOS 找 Intel Virtualization Technology 或 SVM Mode 打开。

2.3 WSL2 版本与内存预留:RAGFlow 跑得动的前提

RAGFlow 官方给的最小内存建议是 16GB,但这说的是 Linux 服务器。Windows 上 Docker Desktop 默认吃的是 WSL2 的动态内存,4GB 的小机器也能把容器拉起来,只是跑大文件解析时会明显卡顿。0.17.2 的默认配置里,Elasticsearch 的 JVM 堆是 1GB,MySQL 和 MinIO 各占几百 MB,再加两个 Python 服务,光容器常驻内存就在 3GB 左右。我的建议是总内存不低于 8GB,并且给 WSL2 设一个明确的上限,防止 Docker Desktop 把内存吃光导致 Windows 卡死。

先确认 WSL2 内核版本:

wsl --status wsl --update

提示:执行wsl --update需要 Windows 10 21H2 或 Windows 11。老版本 Windows 10 可能显示"WSL 正在通过 Microsoft Store 更新",那就去商店装 WSL 应用,别用命令行硬刚。

然后规划内存。在用户目录创建.wslconfig,内容如下:

[wsl2] memory=8GB processors=4 swap=2GB localhostForwarding=true

memory是 WSL2 虚拟机占用的物理内存上限,设 8GB 意味着 Docker Desktop 最多用 8GB,不会无上限挤压 Windows 本身。localhostForwarding必须保留为 true,否则宿主机访问不了 RAGFlow 的 80 端口。改完配置后执行wsl --shutdown再重新打开 Docker Desktop,配置才会生效。

2.4 Docker Desktop 的安装与国内源设置

Docker Desktop 装的是 Windows 版安装包,安装时勾选"Use WSL 2 instead of Hyper-V"。这步选错会导致后续两个后端来回切换,容器网络时通时断。装完打开 Settings—Docker Engine,把镜像源换成国内可达的地址:

{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com" ] }

注意:国内镜像源的可达性经常变化,如果拉 ragflow 镜像时卡住,换一个源再试。docker pull 报failed to decode referrers index是 Docker Desktop 版本和镜像仓库兼容性的问题,优先把 Docker Desktop 升到最新稳定版。

3. 把 ragflow-0.17.2.zip 跑起来:安装步骤、参数说明与批量文件入库

3.1 解压与目录结构:先看清楚 zip 里有什么

拿到 ragflow-0.17.2.zip,先别急着解压就 docker compose up。这个压缩包不是单一安装器,而是一个完整的项目源码 + 部署编排。解压后关键内容分三块:

  • docker/目录:含docker-compose.yml和.env环境变量模板
  • 根目录的launch_server.py等源码:RAGFlow 的 Python 服务本体,需要挂载进容器
  • web/前端静态资源:打包进 nginx 容器

我在 Windows 上的做法是解压到D:\ragflow-0.17.2,路径里不要有中文和空格。原因有两个:一是 docker-compose 的卷挂载路径在 Windows 下有转义问题,二是后续改代码调试时,路径简单不容易出错。

解压后进入目录,先看 docker-compose.yml 里的服务清单:

cd /d D:\ragflow-0.17.2\docker dir

正常会看到docker-compose.yml、.env、以及 ragflow 和 es 相关的启动脚本。不要直接运行 docker compose up,因为 .env 里的配置还是默认值,端口和存储路径需要先确认。

3.2 配置 .env:端口、存储与最大文件数

打开.env.example或docker/.env(如果存在),核心参数如下:

# RAGFlow 对外服务端口 RAGFLOW_SERVER_HTTP_PORT=80 # RAGFlow Web 服务端口 RAGFLOW_SERVER_HTTP_PROTOCOL=http # 容器内服务端口 RAGFLOW_SERVER_PORT=9380 # 版本号,必须与镜像标签一致 RAGFLOW_IMAGE=infiniflow/ragflow:v0.17.2 # 存储路径 RAGFLOW_DATA_PERSISTENT_PATH=D:/ragflow_data

RAGFLOW_SERVER_HTTP_PORT是宿主机访问的端口,默认 80 容易和本机 IIS 或其他 Web 服务冲突,测试时建议直接改成 8088 或 9380。RAGFLOW_DATA_PERSISTENT_PATH默认是挂到当前目录下的ragflow_data,如果解压目录在 C 盘系统盘,容器写日志和向量库会占掉好几个 GB,建议改到 D 盘或 E 盘。路径分隔符统一用正斜杠/,docker-compose 对反斜杠的解析在 Windows 上经常出幺蛾子。

另外两个容易忽略的配置项在docker-compose.yml里直接暴露的:

environment: - SVR_HTTP_PORT=${RAGFLOW_SERVER_HTTP_PORT} - MAX_CONTENT_LENGTH=52428800

MAX_CONTENT_LENGTH是单个上传文件的大小上限,默认 50MB。如果知识库里有超过 50MB 的 PDF,这里会直接报 413,而界面提示是"文件上传失败",容易误判成网络问题。做批量入库的,改成524288000(500MB)再重启容器。

3.3 启动与首次初始化:ES 等待是个重点

配置改完,切到 docker 目录执行:

docker compose up -d

0.17.2 有七个服务,首次启动要先拉镜像,镜像体积加起来超过 4GB。docker compose up 之后看状态:

docker compose ps

正常情况下,mysql、minio、es、redis 会先变成 healthy,然后 ragflow-server 和 ragflow-worker 才会变成 Up。ES 8.x 启动极慢,机械硬盘上可能等 3 分钟以上,期间 ES 容器会反复重启。判断是否为正常等待,看日志里有没有"message": "o.e.n.Node"这种节点启动日志,而不是一直在报 security index 未初始化。

等到所有服务至少显示 Up 后,打开浏览器访问http://localhost:9380(按你改的端口)。首次访问要初始化管理员账号和密码。如果页面一直白屏或 502,优先查 ragflow-server 日志:

docker compose logs ragflow-server

最常见的报错是cannot connect to Elasticsearch,这通常不是 ES 挂了,而是 ES 在初始化安全认证时还没就绪。重启 ragflow-server 并不解决问题,正确的做法是等 ES 稳定后重启整个 compose 栈:

docker compose down docker compose up -d

提示:docker compose down 不会丢数据,因为数据卷挂在了 D:/ragflow_data 上。但注意别用docker compose down -v,-v 会删掉所有数据卷,MySQL 里的用户表、ES 里的索引全部清空。

3.4 批量处理文件:从上传到入知识库的完整链路

RAGFlow 的设计里,知识库创建的入口是 Web 界面,但批量操作时用 API 更顺手。0.17.2 的 API 文档挂在http://localhost:9380/api/v1/docs,认证方式是 API Key。在 Web 界面右上角头像菜单里生成 API Key,然后就能脚本化处理:

# 批量创建知识库并上传文件 import requests base_url = "http://localhost:9380" api_key = "ragflow-xxxxxxxx" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } # 1. 创建知识库 dataset_resp = requests.post( f"{base_url}/api/v1/datasets", headers=headers, json={"name": "运维手册库", "description": "内部设备运维文档"} ) dataset_id = dataset_resp.json()["data"]["id"] # 2. 循环上传文件 for file_path in ["D:/docs/设备手册.pdf", "D:/docs/排障手册.docx"]: with open(file_path, "rb") as f: upload_resp = requests.post( f"{base_url}/api/v1/datasets/{dataset_id}/documents", headers=headers, files={"file": f} ) print(upload_resp.status_code, upload_resp.json()) # 3. 触发解析任务 parse_resp = requests.post( f"{base_url}/api/v1/datasets/{dataset_id}/chunks", headers=headers, json={"document_ids": [dataset_id]} )

api/v1/datasets创建知识库,返回的id是后续所有操作的依赖项。上传接口是 multipart form 格式,files参数传文件对象即可。触发解析是关键一步:RAGFlow 的上传不等于入库,上传只是把文件存进 MinIO,触发了 chunk 任务后才会走完整解析——版面分析、OCR、切分、向量化。这一步在 Web 界面上能看到进度条,API 方式则通过查询任务状态确认。

批量入库的自动化场景下,我会在脚本里加一段轮询逻辑,每 5 秒请求一次解析状态,直到返回"status": "completed"再处理下一批文件:

import time def wait_parse_complete(base_url, headers, dataset_id, doc_id, timeout=300): """轮询等待解析完成,超时 5 分钟""" start = time.time() while time.time() - start < timeout: resp = requests.get( f"{base_url}/api/v1/datasets/{dataset_id}/chunks", headers=headers, params={"document_id": doc_id, "page": 1, "page_size": 1} ) data = resp.json()["data"] if data["total"] > 0 and data["docs"][0]["run"] == "completed": return True time.sleep(5) return False

4. 避坑与排查:Windows 上最容易翻车的六个细节

4.1 现象:Docker Desktop 启动报 "virtualization support wasn't detected"

这是 Windows 上装 RAGFlow 遇到最多的错误。现象是 Docker Desktop 图标转几圈就消失,弹窗提示虚拟化没检测到。原因有两层:一是 BIOS 里 VT-x/AMD-V 确实没开,二是 Windows 的 Hyper-V 隔离功能被第三方安全软件关掉了。我见过最隐蔽的一种情况:电脑装过 Android 模拟器或老版本 VirtualBox,它们会禁用 Hyper-V 并设置 Windows Hypervisor Platform 不加载。解决方法是先按第 2 章的 dism 命令全部启用,然后进 BIOS 确认,最后不要用"修复安装"去装 Docker Desktop——干净卸载后用最新稳定版安装包重装,我在一台 ThinkPad 上就是卸载重装才解决的。

4.2 现象:容器起来了但页面 502,ragflow-server 反复重启

现象是docker compose ps里 ragflow-server 状态是 Restarting,日志里报 ES 连接拒绝。原因分两种:数据卷不干净导致 ES 初始化失败,或者 .env 里端口改成 80 后与宿主机冲突。先查 ES 日志确认它是否真正 ready:

docker compose logs es | tail -50

如果 ES 日志里反复出现max virtual memory areas vm.max_map_count [65530] is too low,这是 WSL2 的虚拟内存参数问题。宿主机执行:

wsl -d docker-desktop sysctl -w vm.max_map_count=262144

但这个设置在 WSL 重启后会还原,持久化做法是在用户目录.wslconfig的[wsl2]段加一行kernelCommandLine=sysctl.vm.max_map_count=262144,然后wsl --shutdown重启 Docker Desktop。

4.3 现象:文件上传一直失败,界面提示"网络错误"

原因多半不是网络,而是MAX_CONTENT_LENGTH太小。RAGFlow 的前端上传组件只报 HTTP 状态码,不会把后端的 413 明确展示出来。解决方法是按第 3 节的方法改大限制,然后重启 ragflow-server 服务:

docker compose up -d --force-recreate ragflow-server

另外,用 API 上传时文件名不要带中文,部分 Windows 环境的 curl/Python requests 在 multipart 编码时会对中文字符处理出错,服务端收不到完整文件名导致解析任务失败。我习惯先把文件重命名为20240102_设备手册.pdf这种带日期的命名再上传。

4.4 现象:解析任务卡在 100% 但知识库没有向量数据

界面显示解析完成,但检索时什么都搜不到。原因是 RAGFlow 0.17.2 的解析流程分两步:先做 chunks 切分,再做 embedding。chunks 完成度 100% 不代表 embedding 完成。看 worker 容器日志:

docker compose logs ragflow-worker

如果能看到embedding timeout或connect to embedding model failed,说明你的 embedding 模型配置有问题。0.17.2 默认的 embedding 模型是bge-large-zh,首次使用会自动从 HuggingFace 拉权重。国内网络环境下这个下载失败率极高,而且 Docker 容器内没有代理配置的话,worker 会反复重试。解决方法是把 embedding 模型源改成 ModelScope:

在 Web 界面的"系统模型配置"里,把 embedding 模型的 URL 改成https://www.modelscope.cn/api/v1/models/AI-ModelScope/bge-large-zh对应的下载地址,或者更省事的方案是改用本地部署的 Ollama embedding 模型。第 5 章我会写完整接入步骤。

4.5 现象:docker compose up 时提示 port is already allocated

Windows 本机开了 IIS 或其他服务占用了 80 端口。这个最好排查,netstat -ano找出占用进程,或者直接把 RAGFLOW_SERVER_HTTP_PORT 改成 9380 后重新 up。注意改 .env 后要重新执行docker compose up -d,因为 compose 在启动时才读取环境变量,只改文件不重启不生效。

4.6 现象:Docker Desktop 每次开机都要手动启动

WSL2 后端的 Docker Desktop 默认不开机自启,做 RAGFlow 服务每天要用的话,把它加到启动项里。Windows 11 的操作用任务计划程序:

# 用 schtasks 创建开机启动任务(需要管理员 PowerShell) schtasks /Create /TN "DockerDesktop" /TR "C:\Program Files\Docker\Docker\Docker Desktop.exe" /SC ONSTART /RL HIGHEST /F

注意如果设置了开机自启,Docker Desktop 启动是异步的,RAGFlow 容器可能要等 Docker 引擎就绪后才会被拉起。如果希望容器也跟随 Docker Desktop 自动启动,需要给 docker compose 服务指定restart: unless-stopped,在 docker-compose.yml 的每个服务下面都加上这一行。0.17.2 源文件里多数服务已经带了这个配置,检查一下 ragflow-server 和 ragflow-worker 两个服务,没有就补上。

5. 让 RAGFlow 更好用:接入 Ollama 本地 embedding 与检索验证技巧

5.1 为什么要换本地 embedding 模型

RAGFlow 默认的 bge-large-zh 需要从 HuggingFace 拉权重,网络一遍拉不下来。而 Windows 本机部署 Ollama 已经是很成熟的做法,把 embedding 模型放在本地,RAGFlow 的 worker 直接通过 HTTP 调用,既不依赖外网,速度也稳定。这个改造是 0.17.2 用于内网环境的最优解:文档解析、向量化全程不出本机。

Ollama 在 Windows 上装好后拉取 embedding 模型:

ollama pull bge-m3

bge-m3 是 BAAI 开源的 embedding 模型,支持 8192 长度输入,中文效果比 bge-large-zh 好,而且 Ollama 原生支持。装完验证一下服务端是否正常:

curl http://localhost:11434/api/embeddings -d "{\"model\": \"bge-m3\", \"prompt\": \"测试\"}"

返回一段向量数组就是正常的。注意 Ollama 默认监听 11434 端口,RAGFlow 容器要访问宿主机的 Ollama,需要用到 Docker Desktop 的宿主机网关地址。Windows 下 Docker Desktop 的 WSL2 后端里,宿主机地址是host.docker.internal,容器内可以直接解析这个名字。

5.2 在 RAGFlow 里配置 Ollama embedding

打开 RAGFlow Web 界面,进入"模型服务"配置页面,添加一个 Ollama 类型的服务:

  • 服务类型:Ollama
  • Base URL:http://host.docker.internal:11434
  • 模型名:bge-m3
  • 模型类型:Embedding

配置完成后,去知识库设置里把该知识库的 Embedding 模型切到 bge-m3,然后重新解析文档。这里有个关键点:切换 embedding 模型会清空已有知识库的所有向量数据,必须重新触发解析任务。如果你有多个知识库,切换模型的成本是全部重新向量化——在生产环境切模型前,先确认下游应用对向量维度变化的接受度。

5.3 检索质量验证:从"能搜到"到"搜得准"

跑通 RAGFlow 不算完,从业者真正关心的是检索质量。0.17.2 的检索参数里,有两个直接影响结果:

  • Top K:默认取相似度最高的前 K 个 chunk
  • Similarity Threshold:相似度阈值,低于此值的结果会被过滤

我的验证习惯是:建立一个小型测试知识库,放入 20 份真实文档,预埋 10 个必须被检索到的"黄金问题"。改完配置后逐个问一遍,记录每条的命中率。如果黄金问题都命中,再调低阈值观察有没有引入明显噪声。常用检索 API 做测试:

import requests url = "http://localhost:9380/api/v1/retrieval" headers = { "Authorization": "Bearer ragflow-xxxxxxxx", "Content-Type": "application/json" } payload = { "question": "设备在低温环境下无法开机,应该检查什么", "dataset_ids": ["dataset_id_xxxx"], "top_k": 5, "similarity_threshold": 0.2 } resp = requests.post(url, headers=headers, json=payload) for chunk in resp.json()["data"]["chunks"]: print(f"分数: {chunk['similarity']:.3f} 来源: {chunk['document_keyword']}") print(chunk["content"][:120]) print("---")

similarity_threshold 默认是 0.2,偏低。对中文运维类文档,我一般先压到 0.3 试跑,太高容易滤掉正确答案,太低噪声多。批量调参时,把 top_k 和阈值写到配置文件里,用脚本跑一遍黄金问题集,输出命中率对比——这是最直观的参数调优手段。

5.4 我把这套环境固化成了自己的标准流程

复盘下来,RAGFlow 0.17.2 在 Windows Docker Desktop 上的价值,是让知识库系统在本地拥有了完整的开发闭环:文档进来、解析、向量化、检索、对接 LLM 全链路不出宿主机。从那以后我每次在一台新 Windows 机器上部署,都强制走一遍清单:先确认 BIOS 虚拟化,再装 WSL2 并配好 .wslconfig,最后才装 Docker Desktop 拉镜像。这三个步骤的先后顺序就是踩坑顺序,倒过来必翻车。还有一个教训是别用默认端口 80,Windows 上未知冲突太多,一次改成 9380 省去后续全部烦恼。希望帮到你,如果你在 Windows 上配置 RAGFlow 时遇到没写到的坑,欢迎带着报错信息来交流,一起把 Windows 上的 RAG 体验磨好。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 8:45:17

实验室信息管理系统LIMS方案:从需求文档到落地实施的完整指南

简介&#xff1a;这是一份面向实验室管理人员、信息系统设计与开发人员的《实验室信息管理系统(LIMS)》需求分析与设计文档&#xff0c;系统梳理了LIMS的五大核心功能&#xff1a;样品全生命周期管理、质量控制、仪器集成、统计报表与厂家管理&#xff0c;并补充了人员、设备、…

作者头像 李华
网站建设 2026/10/13 8:44:57

贝叶斯优化实战:30次试验高效调参PyTorch/TensorFlow模型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/13 8:44:21

逆序对统计:归并排序与树状数组解法详解

1. 从一道经典题说起&#xff1a;逆序对到底在解决什么问题第一次接触 Ultra-QuickSort 这道题的人&#xff0c;多半会被它的名字骗到。题目叫“超级快排”&#xff0c;看起来像是让你手写一个快速排序&#xff0c;但真正读完题面就会发现&#xff0c;它问的根本不是排序本身&a…

作者头像 李华
网站建设 2026/10/13 8:43:35

第3章:Spring AI 2.0一次完整对话——Message、Prompt 与 ChatResponse

上章思考题答案 聊天级密钥 B 生效。DeepSeekChatAutoConfiguration.deepSeekApi 先取 chatProperties.getApiKey()&#xff0c;有文本才用它&#xff0c;否则回退 commonProperties.getApiKey()。URL 同样先聊天级再连接级。多个聊天 Starter 且都不写 spring.ai.model.chat …

作者头像 李华
网站建设 2026/10/13 8:42:59

最小覆盖子串:从枚举到滑动窗口的完整推导与实现

有一类字符串题&#xff0c;面试官一说出来&#xff0c;大部分人的第一反应就是枚举&#xff1a;给你字符串s和t&#xff0c;在s里找出包含t所有字符的最短子串。这就是 LeetCode 第 76 题「最小覆盖子串」&#xff0c;通常被标成 Hard&#xff0c;但题目本身并不难&#xff0c…

作者头像 李华