1.从零拆解一个 RAG 系统:纯 API 调用、无需 GPU|基于 LangChain + Chroma + DeepSeek 的学习笔记

DeepSeek-R1本地RAG部署实战:Ollama+LangChain+Chroma避坑指南 RAG(检索增强生成)是让大模型精准回答私有文档问题的核心技术,其本质是将向量检索与语言生成协同工作,通过分块、嵌入、检索、重排、生成五步闭环提升事实准确性并抑制幻觉。技术价值在于平衡响应速度、显存占用与答案质量,尤其适合合同解读、技术文档问答等办公场景。实际落地时,OllamaEmbeddings与DeepSeek-R1模型同源性、Chroma持久化路径配置、PDF扫描件OCR适配等细节直接决定系统稳定性。本文聚焦本地化RAG工程实践,详解如何基于Ollama、LangChain和Chroma构建可交付的 阅读详情

前言

最近在学习 RAG(Retrieval-Augmented Generation,检索增强生成),网上的教程要么只讲概念不给代码,要么代码跑不起来,要么上来就要你搞一张 GPU 跑本地模型。对于我们这种没有高端显卡的同学来说,门槛太高了。

后来找到一个结构清晰的 Demo 项目,全程纯 API 调用,LLM 用 DeepSeek、Embedding 用硅基流动,不需要本地 GPU,普通笔记本就能跑。花了一些时间把它拆解了一遍,收获不少。

这篇文章把我的学习过程和理解整理出来,希望对同样在学 RAG 的同学有帮助。

🔗 项目地址:GitHub 搜索 daixueyun3377/RAG-demo,这一期对标的是dev-langchain分支噢

1. 前置准备

你只需要准备两个 API Key:

Key用途获取方式
LLM API Key大模型生成回答DeepSeek、OpenAI 或其他 OpenAI 兼容接口
硅基流动 API KeyEmbedding + Reranker免费申请,见下方

硅基流动 API Key 申请:

  1. 访问 cloud.siliconflow.cn
  2. 注册账号并登录
  3. 进入「账户管理」→「API 密钥」,创建一个 Key
  4. 新用户赠送免费额度,本项目使用的 bge-large-zh-v1.5(Embedding)和 bge-reranker-v2-m3(Reranker)均为免费模型

2. 测试结果

为了更好的体现不同切分策略的对比情况,我新增了一个页面,大家在克隆代码
启动命令

python3 -m uvicorn app.main:app --reload --port 8000

url访问 http://localhost:8000/static/chunks.html ,上传doc里的simple文档,就能看到不同的切分策略对比工具啦,欢迎大家下载代码尝试,有问题可以评论区找我~

在这里插入图片描述


接下来就是项目剖析啦

项目技术栈一览:

组件技术选型说明
Web 框架FastAPI提供 REST API
LLMDeepSeek通过 OpenAI 兼容接口调用
Embedding硅基流动 bge-large-zh-v1.5中文向量化效果好
向量数据库Chroma本地嵌入式,开发阶段轻量
编排框架LangChain串联整个 RAG 链路
可观测性Langfuse追踪每次查询的完整链路
基础设施Docker Compose一键部署 Milvus/Redis/Langfuse

一、RAG 到底在解决什么问题?

大模型有两个硬伤:

  1. 训练数据有截止日期,不知道最新的信息
  2. 不知道你的私有数据,比如公司内部文档、产品手册

直接问大模型,它可能会"一本正经地胡说八道"(幻觉问题)。

RAG 的思路很简单:你问问题的时候,我先从知识库里搜出相关内容,把这些内容当作"参考资料"塞给大模型,它就能基于真实数据回答了。

一句话总结:RAG = 检索 + 生成,先搜后答。


二、项目整体架构

整个系统就两条数据流,理解了这两条线,整个项目就通了。

2.1 入库流程(Indexing)

文档上传 → TextLoader 读取 → TextSplitter 切块 → Embedding 向量化 → 存入 Chroma

2.2 查询流程(Querying)

用户提问 → (可选) Query 变换 → Retriever 检索 → 拼装 Prompt → LLM 生成回答

2.3 项目目录结构

├── app/
│   ├── config.py          # 配置管理(环境变量)
│   ├── main.py            # FastAPI 入口,定义 API 接口
│   └── rag_engine.py      # RAG 核心引擎(重点)
├── docs/
│   └── sample.md          # 示例文档
├── rag-infra/
│   ├── docker-compose.yml # 基础设施一键部署
│   └── README.md
├── .env.example           # 环境变量模板
└── requirements.txt       # Python 依赖

三、逐层拆解代码

3.1 配置层:config.py

这个文件最简单,就是从环境变量读配置:

# LLM 配置
LLM_API_KEY = os.getenv("LLM_API_KEY", "")
LLM_BASE_URL = os.getenv("LLM_BASE_URL", "https://api.deepseek.com")
LLM_MODEL = os.getenv("LLM_MODEL", "deepseek-chat")

# Embedding 配置(硅基流动)
EMBEDDING_API_KEY = os.getenv("EMBEDDING_API_KEY", "")
EMBEDDING_BASE_URL = os.getenv("EMBEDDING_BASE_URL", "https://api.siliconflow.cn/v1")
EMBEDDING_MODEL = os.getenv("EMBEDDING_MODEL", "BAAI/bge-large-zh-v1.5")

设计亮点:LLM 和 Embedding 都走 OpenAI 兼容接口,换模型只需要改环境变量,代码一行不用动。这在实际项目中很重要,因为模型迭代很快,今天用 DeepSeek 明天可能换 Qwen。

3.2 API 层:main.py

FastAPI 提供了 4 个接口:

@app.post("/upload")      # 上传文档并入库
@app.post("/query")       # RAG 问答
@app.post("/compare-chunks")  # 对比切分策略
@app.get("/health")       # 健康检查

重点看 /query 接口的请求参数:

class QueryRequest(BaseModel):
    question: str
    retrieval_mode: Literal["vector", "bm25", "hybrid"] = "hybrid"  # 检索模式
    query_transform: Literal["none", "rewrite", "hyde"] = "none"    # Query 变换
    top_k: int = 5                                                   # 返回条数

这个设计很好——把检索模式和 Query 变换都暴露成参数,方便对比不同策略的效果。

3.3 核心引擎:rag_engine.py(重点)

这是整个项目的灵魂,我按功能模块拆开讲。

3.3.1 文档加载
def load_file(file_path: str) -> list[Document]:
    if file_path.endswith(".md"):
        loader = TextLoader(file_path, encoding="utf-8")
    elif file_path.endswith(".txt"):
        loader = TextLoader(file_path, encoding="utf-8")
    else:
        raise ValueError(f"不支持的文件格式: {file_path}")
    return loader.load()

目前只支持 .txt 和 .md,生产环境需要扩展支持 PDF、Word 等格式(可以用 PyPDFLoader、UnstructuredWordDocumentLoader)。

3.3.2 文本切分(两种策略)

这是 RAG 中非常关键的一步。为什么要切分?因为:

  • 一篇文档可能几千上万字,整篇做向量化精度会很差
  • 检索时需要定位到具体段落,而不是返回整篇文档
  • 大模型的上下文窗口有限,塞太多内容反而影响效果
def split_documents(documents, strategy="recursive", chunk_size=512, chunk_overlap=50):
    if strategy == "fixed":
        # 固定长度硬切,简单但可能切断句子
        splitter = CharacterTextSplitter(
            chunk_size=chunk_size,
            chunk_overlap=chunk_overlap,
            separator="\n",
        )
    elif strategy == "recursive":
        # 递归切分:优先按段落 → 句子 → 字符逐级拆分
        splitter = RecursiveCharacterTextSplitter(
            chunk_size=chunk_size,
            chunk_overlap=chunk_overlap,
            separators=["\n\n", "\n", "。", "!", "?", ".", " ", ""],
        )

我的理解:recursive 几乎是所有场景的首选。它的 separators 列表定义了切分优先级——先尝试按双换行(段落)切,切不动就按单换行切,再切不动就按句号切……这样能最大程度保持语义完整性。

chunk_overlap 是重叠区域,比如设成 50,相邻两个块会有 50 个字符的重叠,防止关键信息刚好被切在边界上丢失。

项目还提供了一个对比工具,可以直观看到不同参数的效果:

def compare_chunk_strategies(file_path: str) -> dict:
    for strategy in ["fixed", "recursive"]:
        for size in [256, 512, 1024]:
            chunks = split_documents(docs, strategy=strategy, chunk_size=size, chunk_overlap=size // 10)
            # 记录:切了多少块、平均长度、第一块的内容
3.3.3 向量存储(Chroma)
def get_vectorstore() -> Chroma:
    global _vectorstore
    if _vectorstore is None:
        _vectorstore = Chroma(
            collection_name=CHROMA_COLLECTION,
            embedding_function=get_embeddings(),
            persist_directory=CHROMA_PERSIST_DIR,
        )
    return _vectorstore

用了单例模式,全局只有一个 Chroma 实例。Chroma 是嵌入式向量数据库,数据直接存在本地磁盘(./chroma_db),不需要额外起服务,开发阶段非常方便。

生产环境建议换成 Milvus 这种分布式方案(项目的 docker-compose 里已经准备好了 Milvus)。

3.3.4 三种检索模式

这是项目最有意思的部分之一。

纯向量检索:把问题转成向量,在向量库里找最相似的文本块。擅长语义匹配,比如"怎么让模型不瞎编"能匹配到"减少幻觉"。

def get_vector_retriever(top_k=5):
    vs = get_vectorstore()
    return vs.as_retriever(search_kwargs={"k": top_k})

BM25 检索:传统的关键词搜索算法,基于词频和逆文档频率。擅长精确匹配,比如搜"Milvus"就是要找包含这个词的内容。

def get_bm25_retriever(top_k=5):
    # 从 Chroma 加载所有文档,构建 BM25 索引
    return BM25Retriever.from_documents(_all_docs_for_bm25, k=top_k)

混合检索:向量 + BM25 一起用,通过 EnsembleRetriever 做 RRF(Reciprocal Rank Fusion)融合。

def get_hybrid_retriever(top_k=5):
    return EnsembleRetriever(
        retrievers=[vector_retriever, bm25_retriever],
        weights=[0.6, 0.4],  # 向量 60%,BM25 40%
    )

为什么权重是 6:4? 向量检索在大多数场景下效果更好(能理解语义),但关键词检索在精确匹配场景不可替代,所以给向量更高权重,同时保留 BM25 的补充能力。

3.3.5 Query 变换(两种策略)

用户的提问往往不是最适合检索的形式,Query 变换就是在检索前优化问题。

Query Rewrite(改写):

def rewrite_query(query: str) -> str:
    prompt = ChatPromptTemplate.from_template(
        "你是一个搜索查询优化助手。请将用户的问题改写为更适合在知识库中检索的查询语句。"
        "只输出改写后的查询,不要解释。\n\n用户问题:{question}"
    )

比如用户问"RAG 咋用啊",改写后可能变成"RAG 的使用方法和核心流程",更适合检索。

HyDE(假设性文档嵌入):

def hyde_query(query: str) -> str:
    prompt = ChatPromptTemplate.from_template(
        "请针对以下问题写一段简短的回答(约100字),即使你不确定也请尝试回答。"
        "这段回答将用于检索相关文档。\n\n问题:{question}"
    )

这个思路很巧妙:不用问题去搜,而是先让 LLM 猜一个答案,用这个答案去搜。为什么?因为答案和知识库里的内容在表述上更接近(都是陈述句),向量相似度会更高。这个方法来自论文 “Precise Zero-Shot Dense Retrieval without Relevance Labels”。

3.3.6 RAG 主链路
def query_rag(question, retrieval_mode="hybrid", query_transform="none", top_k=5):
    # 1. Query 变换(可选)
    search_query = question
    if query_transform == "rewrite":
        search_query = rewrite_query(question)
    elif query_transform == "hyde":
        search_query = hyde_query(question)

    # 2. 检索
    retrieved_docs = retriever.invoke(search_query)

    # 3. 拼装 Prompt + 生成回答
    chain = RAG_PROMPT | llm | StrOutputParser()
    answer = chain.invoke(
        {"context": format_docs(retrieved_docs), "question": question},
        config={"callbacks": callbacks},  # Langfuse 追踪
    )

注意一个细节:Query 变换只影响检索用的 query,最终给 LLM 的还是用户原始问题。这很重要,因为改写/HyDE 是为了提高检索精度,但回答应该针对用户的原始意图。

Prompt 模板也值得看:

RAG_PROMPT = ChatPromptTemplate.from_template(
    """你是一个知识库问答助手。请基于以下检索到的内容回答用户问题。
如果检索内容中没有相关信息,请诚实说明。回答时标注信息来源。

检索到的内容:
{context}

用户问题:{question}"""
)

两个关键指令:没有相关信息要诚实说明(减少幻觉)、标注信息来源(增强可信度)。


四、基础设施:Docker Compose 一键部署

rag-infra/docker-compose.yml 包含三个服务:

4.1 Milvus(向量数据库)

Milvus 是分布式向量数据库,依赖 etcd(元数据存储)和 MinIO(对象存储)。虽然当前代码用的是 Chroma,但 Milvus 已经为生产环境准备好了。

milvus:
  image: milvusdb/milvus:v2.4.0
  ports:
    - "19530:19530"  # API 端口
    - "9091:9091"    # 健康检查
  depends_on:
    etcd:
      condition: service_healthy
    minio:
      condition: service_healthy

4.2 Redis(缓存/对话记忆)

redis:
  image: redis:7-alpine
  command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru

配置了 AOF 持久化和 LRU 淘汰策略。目前代码还没接 Redis,但架构上已经预留了对话记忆的能力。

4.3 Langfuse(可观测性)

langfuse:
  image: langfuse/langfuse:2
  ports:
    - "3000:3000"  # Web UI

Langfuse 可以追踪每次 RAG 查询的完整链路:用了哪个检索器、检索到了什么、LLM 的输入输出、耗时多少。对于调优 RAG 效果非常有用。


五、快速上手

# 1. 克隆项目并安装依赖
git clone https://github.com/daixueyun3377/RAG-demo.git
cd RAG-demo
pip install -r requirements.txt

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,填入 DeepSeek 和硅基流动的 API Key

# 3. 启动服务
uvicorn app.main:app --reload --port 8000

# 4. 打开浏览器访问 http://localhost:8000/docs
# FastAPI 自带 Swagger UI,可以直接测试接口

测试流程:

  1. 调用 /upload 上传 docs/sample.md
  2. 调用 /query,问"RAG 有什么优势"
  3. 对比不同 retrieval_mode 和 query_transform 的效果
  4. 调用 /compare-chunks 看不同切分策略的差异

六、我的思考:这个项目还可以怎么改进?

学完之后我也想了一些可以优化的方向:

  1. 加 Reranker:检索出来的 top_k 结果,用一个交叉编码器(如 bge-reranker)做二次排序,精度会有明显提升
  2. 支持更多文档格式:PDF(PyPDFLoader)、Word(UnstructuredWordDocumentLoader)、HTML 等
  3. 接入对话记忆:Redis 已经部署了,可以用 LangChain 的 ConversationBufferMemory 实现多轮对话
  4. 向量库切换到 Milvus:Chroma 适合开发,Milvus 适合生产,支持分布式和更大规模的数据
  5. 流式输出:当前是等 LLM 生成完才返回,可以改成 SSE 流式输出,用户体验更好
  6. 评估体系:接入 RAGAS 等评估框架,量化检索和生成的质量

总结

RAG 的核心思路并不复杂——先搜后答。但要做好,每个环节都有讲究:

  • 切分决定了知识库的"颗粒度"
  • 检索决定了能不能找到对的内容
  • Prompt决定了大模型能不能好好利用这些内容

这个项目的价值在于,它把这些环节都做成了可配置、可对比的,非常适合用来学习和实验。

如果你也在学 RAG,建议把项目跑起来,多试几种参数组合,看看效果的变化,比光看文档理解深刻得多。


📌 本文为个人学习笔记,如有错误欢迎指正。

后续计划继续学习 RAG 进阶内容(Reranker、多轮对话、评估体系等),有兴趣的同学可以关注。

本地RAG聊天机器人搭建:DeepSeek-R1+Ollama+Chroma实战 RAG(检索增强生成)是一种将大语言模型与结构化知识库结合的关键技术,其核心原理是通过向量检索从私有文档中精准召回上下文,再约束模型基于该上下文生成答案,从而规避幻觉、提升可验证性。该技术具备零API依赖、本地化部署、数学公式友好等工程优势,在高校教学辅助、企业知识库构建及科研文献精读等场景中价值突出。本文聚焦于使用DeepSeek-R1作为嵌入与生成双模态引擎,结合Ollama本地模型调度与Chroma高性能向量数据库,构建端到端可复现的PDF问答系统,特别强化对LaTeX公式、页眉页脚清洗、检索置信度控 阅读详情

相关推荐

本地RAG聊天机器人搭建:DeepSeek-R1+Chroma+Ollama实战指南

RAG(检索增强生成)是一种将外部知识库与大语言模型结合的关键技术,其核心在于精准检索与可信生成的协同。原理上,它通过向量数据库实现语义搜索,再将相关上下文注入LLM完成答案生成,显著降低幻觉、提升专业领域回答准确性。技术价值体现在隐私可控、零API成本、低延迟响应,特别适合高校教材研读、企业私有文档问答等场景。本文聚焦本地轻量级落地,基于DeepSeek-R1(专为技术文档优化的嵌入与生成双模)、Chroma(轻量可嵌入向量库)和Ollama(简化本地模型运行时),覆盖PDF解析清洗、数学公式适配、chu

weixin_34391445的博客 394

低代码快速构建RAG应用

本文主要介绍如何基于阿里云百炼的应用中心快速创建RAG应用,并通过API/SDK低代码方式调用RAG应用进行文档问答的最佳实践。

soso1968的博客 2363

基于LangChain构建企业级RAG与Agent系统:从零到一的实战指南

大语言模型(LLM)通过理解和生成自然语言,为智能应用提供了核心能力。其工作原理基于海量数据训练出的参数化知识表示,能够根据上下文进行推理和内容生成。为了克服LLM知识静态、可能产生“幻觉”以及无法直接操作外部系统的局限,检索增强生成(RAG)和智能体(Agent)技术应运而生。RAG通过从外部知识库中检索相关信息来增强LLM的回答,确保信息的准确性和时效性;Agent则赋予LLM规划和调用工具(如API、数据库)的能力,以完成复杂任务。这两种技术的结合,极大地提升了LLM在企业级应用中的实用价值,使其能够

weixin_33875564的博客 346

手把手教你用 HarmonyOS 的 RAG API 搭建智能问答系统,口语化教程 + 全代码示例

摘要: HarmonyOS的RAG(检索增强生成)API为开发者提供了构建智能问答系统的便捷工具,支持知识库检索、AI生成与流式交互。核心功能包括创建会话、流式问答和用户反馈收集。开发者需配置AI模型(如自定义LLM)和检索条件(向量搜索/关键词召回),通过streamRun实现分块回答,优化用户体验。关键步骤涵盖会话生命周期管理(创建→问答→关闭)、错误处理(如超时、资源不足)及反馈上报(评分/评论)。典型应用场景如智能客服,需实时拼接AI回答并收集反馈以持续优化。

2401_86731168的博客 1160

从零构建金融RAG问答机器人:基于LangChain与Qwen的实战指南

最近在后台收到不少私信,很多刚接触AI大模型的朋友都表示,面对海量的开源模型、复杂的部署流程和眼花缭乱的技术栈,感觉无从下手,学习曲线陡峭。确实,从零开始构建一个能跑起来、能对话、甚至能解决实际问题的AI应用,涉及环境、模型、框架、工程化等多个环节,任何一个环节卡住都可能让人放弃。 本文正是为了解决这个问题而生。我将以“金融大模型问答机器人”这个极具代表性的项目为蓝本,为你拆解一套从零到一的完整实战路径。无论你是想入门AI应用开发的在校学生,还是希望将大模型能力集成到现有业务中的开发者,都能从这篇教程中找到

weixin_30675247的博客 314

普通人本地跑AI实战指南:Ollama+DeepSeek-R1+RAG全链路部署

本地大模型运行是指在个人电脑上不依赖云端API,直接加载和推理开源语言模型的技术实践。其核心原理基于轻量级运行时(如Ollama)统一管理模型生命周期,并通过量化压缩、CPU适配与嵌入模型协同实现低资源开销。技术价值在于隐私可控、响应实时、成本归零,彻底规避API调用限制、排队延迟与服务下线风险。典型应用场景涵盖技术文档解析、专利检索增强(RAG)、代码辅助生成及学术研究提效。本文聚焦真实消费级硬件(i5+16GB内存无独显),详解Ollama安装避坑、DeepSeek-R1:1.5b模型选型逻辑、中文RA

dicha7140的博客 380

使用LlamaIndex,Qdrant,Ollama和FastAPI构建本地RAG api

互联网上有大量关于如何构建RAG管道的教程,问题在于,大多数都依赖于在线服务和云工具,特别是在生成部分,许多教程都主张使用OpenAI LLM API,不幸的是,这些API并不总是免费的,而且在处理敏感数据时可能不被认为是可信的。现在我们已经成功地将我们的数据(研究论文)加载到我们的向量存储(Qdrant)中,我们可以开始查询它以获取相关数据,以供我们的LLM使用。Llamaindex支持各种数据加载器,在我们的情况下,我们的数据将是一个文件夹中的一堆PDF,这意味着我们可以使用。对我们的数据进行分块。

myboyliu2007的专栏 3478

从零构建AI Agent:LangChain实战指南与金融问答机器人开发

这次我们来看一个能让你亲手搭建 AI Agent 的项目:LangChain。别再只是听说 AI Agent 有多厉害,这篇文章直接带你从零开始,理解 LangChain 的核心工作机制,并完成一个可运行的实战入门案例。对于开发者来说,LangChain 最大的价值在于它提供了一套标准化的“积木”,让你能快速连接大模型、工具和数据,构建出能自主执行任务的智能体。 本文将重点拆解 LangChain 的核心组件,并通过一个完整的项目案例,展示如何从环境搭建到功能实现。整个过程不涉及复杂的硬件门槛,普通 CPU

weixin_34416754的博客 389

基于中转API的RAG(检索增强生成)技术在LLM应用中的实现

在大规模语言模型(LLM)技术中,RAG(检索增强生成)是一种解决方案,能够将特定数据与LLM模型结合,从而生成更具针对性的响应。本文将介绍RAG的基本概念、各个阶段的实现步骤,并提供一个使用中转API的示例代码。

ppoojjj的博客 621

从零构建私有化AI系统:本地部署、RAG与微调实战指南

如果你正在寻找一套能让你从零到一掌握AI大模型应用开发,并且能真正落地到本地环境、构建私有化智能系统的完整教程,那么这篇文章就是为你准备的。市面上充斥着大量零散的、浅尝辄止的“入门”内容,它们告诉你大模型很强大,却很少告诉你如何让它为你所用,尤其是在数据安全、成本可控的前提下。一个真正有价值的教程,必须能解决三个核心痛点: 如何低成本地在本地运行大模型?如何让大模型理解并利用你的私有知识?以及,如何根据你的特定需求去“调教”大模型? 这正是“大模型本地部署 + RAG知识库 + 微调 + Dify”这套技术

weixin_34242819的博客 371

基于LangChain与RAG技术构建金融智能问答机器人实战指南

如果你正在关注大模型应用开发,或者想找一个能快速把大模型能力集成到业务里的框架,那 LangChain 这个名字你肯定绕不过去。它不是一个具体的模型,而是一个帮你“组装”和“编排”大模型应用的开发框架。简单说,它解决的核心问题是: 如何把像 OpenAI GPT、通义千问这样的 LLM,和你自己的数据、工具、业务流程稳定、高效地连接起来,变成一个可用的应用 。比如,你想做一个基于公司文档的智能问答机器人,或者一个能自动调用 API 完成复杂任务的智能体,LangChain 提供了一套标准化的组件和模式,让你

356

如何调用 RAGflow 的 API 接口?

通过以上接口,第三方脚本可以完成向 RAGflow 知识库提供内容并进行 RAG 处理的整个流程。:在完成文档解析后,如果需要从知识库中检索特定内容,可以使用此接口。它会根据用户的问题或关键词,在知识库中查找相关的文档片段(chunks)。:对上传的文档进行解析,将其内容转换为适合 RAG 处理的格式。这个过程会根据文档的类型和内容进行相应的处理,如文本提取、分词等。:在创建会话后,可以使用此接口向聊天助手提问,开启基于知识库的 AI 对话。:在向知识库提供内容之前,需要先创建一个数据集(知识库)。

xuukai的博客 1万+

LangChain实战:从零构建本地知识库问答机器人

LangChain 这个名字在 AI 应用开发圈里热度很高,但很多开发者第一次接触时,往往会被它庞大的概念和组件体系绕晕。它到底是一个“框架”,一个“库”,还是一个“平台”?今天这篇文章,我们不谈那些宏大的叙事,也不去纠结它到底属于哪一类技术名词。我们只聚焦一个核心问题: LangChain 到底替你做了什么,让你在构建 AI 应用时能更省心、更高效? 简单来说,LangChain 是一套工具集,它帮你解决了连接大语言模型(LLM)与外部世界时最繁琐、最重复的那些“胶水代码”问题。当你需要让 LLM 读取你

weixin_33691700的博客 339

RAG提速关键:用DeepSeek API替代Ollama实现低延迟推理

RAG(检索增强生成)系统的核心瓶颈往往不在向量检索,而在大语言模型(LLM)的生成延迟——尤其在本地部署如Ollama时,GPU显存调度、模型加载与IO等待导致首token延迟高、P95尾延迟不可控。DeepSeek API通过预热推理管道、常驻GPU内存和专用加速栈,将端到端延迟压至1.3秒内,P95降低85%,显著优于Qwen2-7B等本地模型。其技术价值在于提供确定性低延迟、自动扩缩容与高可用性,适用于金融知识库、合规问答、Agentic RAG等对响应时效与稳定性要求严苛的生产场景。

weixin_33691700的博客 580

图论:Dijkstra算法——最详细的分析,图文并茂,一次看懂!

Dijstra算法

普罗米修斯的博客 18万+

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v...

weixin_35343788的博客 1351

基于 DeepSeek R1 蒸馏模型与 Smolagents 的双 LLM Agentic RAG 系统实战指南

> 本文围绕 oTTomator Live Agent Studio 开源仓库中的 **R1 Distill RAG System**(`r1-distill-rag`)展开。该系统以 DeepSeek 的 R1 系列蒸馏模型为核心推理引擎,借助 HuggingFace Smolagents 框架构建出"推理模型 + 工具调用模型"双 LLM 协作的 Agentic RAG 问答系统,可用于对本地

gitblog_00105的博客 9

MySQL安装最后启动报错--Job for mysqld.service failed because the control process exited with error code. See

MySQL安装最后启动报错: [root@localhost mysql]# systemctl start mysqld Warning: mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units. Job for mysqld.service failed because the control process exited with error code. See "systemctl status m

chenchen的博客 2746

LangChain实战:从零构建本地知识库问答系统与LLM应用开发指南

大语言模型(LLM)应用开发已成为AI工程实践的核心领域,其关键在于如何高效连接模型能力与外部数据及工具。检索增强生成(RAG)技术通过将外部知识库与LLM结合,有效解决了模型幻觉与知识实时性问题,是构建可靠AI应用的主流架构。LangChain作为一个开源框架,通过提供链(Chains)、代理(Agents)、记忆(Memory)等标准化抽象组件,极大地简化了这一过程,使开发者能够像搭积木一样快速构建复杂应用。其商业平台LangSmith进一步解决了LLM应用上线后的监控、评估与调试痛点,为生产环境提供了

weixin_30444105的博客 467

从0到1搭建StarRocks3.4.1存算一体架构(VM 虚拟机版)

本文详细介绍了如何在VM虚拟机上从零搭建StarRocks 3.4.1存算一体架构。首先阐述了StarRocks作为高性能分布式SQL数据仓库的优势,重点讲解了其存算一体架构的设计原理。随后提供完整的安装指南,包括环境准备(3台CentOS 8虚拟机配置)、网络互通验证、Java环境配置、软件包解压安装等关键步骤。文章特别详细说明了FE和BE节点的配置文件修改(fe.conf和be.conf)以及必要的防火墙端口开放配置。通过图文并茂的方式,帮助开发者和运维人员快速掌握StarRocks集群部署方法,为后续

小 tom的博客 1329

博途WinCC上位机避坑指南:从工控机选型到趋势图优化的完整流程

本文详细解析了博途WinCC上位机开发全流程,从工控机选型到趋势图优化的关键技巧。针对工业自动化场景,提供硬件配置指南、网络优化方案和性能提升策略,帮助工程师避开常见陷阱,实现稳定高效的HMI系统部署。特别强调PC Station与传统触摸屏的选型对比及SIMATIC NET配置优化。

pp12345的博客 278

在消费级硬件上跑通小模型RAG:DeepSeek-R1蒸馏版实战指南

RAG(检索增强生成)是一种将外部知识库与大语言模型动态结合的基础技术范式,其核心原理在于通过向量检索精准召回相关上下文,再驱动LLM生成有依据的回答。该技术显著提升模型事实准确性与领域适应性,避免幻觉,广泛应用于技术文档问答、企业知识库、学术研究辅助等场景。本文聚焦轻量化RAG实践,基于1.5B参数的Distilled DeepSeek-R1模型与FAISS向量检索,详解如何在消费级GPU(如T4)上构建高精度、可复现、可调试的端到端系统,涵盖知识蒸馏、语义分块、嵌入调优与推理约束等关键环节。

weixin_29053067的博客 349

16QAM调制解调仿真(matlab,详细介绍仿真方案的设计、结果及结论、完整代码及注释)

16QAM调制解调仿真目录一、仿真要求二、仿真方案详细设计三、仿真结果及结论四、仿真代码 一、仿真要求 1.用基带等效的方式仿真16-QAM在AWGN信道下的误码率和误比特率性能,并与理论值相比较; 2.高阶与低阶的性能比较。 二、仿真方案详细设计 三、仿真结果及结论 仿真结果 16QAM的星座点图 64QAM的星座点图 16QAM加噪声后的星座点图 64QAM加噪声后的星座点图 16-QAM载波调制信号在AWGN信道下的误比特率性能比较 结论:由图可知,16QAM的误符号率

mango 5万+

RAG全链路拆解:从LLM基础到生产级应用实践

大语言模型(LLM)正在重塑软件系统,而生成式AI(GenAI)应用的核心落地方式之一便是检索增强生成(RAG)。RAG通过外部知识库检索与用户问题相关的内容,再交由大模型生成可靠回答,有效缓解了模型幻觉与知识陈旧问题。理解RAG需从基础概念入手:Token与上下文窗口决定模型能力边界,Embedding向量化与向量检索实现语义匹配,Prompt工程则约束输出质量。在工程层面,LangChain等框架简化了文档加载、文本切分、向量存储与检索生成的串联流程,配合Chroma等轻量级向量库,可快速搭建本地知识库

weixin_34116110的博客 579

妙算(manifold-2G)通过网线连接笔记本实现静态ip上网

本质就是共享笔记本wifi,配置以太网静态ip,然后在工控机上连接

slender_1031的博客 903

addr2line解析不出来行号的解决方式(汇编解析高阶版)

摘要:本文针对AEC crash问题中addr2line无法解析行号的情况,通过llvm-addr2line和反汇编分析,定位到CamX::AECBEStats17::AdjustROIParams函数中的乘法溢出问题。关键发现包括: 常规addr2line只能解析到函数名但无具体行号 llvm-addr2line解析出多个可能溢出点(行196/204/211/218/270/271) 反汇编显示6个条件分支跳转到溢出处理函数 源码分析确认这些位置均存在乘法运算 最终通过汇编级调试工具成功定位UBsan报告

168
上一篇: 【2】Java集合
下一篇: 2.从 LangChain 到 LangGraph:我在 RAG 入库流程上的三次设计迭代(纯个人思考,轻喷
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值