深度学习

智能体4- RAG 技术详解

2025-11-16  本文已影响0人  R7_Perfect

在前几篇文章中,我们构建了一个基础 Agent,理解了其决策逻辑(ReAct)并通过提示工程提升了智能水平。但你是否遇到过这样的问题:

?Agent 回答不了你私有文档中的问题,比如企业内部手册、PDF 报告或技术文档。

这正是 RAG(Retrieval-Augmented Generation)技术要解决的问题。今天,我们就来揭开它的面纱,并实战打造一个能读懂你文档的智能 Agent。

1. 什么是 RAG?

RAG(检索增强生成)是一种 将检索(Retrieval)与生成(Generation)结合起来 的方法。它的基本思路是:

它的目标是弥补语言模型“只知训练前知识”的缺陷,让 Agent 实时“读文档、查资料”。

2. 核心架构解析

RAG 架构由以下几部分组成:

┌────────────┐
│  用户提问   │
└────┬───────┘
     ↓
┌────────────┐
│ 检索组件(向量库)│  ← 从文档中检索相关信息
└────┬───────┘
     ↓
┌────────────┐
│ 语言模型(LLM) │  ← 根据检索信息生成答案
└────┬───────┘
     ↓
┌────────────┐
│   返回答案   │
└────────────┘

关键组件包括:

3. 实战:让 Agent 读懂你的 PDF 文档

Step 1:安装所需依赖

pip install langchain openai faiss-cpu pypdf tiktoken
pip install -U sentence-transformers

测试文档内容:


ee95a464-55ce-486d-be61-3286686ab3c3.png
import os

# 配置 Hugging Face 镜像源,解决连接超时问题
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.embeddings import OpenAIEmbeddings, HuggingFaceEmbeddings, HuggingFaceBgeEmbeddings

# 1. 加载文档
loader = PyPDFLoader("C:/Users/XX/RAG测试.pdf")
pages = loader.load()

# 2. 文本切分
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)#每个文本块的最大字符数为500。,相邻文本块之间会有50个字符的重叠部分。这种设计可以确保在分块时不会丢失上下文信息。
docs = text_splitter.split_documents(pages)

# 3. 构建向量数据库

# embedding_model = OpenAIEmbeddings()

# 创建中文 Embedding 模型(bge-small-zh)
embedding_model = HuggingFaceBgeEmbeddings(
    model_name="BAAI/bge-small-zh-v1.5",# https://huggingface.co/BAAI/bge-small-zh-v1.5
    model_kwargs={"device": "cpu"},  # 如果你有 GPU,可改为 "cuda"
    encode_kwargs={"normalize_embeddings": True}  # 官方推荐开启
)

if __name__ == "__main__":
    text = "上海市天气状况"
    embeddings = embedding_model.embed_query(text)
    print(embeddings)

输出:

[-0.029581082984805107,
 0.022155417129397392,
 -0.04619835689663887,
 0.002687456551939249,
 0.010141762904822826,
 0.03677787631750107,
 -0.04895878955721855,
 0.03459969907999039,
 0.09580954164266586,
 -0.00027241400675848126,
 0.0484747588634491,
 -0.21692204475402832,
 -0.01903385855257511,
 -0.009855132550001144,
 0.014768422581255436,
 -0.043791916221380234,
 -0.019390679895877838,
 -0.031548622995615005,
 -0.002949550049379468,
 -0.014980154111981392,
 -0.024507658556103706,
 -0.030062075704336166,
 -0.07023793458938599,
 -0.02528921142220497,
 0.007703866809606552,
 -0.09330738335847855,
 0.03910378739237785,
 -0.020433424040675163,
 0.009958695620298386,
 -0.026872482150793076,
 0.000924916414078325,
 -0.02778564766049385,
 0.007053080480545759,
 -0.0014056081417948008,
 0.007186720613390207,
 -0.05270468071103096,
 -0.05986092612147331,
 0.027881652116775513,
 0.005776677746325731,
 0.017728574573993683,
 0.008879763074219227,
 0.007373031694442034,
 0.027590926736593246,
 -0.06738419830799103,
 0.010412726551294327,
 -0.10702558606863022,
 -0.03855978697538376,
 0.008076646365225315,
 0.032585930079221725,
 -0.0485864132642746,
 -0.021173125132918358,
 0.024873506277799606,
 0.0369960218667984,
 0.004002674482762814,
 0.03225691244006157,
 -0.022109180688858032,
 0.011464200913906097,
 0.010257992893457413,
 -0.05303194373846054,
 -0.016110176220536232,
 0.04336193576455116,
 -0.07163885235786438,
 -0.029887154698371887,
 0.01938614435493946,
 0.08808805048465729,
 -0.0467386469244957,
 0.07544055581092834,
 0.109442800283432,
 -0.014677125960588455,
 0.07013051211833954,
 0.036154039204120636,
 0.08296218514442444,
 0.012313615530729294,
 -0.011081286706030369,
 0.009447846561670303,
 -0.09093211591243744,
 0.06732100993394852,
 -0.02177753672003746,
 -0.02515346370637417,
 -0.05090457946062088,
 -0.028196994215250015,
 -0.025511600077152252,
 0.059230003505945206,
 0.031319279223680496,
 0.0394548699259758,
 0.05243581160902977,
 -0.03575890138745308,
 0.013352020643651485,
 -0.0721338614821434,
 0.023060260340571404,
 0.027560178190469742,
 -0.05931586027145386,
 0.03257621452212334,
 -3.7858259020140395e-05,
 -0.04163965582847595,
 0.012193480506539345,
 0.021681170910596848,
 -0.019847555086016655,
 -0.05604814365506172,
 -0.017278164625167847,
 0.0097498232498765,
 0.00300241494551301,
 0.013053897768259048,
 -0.0468081533908844,
 0.021521251648664474,
 0.07034935802221298,
 0.012573327869176865,
 -0.06910377740859985,
 -0.01426085364073515,
 0.03446565195918083,
 -0.049614351242780685,
 -0.0065774754621088505,
 -0.016060633584856987,
 0.04321311414241791,
 -0.07330174744129181,
 -0.08036684989929199,
 0.007330489344894886,
 0.06236322969198227,
 0.08720891922712326,
 -0.007945498451590538,
 -0.03989185020327568,
 -0.06663037836551666,
 0.013987690210342407,
 0.007703692186623812,
 -0.04371108114719391,
 -0.0273507758975029,
 0.047642555087804794,
 0.07320704311132431,
 0.04516744986176491,
 -0.007409409154206514,
 -0.0037812672089785337,
 0.02378752827644348,
 0.032275810837745667,
 -0.034093018621206284,
 0.007756748236715794,
 0.08698706328868866,
 0.008446742780506611,
 -0.04274335503578186,
 -0.09433849155902863,
 -0.029773591086268425,
 0.04020163416862488,
 0.020276345312595367,
 -0.03222506120800972,
 -0.0019099218770861626,
 0.02948644943535328,
 0.038597892969846725,
 -0.031150316819548607,
 0.0040572346188127995,
 0.07499624788761139,
 -0.031739555299282074,
 -0.011143614538013935,
 -0.022619804367423058,
 0.0842561423778534,
 0.032799381762742996,
 0.025393430143594742,
 -0.01476184744387865,
 -0.017185749486088753,
 -0.02925422228872776,
 0.009812276810407639,
 0.031155163422226906,
 0.0052347565069794655,
 0.03880435228347778,
 0.022860417142510414,
 -0.008190670050680637,
 0.011060738936066628,
 0.02558198757469654,
 -0.013422590680420399,
 -0.020426670089364052,
 -0.06882493942975998,
 0.03701121360063553,
 0.02496282197535038,
 -0.013558566570281982,
 0.02956872247159481,
 0.04057662561535835,
 -0.026752570644021034,
 -0.03817496821284294,
 -0.06168525293469429,
 -0.01810268498957157,
 0.039884235709905624,
 -0.0025339419953525066,
 -0.007495837286114693,
 -0.018164576962590218,
 0.023259077221155167,
 0.014820203185081482,
 -0.04873059317469597,
 0.053648874163627625,
 -0.030041983351111412,
 -0.02676224149763584,
 0.00334513233974576,
 -0.020351406186819077,
 -0.010845586657524109,
 0.0787864476442337,
 -0.027445493265986443,
 -0.017500724643468857,
 -0.05747588723897934,
 0.019175611436367035,
 -0.017072703689336777,
 -0.018190555274486542,
 0.06221124157309532,
 -0.01999807171523571,
 0.006884825881570578,
 -0.0446302630007267,
 0.031226254999637604,
 -0.02786775678396225,
 -0.04582912474870682,
 -0.007599995471537113,
 -0.025826331228017807,
 0.00662388326600194,
 -0.010066195391118526,
 -0.07126403599977493,
 -0.05654437094926834,
 0.0485161729156971,
 -0.06677820533514023,
 0.03826065734028816,
 -0.008212820626795292,
 -0.00975006353110075,
 -0.016371876001358032,
 -0.022342292591929436,
 -0.00944227259606123,
 -0.09022392332553864,
 0.027809273451566696,
 -0.00200494728051126,
 -0.0016295951791107655,
 -0.04274249076843262,
 -0.06343556940555573,
 -0.09267628937959671,
 0.04708093777298927,
 0.08940928429365158,
 0.006199372932314873,
 -0.013457401655614376,
 -0.06720450520515442,
 -0.055025599896907806,
 -0.027209382504224777,
 -0.007819680497050285,
 0.022493645548820496,
 0.004066400229930878,
 -0.06924054026603699,
 0.023265928030014038,
 -0.027737492695450783,
 -0.05939890071749687,
 -0.05631876736879349,
 0.08118132501840591,
 -0.023511674255132675,
 -0.013185502961277962,
 -0.07219626009464264,
 0.029771536588668823,
 -0.02602853812277317,
 -0.002246093936264515,
 -0.010793900117278099,
 0.009755536913871765,
 0.053925205022096634,
 0.05732940509915352,
 -0.032105494290590286,
 -0.034966159611940384,
 -0.009195197373628616,
 -0.003296246286481619,
 0.009593765251338482,
 0.017353933304548264,
 0.004402955062687397,
 -0.008712057955563068,
 -0.05000261962413788,
 -0.002712557092308998,
 0.04883212968707085,
 0.04871518164873123,
 0.00375741277821362,
 -0.057366546243429184,
 -0.022058794274926186,
 0.010861690156161785,
 -0.08082834631204605,
 0.042300961911678314,
 0.015573784708976746,
 0.11176961660385132,
 -0.007374265231192112,
 -0.054080620408058167,
 0.01601879484951496,
 0.05210829898715019,
 -0.0335308201611042,
 0.06114539876580238,
 0.04900650680065155,
 0.0025496669113636017,
 0.04523054510354996,
 0.06247855722904205,
 -0.032102666795253754,
 -0.029229121282696724,
 0.006608746014535427,
 0.10031294077634811,
 0.0024874676018953323,
 -0.009278949350118637,
 -0.027631787583231926,
 0.005159436725080013,
 0.06684834510087967,
 0.006706679239869118,
 -0.04779854416847229,
 0.11411220580339432,
 0.021618861705064774,
 -0.014722159132361412,
 0.05092679336667061,
 -0.01123471837490797,
 0.05763058736920357,
 0.05128065496683121,
 0.036188047379255295,
 0.0708170086145401,
 0.0006362973363138735,
 -0.013267140835523605,
 0.021230073645710945,
 -0.04462089017033577,
 0.022951003164052963,
 -0.0016219048993662,
 -0.0747874453663826,
 -0.016802098602056503,
 0.012379789724946022,
 0.052043285220861435,
 -0.0037224823608994484,
 -0.04406362026929855,
 -0.002615549834445119,
 -0.032415084540843964,
 -0.036220453679561615,
 0.04676026105880737,
 -0.017956405878067017,
 0.0406663678586483,
 -0.0435938686132431,
 0.011282160878181458,
 -0.06804706901311874,
 -0.0670110285282135,
 0.03646094724535942,
 -0.06799977272748947,
 0.005664198659360409,
 -0.04688825085759163,
 0.054888930171728134,
 0.020895013585686684,
 0.0077871656976640224,
 -0.025069132447242737,
 -0.02426554262638092,
 -0.011246866546571255,
 0.041307345032691956,
 -0.020825063809752464,
 -0.04736502096056938,
 -0.04552030190825462,
 0.03366156294941902,
 0.1390589475631714,
 0.011093148961663246,
 0.07668657600879669,
 0.052095573395490646,
 0.013390700332820415,
 0.022842856124043465,
 0.04040932655334473,
 -0.07884978502988815,
 0.003041305812075734,
 0.08930332213640213,
 0.01545032300055027,
 -0.0775429755449295,
 0.022095341235399246,
 0.0120274992659688,
 -0.04367924481630325,
 -0.016639458015561104,
 -0.026526933535933495,
 0.03542771935462952,
 -0.028491081669926643,
 -0.046982258558273315,
 0.03229294344782829,
 -0.0032153897918760777,
 0.05781954154372215,
 -0.047234538942575455,
 -0.06887222826480865,
 -0.022620709612965584,
 0.034946419298648834,
 0.11225811392068863,
 0.0385381281375885,
 0.016253728419542313,
 0.06474976241588593,
 -0.028245095163583755,
 -0.07231568545103073,
 -0.018982447683811188,
 -0.06743544340133667,
 -0.00928095355629921,
 -0.10409951210021973,
 -0.07531958818435669,
 -0.019483957439661026,
 -0.09116016328334808,
 -0.05183156952261925,
 -0.013794034719467163,
 0.016460951417684555,
 -0.03199610859155655,
 -0.0019153050379827619,
 0.053948547691106796,
 -0.023286260664463043,
 -0.09582950919866562,
 0.03202613815665245,
 -0.01271121297031641,
 -0.011089911684393883,
 0.05345475673675537,
 -0.04238029941916466,
 -0.022892385721206665,
 0.04883420094847679,
 -0.02739003114402294,
 -0.05549647659063339,
 -0.02442680113017559,
 -0.03150840476155281,
 0.0006097604054957628,
 0.007694205269217491,
 0.06774550676345825,
 -0.02038797177374363,
 -0.022677071392536163,
 -0.02078733593225479,
 0.006485678255558014,
 0.004761992953717709,
 0.03178132697939873,
 -0.014621642418205738,
 -0.049014896154403687,
 -0.11637595295906067,
 0.21096882224082947,
 -0.013522438704967499,
 -0.006711671128869057,
 -0.030247721821069717,
 0.024793187156319618,
 -0.028583263978362083,
 0.02579299733042717,
 0.044492628425359726,
 -0.030177423730492592,
 0.006305207498371601,
 0.024016885086894035,
 -0.013268264010548592,
 0.0015033718664199114,
 0.031001480296254158,
 0.017414629459381104,
 -0.03929337486624718,
 -0.04721375182271004,
 -0.02145463414490223,
 -0.07702650874853134,
 -0.06076524034142494,
 0.01099892146885395,
 -0.020620550960302353,
 0.08999831974506378,
 0.06721369177103043,
 -0.004079548176378012,
 -0.01055802684277296,
 -0.00045605486957356334,
 -0.030186429619789124,
 -0.044606804847717285,
 -0.035494450479745865,
 -0.043613094836473465,
 0.042755089700222015,
 -0.004491761326789856,
 0.020326124504208565,
 0.032661329954862595,
 -0.012807102873921394,
 -0.031438495963811874,
 0.01026603952050209,
 -0.0018758135847747326,
 0.041009653359651566,
 0.0621202178299427,
 0.08519697934389114,
 -0.0016214540228247643,
 -0.020816177129745483,
 -0.049766577780246735,
 0.028006555512547493,
 -0.02752542681992054,
 -0.014226979576051235,
 0.02348148450255394,
 -0.03176003694534302,
 -0.02179534360766411,
 0.057814013212919235,
 0.040064748376607895,
 0.031242692843079567,
 -0.013603942468762398,
 0.056134361773729324,
 -0.038844574242830276,
 0.0333402194082737,
 0.013119315728545189,
 -0.06893086433410645,
 0.0037132888101041317,
 0.02886112965643406,
 -0.019278228282928467,
 0.05461926758289337,
 0.0033744771499186754,
 0.010521464981138706,
 -0.07069475948810577,
 -0.03058553673326969,
 -0.04047008976340294,
 -0.020317399874329567,
 -0.052351295948028564,
 -0.007341762073338032,
 0.02224370837211609,
 -0.0451950766146183,
 -0.03361283615231514,
 0.09131401777267456,
 0.02667008526623249,
 0.03898905962705612,
 -0.01065791118890047,
 0.036934662610292435,
 -0.0310208760201931,
 0.0028870904352515936,
 0.054987672716379166,
 -0.02622821554541588,
 0.019161203876137733,
 0.03416365012526512,
 0.0012859031558036804,
 -0.03643832355737686,
 -0.02176753804087639,
 0.051700931042432785,
 -0.0013403559569269419,
 -0.06263616681098938,
 0.054123613983392715,
 0.03554295748472214,
 -0.040640730410814285,
 -0.03242940828204155,
 0.017252136021852493,
 0.04750048369169235,
 0.011804022826254368,
 0.06699083000421524,
 0.03728321194648743,
 -0.023722195997834206]

假设某个3维简化版本:

接下去让大模型来处理向量库

db = FAISS.from_documents(docs, embedding_model)

# retriever = db.as_retriever()
# results = retriever.get_relevant_documents("文档中提到的某个关键词")
#
# for i, doc in enumerate(results):
#     print(f"匹配结果 {i+1}: {doc.page_content}")


# 4. 初始化语言模型
API_KEY = os.getenv('DEEPSEEK_API_KEY')
llm = ChatOpenAI(
    model='deepseek-chat',
    openai_api_key=API_KEY,
    openai_api_base='https://api.deepseek.com/v1'
)

# 5. 构建 RAG 问答链
rag_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=db.as_retriever(),
    return_source_documents=True
)

输出:

根据提供的上下文,上海市的天气状况对应编号 **2**。但具体天气信息(如温度、天气现象等)未在上下文中详细说明。建议您通过天气预报平台或应用查询实时天气详情。

符合PDF中的内容

4. 提示工程与 RAG 协同进化

在 RAG 的基础上使用提示工程,可以进一步优化智能体行为,比如:

这使得你的 Agent 不仅“知其然”,更能“言之有物”。

5. 小结与展望

本篇文章我们系统学习了 RAG 技术的原理与实战方法。它是让 Agent 融入私有知识的重要路径,也是实现“个性化智能体”的关键一环。

上一篇 下一篇

猜你喜欢

热点阅读