无需OCR,基于ColQwen2、Qwen2.5和Weaviate对PDF进行多模态RAG的解决方案

关键词:多模态RAG、ColQwen2、Qwen2.5-VL、Weaviate 向量数据库、PDF 检索问答、无需 OCR、ColBERT 多向量、跨模态检索、MaxSim 相似度、知识库构建、AI 文档处理、视觉语言模型、晚交互(Late Interaction)、向量索引、Python 教程、HuggingFace、Colab、MPS、GPU

本文面向初学者,手把手搭建一个“无需 OCR 与分块”的 PDF 多模态 RAG 流水线:把 PDF 页面截图直接送入 ColQwen2 生成多向量(multi-vector)表征,写入 Weaviate 的 Multi-Vector 索引;查询时用 ColQwen2文本问题也编码到同一向量空间做近邻检索;最后把召回的页面截图与原问题一起交给 Qwen2.5-VL 生成答案。
教程核心参考自官方 recipe 笔记本(文末附链接),并在文中补充环境、代码注释、部署建议与排错清单。


在这里插入图片描述

文章目录

  • 无需OCR,基于ColQwen2、Qwen2.5和Weaviate对PDF进行多模态RAG的解决方案
    • 一、为什么要“无需 OCR + 无需分块”?
    • 二、项目总体流程(入门图概览)
    • 三、环境与前置条件
    • 四、快速开始(一键跑通骨架)
      • 1)安装依赖
      • 2)加载示例数据集(含 PDF 页面图像)
      • 3)加载 ColQwen2(多向量嵌入)
      • 4)连接 Weaviate 并创建 Multi-Vector 集合
      • 5)摄取:把“页面截图 → 多向量”写入 Weaviate
      • 6)检索:文本问题 → 多向量 → MaxSim Top-K
      • 7)生成:把命中的“页面截图 + 问题”交给 Qwen2.5-VL
    • 五、Mermaid 流程图
    • 六、关键概念一图读懂
    • 七、扩展与优化建议
    • 八、常见报错与排查(新人必看)
    • 九、知识点表格总结
    • 十、完整可复现骨架(拷贝即用)
    • 十一、FAQ
    • 参考与致谢


一、为什么要“无需 OCR + 无需分块”?

传统 PDF RAG 往往要:OCR → 版面分析 → 文本分块 → 嵌入 → 检索。
ColQwen2(晚交互 ColBERT 风格)直接对整页截图做多向量嵌入,把文本、表格、图形统一映射到同一空间,跳过 OCR/分块,从而:

  • 更稳健:复杂版面(图表、公式、扫描件)也能检索;
  • 更省心:流水线更短,工程复杂度更低;
  • 效果好:多向量 + MaxSim 提升细粒度匹配能力。

一句话:同一模型,同一空间同时编码图片页文本查询,实现跨模态检索问答


二、项目总体流程(入门图概览)

  1. 摄取(Ingestion)

    • 将 PDF 转为页面截图(PIL Images);
    • ColQwen2 把每页转为多向量
    • 写入 Weaviate Multi-Vector 索引(BYOV)。
  2. 查询(Retrieval)

    • ColQwen2 编码文本问题为多向量;
    • 在 Weaviate 中做 MaxSim 近邻搜索,取回相关页面。
  3. 生成(Generation)

    • 召回页面截图 + 原问题交给 Qwen2.5-VL
    • 输出基于证据的多模态答案。

三、环境与前置条件

  • Python 3.10+(建议 3.10/3.11)
    官方示例用了 3.13;初学者用 3.10/3.11 更容易装依赖,日后可再升级。

  • 至少 5–10 GB 显存/统一内存

    • 可选:Google Colab(T4 免费)、Apple Silicon(M2/M3,使用 MPS)。
  • Weaviate ≥ 1.29.0(文中示例 1.32.x 也可)
    选择其一:

    • Weaviate Cloud(WCD,省心)
    • 本地 Docker(学习/演示足够)
    • Embedded(快速试用)

四、快速开始(一键跑通骨架)

强烈建议先跑通“最小可行”骨架,再逐步加速与增强。

1)安装依赖

# 基础依赖
pip install -U colpali_engine "colpali-engine[interpretability]>=0.3.2,<0.4.0"
pip install -U weaviate-client qwen_vl_utils datasets transformers accelerate
pip install -U pillow matplotlib

如果在 Colab:记得 Runtime -> Change runtime type -> GPU
如果是 Apple Silicon:PyTorch 需开启 MPS(文末排错节有提示)。

2)加载示例数据集(含 PDF 页面图像)

from datasets import load_dataset
dataset = load_dataset("weaviate/arXiv-AI-papers-multi-vector", split="train")
print(dataset.features)
print(len(dataset), dataset[0].keys())

数据集中含:page_image(PIL 图像)、colqwen_embedding(也可自己现场算)。

在这里插入图片描述

3)加载 ColQwen2(多向量嵌入)

在这里插入图片描述

import torch, os
from transformers.utils.import_utils import is_flash_attn_2_available
from colpali_engine.models import ColQwen2, ColQwen2Processoros.environ["TOKENIZERS_PARALLELISM"] = "false"
device = "cuda:0" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu")
attn_impl = "flash_attention_2" if is_flash_attn_2_available() else "eager"model_name = "vidore/colqwen2-v1.0"
model = ColQwen2.from_pretrained(model_name, torch_dtype=torch.bfloat16,device_map=device, attn_implementation=attn_impl).eval()
processor = ColQwen2Processor.from_pretrained(model_name)# 简易封装
class ColVision:def __init__(self, model, processor): self.model, self.processor = model, processordef img_embed(self, img):batch = self.processor.process_images([img]).to(self.model.device)with torch.no_grad(): embs = self.model(**batch)  # [n_tokens, dim]return embs[0].cpu().float().numpy().tolist()def text_embed(self, text):batch = self.processor.process_queries([text]).to(self.model.device)with torch.no_grad(): embs = self.model(**batch)return embs[0].cpu().float().numpy().tolist()colvision = ColVision(model, processor)

4)连接 Weaviate 并创建 Multi-Vector 集合

import weaviate
import weaviate.classes.config as wc
from weaviate.classes.config import Configure# 方案A:本地 Docker 已启动 8080 端口
# client = weaviate.connect_to_local()# 方案B:Embedded(快速学习)
client = weaviate.connect_to_embedded()print("Weaviate ready:", client.is_ready())# 创建集合(BYOV + MultiVectors)
COLL = "PDFDocuments"
if client.collections.exists(COLL):client.collections.delete(COLL)collection = client.collections.create(name=COLL,properties=[wc.Property(name="page_id", data_type=wc.DataType.INT),wc.Property(name="paper_title", data_type=wc.DataType.TEXT),wc.Property(name="paper_arxiv_id", data_type=wc.DataType.TEXT),wc.Property(name="page_number", data_type=wc.DataType.INT),],vector_config=[Configure.MultiVectors.self_provided(name="colqwen",vector_index_config=Configure.VectorIndex.hnsw(multi_vector=Configure.VectorIndex.MultiVector.multi_vector()))]
)

5)摄取:把“页面截图 → 多向量”写入 Weaviate

page_images = {}
with collection.batch.dynamic() as batch:for i, p in enumerate(dataset):page_images[p["page_id"]] = p["page_image"]multi_vec = colvision.img_embed(p["page_image"])      # 多向量(list[list[dim]])batch.add_object(properties={"page_id": p["page_id"],"paper_title": p["paper_title"],"paper_arxiv_id": p["paper_arxiv_id"],"page_number": p["page_number"],},vector={"colqwen": multi_vec})if (i + 1) % 25 == 0:print(f"Ingested {i+1}/{len(dataset)}")batch.flush()print("Total objects:", len(collection))

6)检索:文本问题 → 多向量 → MaxSim Top-K

from weaviate.classes.query import MetadataQueryquery_text = "How does DeepSeek-V2 compare against the LLaMA family of LLMs?"
qvec = colvision.text_embed(query_text)resp = collection.query.near_vector(near_vector=qvec,target_vector="colqwen",limit=1,return_metadata=MetadataQuery(distance=True)  # 返回 MaxSim 距离
)hits = resp.objects
for i, o in enumerate(hits, 1):p = o.propertiesprint(f"{i}) MaxSim: {-o.metadata.distance:.2f} | {p['paper_title']} p.{int(p['page_number'])}")

7)生成:把命中的“页面截图 + 问题”交给 Qwen2.5-VL

import base64
from io import BytesIO
from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info# 加载 VLM(占用较大内存,建议单卡/Colab 先 limit=1)
vlm = Qwen2_5_VLForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct",torch_dtype=torch.bfloat16,device_map=device,attn_implementation=attn_impl
)
# 画质范围可按需调
processor_vl = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct",min_pixels=256*28*28, max_pixels=1280*28*28
)# 取回页面图片
img = page_images[hits[0].properties["page_id"]]# 打包为 chat 输入
buf = BytesIO(); img.save(buf, format="jpeg")
img_b64 = base64.b64encode(buf.getvalue()).decode("utf-8")messages = [{"role": "user","content": [{"type":"image","image":f"data:image;base64,{img_b64}"},{"type":"text","text":query_text}]
}]text = processor_vl.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor_vl(text=[text], images=image_inputs, videos=video_inputs,padding=True, return_tensors="pt").to(device)out = vlm.generate(**inputs, max_new_tokens=128)
ans = processor_vl.batch_decode(out[:, inputs.input_ids.shape[1]:],skip_special_tokens=True,clean_up_tokenization_spaces=False)[0]
print("Answer:", ans)

至此,一个无需 OCR的 PDF 多模态 RAG 最小闭环完成 ✅。

在这里插入图片描述


五、Mermaid 流程图

PDF 页面截图
ColQwen2 多向量嵌入
Weaviate Multi-Vector 索引
文本问题
ColQwen2 文本多向量
Top-K 页面截图
Qwen2.5-VL 生成答案

六、关键概念一图读懂

  • ColQwen2:视觉语言模型,**晚交互(ColBERT)**多向量;同一模型编码图片与文本。
  • Multi-Vector + MaxSim:以token/patch 级向量交互匹配,保留细粒度对齐。
  • Weaviate Multi-Vector:原生支持多向量 BYOV + HNSW,加速近邻检索。
  • Qwen2.5-VL:将召回页面(图像)与问题(文本)一起喂给模型,基于证据作答。

七、扩展与优化建议

  1. 批量/并发摄取

    • 控制 batch.dynamic() 的批量大小;
    • 对页面分辨率/patch 数做折中(更小更快,略降召回上限)。
  2. Top-K 与重排序

    • 先用 Multi-Vector 粗排(Top-K=3/5),再用 Qwen2.5-VL 对候选进行重排序/评分
  3. 混合检索

    • 同时维护文本嵌入(如 BGE/ColBERT 文本端)与图像多向量
    • 按查询意图动态融合。
  4. 成本与部署

    • Weaviate Cloud(省心)或 Docker(可控);
    • 模型可用 bitsandbytes 量化、max_pixels 控制分辨率。

八、常见报错与排查(新人必看)

  • 显存不足(OOM)

    • 降低 max_pixels;检索 limit=1 起步;必要时 CPU/MPS 先验证流程。
  • MPS 慢/不稳定(Apple Silicon)

    • 使用 torch.bfloat16;某些算子仍会回退到 CPU,耐心为要。
  • Weaviate 版本不匹配

    • 确保 ≥1.29.0;若是 Docker,拉取对应 tag;若嵌入式,升级 weaviate-client。
  • 网络下载模型慢

    • 配置国内镜像或提前手动缓存 HuggingFace 权重。

九、知识点表格总结

知识点要点原理/优势实践建议
无需 OCR/分块直接用页面截图做检索避免版面/表格/公式丢失首次先小分辨率验证流程
ColQwen2 多向量晚交互、ColBERT 风格token/patch 级匹配更细粒度同一模型编码图像与文本
Weaviate Multi-Vector原生多向量 + HNSW支持 BYOV,查询快建议单独 collection 管理
MaxSim 相似度多向量间最大相似强化局部对齐与 Top-K/重排序配合
Qwen2.5-VL 生成图像+文本共同上下文基于证据作答更可靠控制 max_new_tokens 成本
端到端 RAG摄取→检索→生成管道短、工程简先跑通最小闭环

十、完整可复现骨架(拷贝即用)

下面代码把摄取 → 检索 → 生成串起来,方便你一次性跑通(与上文分步一致,只是整合)。

# 0) 安装依赖(参考前文)
# 1) 加载数据集
from datasets import load_dataset
dataset = load_dataset("weaviate/arXiv-AI-papers-multi-vector", split="train")# 2) ColQwen2
import torch, os, base64
from io import BytesIO
from transformers.utils.import_utils import is_flash_attn_2_available
from colpali_engine.models import ColQwen2, ColQwen2Processoros.environ["TOKENIZERS_PARALLELISM"] = "false"
device = "cuda:0" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu")
attn_impl = "flash_attention_2" if is_flash_attn_2_available() else "eager"model_name = "vidore/colqwen2-v1.0"
model = ColQwen2.from_pretrained(model_name, torch_dtype=torch.bfloat16,device_map=device, attn_implementation=attn_impl).eval()
processor = ColQwen2Processor.from_pretrained(model_name)class ColVision:def __init__(self, model, processor): self.model, self.processor = model, processordef img_embed(self, img):batch = self.processor.process_images([img]).to(self.model.device)with torch.no_grad(): embs = self.model(**batch)return embs[0].cpu().float().numpy().tolist()def text_embed(self, text):batch = self.processor.process_queries([text]).to(self.model.device)with torch.no_grad(): embs = self.model(**batch)return embs[0].cpu().float().numpy().tolist()colvision = ColVision(model, processor)# 3) Weaviate(嵌入式或本地)
import weaviate
import weaviate.classes.config as wc
from weaviate.classes.config import Configure
from weaviate.classes.query import MetadataQueryclient = weaviate.connect_to_embedded()
COLL = "PDFDocuments"
if client.collections.exists(COLL):client.collections.delete(COLL)collection = client.collections.create(name=COLL,properties=[wc.Property(name="page_id", data_type=wc.DataType.INT),wc.Property(name="paper_title", data_type=wc.DataType.TEXT),wc.Property(name="paper_arxiv_id", data_type=wc.DataType.TEXT),wc.Property(name="page_number", data_type=wc.DataType.INT),],vector_config=[Configure.MultiVectors.self_provided(name="colqwen",vector_index_config=Configure.VectorIndex.hnsw(multi_vector=Configure.VectorIndex.MultiVector.multi_vector()))]
)# 4) 摄取
page_images = {}
with collection.batch.dynamic() as batch:for i, p in enumerate(dataset):page_images[p["page_id"]] = p["page_image"]batch.add_object(properties={"page_id": p["page_id"],"paper_title": p["paper_title"],"paper_arxiv_id": p["paper_arxiv_id"],"page_number": p["page_number"],},vector={"colqwen": colvision.img_embed(p["page_image"])})if (i + 1) % 50 == 0: print(f"Ingested {i+1}/{len(dataset)}")batch.flush()# 5) 查询
query_text = "How does DeepSeek-V2 compare against the LLaMA family of LLMs?"
qvec = colvision.text_embed(query_text)
resp = collection.query.near_vector(near_vector=qvec, target_vector="colqwen", limit=1,return_metadata=MetadataQuery(distance=True)
)
hit = resp.objects[0]
print("Hit:", hit.properties["paper_title"], "p.", int(hit.properties["page_number"]))# 6) 生成
from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_infovlm = Qwen2_5_VLForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct", torch_dtype=torch.bfloat16,device_map=device, attn_implementation=attn_impl
)
processor_vl = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-3B-Instruct", min_pixels=256*28*28, max_pixels=1280*28*28
)img = page_images[hit.properties["page_id"]]
buf = BytesIO(); img.save(buf, format="jpeg")
img_b64 = base64.b64encode(buf.getvalue()).decode("utf-8")messages = [{"role":"user","content":[{"type":"image","image":f"data:image;base64,{img_b64}"},{"type":"text","text":query_text}]}]
text = processor_vl.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor_vl(text=[text], images=image_inputs, videos=video_inputs,padding=True, return_tensors="pt").to(device)gen = vlm.generate(**inputs, max_new_tokens=128)
answer = processor_vl.batch_decode(gen[:, inputs.input_ids.shape[1]:],skip_special_tokens=True,clean_up_tokenization_spaces=False)[0]
print("Answer:", answer)

十一、FAQ

  • Q:能否换 ColPali?
    A:可以,ColPali 与 ColQwen2 都属于“ColVision”家族,只是编码器不同。替换加载与 Processor 即可。
  • Q:需要把所有页都喂给 Qwen2.5-VL 吗?
    A:不建议。先用 Multi-Vector 粗排 Top-K(1~3),再做多轮生成/重排序,控制成本。
  • Q:如何支持中文 PDF 或扫描件?
    A:本方案天然对图像友好,扫描件常见噪声也能一定程度处理;若需要文字级精确抽取(复制/高亮),再结合 OCR 做“加分项”。

参考与致谢

  • 原始官方教程(强烈推荐):
    “Multimodal RAG over PDFs using ColQwen2, Qwen2.5, and Weaviate”
    GitHub(Jupyter Notebook):
    https://github.com/weaviate/recipes/blob/main/weaviate-features/multi-vector/multi-vector-colipali-rag.ipynb

到这里,你已经掌握了无需 OCR 的多模态 RAG基本套路:ColQwen2图片页/文本统一到一个多向量空间 → Weaviate 做 Multi-Vector 近邻搜索 → Qwen2.5-VL 基于证据生成。拿去替换你现有的 PDF 问答、图表检索或扫描件归档工作流,立刻上手,立竿见影!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97786.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97786.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/97786.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML第三课:特殊元素

HTML第三课&#xff1a;特殊元素特殊元素代码展示特殊元素 不在行级元素和块级元素概念里面的元素无法控制没有宽高的元素 代码展示 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewpo…

蓝桥杯算法之基础知识(5)

目录 Ⅰ.in方法的使用 Ⅱ.字典的使用 Ⅲ.1MB 、KB、 B、 b(即bit)的转换&#xff08;必学&#xff09; Ⅳ.闰年or平年 Ⅴ.count和counter方法 1. count() 方法的使用场景 2. Counter 类的介绍 3. count() 与 Counter 的区别 4. Counter 的高级应用 5.Counter的另一种使用 Ⅵ.ma…

lesson52:CSS进阶指南:雪碧图与边框技术的创新应用

目录 一、CSS雪碧图&#xff1a;从性能优化到交互革命 1.1 技术原理与现代价值 1.2 2025年实现工具与自动化流程 1.2.1 构建工具集成方案 1.2.2 在线生成工具推荐 1.3 高级应用案例与代码实现 1.3.1 多状态按钮系统 1.3.2 响应式雪碧图实现 1.4 最佳实践与性能优化 二…

案例——从零开始搭建 ASP.NET Core 健康检查实例

1. 项目创建与基础设置 创建新项目 首先&#xff0c;创建一个新的 ASP.NET Core Web API 项目&#xff1a; dotnet new webapi -n HealthCheckDemo cd HealthCheckDemo添加必要的 NuGet 包 添加健康检查相关的 NuGet 包&#xff1a; dotnet add package Microsoft.AspNetCore.D…

【Java生产级避坑指南】8. Tomcat线程池下的内存地雷:ThreadLocal泄漏检测与实战解决

摘要:某金融交易系统(Spring Boot 2.7 + Tomcat 9)在线上运行时出现严重内存泄漏:堆内存(4GB)72小时内耗尽并触发OOM,日均200万请求场景下,Full GC频率从正常1次/天飙升至6次/小时。排查发现,根源是ThreadLocal未清理——Tomcat线程池复用线程时,UserInfo等大对象被T…

云端职达:你的AI求职专属猎头,颠覆传统招聘模式

在求职的“金三银四”或“金九银十”&#xff0c;每一分每一秒都弥足珍贵。面对浩如烟海的招聘信息&#xff0c;你是否还在花费大量时间一条条筛选、重复投递简历&#xff0c;最终却常常石沉大海&#xff1f;传统求职方式的低效和“已读不回”的窘境&#xff0c;让许多求职者感…

Parasoft C/C++test如何实现开发环境内嵌的安全检测

Parasoft 作为嵌入式质量与安全领域的全球领先供应商&#xff0c;其 C/Ctest 平台依托 IDE 级原生集成、实时合规检测引擎与缺陷闭环治理框架&#xff0c;将传统静态应用安全测试由项目末期集中执行前移至编码阶段&#xff0c;显著降低缺陷修复成本并缩短认证周期&#xff0c;为…

leetcode-每日一题-人员站位的方案数-C语言

3025. 人员站位的方案数 I 输入&#xff1a; 2 < n < 50 points[i].length 2 0 < points[i][0], points[i][1] < 50 points[i] 点对两两不同。 // 按x降序&#xff0c;按y升序 int cmp(const void *a, const void *b) {int *p *(int **)a;int *q *(int **)b;if(…

ClickHouse中的ON CLUSTER关键字

目录 ClickHouse中的ON CLUSTER关键字 前置基础 ClickHouse 中的 MergeTree 与 ReplicatedMergeTree ON CLUSTER 查询在集群上的正确用法(为什么 查询/写入数据 不用 ON CLUSTER) 与不使用 ON CLUSTER 的区别 注意事项与坑 常用配套命令 ClickHouse中的ON CLUSTER关键字 前置…

Python绘图动态可视化:实时音频流

在数据可视化中&#xff0c;动画是一种非常有效的方式&#xff0c;可以帮助我们更好地理解数据的变化和动态过程。Python 的 matplotlib.animation 模块提供了强大的功能来创建动画。本文将介绍如何使用 matplotlib.animation 创建简单的动画&#xff0c;并展示一个更复杂的实时…

【Vue2 ✨】Vue2 入门之旅(七):事件处理

在前几篇文章中&#xff0c;我们学习了指令与过滤器。本篇将介绍 事件处理&#xff0c;重点包括 v-on、事件修饰符以及键盘事件。 目录 事件绑定 v-on事件修饰符键盘事件小结 事件绑定 v-on Vue 使用 v-on&#xff08;缩写 &#xff09;来监听事件。 <div id"app&qu…

高效数据传输的秘密武器:Protobuf

当涉及到网络通信和数据存储时&#xff0c;数据序列化一直都是一个重要的话题&#xff1b;特别是现在很多公司都在推行微服务&#xff0c;数据序列化更是重中之重&#xff0c;通常会选择使用 JSON 作为数据交换格式&#xff0c;且 JSON 已经成为业界的主流。但是 Google 这么大…

腾讯混元翻译大模型Hunyuan-MT-7B:重塑跨语言沟通的技术革命

腾讯混元翻译大模型Hunyuan-MT-7B&#xff1a;重塑跨语言沟通的技术革命 腾讯混元Hunyuan-MT-7B大模型的发布标志着机器翻译领域进入全新时代&#xff0c;本文将深入解析这一突破性技术如何实现30种语言翻译冠军的卓越表现 一、Hunyuan-MT-7B核心架构解析 1.1 基于Transformer的…

End-To-End 之于推荐-kuaishou OneRec2 笔记

End_To_End 之于推荐onerec里&#xff0c;快手利用大模型做了推荐架构的革命&#xff0c;几个月后&#xff0c;v2之于v1是一些技术细节进行了进一步迭代&#xff0c;主要是以下两个方面&#xff1a; 1. 架构层面的突破&#xff1a;Lazy Decoder-Only 背景问题&#xff1a;V1 的…

【LeetCode】3670. 没有公共位的整数最大乘积 (SOSDP)

3670. 没有公共位的整数最大乘积 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; SOSDP 本题我们显然不能枚举每一个数对&#xff0c;n 的复杂度显然超时&#xff0c;所以考虑优化 我们考虑一个二进制数 mask&#xff0c;因为我们必须要选没有任…

Sping Web MVC入门

1.什么是Sping Web MVC1.1MVC定义2.什么是Spring MVC

LLM面试50问:NLP/RAG/部署/对齐/安全/多模态全覆盖

太好了!下面按你点名的 6 大主题(NLP、检索/RAG、部署、对齐、 安全、多模态)给出深度版答案 + 关键公式/推导 + 最小可跑示例代码 + 常见坑。都尽量精炼到“拿来即用/面试可白板推导”的粒度。 NLP(架构、位置编码、指令跟随) 1) RoPE 长上下文与缩放 要点:RoPE 将位置…

计算机网络技术(四)完结

七&#xff0c;虚拟局域网VLAN1&#xff0c;VLAN概述通过设置虚拟局域网来实现&#xff0c;pc之间实现快速安全通信。对比说明&#xff1a;之前交换机的广播来实现通信&#xff0c;但同意也带来了几个问题&#xff0c;过大的广播域&#xff0c;造成了带宽的浪费&#xff0c;过大…

VibeVoice 部署全指南:Windows 下的挑战与完整解决方案

VibeVoice 部署全指南&#xff1a;Windows 下的挑战与完整解决方案 目标读者&#xff1a;希望在本地部署 VibeVoice 进行文字转语音&#xff08;TTS&#xff09;的开发者、研究人员或爱好者 关键词&#xff1a;VibeVoice、FlashAttention-2、Windows 部署、CUDA 加速、FFmpeg、…

一次别开生面的Java面试

场景描述&#xff1a; 在一家知名互联网大厂的面试室中&#xff0c;谢飞机&#xff0c;一个自信满满的程序员&#xff0c;正在经历一场别开生面的Java面试。面试官以严肃的态度开始了这场技术问答。第一轮&#xff1a;基础知识问答 面试官&#xff1a;"我们先从简单的开始…