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

实习生:我用一个 LLM 模型实现了 RAG 的 embedding 和 generation 全部功能

本文的来源,是我前几天给实习生一个学习的小任务,用 ollama 推理引擎在本地电脑实现一个轻量级 RAG 系统。

当我去检查成果时,发生了以下对话:
“你用了什么 embedding 模型?”
“mistral-nemo”
“那 embedding 模型呢?”
“mistral-nemo”
“刚刚你说了 LLM 模型,我问的是 embedding 模型”
“就是这个模型”
“...”

顿时把我整蒙了,LLM 还能做文本嵌入?虽说现在的主流模型都是 transformer decoder 架构,但是也没法在推理时直接输出向量吧,用 LLM 做了这么久 agent 还没见过这种用法呢。

虽然感到很奇怪,但实习生的 demo 的确跑通了,不同的测试用例,也都在向量化后召回成功了。


掏出 ChatGPT:

为什么 ollama 可以调用 mistral nemo 模型的 embedding 方法计算文本的向量?简要结论先给出,然后展开说明机制:
👉 Ollama 能调用 Mistral-Nemo 的 embedding,是因为:
Ollama 在本地对外统一暴露了一层“模型能力抽象 API”,而 Mistral-Nemo 本身具备可用于嵌入的隐藏层表示(embeddings),Ollama 只是把这种能力封装成标准接口供你调用。
下面分层解释为什么这在技术上可行 + 为什么你“感觉”它像一个专门的 embedding 模型。
...

GPT 用幻觉忽悠我不是一次两次了,得深入证实一下 Ollama 的这个能力,然后我把 Ollama 的源码扒了下来:
注:以下调查基于 Ollama commit 099a0f18ef29a95d8d6c4fe1343e48e0d9f4cdd7 (2026.2.7)

  1. API 入口 — EmbedHandler
    server\routes.go line 692
    scheduleRunner 的第三个参数是 空的 capability 列表 []model.Capability{}。这意味着 embed 接口不要求模型具备 embedding 能力,任何模型都可以被调度。

  2. 创建 embedding-only 序列
    runner\llamarunner\runner.go line 759
    参数最终设置到序列的 embeddingOnly 字段:
    embeddingOnly: params.embedding

  3. 模型前向推理 — 关键的 t_embd 张量
    以 Llama 模型为例,在 C++ 层的前向传播中:
    llama\llama.cpp\src\models\llama.cpp line 139

    cur = inpL;cur = build_norm(cur,model.output_norm, NULL,LLM_NORM_RMS, -1);cb(cur, "result_norm", -1);res->t_embd = cur;// lm_headcur = build_lora_mm(model.output, cur);cb(cur, "result_output", -1);res->t_logits = cur;
  • inpL 是经过所有 Transformer 层之后的隐藏状态
  • 先做一次 RMSNorm(build_norm)
  • RMSNorm 之后的结果赋值给 res->t_embd — 这就是 embedding 张量
  • 然后再经过 lm_head(输出投影矩阵)得到 t_logits — 用于文本生成
  • 换句话说,embedding 就是 lm_head 之前、LayerNorm 之后的隐藏状态。

这样就石锤了,Ollama 确实可以直接输出 LLM 模型的 embedding。又浪费时间学到一个没太多用的小知识 o.O

http://www.jsqmd.com/news/370847/

相关文章:

  • 2026 年 AI 知识库部署方案商推荐:大模型对接、语义检索、智能问答一站式服务商 - 品牌2025
  • 多机系统短路故障后时域仿真技术在电气工程领域的奇妙应用
  • 音频比特率设置多少最好?320kbps 真的比 128kbps 好很多吗
  • 软件神器 --- U盘烧录工具 之 rufus
  • 2026年低分上统招本科申请机构推荐:成都海学云帆教育领衔创新实践 - 深度智识库
  • Linux基础——IO性能测试及IOPS计算方法
  • AI元人文:圆融具身
  • Java毕设项目推荐-基于springboot的线上教学平台面向新工科课程线上教学辅助平台【附源码+文档,调试定制服务】
  • Java毕设项目推荐-基于springboot的校园二手物品推荐系统校园二手物品置换系统设计与实现【附源码+文档,调试定制服务】
  • 策马扬鞭迎新春|时序数据库 IoTDB 陪你稳稳过年
  • 资质合规优先!2026 AED(自动体外除颤器)品牌厂家推荐排行 长效耐用/智能管控/多场景适配 - 极欧测评
  • Java计算机毕设之基于springboot的面向新工科课程线上教学辅助平台线上教学平台(完整前后端代码+说明文档+LW,调试定制等)
  • Java计算机毕设之基于JAVA的人才招聘系统的设计与实现基于springboot的城市人才招聘系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 考生必看!2026主治医师3位靠谱授课老师盘点,听对课少走1年弯路 - 医考机构品牌测评专家
  • Linux基础——IOPS计算方法
  • 镇江本地生活代运营测评 三十六行镇江分公司实力解析 - 野榜数据排行
  • 2026年主治医师备考指南:5大金牌讲师课程风格深度解析,选对老师通关无忧! - 医考机构品牌测评专家
  • 2026年质量好的燕麦磨面机/莜麦磨面机精选供应商推荐口碑排行 - 品牌宣传支持者
  • 2026年知名的三合一陶瓷衬板/复合耐磨陶瓷衬板哪家专业制造厂家实力参考 - 品牌宣传支持者
  • 2026年净水行业白皮书:高标准水处理技术评测与选型战略指南 - 水业策论
  • 一行命令搞定!用 FFmpeg 按指定码率压缩视频
  • 2026年最新工业AI大模型全球格局及推荐
  • Linux基础——IOPS计算方法及IO性能测试
  • 【毕业设计】基于springboot的乡村书屋数字化资源平台的设计与实现(源码+文档+远程调试,全bao定制等)
  • Tag-1770804292922
  • 【毕业设计】基于springboot的面向新工科课程线上教学辅助平台(源码+文档+远程调试,全bao定制等)
  • 土耳其移民之旅:专业的土耳其移民中介机构让我从签证烦恼到欧洲商务自由 - 行业观察日记
  • 2026年靠谱的耐磨铸石板/玄武岩铸石板口碑排行精选供应商推荐 - 品牌宣传支持者
  • 电子签章在数字化进程中的占比重吗?
  • 2026年重庆旅游包车权威榜单 口碑靠谱品牌全景解析 适配各类出行场景 - 深度智识库