混合检索实战:从零到精通,提升召回率17%,收藏必备!

「文智助手」全场景办公AI助理AI+OPC全流程实践方案(大赛作品) 阅读详情

本文详细介绍了混合检索系统在金融保险公司的应用,通过BM25和向量检索的结合,利用RRF算法实现结果融合,有效提升了召回率17%。文章深入解析了BM25和向量检索的原理、参数设置,以及RRF融合算法的实现细节和k值选择,并提供了完整的代码实现。此外,还分享了面试时如何回答混合检索相关问题的技巧,以及实际部署中踩过的坑,帮助读者更好地理解和应用混合检索技术。

前段时间有个学员找我复盘,他去面京东的AI算法岗,项目经历里写了一个金融保险公司的RAG问答系统,提到"用混合检索把召回率提升了17%"。

面试官一上来就很感兴趣,问他:“你这个混合检索是怎么做的?”

他答:“用了BM25加向量检索,然后用RRF做结果融合。”

面试官点点头,追问:“BM25和向量检索的权重比例你是怎么定的?”

他答:“用了RRF,不需要手动设置权重。”

面试官继续追:“RRF的k值你用的多少?”

他答:“用的默认值,60。”

面试官追得更紧了:“k=60这个数字是怎么来的?你为什么不用50,不用100?”

他卡住了。

面试官最后说了一句话:“你能说出用了什么,但说不出为什么这么用,这在生产环境里是不够的。”

这句话把问题说透了。混合检索不是把两种方法拼在一起那么简单,每一个参数背后都有它的道理。今天我们就把这件事从头讲清楚。

纯向量检索为什么不够用?

在讲混合检索之前,得先搞清楚一个问题:向量检索那么强,为什么还需要BM25?

我们项目的背景是这样的:金融保险公司,文档库里有5000份保险合同和理赔文档,用户通过对话系统查询保险条款、理赔规则、投保细节。这类场景有个非常典型的特点——用户的查询里经常包含大量专有名词和精确词。

比如用户问:“平安健康险2023版的等待期是多少天?”

这个查询里,"平安健康险2023版"是一个精确的产品标识,"等待期"是保险行业的专有术语。

向量检索怎么处理这个查询?它把整个问题编码成一个向量,然后在文档库里找语义最相近的段落。问题来了:向量模型学到的是语义相似性,“等待期"这个词在语义空间里和"观察期”、“免责期”、"生效时间"都很接近。结果向量检索可能返回的是另一个产品(比如中国人寿某款健康险)的等待期条款,因为语义上确实很像,但产品名称对不上。

这就是向量检索的核心弱点:对精确关键词、产品编号、专有名词,它的召回能力明显不足。

BM25在这个场景下有天然优势。BM25是基于词频统计的检索算法,"平安健康险2023版"这个字符串如果在某个文档里精确出现,BM25就会给这个文档很高的分数。对于长尾稀疏查询——也就是那些包含特定词汇、在语料里出现频次不高的查询——BM25的表现往往好于向量检索。

BM25 vs 向量检索 vs 混合检索 能力对比

BM25 vs 向量检索 vs 混合检索 能力对比

用一个具体数字说明:在我们的测试集中,对于包含产品名称或专有术语的查询,纯向量检索的Recall@5只有0.48,而BM25单独使用能到0.71。但对于语义模糊、措辞多样的查询(比如"发生事故后要怎么报案",用户可能说"出险"也可能说"理赔申请"),BM25的召回率只有0.54,向量检索能到0.79。两者各有擅长,所以我们需要混合。

要真正用好BM25,光知道"它擅长精确词匹配"是不够的,还得搞清楚它内部是怎么打分的,参数背后是什么逻辑。

BM25原理:词频饱和与长度归一化

BM25的全称是Best Match 25,是Okapi BM25的简称,Robertson等人在1990年代提出。它的核心公式是:
在这里插入图片描述

公式里有几个关键部分,逐一拆开看。

IDF(逆文档频率):一个词在越少文档里出现,它的IDF越高,说明这个词越有区分度。"等待期"在保险合同里不算高频词,IDF相对较高;"保险"这个词几乎每个文档都有,IDF接近零,对检索贡献很小。

tf(词频):这个词在当前文档里出现了多少次。出现次数越多,分数越高,但BM25做了饱和处理。

k1(词频饱和参数,默认1.5):这是BM25最重要的参数之一。它控制词频对分数的边际贡献。如果k1很大,词频越高分数越高,线性增长;如果k1很小,词频超过一定次数后增益就趋于饱和。默认值1.5在大多数场景下表现稳定。在我们的保险文档场景里,由于文档都是条款性文本,词频分布比较均匀,k1不需要调整。

b(长度归一化,默认0.75):控制文档长度对分数的影响程度。b=1表示完全做长度归一化,b=0表示不做归一化。保险合同文档长短差异较大,有的免责条款只有几百字,有的理赔细则有几千字,b=0.75能有效避免长文档被过度惩罚。

avgdl:文档库中所有文档的平均长度,|D|是当前文档长度。

在Python里实现BM25,我们用的是rank_bm25库,代码如下:

from rank_bm25 import BM25Okapi
import jieba

classBM25Retriever:
    def__init__(self, documents, k1=1.5, b=0.75):
        # 对文档做中文分词
        tokenized_docs = [list(jieba.cut(doc)) for doc in documents]
        self.bm25 = BM25Okapi(tokenized_docs, k1=k1, b=b)
        self.documents = documents

    defretrieve(self, query, top_k=20):
        tokenized_query = list(jieba.cut(query))
        scores = self.bm25.get_scores(tokenized_query)
        # 返回top_k个文档的索引和分数
        top_indices = scores.argsort()[-top_k:][::-1]
        return [(idx, scores[idx]) for idx in top_indices]

如果线上系统已经有Elasticsearch,也可以直接用ES自带的BM25实现。ES从5.0版本开始默认使用BM25替代TF-IDF,配置如下:

{
  "settings": {
    "similarity": {
      "custom_bm25": {
        "type": "BM25",
        "k1": 1.5,
        "b": 0.75
      }
    }
  },
"mappings": {
    "properties": {
      "content": {
        "type": "text",
        "similarity": "custom_bm25"
      }
    }
  }
}

BM25这端搞清楚了,另一端的向量检索同样有不少工程决策需要做,尤其是中文场景下Embedding模型的选型,选错了对效果影响很大。

向量检索:Embedding模型选择与索引结构

向量检索这块,中文场景下Embedding模型的选择直接影响召回质量。我们在项目里对比测试了几个方案:

  • text2vec-large-chinese:中文优化,在中文语义理解上表现不错,但向量维度1024,索引体积较大
  • BGE-large-zh(BAAI/bge-large-zh-v1.5):当前中文开源Embedding效果最好的选项之一,MTEB中文榜单长期排名靠前,维度1024
  • BGE-m3:支持多语言,在混合中英文的保险条款场景里有优势(部分条款会引用英文缩写如"IPO锁定期")

最终选了BGE-large-zh-v1.5,在我们的业务测试集上比text2vec高出约4个百分点。

Embedding生成代码:

from sentence_transformers import SentenceTransformer
import numpy as np

classVectorRetriever:
    def__init__(self, model_name="BAAI/bge-large-zh-v1.5"):
        self.model = SentenceTransformer(model_name)

    defencode(self, texts, batch_size=32):
        # BGE模型推荐在查询前加前缀
        if isinstance(texts, str):
            texts = "为这个句子生成表示以用于检索相关文章:" + texts
        embeddings = self.model.encode(
            texts,
            batch_size=batch_size,
            normalize_embeddings=True# 归一化后可以用内积代替余弦距离
        )
        return embeddings

    defretrieve(self, query, index, top_k=20):
        query_embedding = self.encode(query)
        distances, indices = index.search(
            np.array([query_embedding], dtype=np.float32),
            top_k
        )
        return list(zip(indices[0], distances[0]))

索引结构这里有一个常被忽视的选择问题:Faiss提供多种索引类型,常用的有两种:

IVF+PQ(倒排文件索引+乘积量化):离线批量构建和召回效率高,内存占用小,但需要训练阶段,适合离线构建大规模索引。我们5000份文档经过分块后大约有8万个向量,用IVF4096,PQ64配置,内存占用约400MB,批量召回QPS可以达到每秒数千次。

HNSW(层次可导航小世界图):构建时间更长、内存占用更大,但查询延迟极低(P99在5ms以内),适合线上实时检索。线上服务我们用HNSW,离线评估和批量重建用IVF+PQ。

import faiss
import numpy as np

defbuild_hnsw_index(embeddings, dim=1024, M=32, ef_construction=200):
    """
    M: 每个节点的最大连接数,越大精度越高但内存越大
    ef_construction: 构建时的搜索范围,越大精度越高但构建越慢
    """
    index = faiss.IndexHNSWFlat(dim, M)
    index.hnsw.efConstruction = ef_construction
    index.hnsw.efSearch = 64  # 查询时的搜索范围

    embeddings_array = np.array(embeddings, dtype=np.float32)
    index.add(embeddings_array)
    return index

两路检索各自准备好了,下一个问题就是:怎么把它们的结果合并在一起?这正是面试官追问的核心——RRF。

RRF融合算法:k=60从哪来的?

这是整篇文章最核心的部分,也是面试官追问的关键。

RRF的全称是Reciprocal Rank Fusion,由Cormack、Clarke和Buettcher在2009年的SIGIR论文《Reciprocal Rank Fusion outperforms Condorcet and individual Rank Learning Methods》中提出。

算法本身非常简洁:

defrrf_fusion(bm25_results, vector_results, k=60):
    """
    bm25_results: BM25检索结果列表,按分数降序排列,元素为doc_id
    vector_results: 向量检索结果列表,按相似度降序排列,元素为doc_id
    k: RRF平滑参数,默认60
    返回: 按融合分数降序排列的(doc_id, score)列表
    """
    scores = {}
    for rank, doc_id in enumerate(bm25_results):
        scores[doc_id] = scores.get(doc_id, 0) + 1 / (k + rank + 1)
    for rank, doc_id in enumerate(vector_results):
        scores[doc_id] = scores.get(doc_id, 0) + 1 / (k + rank + 1)
    return sorted(scores.items(), key=lambda x: x[1], reverse=True)

混合检索 RRF 融合流程

混合检索 RRF 融合流程

理解RRF的关键在于理解分数公式1/(k+rank+1)的含义。

rank从0开始,排名第1的文档得分是1/(k+1),排名第2是1/(k+2),以此类推。如果一个文档在BM25结果和向量结果里都出现了,它的最终分数就是两个1/(k+rank)的累加。

k=60是怎么来的?

Cormack等人在2009年的论文里做了大量实验,测试了不同k值在多个IR基准数据集上的表现。实验结论是:k=60在大多数场景下能取得最佳的融合效果,而且对k值的选取不是特别敏感——k在40到80之间,性能差异通常在1%以内。

从数学直觉上理解:k的作用是控制排名靠前的文档相对于后面文档的权重差距。

  • k很小(比如k=1):排名第1的文档分数1/2=0.5,排名第2是1/3≈0.33,差距巨大,算法对最高排名文档极度敏感
  • k很大(比如k=1000):排名第1是1/1001≈0.001,排名第20是1/1020≈0.00098,差距极小,几乎把所有文档都拉平了
  • k=60:排名第1是1/61≈0.0164,排名第20是1/80=0.0125,保持了合理的排名差距,同时对噪声不过度敏感

用Python验证一下不同k值的分数分布:

defcompare_k_values(top_n=10):
    k_values = [1, 10, 60, 100, 1000]
    print(f"{'rank':<6}", end="")
    for k in k_values:
        print(f"{'k='+str(k):<12}", end="")
    print()

    for rank in range(top_n):
        print(f"{rank+1:<6}", end="")
        for k in k_values:
            score = 1 / (k + rank + 1)
            print(f"{score:<12.5f}", end="")
        print()

compare_k_values()

# 输出示例:
# rank  k=1         k=10        k=60        k=100       k=1000
# 1     0.50000     0.09091     0.01639     0.00990     0.00100
# 2     0.33333     0.08333     0.01613     0.00980     0.00100
# 10    0.09091     0.04762     0.01429     0.00909     0.00099

为什么用RRF而不是加权求和?

这是另一个面试高频追问。加权求和的方式是:

final_score = α * bm25_normalized_score + (1-α) * vector_normalized_score

这个方式有一个致命问题:BM25的分数和向量相似度分数的量纲完全不同。BM25分数受文档库大小、词频分布影响,可能是0.1到50的任意范围;向量相似度经过归一化后在0到1之间。直接加权求和前必须对两路分数做归一化,而归一化方式的选择又会引入新的超参数,且在不同批次的检索结果里分数范围可能变化。

RRF完全绕开了这个问题——它只用排名,不用分数。无论BM25返回的分数是0.3还是30,排名第1就是排名第1,得分1/(k+1)。这使得RRF在跨批次、跨模型更新时表现非常稳定,不需要重新校准归一化参数。

标准RRF默认把两路结果等权融合,但实际业务中有时候需要让某一路的贡献更大一些。这就引出了下一个问题:如果非要手动调整权重,该怎么做?

权重调优:如果非要加权怎么做?

RRF默认的行为是两路等权融合,但有时候业务上确实需要调整两路的权重。比如我们发现,在理赔查询类问题中BM25更可靠,而在产品咨询类问题中向量检索更稳定。

加权RRF的公式是:

score = α * 1/(k + rank_bm25 + 1) + (1-α) * 1/(k + rank_vector + 1)

实现代码:

defweighted_rrf_fusion(bm25_results, vector_results, k=60, alpha=0.5):
    """
    alpha: BM25的权重,1-alpha是向量检索的权重
    alpha=0.5 等价于标准RRF
    alpha>0.5 更偏重BM25,适合精确词查询多的场景
    alpha<0.5 更偏重向量检索,适合语义查询多的场景
    """
    scores = {}
    for rank, doc_id in enumerate(bm25_results):
        scores[doc_id] = scores.get(doc_id, 0) + alpha * (1 / (k + rank + 1))
    for rank, doc_id in enumerate(vector_results):
        scores[doc_id] = scores.get(doc_id, 0) + (1 - alpha) * (1 / (k + rank + 1))
    return sorted(scores.items(), key=lambda x: x[1], reverse=True)

alpha值通过在验证集上做网格搜索确定。我们的做法是准备了一个500条人工标注的查询集,覆盖精确词查询、语义查询、混合查询三类,然后:


import numpy as np
from tqdm import tqdm

def evaluate_recall_at_k(fusion_results, ground_truth, k=5):
    """计算Recall@k"""
    hits = 0
    for query_id, relevant_docs in ground_truth.items():
        top_k_docs = [doc_id for doc_id, _ in fusion_results[query_id][:k]]
        if any(doc in top_k_docs for doc in relevant_docs):
            hits += 1
    return hits / len(ground_truth)

# 网格搜索最优alpha

best_alpha = 0.5
best_recall = 0.0
alpha_range = np.arange(0.1, 1.0, 0.1)

for alpha in tqdm(alpha_range):
    fusion_results = {}
    for query_id, query in validation_queries.items():
        bm25_res = bm25_retriever.retrieve(query, top_k=20)
        vector_res = vector_retriever.retrieve(query, faiss_index, top_k=20)

        bm25_doc_ids = [idx for idx, _ in bm25_res]
        vector_doc_ids = [idx for idx, _ in vector_res]
    
        fusion_results[query_id] = weighted_rrf_fusion(
            bm25_doc_ids, vector_doc_ids, k=60, alpha=alpha
        )
    
    recall = evaluate_recall_at_k(fusion_results, ground_truth, k=5)
    if recall > best_recall:
        best_recall = recall
        best_alpha = alpha

print(f"最优alpha: {best_alpha:.1f}, 对应Recall@5: {best_recall:.4f}")

# 我们项目的结果: 最优alpha: 0.4, 对应Recall@5: 0.8921

# alpha=0.4意味着向量检索权重略高,符合我们文档以语义查询为主的特点

对于k值本身,如果业务场景特殊(比如文档库非常小,只有几百个文档),也可以做类似的网格搜索验证k=60是否仍然最优。我们在5000份文档上验证过,k=60确实是局部最优,k=40和k=80的Recall@5差距在0.3%以内。

参数调好了,最终到底能带来多大提升?下面用实际数据说话。

实战效果:混合检索带来了什么?

混合检索 vs 纯向量检索 效果对比

混合检索 vs 纯向量检索 效果对比

上线混合检索之前,我们在测试集上做了完整的A/B对比:

整体Recall@5从0.72提升到0.89,绝对提升17个百分点。

拆分来看:

  • 语义查询类(如"发生意外如何申请理赔"):从0.79提升到0.85,提升约6个百分点。这类查询向量检索本来就做得不错,BM25的补充效果有限,但RRF融合后依然有小幅提升,因为BM25能额外召回一些包含关键动词的相关文档。
  • 精确词查询类(如"重疾险豁免条款第三条"):从0.51提升到0.78,提升约27个百分点。BM25在这类查询上贡献最大,"豁免条款第三条"这样的精确词组,BM25几乎能100%命中,而向量检索则可能把"豁免条款第二条"也排进来。
  • 专有名词查询类(如"平安健康险2023版等待期"):从0.48提升到0.73,提升约25个百分点。这是提升最显著的一类,BM25对产品型号、年份、专业术语的精确匹配能力是关键。

值得一提的是,混合检索对检索延迟的影响较小。BM25的检索速度极快(毫秒级),向量检索HNSW索引P99延迟约5ms,RRF融合本身是纯Python列表操作,不到1ms。整体端到端检索延迟从约7ms增加到约9ms,对用户感知无影响。

上面分开介绍了各个模块,实际项目里当然是把它们组合成一个完整的类来用,下面直接给出可以拿来参考的实现。

完整的混合检索实现

把上面所有部分组合成一个完整的检索类,供参考:


class HybridRetriever:
    def __init__(
        self,
        documents,
        embedding_model="BAAI/bge-large-zh-v1.5",
        bm25_k1=1.5,
        bm25_b=0.75,
        rrf_k=60,
        alpha=0.5
    ):
        self.documents = documents
        self.rrf_k = rrf_k
        self.alpha = alpha

        # 初始化BM25
        self.bm25_retriever = BM25Retriever(
            documents, k1=bm25_k1, b=bm25_b
        )
    
        # 初始化向量检索
        self.vector_retriever = VectorRetriever(embedding_model)
    
        # 构建Faiss HNSW索引
        print("正在构建向量索引...")
        embeddings = self.vector_retriever.encode(documents)
        self.faiss_index = build_hnsw_index(
            embeddings, dim=embeddings.shape[1]
        )
        print(f"索引构建完成,共{len(documents)}个文档")
    
    def retrieve(self, query, top_k=5, bm25_candidate=20, vector_candidate=20):
        # BM25检索
        bm25_results = self.bm25_retriever.retrieve(query, top_k=bm25_candidate)
        bm25_doc_ids = [idx for idx, _ in bm25_results]
    
        # 向量检索
        vector_results = self.vector_retriever.retrieve(
            query, self.faiss_index, top_k=vector_candidate
        )
        vector_doc_ids = [idx for idx, _ in vector_results]
    
        # RRF融合
        fused = weighted_rrf_fusion(
            bm25_doc_ids, vector_doc_ids,
            k=self.rrf_k, alpha=self.alpha
        )
    
        # 返回top_k结果
        top_results = fused[:top_k]
        return [
            {
                "doc_id": doc_id,
                "content": self.documents[doc_id],
                "rrf_score": score
            }
            for doc_id, score in top_results
        ]

代码层面的东西梳理清楚了,最后来说一个更实际的问题:面试的时候遇到这类追问,该怎么组织语言回答才最有效?

面试怎么答混合检索?

这是面试中最容易被追问到底的技术点,回答要有层次,大约30-40秒说清楚。分4步走:

第一步,说背景和问题(5秒):先交代为什么要用混合检索。“我们的RAG系统在处理包含产品编号、专业术语的精确词查询时,纯向量检索的召回率只有0.48,存在明显的召回短板。”

第二步,说方案选择(10秒):说清楚为什么选BM25+向量+RRF这个组合,而不是其他方案。“BM25对精确词匹配有天然优势,向量检索擅长语义匹配,两者互补。RRF做融合是因为它不需要对两路分数做归一化,鲁棒性好,这是Cormack 2009年论文的结论,k=60是论文实验中在多个数据集上表现最稳定的值。”

第三步,说实现细节(10秒):说出你真正做了什么。“每路各取Top20候选,RRF融合后返回Top5。如果需要调整两路权重,用加权RRF,alpha通过在500条标注验证集上网格搜索确定,我们的最优值是0.4,略微偏向向量检索。”

第四步,说效果和数据(10秒):用数字收尾,显示你有量化评估意识。“上线后整体Recall@5从0.72提升到0.89,含专有名词的查询提升约25个百分点,检索延迟仅增加约2ms,整体在可接受范围内。”

这4步说完,面试官大概率不会再追问,因为你已经把背景、原理、实现、效果都覆盖了,而且每个点都有具体数字支撑,不是泛泛而谈。

光有理论框架还不够,真实部署中踩过的坑往往比原理更能打动面试官,也更能说明你真正上过生产。

一些踩坑经验

最后补充几个在实际部署中遇到的问题,这类细节在面试里往往能让你加分。

中文分词的质量直接影响BM25效果。Jieba默认词典不包含保险行业专有词汇,“免赔额"可能被切成"免/赔额”,“等待期"可能被切成"等待/期”。我们的解决方案是给Jieba添加自定义词典,把5000份文档里出现的保险专业术语全部收录进来,这一步让BM25的精确词召回率额外提升了约8个百分点。


import jieba

# 加载自定义词典(保险行业专有词汇)

jieba.load_userdict("/path/to/insurance_terms.txt")

# insurance_terms.txt格式:每行一个词,可附词频和词性

# 等待期 100 n

# 免赔额 100 n

# 豁免条款 100 n

# 重疾险 100 n

候选集大小的选择有讲究。我们每路取Top20,这个数字不是随意选的。Top5太少,两路的交集可能非常少,RRF融合的价值没有充分体现;Top100太多,会引入大量噪声。我们实验的结论是,对于5000份文档、每份平均切分成16个块的情况,每路Top20是效果与效率的最佳平衡点。

BGE模型的查询前缀不能忘。BGE系列模型在训练时对查询和文档使用了不同的前缀格式,查询需要加"为这个句子生成表示以用于检索相关文章:"的前缀,文档编码不需要加。如果忘了加前缀,召回率会下降约3-5个百分点。

这些细节都是在生产环境里真实踩过的坑,面试时提到一两个,会让面试官感受到你有实战经验,不只是在背理论。

把上面所有内容串起来,做个收尾。

总结

混合检索解决的核心问题是:向量检索的语义理解能力和BM25的精确词匹配能力各有短板,单独使用都无法覆盖所有查询类型。RRF融合算法用一个极简的公式1/(k+rank)把两路结果整合起来,k=60来自2009年论文的实验验证,代表的是在分数敏感度和排名稳定性之间的最优平衡。在实际部署中,分词质量、候选集大小、模型前缀这些工程细节和算法本身同样重要。

最后

对于正在迷茫择业、想转行提升,或是刚入门的程序员、编程小白来说,有一个问题几乎人人都在问:未来10年,什么领域的职业发展潜力最大?

答案只有一个:人工智能(尤其是大模型方向)

当下,人工智能行业正处于爆发式增长期,其中大模型相关岗位更是供不应求,薪资待遇直接拉满——字节跳动作为AI领域的头部玩家,给硕士毕业的优质AI人才(含大模型相关方向)开出的月基础工资高达5万—6万元;即便是非“人才计划”的普通应聘者,月基础工资也能稳定在4万元左右。

再看阿里、腾讯两大互联网大厂,非“人才计划”的AI相关岗位应聘者,月基础工资也约有3万元,远超其他行业同资历岗位的薪资水平,对于程序员、小白来说,无疑是绝佳的转型和提升赛道。
图片
图片
对于想入局大模型、抢占未来10年行业红利的程序员和小白来说,现在正是最好的学习时机:行业缺口大、大厂需求旺、薪资天花板高,只要找准学习方向,稳步提升技能,就能轻松摆脱“低薪困境”,抓住AI时代的职业机遇。

如果你还不知道从何开始,我自己整理一套全网最全最细的大模型零基础教程,我也是一路自学走过来的,很清楚小白前期学习的痛楚,你要是没有方向还没有好的资源,根本学不到东西!

下面是我整理的大模型学习资源,希望能帮到你。

请添加图片描述

👇👇扫码免费领取全部内容👇👇

在这里插入图片描述

1、大模型学习路线

img

2、从0到进阶大模型学习视频教程

从入门到进阶这里都有,跟着老师学习事半功倍。

在这里插入图片描述

3、 入门必看大模型学习书籍&文档.pdf(书面上的技术书籍确实太多了,这些是我精选出来的,还有很多不在图里)

在这里插入图片描述

4、 AI大模型最新行业报告

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

img

5、面试试题/经验

img

【大厂 AI 岗位面经分享(107 道)】

img

【AI 大模型面试真题(102 道)】

img

【LLMs 面试真题(97 道)】

img

6、大模型项目实战&配套源码

img

适用人群

在这里插入图片描述

四阶段学习规划(共90天,可落地执行)
第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型

  • 带你了解全球大模型

  • 使用国产大模型服务

  • 搭建 OpenAI 代理

  • 热身:基于阿里云 PAI 部署 Stable Diffusion

  • 在本地计算机运行大模型

  • 大模型的私有化部署

  • 基于 vLLM 部署大模型

  • 案例:如何优雅地在阿里云私有部署开源大模型

  • 部署一套开源 LLM 项目

  • 内容安全

  • 互联网信息服务算法备案

  • …

    👇👇扫码免费领取全部内容👇👇

    在这里插入图片描述

3、这些资料真的有用吗?

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

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

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

船载 OpenHarmony AIS 航海工作台:告警与防碰撞预警系统 船载OpenHarmony AIS航海工作台的告警与防碰撞系统,集成十余类告警(超速、偏航、会遇、SOS等),通过网格空间索引实现高效邻近判定,保障实时性。告警管理器统一调度规则、去重、通知与日志,支持悬浮球、语音、跑马灯、弹窗多渠道触达,确保航行安全。SOS紧急通道独立运行,避免干扰。系统设计强调性能优化与多场景适配,为航海安全提供核心支撑。 阅读详情

相关推荐

【KITTI数据集中Raw_Data数据标定文件中的参数关系解读】

上一节本人将KITTI Odometry数据集中的参数文件进行了解释。本节主要针对一些做融合slam的人,将Raw_Data数据标定文件中的参数按照自己的理解做如下阐述。其中,所讲之处如有错误,欢迎各位批评指正。

weixin_43389152的博客 1527

京东大模型面试真题解析(非常详细),混合检索权重与RRF调参全解,收藏这一篇就够了!

前段时间有个学员找我复盘,他去面京东的AI算法岗,项目经历里写了一个金融保险公司的RAG问答系统,提到"用混合检索把召回率提升了17%"。

m0_59163425的博客 475

MATLAB PDE工具箱电磁场仿真平行电容板及电偶极子详解

首先打开matlab,在命令行输入pdetool打开PDE工具箱 工具箱的功能我就不赘述了,大概就是以有限元的数值计算方法,计算二阶偏微分方程,因此可以解决电磁场、热力学等问题。 首先点击左上角按钮,画三个矩形 画完一个后可以双击矩形编辑,参数如下: 其中R1表示上极板,R2表示下极板,R3表示整个空间区域。 在上方Set formula为R3-R2-R1,表示求解区域是整个空间区域减去两个极板。下拉框选择Electrostatics表示求解的是静电场问题。 接下来点击上方菜单栏中的这个按钮,表

weixin_42845306的博客 1万+

搞定蚂蚁面试官:混合检索 RRF 调参全攻略(非常硬核),权重配置从原理到实战,收藏这一篇就够了!

他在简历上写了一条:**在 RAG 系统中引入混合检索,召回率提升 17%**。面试官一开始没追问,他心里松了口气。结果聊到技术细节,面试官突然回头问:"你刚才说混合检索提升了 17%,BM25 和向量的权重比是怎么定的?"

m0_59163425的博客 516

jmeter问题系列:Begin size 0 is not equal to fixed size 5

Begin size 0 is not equal to fixed size 5 ,问题的解决

雨水的早晨的博客 2415

[Unity]-[UI]-[Image] 关于UI精灵图资源导入设置的详细解释

如果纹理存储了有特定含义的信息,并且您需要着色器中的确切值(例如,平滑度或金属度),请禁用此属性。此选项允许将纹理编码为特定格式(RGBM 或 dLDR,具体取决于平台)并通过后期处理步骤对纹理数据进行处理(推拉式扩张通道)。使用在3D模型的专业法线贴图。通用的纹理类型,一般在Material上的材质图片参数使用,比如漫反射、法线贴图这些。​​Compression​​:ASTC 6x6(移动端)或DXT5(PC)​​Compression​​:BC5(PC)或ASTC 6x6(移动端)

sky_smile_Allen的博客 2171

Elasticsearch 核心总结 + 面试题实战(黑马点评项目)

本文面向 Java 开发者及准备后端面试的同学,系统梳理 Elasticsearch 的核心概念、常用 API 与 DSL 查询,并结合黑马点评项目的实际场景整理出 12 道高频面试题及回答思路。全文约 15 分钟读完,建议搭配项目代码一起复习。

yurenpai的博客 1048

【深度剖析】三一重工的数字化转型(中篇)

三一重工在数字化转型方面取得了提高效率、降低成本、加强研发创新和改善内控管理等多方面的成效。本研究旨在通过对三一重工数字化转型的深入分析,引导企业思考在第四次工业革命与第三次能源革命交汇的超级技术窗口期,如何进一步把握发展机遇,并为同行业其他企业提供探索性的建议。作为装备制造行业的佼佼者,三一重工的数字化转型受到了业界的广泛关注。作为行业内首批接触并实践数字化转型的企业之一,三一重工的转型经验不仅成功,而且积累了丰富的理论与实践,为其他制造业企业的数字化转型提供了可借鉴的范例。

领信卓越的博客 2306

Elasticsearch 的全面解析

Elasticsearch核心原理与实践指南 摘要: 本文系统介绍了Elasticsearch的核心概念、原理架构和实战应用。主要内容包括:1)ES分布式搜索原理,重点解析倒排索引、近实时搜索和分片机制;2)数据建模与查询DSL,涵盖文档结构、映射关系和复合查询语法;3)集群性能优化策略,涉及写入调优、缓存机制和分页解决方案;4)典型应用场景与生态整合,包括日志分析、监控告警等ELK实践;5)常见问题解析,如分片设计、数据一致性和性能瓶颈处理。通过理论结合实例,完整呈现了从基础使用到高级优化的知识体系,为构

油墨香^-^的博客 462

从“氛围编程“到“智能体工程“:AI编程范式的认知跃迁与工程实践

摘要: 2026年,ClaudeCode负责人鲍里斯·切尔尼提出用“智能体工程”(Agent Engineering)替代流行的“氛围编程”(Vibe Coding),认为后者过于主观,无法体现AI编程的系统化与工程化本质。智能体工程强调记忆系统、工具编排、任务分解、可观测性等核心技术,将AI编程从“玄学辅助”升级为可度量、可规模化的工程学科。本文通过对比术语差异、构建知识体系,并结合代码实例(如带记忆系统的代码生成Agent和可观测性系统),展示了智能体工程的实际应用。行业案例(如ClaudeCode的并

yyq916的博客 1061

Shopee App加密算法逆向实战:从抓包到libshpssdk.so的深度解析

本文详细解析了Shopee App加密算法的逆向过程,从网络抓包发现加密参数入手,通过Frida动态Hook定位到Java层关键方法,并深入追踪至Native层的libshpssdk.so核心函数。文章结合实战演示了如何利用Unidbg模拟执行环境进行算法分析与验证,并探讨了核心参数生成逻辑及风控规避要点,为移动安全与逆向工程研究提供了完整的技术路径。

weixin_28347369的博客 530

大模型RAG完全指南:Embedding模型选型、向量搜索与重排序核心技术详解,程序员必看收藏!

本文系统解析RAG技术栈三大核心组件:Embedding模型、检索策略与Rerank重排序。对比分析了主流Embedding模型性能与选型策略,整理20个高频面试问题及12种调优策略,深入解析向量搜索与Rerank的本质区别,强调"粗排+精排"两阶段架构的设计智慧,为构建高性能RAG系统提供全面指导。

Android23333的博客 664

ROS入门教程(七)—— Gazebo与RViz联合仿真

通过Gazebo与RViz联合仿真实现机器人运动。

吾门的博客 1万+

2025数据岗生存指南:LLM工程化与国际人才签证策略

在AI深度重构就业市场的背景下,传统‘数据科学家’角色正加速分化为LLM应用工程师、MLOps平台开发等专业化岗位。其底层逻辑是模型能力下沉至生产闭环——企业不再为建模能力付费,而是为RAG架构设计、低延迟推理优化、模型安全评估等可落地的LLM工程化能力买单。这一转变同步倒逼国际人才必须将签证策略(OPT黄金90天、H-1B精准爆破、O-1A技术背书)与技术能力建设深度耦合。尤其对在美求职的中国毕业生而言,GitHub项目实证、Hugging Face模型发布、Towards AI技术传播等行为,已从‘加分

weixin_30314793的博客 376

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 267

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 521

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ChatGPT、Perplexity、Gemini 与 AI Overviews 引用对比:谁的引用更可信

AI 引擎的引用机制差异很大:ChatGPT 以行内引用加 Sources 列表呈现来源,Perplexity 几乎逐句可溯源,Gemini 在回答中内嵌相关来源链接,AI Overviews 则把多源聚合答案与来源列表一起放在搜索结果顶部。本文从引用透明度、来源偏好、可干预性 3 个维度对比这 4 个引擎,并给出 GEO 的 3 点启示,帮企业在多引擎环境下提升被引用的概率。

淡然一笑 的专栏 117

AI Agent之核心框架

A: 显式 Thought 有三类价值:可解释性(便于人类审计)、可调试性(定位哪一步选错工具)、学习信号(可做监督微调或评估中间步骤质量)。ReAct 把推理与 可执行行动 绑定,每一步行动后都有 真实 Observation 反馈,从而用工具结果约束生成,降低闭卷幻觉。做完不等于结束——还要 评估做得好不好,把 教训 记下来,下次 带着教训重试,反思作为 记忆,影响后续尝试的策略。工作流程:Action → Evaluation → Reflection → Retry。A: 普通 CoT 只在。

剑雨巍巍的博客 221

AI 应用开发工程师技术实践:大模型接入、通用组件封装与性能优化

本文提出AI应用从PoC到生产的核心挑战:模型调用的持续可用、可控与可优化。通过构建统一LLM网关实现多供应商路由与故障转移,封装对话、工具调用与RAG组件以解耦业务逻辑,结合前缀缓存、批处理与流式背压治理等性能优化手段,形成“接通→接稳→接快”的工程路径,最终以工程化能力决定AI应用的生产可用性。

2301_79189962的博客 581

终端 AI 审计与 “龙虾” 类智能体风险治理:从可见性到闭环溯源

生成式 AI 办公普及之后,数据泄露风险逐步下沉到终端。员工将合同、源代码、客户资料粘贴至公有大模型,以及龙虾(OpenClaw)这类本地开源 AI 智能体的滥用,成为企业安全新挑战。传统网络边界防护存在审计盲区,本文从风险链路拆解、核心能力模型、分级治理策略、落地踩坑点以及技术局限性多角度,分享终端侧 AI 安全治理的实践思路。

2401_86491085的博客 658

抽象主义人工智能和生命体AI的内在联系

彭军辉提出“抽象主义人工智能”作为第四大AI范式,批判符号主义、连接主义、行为主义剥离生命本体的误区,确立“智能是现象,生命是本体”的核心公理。主张原生智能必须依附具备存续诉求的生命本体,提出“生命体AI理论”,构建七层演化阶梯与自闭环工程框架,强调智能不可跳过底层存续机制直接模拟语言。该体系为生成式AI提供科学边界,推动从“仿真表象”向“原生智能”的范式跃迁,开辟硅基人工生命新赛道。

抽象主义人工智能和生命体AI 117

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 246

企业微信iPad协议详解:接口接入、实时消息同步与语音转码实践

深入解析企业微信iPad协议的技术架构与开发思路,涵盖API接口接入、长连接通信、实时消息同步、Silk语音转码、异常重连及高并发优化,帮助开发者了解企业微信自动化系统的设计与实现。

欢迎来到祖安! 307

AI作图软件技术选型:从4个技术维度出发的实测对比

AI作图软件技术选型:从4个技术维度出发的实测对比

Vbaoke的博客 218

【AI Agent面试系列】AI Agent可观测、评测、安全相关的知识点

之前的文章介绍了和,本文主要介绍AI Agent的测评、可观测等知识。

273

Docling 原理解读:是什么、为什么、怎么样

从论文视角拆解 Docling 的整体架构、DoclingDocument 数据模型、PDF 预处理、版面分析、OCR、TableFormer 双解码器、阅读顺序与装配流程,并解释版面框与 OCR 框的区别。

PLANTTHESON的博客 342
上一篇: 从编程小白到能独立做大模型项目,我的3个月逆袭之路!
下一篇: 救命!小白/程序员入门大模型,这才是躺赢赛道
大模型教程.
博客等级 码龄5年 5275粉丝 2893原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值