RAG知识库问答实战:从原理到代码落地

前一阵子在做知识库问答项目时,发现网上 RAG 相关的教程虽然很多,但大部分要么只讲原理、不给可运行代码,要么代码能跑但不解释为什么这么设计。对刚接触大模型应用开发的同学来说,很容易卡在“原理看懂了,一动手就报错”的阶段。

这篇文章打算把 RAG(检索增强生成)从原理到落地完整梳理一遍。内容包括:RAG 要解决什么问题、整体流程如何拆解、向量库选型、召回质量优化,以及一个可以直接复制的知识库问答实战项目。零基础可以按顺序跟着做,有基础的可以直接跳到实战部分或常见问题排查。

1. 什么是 RAG:背景与核心原理

1.1 大模型的两个天然短板

先看一个基础问题:为什么不能直接把文档丢给大模型,让它回答?

因为大模型本身有两个明显局限:

  • 知识有时间截断。模型训练完成后,新产生的内容它不知道。比如你问它公司内部最新的值班安排,它只能“编”。
  • 无法访问私有数据。企业内部文档、产品手册、个人笔记这些数据不可能进入大模型训练集,模型自然无从回答。

如果硬要让模型回答,它可能会用自己的“语言惯性”补全一个看起来合理、但实际错误的答案。这就是所谓的“一本正经地胡说八道”。

1.2 RAG 的核心思路

RAG 的全称是Retrieval-Augmented Generation,即检索增强生成。

它的思路很简单:不在生成阶段强迫模型记住所有知识,而是在生成之前,先从外部知识库中检索出与用户问题最相关的内容片段,把这些片段作为参考上下文一起交给大模型,让模型基于这些材料组织答案。

对比来看:

方案做法问题
直接提问问什么答什么无法回答私有知识和新知识
微调(Fine-tuning)用额外数据训练模型参数成本高、周期长、知识更新慢
RAG检索相关资料,拼进 Prompt 再生成检索质量决定回答质量

RAG 的重要优势是知识可随时增删:新增文档只需要重新建立索引,不需要重新训练模型。这也是为什么 RAG 成为企业构建知识库问答首选方案的原因。

1.3 RAG 的典型应用场景

  • 企业内部知识库问答(制度、流程、产品资料)。
  • 电商客服自动问答(商品信息、售后政策)。
  • 教育辅导(教材内容问答、题库检索)。
  • 代码仓库问答(根据项目文档回答开发问题)。
  • 舆情分析、竞品分析等需要结合外部资料的场景。

凡是“模型本身不知道,但你有资料”的问题,都适合用 RAG 解决。

2. RAG 完整流程拆解

把 RAG 拆开来看,整个流程分成两个阶段。

2.1 索引阶段(离线处理)

这个阶段的任务是“把知识变成可检索的形式”。

原始文档 ↓ 文档加载(PDF / Word / Markdown / HTML) ↓ 文本切分(Chunking) ↓ Embedding 向量化 ↓ 存入向量数据库

2.2 查询阶段(在线问答)

这个阶段的任务是“根据用户问题,检索相关内容并生成回答”。

用户提问 ↓ 问题 Embedding 向量化 ↓ 在向量库中做相似度检索 ↓ 获取 TopK 相关文档片段 ↓ 组装 Prompt(问题 + 检索片段) ↓ 大模型生成最终回答

整个链路中有一个关键点:检索出来的内容质量,直接决定最终回答质量。如果检索到的片段和问题无关,大模型再聪明也答不对。

3. 环境准备与依赖安装

3.1 运行环境说明

本文示例以 Python 3.10 为主,操作系统不限(Windows / macOS / Linux 均可)。版本不需要完全一致,但建议 Python 不低于 3.9。

核心依赖库如下:

pip install langchain langchain-community langchain-huggingface pip install faiss-cpu pip install sentence-transformers pip install chromadb pip install pypdf

说明几点:

  • langchain目前已经做了模块拆分,旧教程里的from langchain.embeddings import ...写法在新版本中可能失效,需要注意。
  • 向量数据库选择 FAISS 做示例,因为它是本地库、无需启动服务、对入门友好。
  • Embedding 模型使用国产开源的BAAI/bge-small-zh-v1.5,中文效果比较稳定。

3.2 LLM 调用方式

本文示例默认使用 OpenAI 兼容接口。如果你使用的是国产大模型平台或本地部署模型,只要接口风格兼容,都可以调整base_url和api_key替换。

from langchain_openai import ChatOpenAI llm = ChatOpenAI( model="你的模型名称", api_key="你的API Key", base_url="你的接口地址", temperature=0.1 )

这里只做演示说明,具体配置以你实际使用的服务商为准。

4. 核心知识点拆解:从 Chunk 到 Token

4.1 文本切分(Chunking)

文本切分是 RAG 流程中最容易被忽视、但影响最大的一步。

如果切得太粗,一个 chunk 包含太多无关内容,检索命中后噪声大;如果切得太细,语义被切断,单个片段信息量不足。

常用的切分策略:

  • 固定长度切分:按字符数或 token 数切割,简单但容易切断语义。
  • 按结构切分:Markdown 按标题、PDF 按段落、代码按函数模块切分。
  • 递归切分:LangChain 的RecursiveCharacterTextSplitter优先按段落、再按句子、最后按字符逐级回退切分,是当前推荐做法。
from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50, separators=["\n\n", "\n", "。", "!", "?", ",", " ", ""] )

chunk_overlap的作用是让相邻片段保留一定重复内容,避免某个语义点恰好落在切分边界上被“切断”。

4.2 Embedding:把文字变成向量

Embedding 模型的作用是:把文本变成一维浮点数数组。语义越相近的文本,在向量空间中距离越近。

以 bge-small-zh-v1.5 为例:

from langchain_huggingface import HuggingFaceEmbeddings embeddings = HuggingFaceEmbeddings( model_name="BAAI/bge-small-zh-v1.5", model_kwargs={'device': 'cpu'}, encode_kwargs={'normalize_embeddings': True} )

注意normalize_embeddings参数。相似度计算方式通常是余弦相似度,归一化之后使用点积即可等价于余弦相似度,一些向量库的默认距离度量是 L2,归一化有助于保证检索一致性。

4.3 向量数据库的选型思路

向量数据库用于存储文本对应的向量,并提供近似最近邻检索。

常见选型:

方案特点适合场景
FAISS本地库,轻量,速度快入门、原型验证、中小规模
Chroma本地库,API 简洁快速开发、原型项目
Milvus分布式,适合大规模生产环境、千万级向量
Weaviate自带推理能力全功能生产方案
QdrantRust 实现,性能好生产环境

入门阶段建议先用 FAISS,把流程跑通后再按需要切换。

4.4 检索:相似度计算与 TopK

检索的本质是:把用户问题向量化,在向量库中查找最相似的 K 个片段。

常见距离度量:

  • 余弦相似度:衡量方向是否一致,文本检索最常用。
  • 欧式距离(L2):数值越小越相似。
  • 内积(IP):配合归一化向量时等价于余弦。

FAISS 默认使用 L2 距离,构建索引时也可以指定内积:

import faiss dimension = 512 index = faiss.IndexFlatIP(dimension) # 内积,需要预先归一化向量

4.5 重排序(Rerank)

向量检索得到的是“语义相近”的 TopK,但语义相近不等于答案相关。比如用户问“报销流程”,向量检索可能召回“报销制度总则”这类宽泛内容,真正包含流程步骤的段落反而排在第 6 位。

重排模型(Cross-Encoder)可以把(问题, 文档片段)拼接起来精细打分,比双塔向量模型更准确。

from sentence_transformers import CrossEncoder reranker = CrossEncoder('BAAI/bge-reranker-base') pairs = [(query, doc) for doc in docs] scores = reranker.predict(pairs)

4.6 Prompt 组装策略

Prompt 决定了模型如何利用检索到的内容。建议结构:

你是一个知识库问答助手,请根据以下资料回答问题。 如果资料中没有相关内容,请直接说明“知识库中未找到相关内容”,不要编造。 【资料开始】 {检索到的内容} 【资料结束】 用户问题:{用户问题}

设置“找不到就说不知道”的指令,是防止大模型幻觉的最有效手段之一。

5. 完整实战:构建一个本地知识库问答系统

下面开始搭建一个最小可运行的 RAG 项目。

5.1 项目结构

rag-project/ ├── docs/ # 原始文档存放目录 │ └── 产品手册.md ├── ingest.py # 索引构建脚本 ├── query.py # 问答脚本 ├── requirements.txt # 依赖清单 └── vector_store/ # FAISS 索引保存目录

5.2 准备测试文档

在docs/目录创建一份简单的产品手册文档,内容如下:

# 智能考勤机使用说明 ## 打卡方式 - 支持人脸识别打卡、指纹打卡、IC卡打卡三种方式。 - 人脸识别支持佩戴口罩识别。 ## 请假流程 1. 员工在OA系统提交请假申请。 2. 部门主管审批。 3. 人事备案。 ## 常见问题 - 打卡失败时,请检查网络连接。 - 指纹磨损用户建议使用人脸识别。

这是非常典型的说明类文档,适合验证 RAG 效果。

5.3 编写索引构建脚本

文件路径:rag-project/ingest.py

import os from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_huggingface import HuggingFaceEmbeddings from langchain_community.vectorstores import FAISS # 1. 加载文档 loader = TextLoader("docs/产品手册.md", encoding="utf-8") documents = loader.load() # 2. 切分文本 text_splitter = RecursiveCharacterTextSplitter( chunk_size=200, chunk_overlap=20, separators=["\n\n", "\n", "。", "!", "?", " ", ""] ) chunks = text_splitter.split_documents(documents) print(f"切分完成,共 {len(chunks)} 个片段") # 3. 向量化 embeddings = HuggingFaceEmbeddings( model_name="BAAI/bge-small-zh-v1.5", model_kwargs={'device': 'cpu'}, encode_kwargs={'normalize_embeddings': True} ) # 4. 构建向量库并保存 vector_store = FAISS.from_documents(chunks, embeddings) vector_store.save_local("vector_store/faiss_index") print("索引构建完成,已保存至 vector_store/faiss_index")

运行:

python ingest.py

第一次运行会下载 BGE 模型,需要保持网络畅通。下载完成后输出类似:

切分完成,共 6 个片段 索引构建完成,已保存至 vector_store/faiss_index

5.4 编写问答脚本

文件路径:rag-project/query.py

from langchain_huggingface import HuggingFaceEmbeddings from langchain_community.vectorstores import FAISS from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough # 1. 加载向量库 embeddings = HuggingFaceEmbeddings( model_name="BAAI/bge-small-zh-v1.5", model_kwargs={'device': 'cpu'}, encode_kwargs={'normalize_embeddings': True} ) vector_store = FAISS.load_local( "vector_store/faiss_index", embeddings, allow_dangerous_deserialization=True ) # 2. 初始化 LLM llm = ChatOpenAI( model="你的模型名称", api_key="你的API Key", base_url="你的接口地址", temperature=0.1 ) # 3. 定义 Prompt prompt = ChatPromptTemplate.from_template( """你是一个知识库问答助手,请根据以下资料回答用户问题。 如果资料中没有相关内容,请直接回答“知识库中未找到相关内容”,不要编造。 【资料开始】 {context} 【资料结束】 用户问题:{question}""" ) # 4. 定义检索器 retriever = vector_store.as_retriever( search_type="similarity", search_kwargs={"k": 3} ) # 5. 构建 RAG 链路 def format_docs(docs): return "\n\n".join([doc.page_content for doc in docs]) rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() ) # 6. 测试问答 while True: question = input("请输入问题(输入 exit 退出):") if question.lower() == "exit": break response = rag_chain.invoke(question) print("\n回答:", response) print("-" * 50)

5.5 运行验证

python query.py

依次测试几个问题:

请输入问题:请假流程是什么? 回答:根据资料,请假流程为:1. 员工在OA系统提交请假申请;2. 部门主管审批;3. 人事备案。 请输入问题:打卡失败怎么办? 回答:打卡失败时,请检查网络连接。指纹磨损用户建议使用人脸识别。 请输入问题:公司年假政策是什么? 回答:知识库中未找到相关内容。

最后一个回答很关键。如果知识库没有相关内容,模型明确告诉你“没有找到”,而不是强行编造一个答案。这说明 RAG 的基础链路已经跑通了。

6. 召回效果优化:从“能用”到“好用”

基础流程跑通之后,下一步考虑如何优化。

6.1 问题在于检索质量

当回答质量不好时,先不要怀疑大模型,绝大多数情况是检索出了问题。

常见的检索问题:

  • 召回内容不相关:向量相似但语义关联弱。
  • 关键信息被切碎:答案跨多个 chunk,单个片段都不完整。
  • TopK 太小:正确内容排在第 5,但只取了前 3。

6.2 优化一:结合元数据过滤

向量检索之外,可以结合文档的标题、来源、更新时间等元数据做前置过滤。

retriever = vector_store.as_retriever( search_kwargs={"k": 5, "filter": {"source": "docs/产品手册.md"}} )

比如企业知识库中包含多份文档,优先在“产品手册”范围内检索,而不是全库模糊匹配。也可以先做关键词硬过滤,再向量检索。

6.3 优化二:引入重排序

先向量检索召回 10 条,再用 Rerank 模型重新打分,取前 3 条作为最终上下文。这种方式在中文文档场景里提升非常明显。

from sentence_transformers import CrossEncoder reranker = CrossEncoder('BAAI/bge-reranker-base') def rerank_documents(query, documents, top_n=3): pairs = [(query, doc.page_content) for doc in documents] scores = reranker.predict(pairs) ranked = sorted(zip(documents, scores), key=lambda x: x[1], reverse=True) return [doc for doc, score in ranked[:top_n]]

6.4 优化三:查询改写

用户问题往往是口语化的,比如“刷脸打不了卡怎么办”。直接拿原问题去检索,效果未必理想。可以先用 LLM 把问题改写成更适合检索的形式。

请根据对话语义,改写成适合检索的查询语句。 原始问题:刷脸打不了卡怎么办 改写结果:

改写后的查询可能是“人脸识别打卡失败 解决办法”。这种手段在真实场景中经常能明显提升检索命中率。

6.5 优化四:Hybrid 搜索(关键词 + 向量)

有时用户问题中包含精确的专有名词,比如型号“WF-200”,向量检索可能把它和“考勤机”混在一起。此时结合 BM25 关键词检索,再融合两路结果,效果更稳定。

LangChain 中的EnsembleRetriever可以实现:

from langchain.retrievers import EnsembleRetriever from langchain_community.retrievers import BM25Retriever from langchain_community.vectorstores import FAISS bm25_retriever = BM25Retriever.from_documents(chunks) bm25_retriever.k = 3 vector_retriever = vector_store.as_retriever(search_kwargs={"k": 3}) ensemble_retriever = EnsembleRetriever( retrievers=[bm25_retriever, vector_retriever], weights=[0.5, 0.5] )

两路召回结果按权重融合排序,取最终 TopK。

6.6 优化五:调整 Chunk 策略

如果发现单个片段信息量不足,可以适当调大chunk_size;如果噪声大,就调小。也可以按文档结构智能切分,保证每个 chunk 是语义完整的段落。

一个可供参考的方向是让 chunk 保留文档标题作为上下文:

# 智能考勤机使用说明 > ## 请假流程 1. 员工在OA系统提交请假申请。 2. 部门主管审批。 3. 人事备案。

这样可以增强检索时的语义定位能力。

7. 常见问题与排查思路

问题现象常见原因解决思路
检索结果明显不相关Embedding 模型不匹配语言场景中文场景换 BGE 等中文向量模型
回答内容编造Prompt 缺少“不知道就说不知道”约束在 Prompt 中加入防幻觉指令
回答内容不全Chunk 切分切断了关键语义增加 overlap,或按结构切分
检索命中但答案不对TopK 太小,正确内容在排名后面调大召回数量,增加 Rerank
启动报bge-small-zh下载失败网络无法访问 HuggingFace配置镜像源或手动下载模型到本地目录
FAISS 加载报错langchain 版本变化检查allow_dangerous_deserialization参数
回答速度太慢检索 + 生成链路过于冗余精简单个环节,减少 context 长度

再补充一个重点:向量库加载时的安全参数。

FAISS.load_local( "vector_store/faiss_index", embeddings, allow_dangerous_deserialization=True )

allow_dangerous_deserialization是为了兼容新版 LangChain 的安全策略。这个参数只应在你信任自己的索引文件时开启。如果索引来自外部来源,存在反序列化攻击风险,不要随意加载。

8. 工程化落地与最佳实践

从“Demo 能跑”到“生产可用”,中间还有不少工作。

8.1 数据入库前的清洗

文档加载前,建议先做一次内容清洗:

  • 去除页眉页脚、水印、导航栏信息。
  • 统一编码为 UTF-8。
  • 删除重复内容。
  • 表格结构尽量转成 Markdown 或 JSON 格式化文本。

生产环境中数据决定效果上限,模型只是一种解码器。脏数据入库,再强的 Rerank 也救不回来。

8.2 面向生产的向量库选型

FAISS 适合单机原型验证。生产环境需要考虑:

  • 数据规模:百万级以上选择 Milvus、Qdrant 等分布式方案。
  • 权限隔离:不同部门的数据需要独立隔离。
  • 高可用:向量库需要主从部署、备份恢复方案。
  • 增量更新:新增文档需要支撑准实时索引更新。

8.3 评估体系搭建

不要只凭“感觉回答变好了”来判断优化效果。建议建立简单评估集:

{ "queries": [ {"question": "请假流程是什么?", "expected": "OA提交、主管审批、人事备案"}, {"question": "三种打卡方式是什么?", "expected": "人脸识别、指纹、IC卡"} ] }

对每个问题评估两个维度:

  1. 检索命中率:期望答案是否出现在召回的 TopK 片段中。
  2. 生成准确率:模型回答是否包含期望要点。

每次调整 chunk 大小、检索器、Prompt 之后,用同一组测试集对比分数,保证优化方向可量化。

8.4 权限与安全

企业知识库问答涉及内部数据,有几点必须注意:

  • 在检索层做数据权限隔离,不能让普通员工检索到高管文档。
  • 对模型输出做敏感信息脱敏。
  • 涉及删除或重建索引时,先备份向量库文件。
  • API Key 不要写进代码仓库,使用环境变量或密钥管理服务。

8.5 成本控制思路

RAG 的成本主要来自 Embedding 和 LLM 两部分:

  • 文档 Embedding 是一次性成本,可在离线任务中执行。
  • 在线问答的 LLM 调用与上下文长度成正比。上下文越长,成本越高、延迟越大。
  • 控制 TopK 数量、精简 Prompt 模板、过滤重复信息,都可以减少 token 消耗。

一个实用的做法是:系统给用户返回答案时,同时引用来源文档段落。既方便用户核对,也帮助定位检索质量问题。

9. 总结与下一步学习路线

到这里,你已经完成了一个最小可运行的 RAG 知识库问答系统:理解了 RAG 的原理,掌握了文本切分、向量化、向量检索、Prompt 组装整条链路,也知道了召回优化和工程落地的关键方向。

下一步可以继续深入的方向:

  1. 深入研究你的场景数据:不同类型的文档和数据适合不同的切分和检索策略,没有万能配置。
  2. 尝试不同的 Embedding 模型:BGE、text-embedding-3-small、M3E 各有特点,在自己的验证集上横向对比。
  3. 引入 Agent 能力:让 RAG 链路具备多步推理和工具调用能力,处理复杂问题。
  4. 学习 LangChain/Llamaindex 的进阶组件:比如文档问答、多轮对话中的上下文管理。

如果文章对你有帮助,收藏备用,也欢迎在评论区交流在实际落地中遇到的问题。动手跑一遍上面的代码,比阅读十篇文章收获都大。

相关新闻

RAG入门到实战:用LangChain+Chroma搭建知识库问答系统

RAG入门到实战:用LangChain+Chroma搭建知识库问答系统

先给结论:RAG 是目前搭建知识库问答最稳的基线方案。RAG 的全称是 Retrieval-Augmented Generation,检索增强生成。它解决的问题很直接:大模型不知道你的私有资料、内部文档、产品手册和业务数据,那就先把这些资料切块、向量化、存…

2026/10/21 2:49:01 阅读更多 →
火焰数据集YOLOv5训练实战:从标注文件到可推理模型

火焰数据集YOLOv5训练实战:从标注文件到可推理模型

简介:火焰数据集(含标注好的标签)面向从事目标检测的开发者与研究者,尤其适合使用 YOLOv5 训练火焰识别模型的场景,可用于火灾预警、视频监控等实际项目。资源包共 5260 个文件,包含 1853 张 jpg 图像、185…

2026/10/21 2:49:01 阅读更多 →
Quartz动态设置并发数量

Quartz动态设置并发数量

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

2026/10/21 2:48:00 阅读更多 →

最新新闻

51单片机贪吃蛇实战:12864驱动、EEPROM掉电保存与嵌入式分层设计

51单片机贪吃蛇实战:12864驱动、EEPROM掉电保存与嵌入式分层设计

简介:本资源是一套面向大学本科课程设计的51单片机贪吃蛇游戏完整开发方案,适用于单片机原理与应用、嵌入式系统实践等课程学习与项目实训。资源包含Proteus仿真工程(.pdsprj)、Keil C51源码(.c/.a51)、编译…

2026/10/21 3:32:25 阅读更多 →
图书推荐系统实战:Python协同过滤从原理到代码避坑指南

图书推荐系统实战:Python协同过滤从原理到代码避坑指南

我记得第一次带学生跑这个图书推荐系统项目时,好几个人卡在了同一个地方:代码能跑通,但推荐结果全是乱的。后来查了半天,问题出在一个被注释掉的函数上。这个项目在中文互联网上流传了很多版本,绝大多数人拿到的都是简…

2026/10/21 3:32:25 阅读更多 →
空间注意力模块实战指南:原理、代码与调参经验

空间注意力模块实战指南:原理、代码与调参经验

做视觉任务这些年,大家都会遇到一个很实际的需求:网络深了、宽了,但该学的东西没学会。SpatialAttention空间注意力模块,是我调过的结构里性价比最高的一个——代码就几十行、参数量几乎可以忽略,却能明显改变网络的关…

2026/10/21 3:32:25 阅读更多 →
awesome-shizuku vs Dhizuku:两大Android权限提升工具终极对比指南

awesome-shizuku vs Dhizuku:两大Android权限提升工具终极对比指南

awesome-shizuku vs Dhizuku:两大Android权限提升工具终极对比指南 在Android开发的世界中,awesome-shizuku和Dhizuku是两个备受关注的高权限工具,它们都致力于让普通应用获得系统级权限,从而突破Android系统的限制。无论你是普通…

2026/10/21 3:32:25 阅读更多 →
CANN内测实战:从环境初始化到模型推理的完整指南

CANN内测实战:从环境初始化到模型推理的完整指南

前阵子看到某社区的“内测招募,免费体验CANN开发环境”活动,我第一时间就报名了。说实话,当时打动我的不只是“免费”两个字,而是想看看这个面向昇腾AI处理器的异构计算架构,在过去一年里到底进化到了什么程度。CANN这…

2026/10/21 3:32:25 阅读更多 →
Redis单线程还是多线程?从4.0到7.2的线程模型演进真相

Redis单线程还是多线程?从4.0到7.2的线程模型演进真相

1. 这个问题为什么值得花十分钟认真搞懂“Redis 到底是单线程还是多线程?”——这句提问在技术群、面试现场、甚至线上课程评论区里,几乎每周都会高频出现。它表面看是个“是非题”,但背后牵扯的是你对 Redis 性能本质、架构演进逻辑、以及高…

2026/10/21 3:31:24 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/20 9:50:45 阅读更多 →