大模型-搭建 一个小型RAG系统LangChain + ChromaDB

用ChromaDB构建大模型私有知识引擎:从向量检索到RAG落地 向量数据库是实现检索增强生成(RAG)的核心基础设施,其本质是将文本映射为高维语义向量,通过相似度计算跨越关键词搜索的语义鸿沟。相比传统倒排索引,向量检索能理解‘自动停一下’与‘服务熔断’的等价性,显著提升大模型对私有文档的理解准确率。ChromaDB凭借轻量架构、DuckDB+Parquet存储优化及与LangChain原生兼容等特性,成为中小规模RAG系统首选工具。本文聚焦工程落地细节,涵盖语义分块、嵌入模型选型、自适应查询、Prompt鲁棒设计及HNSW调优等关键实践,助力开发者快速构建可靠、可演进的 阅读详情

简介

本文基于上一篇,需要先安装大模型nomic-embed-text,text-embedding-3-small的前提下进行。完全使用的本地模型,因此无需注册和付费的公钥key就可以使用。

大模型-新手安装Ollama以及大模型调用

在上一篇的基础上我们实现一个基于一篇PDF短文的小型RAG知识库。整个流程基本讲到了常用的组件和需要完成的工作细节。以小见大,为深入了解后续问题提供可实现的小目标。

LangChain 的重要模块包括:

LLM:大语言模型接口(如 OpenAI、ChatGLM、Tongyi)
Embeddings:文本向量化模型
VectorStore:向量数据库封装(Chroma、FAISS 等)
Retriever:检索器组件
Chains:链式调用(支持流水线组合)

RAG组件交互流程

LangChain LCEL 编排链路

retriever

format_docs

context

prompt_template

llm

StrOutputParser

在线检索生成

用户提问-怎么退货?

查询向量化(使用同一Embedding模型)

相似度检索(Cosine,Top‑K=4)

相关文档片段×4(带来源页码和原始文本)

PromptTemplate(问题+检索结果拼接)

ChatOpenAI(gpt‑4o/temp=0,基于文档生成答案)

最终答案+来源引用

初始数据向量化

PDF文档 your_doc.pdf

PyPDFLoader(解析→文本)

TextSplitter(chunk_size=300,文本分块)

TextSplitter(chunkEmbeddings(text→向量,文本向量化))

ChromaDB(向量持久化存储,路径 ./chroma_db/)

项目结构

最终的项目结构如下:
my-rag/
├── data/
│   └── your_document.pdf    # 你的测试文档
├── rag.py                   # 主程序
└── requirements.txt         # 依赖

安装依赖

创建 requirements.txt:

langchain>=0.2
langchain-community>=0.2
chromadb>=0.5
pypdf>=4.0

安装:

pip install -r requirements.txt

各库的作用:

库作用
langchainRAG 流程编排框架
langchain-community向量数据库(ChromaDB)和文档加载器(PyPDF)的集成
chromadb向量数据库,负责存储和检索向量
pypdfPDF 文档解析

pypdf

仅对“含可提取文本对象”的机器生成 PDF 有效,无法处理纯图像扫描件(无文本层);核心擅长‌文件结构操作‌(合并/拆分/旋转/加密/水印/元数据)及‌基础文本提取‌。‌‌

核心适用场景

  • 文件级操作‌:多文档合并、按页拆分、页面重排/旋转/裁剪、添加水印、加密解密(需 pypdf[crypto])、读写元数据与书签 。
    ‌文本提取‌:针对网页导出、Office 转存等‌纯文本 PDF‌,支持基础提取及布局模式(extraction_mode=“layout”)保留大致格式 。
  • 表单处理‌:读取 AcroForm 字段结构、批量填充文本框/复选框等交互式表单数据 。
  • 图像提取‌:安装 pypdf[image] 后可导出嵌入的图片资源(非渲染页面)。‌‌
    无效或受限场景‌
  • 扫描件/图片型 PDF‌:若 PDF 由扫描产生且无隐藏文本层,extract_text() 返回空或乱码,必须配合 OCR 工具(如 pytesseract+pdf2image)。
    ‌复杂表格精准提取‌:虽能读文本,但无法像 pdfplumber 那样基于线条自动重构合并单元格表格结构。‌
  • 渲染与生成‌:不支持将 PDF 转为图片(渲染),也不支持从零绘制矢量内容生成新 PDF(需 reportlab 或 PyMuPDF)。‌‌

选型建议
若需求是‌批量重组文档、加解密、简单文本抓取‌,首选 pypdf(纯 Python、无 C 依赖);若需‌高精度表格解析、扫描件识别或页面渲染‌,请搭配 pdfplumber、pytesseract 或 PyMuPDF 使用

把上面的文字放入word中转为PDF如下图
在这里插入图片描述
这里保存到data文件夹,并文件名称为 your_document.pdf
data/your_document.pdf

文档加载

使用PyPDFLoader加载pdf文件,输出文件内容和页数

from langchain_community.document_loaders import PyPDFLoader

# 1. 初始化加载器(传入PDF文件路径,支持相对路径/绝对路径)
# 相对路径:相对于当前代码文件的路径(如data/test.pdf)
# 绝对路径:如"C:/docs/test.pdf"(Windows)或"/home/user/docs/test.pdf"(Linux)
loader = PyPDFLoader("data/your_document.pdf")

# 2. 加载所有页面(返回Document对象列表)
pages = loader.load()

# 3. 查看基础信息
print(f" PDF总页数:{len(pages)}")  # 输出总页数
print(f"\n 第一页元数据:{pages[0].metadata}")  # 元数据(source、page等)
print(f"\n 第一页前200字符预览:\n{pages[0].page_content[:200]}...")  # 文本预览

文档切分

为什么这么分割:大模型有上下文长度限制,需要把长文档切成小块。重叠部分确保关键信息不会在分割点丢失

关键参数配置

参数类型默认值作用优化建议
chunk_sizeint1000单块最大字符数根据模型token限制调整
chunk_overlapint200块间重叠字符数保持语义连续性
separatorsList[str][“\n\n”, “\n”, " ", “”]分割符优先级按文档结构调整

通过多级分隔符递归尝试:

  • 优先尝试段落分隔符\n\n
  • 其次尝试换行符\n
  • 最后尝试空格和空字符
    这种设计能有效处理结构化文档(如Markdown)和非结构化文本的混合场景。
def split_documents(docs):
    """切分文档"""
    splitter = RecursiveCharacterTextSplitter(
        chunk_size=CHUNK_SIZE,
        chunk_overlap=CHUNK_OVERLAP,
        separators=["\n\n", "\n", "。", "!", "?", ",", " "],
    )

    chunks = splitter.split_documents(docs)
    print(f"✓ 切分为 {len(chunks)} 个片段")

    for i in chunks:
        print('----------------------------------------')
        print(i)

    return chunks

原PDF拆分后内容的拆分块内容如下,可以看到有每个块的分割先后有部分是重合的,目的就是为了防止上下文断开保持语义连续性
在这里插入图片描述

文档块向量化并存入向量数据库

大模型很强,但它有一个致命弱点:记忆有限。你公司的内部文档、产品手册、客户历史记录——这些数据模型统统不知道。怎么让模型在海量私有数据中快速找到相关信息?

答案是两个关键技术:Embedding(嵌入) 和 向量数据库。Embedding 负责把文本转换成数字向量(语义相似 = 向量接近),向量数据库负责在百万级向量中毫秒级找到最相似的。

这两者是 RAG、语义搜索、推荐系统的底层基石

 """
使用向量数据库构建一个语义搜索系统
"""


import chromadb
from langchain_ollama import OllamaEmbeddings


# 初始化嵌入模型
embedServer = OllamaEmbeddings(
    model="nomic-embed-text",  # 指定已下载的模型名称
    base_url="http://localhost:11434"  # Ollama 服务地址
)




# 2. 准备数据
documents = [
    "Python 是一种解释型、面向对象的高级编程语言",
    "机器学习是人工智能的一个分支,通过数据训练模型",
    "Docker 是一个开源的容器化平台,用于自动化部署应用",
    "React 是 Facebook 开发的 JavaScript 前端框架",
    "深度学习使用多层神经网络来学习数据的层次表示",
    "Kubernetes 是一个开源的容器编排平台",
    "自然语言处理是计算机科学和 AI 的交叉领域",
    "PostgreSQL 是一个强大的开源关系型数据库",
]

# 3. 生成 Embedding 并存入
def get_embeddings(texts):
    response = embedServer.embed_documents(texts)
    return response

embeddings = get_embeddings(documents)
# print("向量结果:", embeddings)


# # 4. 语义搜索
query = "怎么用 AI 处理文本数据?"
query_embedding = get_embeddings([query])[0]

# print("向量结果2:", query_embedding)




# 1. 初始化 Chroma
chroma_client = chromadb.Client()
collection = chroma_client.create_collection(
    name="knowledge_base",
    metadata={"hnsw:space": "cosine"}  # 使用余弦相似度
)

#保存到向量数据库
collection.add(
    documents=documents,
    embeddings=embeddings,
    ids=[f"doc_{i}" for i in range(len(documents))],
)

#使用数据库查询
results = collection.query(
    query_embeddings=[query_embedding],
    n_results=3,
)
#
print("查询:", query)
print("最相关的文档:")
for i, doc in enumerate(results["documents"][0]):
    dist = results["distances"][0][i]
    print(f"  {i+1}. [{dist:.4f}] {doc}")

# 输出:
# 查询: 怎么用 AI 处理文本数据?
# 最相关的文档:
# 1. [0.2267] 自然语言处理是计算机科学和 AI 的交叉领域
# 2. [0.4030] 深度学习使用多层神经网络来学习数据的层次表示
# 3. [0.4219] 机器学习是人工智能的一个分支,通过数据训练模型

向量相似度搜索:原理与算法

3.1 距离度量

度量方式公式适用场景值域
余弦相似度cos⁡(�,�)=�⋅��⋅
欧氏距离�(�,�)=�−�2
点积�⋅�归一化后的向量(−∞,+∞)

实践中余弦相似度用得最多——它只关心方向不关心大小,更符合"语义相似"的直觉。

这里我们使用上一章节中下载的向量模型nomic-embed-text看看常见的向量化和查询操作


from langchain_ollama import OllamaEmbeddings
import numpy as np
# 初始化嵌入模型,转为向量
embeddings = OllamaEmbeddings(
    model="nomic-embed-text",  # 指定已下载的模型名称
    base_url="http://localhost:11434"  # Ollama 服务地址
)

#单个文本向量化 (embed_query)
vector = embeddings.embed_query("如何重置密码?")
print(f"向量维度:  {len(vector)}")


#批量文档向量化
texts = ["文档片段 1", "文档片段 2", "文档片段 3"]
vectors = embeddings.embed_documents(texts)
print(f"生成向量数量:{len(vectors)} \n {vectors[0]} ")



print("---------转换为向量并对比相似度------------")

def get_embedding(text):
    response = embeddings.embed_query(text)
    return response

# 生成 Embedding
emb1 = get_embedding("猫在沙发上睡觉")
emb2 = get_embedding("小猫躺在沙发上打盹")
emb3 = get_embedding("今天股市大涨")
emb4 = get_embedding("今天股市如何")

# 计算余弦相似度
def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

print(f"猫睡觉 vs 猫打盹: {cosine_similarity(emb1, emb2):.4f}")  # ~0.95 高相似
print(f"猫睡觉 vs 股市大涨: {cosine_similarity(emb1, emb3):.4f}")  # ~0.15 低相似
print(f"今天股市如何 vs 今天股市大涨: {cosine_similarity(emb4, emb3):.4f}")  # ~0.15 高相似
print(f"今天股市如何 vs 今天股市如何: {cosine_similarity(emb4, emb4):.4f}")  # ~0.15 高相似

# 相似度如下越接近1越像
# ---------转换为向量并对比相似度------------
# 猫睡觉 vs 猫打盹: 0.8875
# 猫睡觉 vs 股市大涨: 0.6510
# 今天股市如何 vs 今天股市大涨: 0.8874
# 今天股市如何 vs 今天股市如何: 1.0000

使用LLM生成答案

其实就是用提出的问题转为向量,和存储在向量库中的向量进行相似度对比。相识度高的向量对应的文本数据返回后交给LLM进行文本的修饰后返回给提问人。

"""RAG 系统 - 基于 PDF 文档的知识问答
新版langchain_community>0.2已经把原有模块进行新的拆分,注意版本问题

这里使用的是本地模型服务ollama

"""

from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.embeddings.base import Embeddings

from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
# from langchain.prompts import ChatPromptTemplate
# from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
# from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.llms import Ollama
from langchain_ollama import OllamaEmbeddings
from langchain_core.prompts import PromptTemplate
from langchain_ollama import OllamaEmbeddings

# --- 配置 ---
DATA_PATH = "./data/your_document.pdf"
DB_PATH = "./chroma_db"
EMBEDDING_MODEL = "text-embedding-3-small"
LLM_MODEL = "llama3.1:8b"
CHUNK_SIZE = 300
CHUNK_OVERLAP = 50
TOP_K = 5






# 3. 生成 Embedding
def get_embeddings(texts):
    # 初始化嵌入模型
    embedServer = OllamaEmbeddings(
        model="nomic-embed-text",  # 指定已下载的模型名称
        base_url="http://localhost:11434"  # Ollama 服务地址
    )
    response = embedServer.embed_documents(texts)
    return response


def load_documents(path):
    """加载 PDF 文档"""
    loader = PyPDFLoader(path)
    docs = loader.load()
    print(f"✓ 加载了 {len(docs)} 页")
    return docs


def split_documents(docs):
    """切分文档"""
    splitter = RecursiveCharacterTextSplitter(
        chunk_size=CHUNK_SIZE,
        chunk_overlap=CHUNK_OVERLAP,
        separators=["\n\n", "\n", "。", "!", "?", ",", " "],
    )

    chunks = splitter.split_documents(docs)
    print(f"✓ 切分为 {len(chunks)} 个片段")
    my_doc = []


    for page in chunks:
        print('----------------------------------------')
        print(page.page_content)
        my_doc.append(page.page_content)

    return chunks


def build_vectorstore(chunks):
    """向量化并存入 ChromaDB 返回 存储实例 """
    # embeddings = OpenAIEmbeddings(model=EMBEDDING_MODEL)
    # 1. 初始化嵌入模型(确保本地 Ollama 服务已启动且模型已拉取)
    embeddings = OllamaEmbeddings(model="nomic-embed-text",base_url="http://localhost:11434")

    vectorstore = Chroma.from_documents(
        documents=chunks,
        embedding=embeddings,
        persist_directory=DB_PATH,
    )
    print(f"✓ 已存入 {vectorstore._collection.count()} 个向量")
    return vectorstore



def create_rag_chain(vectorstore):
    #检索器,把存储实例作为检索基础相当于一个实例表连接
    retriever = vectorstore.as_retriever(
        search_type="similarity",
        search_kwargs={"k": TOP_K}, #返回相识度高的 前K条记录
    )


    #提示词模板
    prompt = PromptTemplate(
        input_variables=["context", "question"],
        template="""
            你是一个知识问答助手。请基于以下参考资料回答用户的问题。
            
            要求:
            1. 只基于参考资料回答,不要编造信息
            2. 如果参考资料中没有相关信息,明确告知"找不到相关信息"
            3. 在回答中标注引用来源(如 [1]、[2])
            
            ---
            参考资料:
            {context}
            ---
            
            用户问题:{question}
        """.strip()
    )


    # llm = ChatOpenAI(model=LLM_MODEL, temperature=0)
    # 初始llm服务
    llm = Ollama(model="llama3.1:8b", base_url="http://localhost:11434")

    def format_docs(docs):
        formatted = []
        for i, doc in enumerate(docs):
            page = doc.metadata.get("page", "N/A")
            formatted.append(f"[{i+1}] (第{page}页)\n{doc.page_content}")
        return "\n\n".join(formatted)

    chain = (
            {
                "context": retriever | format_docs,
                "question": RunnablePassthrough(),
            }
            | prompt
            | llm
            | StrOutputParser()
    )

    return chain


def main():
    # 1. 加载文档
    docs = load_documents(DATA_PATH)

    # 2. 切分文档
    chunks = split_documents(docs)

    # 3. 向量化并存储
    vectorstore = build_vectorstore(chunks)

    # 4. 使用存储的向量作为基础知识,创建 RAG Chain
    chain = create_rag_chain(vectorstore)


    # 5. 交互式问答
    print("\n" + "=" * 50)
    print("RAG 系统已就绪!输入问题开始对话,输入 q 退出。")
    print("=" * 50)

    while True:
        question = input("\n你:")
        if question.lower() in ("q", "quit", "exit"):
            break
        if not question.strip():
            continue

        answer = chain.invoke(question)
        print(f"\nAI:{answer}")


if __name__ == "__main__":
    main()


效果如下
在这里插入图片描述

总结

本章节承上启下,解开实现RAG的基础功能的基础细节,为小型演示和深入学习有个初步的了解。简要来说一切的基石是向量的使用,作为开发者如果在这个基础上构建一个可用的调用链从而实现一系列的数据处理后能够实现RAG功能。

从零搭建私有化LangChain开发环境:本地大模型部署与RAG实战指南 大语言模型(LLM)作为当前人工智能的核心技术,通过海量数据训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。私有化部署LLM的核心技术价值在于保障数据安全、实现成本可控与深度定制,尤其适用于金融、医疗等对隐私和合规性要求严格的场景。检索增强生成(RAG)技术通过结合外部知识库与LLM的生成能力,有效解决了模型幻觉与知识更新滞后问题,成为构建企业级知识问答系统的关键技术方案。本文以开源模型Qwen和Llama 3为例,详细解析如何在本地环境(包括 阅读详情

相关推荐

大模型学习路线:从LLM基础到LangChain、RAG、Agent与微调实战

大模型应用开发已成为AI工程实践的核心方向,其技术栈涵盖模型调用、流程编排、知识增强、智能体构建与模型优化等层次。理解Transformer原理、Token与上下文窗口是入门基础,LangChain通过Chain与LCEL实现结构化编排,RAG利用Embedding与向量检索解决私有知识注入问题,Agent基于ReAct模式赋予模型工具调用与自主规划能力,LoRA/QLoRA微调则在低成本下实现领域适配。这些技术构成从原理到落地的完整闭环,广泛应用于智能问答、企业知识库、自动化流程与垂直领域模型定制。本文结

weixin_34167819的博客 431

大模型实战:chromadb + Ollama 本地部署问答的RAG应用

如果你真的想学习大模型,请不要去网上找那些零零碎碎的教程,真的很难学懂!你可以根据我这个学习路线和系统资料,制定一套学习计划,只要你肯花时间沉下心去学习,它们一定能帮到你!

2401_85375186的博客 1512

从零搭建私有化AI应用:本地部署、RAG知识库与模型微调实战指南

最近在尝试将大模型应用到实际业务中时,很多开发者都卡在了几个关键环节:如何安全地在本地部署一个可用的模型?如何让模型理解并回答我们私有的知识?如何低成本地让模型适应特定任务?以及,有没有一个现成的平台能快速搭建应用?这些问题看似独立,实则环环相扣,构成了从模型到应用的全链路挑战。 本文将为你系统性地拆解这套组合拳:从大模型的本地部署开始,到构建一个能“读懂”你文档的RAG知识库,再到通过微调让模型更“听话”,最后使用Dify平台快速组装成可用的AI应用。整个过程将提供完整的代码、配置和避坑指南,无论你是想学

caodaoxi的专栏 414

基于Langchain构建RAG大模型并测试结果

RAG模型的回答全部正确,其中各种细节如参数规模、专家数量、以及KV缓存优化、RoPE技术均与材料中一致,问题是DeepSeek-MOE的原理,回复KV缓存和RoPE技术在逻辑上并不是很正确。至少对于一个1.7B的模型来说,回答全部是正确内容0幻觉,效果已经比较理想了。RAG果然厉害!

DELEnomore的博客 778

本地化部署AI大模型:从开源模型选型到RAG应用实战指南

大语言模型(LLM)作为人工智能的核心技术,通过海量数据预训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。这项技术的核心价值在于能够作为通用任务处理引擎,显著提升信息处理与内容创作的效率。在实际应用场景中,企业常面临数据安全与定制化需求,这推动了模型部署方式从云端向本地迁移。开源生态的繁荣与硬件算力的普及,使得本地部署AI大模型成为可行选择。通过结合检索增强生成(RAG)技术,可将私有知识库与大模型能力深度融合,构建安全、可控的智能问答系统。本

weixin_34343000的博客 367

LangChain实战:从零构建具备RAG与Agent能力的智能助手

大语言模型应用开发的核心在于如何有效集成AI能力以解决实际问题。其基本原理是通过框架将复杂的模型能力模块化,实现工具调用、知识检索与记忆管理等关键功能,从而提升开发效率与应用智能水平。这一技术价值在于让开发者能够快速构建出具备自主决策与执行能力的智能体,广泛应用于智能客服、知识管理、自动化流程等场景。本文聚焦于LangChain框架,通过一个完整的实战项目,详细演示如何结合RAG知识库与Agent智能体,搭建一个能同时处理本地文档查询与实时网络搜索的混合型智能助手,涵盖了环境配置、核心代码实现、API封装及

weixin_30727835的博客 413

Chroma + Ollama 搭建本地RAG应用

> 本文作者为 360 奇舞团前端开发工程师本篇文章我们将基于Ollama本地运行大语言模型(LLM),并结合ChormaDB、Langchain来建立一个小型的基于网页内容进行本地问答的RAG应用。概念介绍先简单了解下这些术语:LLM (A large language model) 是通过使用海量的文本数据集(书籍、网站等)训练出来的,具备通用语言理解和生成的能力。虽然它可以推理许多内容...

奇舞周刊 1877

从零搭建企业级RAG系统:基于LangChain的检索增强生成实战教程

检索增强生成(RAG)是一种将大语言模型与外部知识库结合的技术范式,其核心原理是通过向量化检索将相关文档片段作为上下文提供给模型,从而突破模型固有知识的限制并减少幻觉。这项技术的核心价值在于能够为特定领域提供准确、可追溯的知识问答能力,广泛应用于企业知识库、智能客服和文档分析等场景。在工程实践中,LangChain框架因其模块化设计成为构建RAG系统的热门选择,而向量数据库如Chroma则为高效语义检索提供了基础设施。本教程聚焦于如何利用这些工具链,手把手实现从文档处理、向量化到检索优化的完整流程,并深入探

weixin_34161029的博客 303

基于开源大模型与LangChain构建本地AI助手:从环境部署到RAG实战

大语言模型(LLM)作为当前人工智能的核心技术,通过海量数据预训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制捕捉文本长距离依赖关系。这一技术价值在于能够将通用语言能力赋能各类应用,显著提升人机交互的智能化水平。在应用场景上,LLM不仅可用于聊天对话、内容创作,更能通过检索增强生成(RAG)技术接入私有知识库,构建领域专属的智能问答系统。本文聚焦于如何利用Llama等开源大模型,结合Ollama部署工具和LangChain应用框架,在本地环境低成本实现一个具备私有

weixin_30599769的博客 398

从零部署AI大模型:本地RAG系统搭建与实战指南

大语言模型作为当前人工智能领域的核心技术,通过海量数据预训练获得了强大的语言理解和生成能力。其核心原理基于Transformer架构,通过自注意力机制处理序列数据,实现了从通用对话到专业任务的广泛适应性。这项技术的核心价值在于将自然语言转化为可执行的智能交互,极大地降低了人机沟通的门槛。在实际应用场景中,企业常面临如何让大模型掌握私有、最新知识的问题,这正是RAG(检索增强生成)技术发挥作用的领域。通过将外部知识库向量化并与大模型结合,RAG有效解决了模型幻觉和知识陈旧等痛点。本文聚焦于如何在个人工作站本地

361

大模型应用开发实战:RAG与Agent技术栈七日速成指南

检索增强生成(RAG)和智能体(Agent)是当前构建实用AI应用的两大核心技术。RAG通过将外部知识库与大型语言模型结合,有效解决了模型幻觉和知识更新问题,其原理涉及文档切分、向量化、相似度检索和提示词工程。Agent则基于ReAct等框架,赋予大模型规划、决策和工具调用的能力,实现复杂任务的自动化执行。这些技术为开发者提供了高效构建智能问答、自动化流程等应用的工程化方案。本文以一套热门教程为切入点,系统拆解了从环境搭建、工具链使用到RAG系统构建、Agent开发及低代码平台集成的完整学习路径,并提供了可

weixin_33866037的博客 586

LangChain RAG系统构建指南:从原理到AI Agent集成实战

检索增强生成(RAG)技术通过将外部知识库与大型语言模型结合,解决了传统LLM在知识时效性、领域专业性和事实准确性方面的局限。其核心原理是将用户查询在向量空间中进行语义匹配,从知识库中检索最相关的文档片段,然后增强提示词供LLM生成精准答案。这种架构的技术价值在于实现知识可更新、来源可追溯和成本可控,特别适用于需要专业知识的应用场景。在AI Agent开发中,RAG系统扮演着长期记忆和专业知识库的角色,为决策支持、工具使用和多轮对话提供精准的知识检索能力。本文基于LangChain框架,深入解析如何构建高质

weixin_30736301的博客 411

大模型应用开发核心:Langchain、RAG、Agent与向量数据库Milvus实战解析

在构建基于大语言模型(LLM)的智能应用时,检索增强生成(RAG)和智能体(Agent)是两大核心技术范式。RAG通过从外部知识库检索相关信息来增强大模型的生成能力,有效缓解了模型的“幻觉”问题,提升了答案的准确性和可追溯性。其核心原理是将用户查询和文档转化为向量表示,利用向量数据库进行高效的相似性搜索。向量数据库,如Milvus,专为存储和检索高维向量数据而设计,通过近似最近邻(ANN)算法实现毫秒级检索,是RAG系统的基石。在工程实践中,Langchain框架极大地简化了这一流程,它提供了标准化的组件和

weixin_34293246的博客 408

大模型应用开发实战:LangChain、RAG、Agent与微调全指南

大语言模型(LLM)正快速进入企业级应用场景,开发者需要掌握从模型调用到业务落地的完整技能链。LangChain作为主流框架,将模型接入、提示词管理、链式编排、记忆与外部工具等能力模块化,极大降低了开发门槛。RAG(检索增强生成)通过向量化检索外部知识库,解决模型知识滞后与私有数据引用问题,实现可追溯、低成本的智能问答。Agent机制赋予模型自主决策与工具调用能力,使其能完成多步复杂任务。微调技术(如LoRA)则以参数高效的方式让模型适配特定领域风格与术语。从知识库问答到智能客服,这些技术相互补充,形成大模

weixin_34393428的博客 375

【MediaPipe实战】从零构建实时人脸关键点检测与表情分析系统

本文详细介绍了如何使用MediaPipe框架从零构建实时人脸关键点检测与表情分析系统。通过Python代码实现,系统能够精准检测468个3D人脸关键点,并实时分析用户表情,适用于智能交互应用。文章包含环境配置、核心实现、可视化技巧及性能优化等实战内容,帮助开发者快速掌握深度学习在计算机视觉中的应用。

weixin_30836759的博客 72

告别Keil手动分区!用CubeMX+VS Code一键生成带Bootloader的STM32 OTA工程

本文详细介绍了如何利用STM32CubeMX和VS Code实现STM32 OTA工程的自动化构建,告别传统Keil手动分区的繁琐流程。通过图形化配置Flash分区、自动生成链接脚本以及实现Bootloader跳转逻辑,开发者可以高效完成远程升级功能开发,显著提升嵌入式开发效率。

weixin_33720956的博客 388

本地大模型与知识库融合实战:RAG架构部署指南

检索增强生成(RAG)技术通过结合大语言模型的推理能力与领域知识库,实现了精准信息检索与智能生成的协同。其核心原理是将用户查询在向量空间进行语义匹配,检索相关知识片段后交由大模型生成最终响应。这种架构在保证数据隐私的前提下显著提升了专业场景的问答准确性,特别适合金融、医疗等对数据安全要求高的领域。本地化部署方案采用LLaMA3等开源模型配合ChromaDB向量数据库,通过LangChain框架实现端到端RAG流水线。实际部署时需重点优化知识分块策略、嵌入模型选型及提示工程,典型应用包括智能客服、法律咨询等需

weixin_34060741的博客 319

抖音最新风控体系研究

小编从技术角度对抖音的风控史和落地目标,跟大家聊一聊抖音,包括海外版抖音TikTok的现状与生态。 1、非常非常早的时期,抖音刚出来的时候,没有任何封禁,这个阶段,导入一个开发库,加上一个请求头,咵咵咵的数据随便拿。 2、2018-2019年,抖音加入了设备id和xg机制,在绝大多数的接口中,携带了设备id参数,同时在请求头中加入了xg,如今的apk市场,能追溯到的最早xg是0200打头的,而小编见过的最早的xg是0000打头的。这个时期的接口,这些参数都还只是预设,没有实际的用处,设备随便写,

qq517348412的博客 1万+

从闭源API到本地部署:开源大模型实战替代方案与RAG系统构建

在人工智能应用开发中,模型部署方式的选择直接影响着数据安全、成本控制和功能定制。闭源模型通过API提供服务,虽然便捷,但存在数据隐私、网络依赖和供应商锁定等固有挑战。其技术原理是基于远程调用的服务化架构,这导致了可控性差和定制化难的工程痛点。为了解决这些问题,转向开源模型和本地化部署成为关键的技术价值方向,它允许开发者在自有环境中完全掌控模型和数据流。应用场景广泛覆盖了金融、医疗、政务等对数据主权有严格要求的领域,以及需要深度定制和成本优化的企业级项目。本文聚焦于如何利用Ollama、vLLM等工具,将如Q

weixin_34043301的博客 414

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 134

构建高效的LLM应用测试框架

《构建高效的LLM应用测试框架》 关键词:LLM,测试框架,应用测试,效率优化,测试原理 摘要:本文将深入探讨构建高效LLM应用测试框架的必要性、方法与步骤,旨在为开发者提供一套系统化、可操作的测试解决方案,从而提升LLM

AI天才研究院 1044

AI大模型Agent应用开发实战:从LangChain、RAG到MCP与微调

在人工智能应用开发领域,智能体(Agent)已成为连接大语言模型与现实世界任务的关键技术。其核心原理在于,通过框架(如LangChain)将大模型的推理能力、外部工具调用(Tool Calling)与领域知识(通过RAG检索)有机结合,形成可自主规划、执行复杂工作流的智能系统。这种技术架构的价值在于,它极大地扩展了大模型的应用边界,使其不再局限于对话,而是能处理数据分析、自动化流程、个性化服务等实际任务。典型的应用场景包括构建智能文档助手、自动化客服、代码生成工具等。本文聚焦的【2027必修AI大模型】Ag

weixin_30480075的博客 413

路径跟踪 | 图解分析人工势场算法APF(附ROS C++/Python/Matlab仿真)

人工势场法的基本思想是在机器人运动环境中创建一个势场,再搜索一条势函数下降的方向,寻找一条无碰撞的最优路径。本文介绍APF算法的基本原理,并提供势场可视化实现,基于ROS C++/Python/Matlab进行算法仿真实验加深理解

FRIGIDWINTER的博客 7393

从零搭建本地知识库,Ryzen AI 平台 RAG 实战教程

本文详解基于 Ryzen AI 平台从零搭建本地知识库的 RAG 实战教程。利用 Strix Halo 架构与 NPU 加速,实现大模型端侧部署,确保数据隐私安全。涵盖向量数据库选型、文档预处理及 Ollama 接入,助开发者构建高效、低成本的私有智能系统。

2600_95884800的博客 435

PCL点云库入门(第1讲)——PCL库简介和安装(Win10/11+VS2019+PCL 1.12.0)

PCL,全称为,即点云库,是一个专注于2D/3D图像和点云处理的大型开源项目。该项目最初由斯坦福大学的杰出计算机视觉专家Radu博士及其团队开发和维护,经过十余年的发展,目前(2024年12月)已更新至1.14.1版本。PCL点云库集成了众多尖端的点云处理算法,这些算法不仅包括基础的滤波、特征估计、表面重建、配准、模型拟合和分割等,还涵盖了更高级的功能,如点云数据的语义理解、场景解析以及动态环境下的实时处理。这些算法能够对含有噪声的点云数据进行有效过滤,去除异常值;

qq_36812406的博客 1万+

Vue3 - 实现内网使用天地图离线地图,详解项目加载天地图的离线地图服务器部署与使用教程示例源码,vue3如何实现天地图的离线加载部署在内网访问(天地图资源下载/瓦片等流程教学,实现天地图各种功能)

Vue3中加载天地图的离线地图,天地图——内网使用离线地图,vue3+leaflet实现天地图离线访问,vue3项目中利用leaflet使用天地图,vue3项目中使用天地图离线地图,天地图离线瓦片的打包与发布(GeoServer)天地图离线瓦片数据下载及本地化部署,在内网中无法直接使用外网天地图资源怎么办,在vue3中openLayers加载地图 -使用天地图的瓦片数据。VUE3天地图离线怎么使用,内网部署天地图,天地图离线瓦片,部分瓦片数据,天地图如何离线,无需网络调用天地图API,vue天地图离线地图,

🏆 前端领域优质创作者 1万+
上一篇: 大模型-新手安装Ollama以及大模型调用
下一篇: 大模型-使用Openai API实现一个简单的Agent
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值