本文系统介绍了Embedding技术,包括基本概念、工作原理、向量相似度计算及常用模型。重点讲解了向量数据库Milvus的架构和使用方法,并通过实战案例详细展示了如何使用LangChain4j、阿里text-embedding-v4和Milvus构建完整的向量检索系统,帮助开发者掌握从文本到向量的转换和语义检索技术,附完整源码可实践。


什么是 Embedding

1.1 一句话解释

Embedding(嵌入)= 把文字转换成数字向量

1.2 形象理解

想象你要给每个人建立档案

传统方式(文字)

Embedding 方式(向量)

这些数字向量包含了所有信息,而且相似的人向量会更接近

1.3 核心特点

三个核心特点

    1. 固定维度:无论文本长短,都转换为固定长度的向量(如 768 维、1536 维)
    1. 语义相似:意思相近的文本,向量也相近
    1. 可计算:可以用数学方法计算相似度
  1. 为什么需要 Embedding


2.1 计算机不懂文字

问题: 计算机如何判断两段文字是否相似?

错误方法:字符串匹配

正确方法:Embedding + 向量相似度

2.2 应用场景

2.3 实际案例对比

场景:在知识库中搜索

用户问题: “如何重置密码?”

知识库中的文档:

    1. “忘记密码怎么办”
    1. “修改登录凭证的方法”
    1. “公司年会时间安排”

传统关键词搜索:

  • • 搜索 “重置密码”
  • • 结果:无匹配 (因为知识库中没有"重置"这个词)

Embedding 语义搜索:

  • • 计算问题的 embedding
  • • 与所有文档的 embedding 计算相似度
  • • 结果:
  • • 文档1:“忘记密码怎么办” - 相似度 0.89
  • • 文档2:“修改登录凭证的方法” - 相似度 0.76
  • • 文档3:“公司年会时间安排” - 相似度 0.12
  1. Embedding 的工作原理

3.1 从词向量到句子向量

早期:Word2Vec(词向量)

特点:

  • • 只能处理单个词
  • • 相似的词向量相近(apple 和 orange)
现代:Transformer(句子向量)

特点:

  • • 可以处理整个句子/段落
  • • 理解上下文关系
  • • 捕捉语义信息

3.2 Embedding 模型的训练

训练方式举例:

    1. 对比学习
  • • 正样本对:"天气真好" <-> "今天天气不错" → 向量要接近
  • • 负样本对:"天气真好" <-> "我喜欢编程" → 向量要远离
    1. 问答对训练
  • • 问题:"如何学习 Python?"
  • • 答案:"可以从基础语法开始..."
  • • 目标:问题和答案的 embedding 要接近

3.3 维度的意义

为什么是 768 维或 1536 维?

每一维可以理解为捕捉某种语义特征:

直观比喻:

  • • 1 维:只能表示"大小"(一条线)
  • • 2 维:能表示"长宽"(一个平面)
  • • 3 维:能表示"长宽高"(一个空间)
  • • 1536 维:能表示 1536 种不同的语义特征(超空间)
  1. 向量相似度计算

4.1 三种常见相似度算法

余弦相似度(最常用)

公式:

图示:

优点:

  • • 不受向量长度影响
  • • 只关注方向
  • • 适合文本相似度
欧氏距离

点积(内积)

对比

余弦相似度:文本语义比较、文档检索排序、内容推荐系统(多数场景用的都是这个)

欧氏距离:空间位置测量、聚类分析、异常检测

点积相似度:快速初步筛选、计算资源有限场景(说白了,就是比较拉)

4.2 实际例子

余弦相似度计算:

image-20251123230640603

4.3 相似度阈值设置

  1. 常见的 Embedding 模型

5.1 国际主流模型

5.2 国内主流模型

5.3 开源 vs 闭源

5.4 模型性能对比

中文检索任务 Benchmark:

推荐选择:

  • • 🥇 中文 RAG:阿里 text-embedding-v4
  • • 🥈 预算有限:bge-large-zh(开源)
  • • 🥉 英文为主:OpenAI text-embedding-3-small
  1. 向量数据库介绍

6.1 为什么需要向量数据库?

问题: 假设你有 100 万个文档的 embedding

暴力搜索:

向量数据库:

6.2 常见向量数据库对比

6.3 Milvus 架构

核心概念:

    1. Collection(集合)
  • • 类似关系型数据库的"表"
  • • 存储同一类型的向量
    1. Field(字段)
  • • 向量字段:存储 embedding
  • • 标量字段:存储元数据(ID、文本、标签等)
    1. Index(索引)
  • • HNSW:高性能,内存占用大
  • • IVF_FLAT:平衡性能和内存
  • • DiskANN:处理超大规模
    1. Partition(分区)
  • • 按业务逻辑分区(如按日期、类别)
  • • 提高查询效率

6.4 向量检索流程

  1. 实战:LangChain4j + 阿里 text-embedding-v4 + Milvus

7.1 环境准备

依赖配置(Maven)
<dependencies>    <!-- LangChain4j 核心 -->    <dependency>        <groupId>dev.langchain4j</groupId>        <artifactId>langchain4j</artifactId>        <version>0.35.0</version>    </dependency>    <!-- LangChain4j DashScope(阿里通义)集成 -->    <dependency>        <groupId>dev.langchain4j</groupId>        <artifactId>langchain4j-dashscope</artifactId>        <version>0.35.0</version>    </dependency>    <!-- LangChain4j Milvus 支持 -->    <dependency>        <groupId>dev.langchain4j</groupId>        <artifactId>langchain4j-milvus</artifactId>        <version>0.35.0</version>    </dependency>    <!-- 日志 -->    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-simple</artifactId>        <version>2.0.9</version>    </dependency></dependencies>
Docker 启动 Milvus
# 下载 docker-compose.ymlwget https://github.com/milvus-io/milvus/releases/download/v2.4.1/milvus-standalone-docker-compose.yml -O docker-compose.yml# 启动 Milvusdocker-compose up -d# 检查状态docker-compose ps# 访问 Milvus# 默认端口:19530# Attu 可视化界面:8000

Milvus 服务说明:

  • Milvus:向量数据库服务(端口 19530)
  • Etcd:元数据存储
  • MinIO:对象存储
  • Attu:Web 管理界面(可选,端口 3000)

7.2 核心代码实现

步骤 1:创建阿里云 Embedding 模型

使用 langchain4j-dashscope 官方集成,无需自己实现 HTTP 调用:

import dev.langchain4j.model.dashscope.QwenEmbeddingModel;import dev.langchain4j.model.embedding.EmbeddingModel;import java.time.Duration;/** * 阿里云 DashScope Embedding 模型工厂 */publicclassEmbeddingModelFactory {    /**     * 创建 text-embedding-v4 模型     *     * @param apiKey 阿里云 API Key     * @return Embedding 模型实例     */    publicstatic EmbeddingModel createQwenEmbeddingModel(String apiKey) {        return QwenEmbeddingModel.builder()                .apiKey(apiKey)                .modelName("text-embedding-v4")  // 使用 v4 版本                .build();    }    /**     * 创建 text-embedding-v3 模型(如果需要)     */    publicstatic EmbeddingModel createQwenEmbeddingV3(String apiKey) {        return QwenEmbeddingModel.builder()                .apiKey(apiKey)                .modelName("text-embedding-v3")                .build();    }    /**     * 创建带详细日志的模型(用于调试)     */    publicstatic EmbeddingModel createQwenEmbeddingWithLogs(String apiKey) {        return QwenEmbeddingModel.builder()                .apiKey(apiKey)                .modelName("text-embedding-v4")                .build();    }}
步骤 2:初始化 Milvus 连接
import dev.langchain4j.data.segment.TextSegment;import dev.langchain4j.store.embedding.EmbeddingStore;import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore;import io.milvus.param.IndexType;import io.milvus.param.MetricType;/** * Milvus 向量存储配置 */publicclassMilvusConfig {    privatestaticfinalStringMILVUS_HOST="localhost";    privatestaticfinalintMILVUS_PORT=19530;    privatestaticfinalStringCOLLECTION_NAME="knowledge_base_v2";  // 改用新集合名    privatestaticfinalintDIMENSION=1024; // text-embedding-v4 维度    /**     * 创建 Milvus Embedding 存储     * 不指定索引类型,让 LangChain4j 自动选择     */    publicstatic EmbeddingStore<TextSegment> createEmbeddingStore() {        return MilvusEmbeddingStore.builder()                .host(MILVUS_HOST)           // Milvus 主机地址                .port(MILVUS_PORT)           // Milvus 端口                .collectionName(COLLECTION_NAME)                .dimension(DIMENSION)                // 不指定 indexType,使用默认配置                // 不指定 metricType,使用默认配置                .build();    }    /**     * 创建 IVF_FLAT 索引的存储(适合中等数据集)     * 注意:LangChain4j 的 MilvusEmbeddingStore 可能不支持自定义 IVF 参数     * 建议使用 FLAT 或 HNSW     */    publicstatic EmbeddingStore<TextSegment> createIVFFlatStore() {        return MilvusEmbeddingStore.builder()                .host(MILVUS_HOST)                .port(MILVUS_PORT)                .collectionName(COLLECTION_NAME + "_ivf")                .dimension(DIMENSION)                .indexType(IndexType.IVF_FLAT)                .metricType(MetricType.IP)                .build();    }    /**     * 创建高性能配置的 Milvus 存储(HNSW 索引)     * 适合大数据集,性能最好但内存占用大     */    publicstatic EmbeddingStore<TextSegment> createHighPerformanceStore() {        return MilvusEmbeddingStore.builder()                .host(MILVUS_HOST)                .port(MILVUS_PORT)                .collectionName(COLLECTION_NAME + "_high_perf")                .dimension(DIMENSION)                .indexType(IndexType.HNSW)       // HNSW:更高性能,更大内存                .metricType(MetricType.COSINE)   // 余弦相似度                .build();    }    /**     * 创建自定义配置的 Milvus 存储     */    publicstatic EmbeddingStore<TextSegment> createCustomStore(            String host,            int port,            String collectionName,            int dimension) {        return MilvusEmbeddingStore.builder()                .host(host)                .port(port)                .collectionName(collectionName)                .dimension(dimension)                .indexType(IndexType.FLAT)       // 使用 FLAT 避免参数问题                .metricType(MetricType.IP)                .build();    }}
步骤 3:文档索引(存储)
import com.example.embedding.config.EmbeddingModelFactory;import com.example.embedding.config.MilvusConfig;import dev.langchain4j.data.document.Document;import dev.langchain4j.data.document.DocumentSplitter;import dev.langchain4j.data.document.splitter.DocumentSplitters;import dev.langchain4j.data.embedding.Embedding;import dev.langchain4j.data.segment.TextSegment;import dev.langchain4j.model.embedding.EmbeddingModel;import dev.langchain4j.store.embedding.EmbeddingStore;import java.util.List;/** * 文档索引服务:将文档切分、向量化并存储到 Milvus */publicclassDocumentIndexer {    privatefinal EmbeddingModel embeddingModel;    privatefinal EmbeddingStore<TextSegment> embeddingStore;    privatefinal DocumentSplitter documentSplitter;    publicDocumentIndexer(String apiKey) {        // 使用 LangChain4j 官方的 DashScope 集成        this.embeddingModel = EmbeddingModelFactory.createQwenEmbeddingModel(apiKey);        this.embeddingStore = MilvusConfig.createEmbeddingStore();        // 文档分割器:每 500 字符一个片段,重叠 50 字符        this.documentSplitter = DocumentSplitters.recursive(500, 50);    }    /**     * 索引单个文档     */    publicvoidindexDocument(String documentText) {        System.out.println("开始索引文档...");        // 1. 创建文档        Documentdocument= Document.from(documentText);        // 2. 切分文档        List<TextSegment> segments = documentSplitter.split(document);        System.out.println("文档切分为 " + segments.size() + " 个片段");        // 3. 生成 embeddings        System.out.println("正在生成向量...");        List<Embedding> embeddings = embeddingModel.embedAll(segments).content();        System.out.println("生成了 " + embeddings.size() + " 个向量");        // 4. 存储到 Milvus        System.out.println("正在存储到 Milvus...");        embeddingStore.addAll(embeddings, segments);        System.out.println("✅ 成功存储到 Milvus");    }    /**     * 批量索引多个文档     */    publicvoidindexDocuments(List<String> documents) {        for (inti=0; i < documents.size(); i++) {            System.out.println("\n========================================");            System.out.println("索引文档 " + (i + 1) + "/" + documents.size());            System.out.println("========================================");            indexDocument(documents.get(i));        }    }    /**     * 索引带元数据的文档     */    publicvoidindexDocumentWithMetadata(String text, String category, String source) {        Documentdocument= Document.from(text);        List<TextSegment> segments = documentSplitter.split(document);        // 为每个片段添加元数据        for (TextSegment segment : segments) {            segment.metadata().put("category", category);            segment.metadata().put("source", source);            segment.metadata().put("timestamp", String.valueOf(System.currentTimeMillis()));        }        List<Embedding> embeddings = embeddingModel.embedAll(segments).content();        embeddingStore.addAll(embeddings, segments);        System.out.println("✅ 存储了 " + segments.size() + " 个片段(类别:" + category + ")");    }}
步骤 4:语义检索(查询)
import com.example.embedding.config.EmbeddingModelFactory;import com.example.embedding.config.MilvusConfig;import dev.langchain4j.data.embedding.Embedding;import dev.langchain4j.data.segment.TextSegment;import dev.langchain4j.model.embedding.EmbeddingModel;import dev.langchain4j.store.embedding.EmbeddingMatch;import dev.langchain4j.store.embedding.EmbeddingStore;import java.util.List;/** * 语义检索服务 */publicclassSemanticSearcher {    privatefinal EmbeddingModel embeddingModel;    privatefinal EmbeddingStore<TextSegment> embeddingStore;    publicSemanticSearcher(String apiKey) {        // 使用 LangChain4j 官方的 DashScope 集成        this.embeddingModel = EmbeddingModelFactory.createQwenEmbeddingModel(apiKey);        this.embeddingStore = MilvusConfig.createEmbeddingStore();    }    /**     * 语义搜索     *     * @param query 查询文本     * @param maxResults 返回最多几个结果     * @param minScore 最小相似度阈值(0-1)     * @return 相关文档列表     */    public List<EmbeddingMatch<TextSegment>> search(String query,                                                     int maxResults,                                                     double minScore) {        // 1. 将查询转换为向量        System.out.println("正在生成查询向量...");        EmbeddingqueryEmbedding= embeddingModel.embed(query).content();        // 2. 在 Milvus 中检索        System.out.println("正在检索...");        List<EmbeddingMatch<TextSegment>> matches = embeddingStore.findRelevant(                queryEmbedding,                maxResults,                minScore        );        return matches;    }    /**     * 打印搜索结果     */    publicvoidprintSearchResults(String query) {        System.out.println("\n==========================================");        System.out.println("查询:" + query);        System.out.println("==========================================");        List<EmbeddingMatch<TextSegment>> results = search(query, 5, 0.5);        if (results.isEmpty()) {            System.out.println("❌ 未找到相关内容");            return;        }        for (inti=0; i < results.size(); i++) {            EmbeddingMatch<TextSegment> match = results.get(i);            System.out.printf("\n📄 结果 %d (相似度: %.3f):\n", i + 1, match.score());            System.out.println("----------------------------------------");            System.out.println(match.embedded().text());            System.out.println("----------------------------------------");        }    }    /**     * 搜索并返回最佳匹配     */    public String searchBestMatch(String query) {        List<EmbeddingMatch<TextSegment>> results = search(query, 1, 0.5);        if (results.isEmpty()) {            return"未找到相关内容";        }        return results.get(0).embedded().text();    }    /**     * 按类别搜索(需要先索引时添加了元数据)     */    publicvoidsearchByCategory(String query, String category) {        List<EmbeddingMatch<TextSegment>> matches = search(query, 10, 0.5);        // 过滤指定类别        List<EmbeddingMatch<TextSegment>> filtered = matches.stream()                .filter(match -> {                    StringmetaCategory= match.embedded().metadata("category");                    return category.equals(metaCategory);                })                .toList();        System.out.println("\n类别「" + category + "」的搜索结果:");        for (inti=0; i < filtered.size(); i++) {            EmbeddingMatch<TextSegment> match = filtered.get(i);            System.out.printf("\n结果 %d (相似度: %.3f):\n", i + 1, match.score());            System.out.println(match.embedded().text());        }    }}
步骤 5:完整示例程序
import com.example.embedding.service.DocumentIndexer;import com.example.embedding.service.SemanticSearcher;import java.util.List;import java.util.Scanner;/** * Embedding Demo 主程序 * 演示:文档索引 + 语义检索 */publicclassEmbeddingDemo {    publicstaticvoidmain(String[] args) {        // ============ 配置 API Key ============        // 替换为你的阿里云 API Key        // 获取地址:https://dashscope.aliyun.com/        StringapiKey= getApiKey();        // ============ 第一步:索引文档 ============        System.out.println("========================================");        System.out.println("    📚 开始索引知识库文档");        System.out.println("========================================");        DocumentIndexerindexer=newDocumentIndexer(apiKey);        // 准备知识库文档        List<String> knowledgeBase = List.of(                """                密码重置流程:                1. 访问登录页面,点击"忘记密码"                2. 输入注册邮箱                3. 查收邮件中的重置链接                4. 设置新密码(至少8位,包含字母和数字)                5. 使用新密码登录                注意:重置链接有效期为24小时。                """,                """                账号安全建议:                - 定期更换密码(建议每3个月一次)                - 不要使用弱密码(如123456、生日等)                - 启用两步验证增强安全性                - 不要在多个网站使用相同密码                - 发现异常登录及时修改密码                """,                """                公司年会安排:                时间:2025年1月20日 18:00-22:00                地点:香格里拉大酒店3楼宴会厅                着装要求:商务正装                节目报名:请在1月10日前提交到人事部                抽奖活动:特等奖iPhone 15 Pro一部                """,                """                请假流程:                1. 提前3天在OA系统提交请假申请                2. 等待直属主管审批                3. 超过3天需要部门总监审批                4. 病假需要提供医院证明                5. 年假需要提前一周申请                特殊情况:紧急事假可电话或微信告知主管。                """,                """                报销流程:                1. 在财务系统提交报销申请                2. 上传发票照片(需清晰可见)                3. 填写报销事由和金额                4. 主管审批后提交财务部                5. 财务审核通过后3-5个工作日到账                报销范围:差旅费、招待费、办公用品等                """,                """                远程办公政策:                - 每周可申请1-2天远程办公                - 需提前一天在系统申请                - 保持在线状态,及时响应消息                - 参加线上会议必须开启摄像头                - 工作时间与办公室一致(9:00-18:00)                """        );        // 索引所有文档        indexer.indexDocuments(knowledgeBase);        System.out.println("\n========================================");        System.out.println("    ✅ 文档索引完成!");        System.out.println("========================================");        // 等待索引生效        System.out.println("\n等待 Milvus 索引生效(2秒)...");        try {            Thread.sleep(2000);        } catch (InterruptedException e) {            e.printStackTrace();        }        // ============ 第二步:语义检索 ============        System.out.println("\n========================================");        System.out.println("    🔍 开始语义检索测试");        System.out.println("========================================");        SemanticSearchersearcher=newSemanticSearcher(apiKey);        // 预设测试查询        List<String> testQueries = List.of(                "我忘记密码了怎么办?",                "我想请病假,需要什么流程?",                "公司年会什么时候举办?",                "如何保护账号安全?",                "可以在家办公吗?",                "报销需要多久到账?"        );        for (String query : testQueries) {            searcher.printSearchResults(query);            System.out.println("\n");        }        System.out.println("========================================");        System.out.println("    ✅ 测试完成!");        System.out.println("========================================");        // ============ 第三步:交互式查询 ============        interactiveSearch(searcher);    }    /**     * 交互式查询模式     */    privatestaticvoidinteractiveSearch(SemanticSearcher searcher) {        System.out.println("\n========================================");        System.out.println("    💬 进入交互式查询模式");        System.out.println("    输入 'exit' 退出");        System.out.println("========================================\n");        Scannerscanner=newScanner(System.in);        while (true) {            System.out.print("请输入查询内容:");            Stringquery= scanner.nextLine().trim();            if (query.equalsIgnoreCase("exit")) {                System.out.println("👋 再见!");                break;            }            if (query.isEmpty()) {                continue;            }            try {                searcher.printSearchResults(query);                System.out.println();            } catch (Exception e) {                System.err.println("❌ 查询失败:" + e.getMessage());            }        }        scanner.close();    }    /**     * 获取 API Key     * 优先从环境变量读取,如果没有则使用硬编码的值     */    privatestatic String getApiKey() {        // 方式1:从环境变量读取(推荐)        StringapiKey= System.getenv("DASHSCOPE_API_KEY");        // 方式2:从系统属性读取        if (apiKey == null || apiKey.isEmpty()) {            apiKey = System.getProperty("dashscope.api.key");        }        // 方式3:硬编码(不推荐,仅用于测试)        if (apiKey == null || apiKey.isEmpty()) {            // TODO: 替换为你的 API Key            apiKey = "sk-********c4573";        }        return apiKey;    }}

7.3 运行结果示例

milvus的数据展示

最终输出展示

========================================    📚 开始索引知识库文档================================================================================索引文档 1/6========================================开始索引文档...文档切分为 1 个片段正在生成向量...生成了 1 个向量正在存储到 Milvus...✅ 成功存储到 Milvus========================================索引文档 2/6========================================开始索引文档...文档切分为 1 个片段正在生成向量...生成了 1 个向量正在存储到 Milvus...✅ 成功存储到 Milvus========================================索引文档 3/6========================================开始索引文档...文档切分为 1 个片段正在生成向量...生成了 1 个向量正在存储到 Milvus...✅ 成功存储到 Milvus========================================索引文档 4/6========================================开始索引文档...文档切分为 1 个片段正在生成向量...生成了 1 个向量正在存储到 Milvus...✅ 成功存储到 Milvus========================================索引文档 5/6========================================开始索引文档...文档切分为 1 个片段正在生成向量...生成了 1 个向量正在存储到 Milvus...✅ 成功存储到 Milvus========================================索引文档 6/6========================================开始索引文档...文档切分为 1 个片段正在生成向量...生成了 1 个向量正在存储到 Milvus...✅ 成功存储到 Milvus========================================    ✅ 文档索引完成!========================================等待 Milvus 索引生效(2秒)...========================================    🔍 开始语义检索测试==================================================================================查询:我忘记密码了怎么办?==========================================正在生成查询向量...正在检索...📄 结果 1 (相似度: 0.867):----------------------------------------密码重置流程:1. 访问登录页面,点击"忘记密码"2. 输入注册邮箱3. 查收邮件中的重置链接4. 设置新密码(至少8位,包含字母和数字)5. 使用新密码登录注意:重置链接有效期为24小时。----------------------------------------📄 结果 2 (相似度: 0.798):----------------------------------------账号安全建议:- 定期更换密码(建议每3个月一次)- 不要使用弱密码(如123456、生日等)- 启用两步验证增强安全性- 不要在多个网站使用相同密码- 发现异常登录及时修改密码----------------------------------------📄 结果 3 (相似度: 0.687):----------------------------------------请假流程:1. 提前3天在OA系统提交请假申请2. 等待直属主管审批3. 超过3天需要部门总监审批4. 病假需要提供医院证明5. 年假需要提前一周申请特殊情况:紧急事假可电话或微信告知主管。----------------------------------------📄 结果 4 (相似度: 0.672):----------------------------------------报销流程:1. 在财务系统提交报销申请2. 上传发票照片(需清晰可见)3. 填写报销事由和金额4. 主管审批后提交财务部5. 财务审核通过后3-5个工作日到账报销范围:差旅费、招待费、办公用品等----------------------------------------📄 结果 5 (相似度: 0.657):----------------------------------------远程办公政策:- 每周可申请1-2天远程办公- 需提前一天在系统申请- 保持在线状态,及时响应消息- 参加线上会议必须开启摄像头- 工作时间与办公室一致(9:00-18:00)----------------------------------------==========================================查询:我想请病假,需要什么流程?==========================================正在生成查询向量...正在检索...📄 结果 1 (相似度: 0.875):----------------------------------------请假流程:1. 提前3天在OA系统提交请假申请2. 等待直属主管审批3. 超过3天需要部门总监审批4. 病假需要提供医院证明5. 年假需要提前一周申请特殊情况:紧急事假可电话或微信告知主管。----------------------------------------📄 结果 2 (相似度: 0.773):----------------------------------------报销流程:1. 在财务系统提交报销申请2. 上传发票照片(需清晰可见)3. 填写报销事由和金额4. 主管审批后提交财务部5. 财务审核通过后3-5个工作日到账报销范围:差旅费、招待费、办公用品等----------------------------------------📄 结果 3 (相似度: 0.766):----------------------------------------远程办公政策:- 每周可申请1-2天远程办公- 需提前一天在系统申请- 保持在线状态,及时响应消息- 参加线上会议必须开启摄像头- 工作时间与办公室一致(9:00-18:00)----------------------------------------📄 结果 4 (相似度: 0.686):----------------------------------------公司年会安排:时间:2025年1月20日 18:00-22:00地点:香格里拉大酒店3楼宴会厅着装要求:商务正装节目报名:请在1月10日前提交到人事部抽奖活动:特等奖iPhone 15 Pro一部----------------------------------------📄 结果 5 (相似度: 0.673):----------------------------------------密码重置流程:1. 访问登录页面,点击"忘记密码"2. 输入注册邮箱3. 查收邮件中的重置链接4. 设置新密码(至少8位,包含字母和数字)5. 使用新密码登录注意:重置链接有效期为24小时。----------------------------------------

AI时代,未来的就业机会在哪里?

答案就藏在大模型的浪潮里。从ChatGPT、DeepSeek等日常工具,到自然语言处理、计算机视觉、多模态等核心领域,技术普惠化、应用垂直化与生态开源化正催生Prompt工程师、自然语言处理、计算机视觉工程师、大模型算法工程师、AI应用产品经理等AI岗位。

在这里插入图片描述

掌握大模型技能,就是把握高薪未来。

那么,普通人如何抓住大模型风口?

AI技术的普及对个人能力提出了新的要求,在AI时代,持续学习和适应新技术变得尤为重要。无论是企业还是个人,都需要不断更新知识体系,提升与AI协作的能力,以适应不断变化的工作环境。

因此,这里给大家整理了一份《2025最新大模型全套学习资源》,包括2025最新大模型学习路线、大模型书籍、视频教程、项目实战、最新行业报告、面试题等,带你从零基础入门到精通,快速掌握大模型技术!

由于篇幅有限,有需要的小伙伴可以扫码获取!

在这里插入图片描述

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

5. 大模型行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

为什么大家都在学AI大模型?

随着AI技术的发展,企业对人才的需求从“单一技术”转向 “AI+行业”双背景。企业对人才的需求从“单一技术”转向 “AI+行业”双背景。金融+AI、制造+AI、医疗+AI等跨界岗位薪资涨幅达30%-50%。

同时很多人面临优化裁员,近期科技巨头英特尔裁员2万人,传统岗位不断缩减,因此转行AI势在必行!

在这里插入图片描述

这些资料有用吗?

这份资料由我们和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

大模型全套学习资料已整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费】

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐