从Transformer到RAG与Agent:大模型全栈实战学习路线与7个Jupyter项目
最近在辅导一些想转行或入行大模型的朋友发现一个普遍问题网上的资料要么太零散要么太学术要么就是只讲概念不给代码。很多人学了半天Transformer、RAG、Agent这些词但被问到“怎么从头搭一个能用的系统”时还是一头雾水。本文旨在解决这个问题。我将为你梳理一条从核心原理到项目实战的LLM全栈学习路线覆盖Transformer、RAG、Agent三大核心模块并提供7个可直接运行的Jupyter Notebook实战项目。无论你是非科班出身、有一定编程基础的开发者还是想系统转型的工程师跟着这条路线走你不仅能理解大模型的工作原理更能亲手搭建出可演示、可优化的应用系统为求职和项目落地打下坚实基础。1. 大模型技术栈全景与学习路线图在深入细节之前我们有必要先俯瞰整个LLM大语言模型技术生态。这能帮助你理解每个技术点所处的位置和价值避免陷入“只见树木不见森林”的困境。当前基于大模型的应用开发可以粗略分为三个层次模型层底层核心这是大模型的“发动机”以Transformer架构为核心。理解它你才知道模型如何“思考”和“生成”。这一层通常由大型科技公司或研究机构负责研发和训练如GPT、LLaMA系列但对于应用开发者我们需要掌握其原理和微调Fine-tuning能力。应用模式层中层框架这是连接底层模型和上层业务的关键。目前最主流的两大范式是RAG和Agent。RAG解决大模型的“幻觉”和知识陈旧问题。通过从外部知识库检索相关信息并将其作为上下文提供给模型让模型生成更准确、更可靠的答案。这是让大模型“接入”你私有数据的最常用方法。Agent让大模型从“问答机”升级为“执行者”。通过给模型配备“工具”如搜索、计算、执行代码和“思考规划”能力使其能够自主或半自主地完成复杂任务链。工程与工具层上层实践这是将想法落地的具体手段。包括Prompt工程、向量数据库如Chroma, Milvus、LangChain/LlamaIndex等框架、评估与部署等。Jupyter Notebook是我们进行快速实验、原型验证和学习的绝佳环境。基于此我为你设计了一条循序渐进的学习路线第一阶段筑基 - 吃透Transformer与模型基础目标理解大模型是如何工作的。核心Transformer的自注意力机制、编码器-解码器结构、位置编码。产出能看懂模型结构图能复现一个简易的Transformer组件。第二阶段进阶 - 掌握RAG让模型拥有“外挂大脑”目标构建一个基于私有知识的智能问答系统。核心文档加载与切分、文本向量化与嵌入、向量检索、Prompt构建。产出一个能回答特定领域问题的RAG应用原型。第三阶段深化 - 探索Agent打造“自动执行者”目标让模型学会使用工具完成多步骤任务。核心Agent的核心循环思考-行动-观察、工具调用、任务规划与分解。产出一个能调用搜索引擎、计算器等工具完成用户指令的智能体。第四阶段实战与整合 - 全栈项目与工程化目标整合所学完成一个功能完整的项目并了解生产级考量。核心项目架构设计、框架使用、性能优化、评估与部署。产出一个包含前端交互、后端逻辑、模型服务的完整Demo以及7个可运行的Notebook代码库。接下来我们将沿着这条路线逐个击破。2. 环境准备打造你的大模型学习工作台工欲善其事必先利其器。一个稳定、统一的环境能避免大量兼容性问题让你专注于学习本身。我们选择Anaconda作为Python环境管理器Jupyter Notebook作为交互式学习工具。2.1 安装Anaconda与Python环境下载与安装访问 Anaconda官网 下载对应你操作系统Windows/macOS/Linux的安装包。安装过程基本一路“Next”注意勾选“Add Anaconda to my PATH environment variable”将Anaconda添加到系统PATH这样可以在任意命令行中使用conda命令。验证安装 打开终端Windows下为Anaconda Prompt或CMDmacOS/Linux下为Terminal输入以下命令conda --version python --version如果都能正确显示版本号说明安装成功。创建专属的虚拟环境 为LLM学习创建一个独立的环境是个好习惯可以避免包冲突。# 创建一个名为 llm_study 的Python 3.10环境 conda create -n llm_study python3.10 -y # 激活该环境 conda activate llm_study激活后你的命令行提示符前通常会显示(llm_study)表示已进入该环境。2.2 配置Jupyter Notebook与核心库在激活的llm_study环境中安装必要的库。# 安装Jupyter Notebook pip install notebook # 安装深度学习框架和基础科学计算库 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu # 使用CPU版本如需GPU请查阅PyTorch官网命令 pip install transformers # Hugging Face库模型加载和推理的核心 pip install datasets # 数据集加载 pip install numpy pandas matplotlib scikit-learn # 数据处理和可视化 # 安装RAG相关库 pip install langchain langchain-community # LLM应用框架 pip install chromadb # 轻量级向量数据库 pip install sentence-transformers # 用于生成文本嵌入向量 # 安装其他实用工具 pip install tiktoken # OpenAI风格的Tokenizer用于计算Token pip install ipywidgets # 用于在Notebook中创建交互式组件2.3 启动Jupyter Notebook并验证启动 在终端中导航到你打算存放学习项目的目录例如cd ~/llm_projects然后运行jupyter notebook这会自动打开你的默认浏览器显示Jupyter的文件管理界面。常见问题排查打开后空白页通常是浏览器兼容性或缓存问题。尝试使用jupyter notebook --no-browser启动然后手动复制输出的URL如http://localhost:8888/?token...到Chrome或Edge浏览器打开。清除浏览器缓存。无法导入已安装的包确保你是在(llm_study)环境下启动的Jupyter Notebook。可以在Notebook的第一个单元格中运行!conda list检查当前内核的包列表。如果不对可以在Jupyter网页界面通过Kernel - Change kernel选择Python [conda env:llm_study]。环境准备好后我们就可以开始深入第一个也是最重要的核心——Transformer。3. 核心基石彻底理解Transformer架构Transformer是当今所有主流大模型的基石。它于2017年由Google在论文《Attention Is All You Need》中提出完全摒弃了RNN和CNN仅依赖自注意力机制来处理序列数据在并行化和长距离依赖捕捉上取得了革命性突破。3.1 自注意力机制模型理解上下文的关键想象一下你在读一句话“The animal didnt cross the street because it was too tired.” 这里的“it”指的是什么人很容易知道是“animal”。自注意力机制就是让模型中的每个词Token去“看”句子中的所有其他词并计算与它们的关联程度注意力分数从而确定“it”应该关注“animal”。核心计算过程缩放点积注意力线性变换对每个词的输入向量通过三个不同的权重矩阵生成查询向量、键向量和值向量。计算注意力分数对于目标词用它的查询向量与序列中所有词的键向量做点积得到原始分数。这衡量了目标词与其他词的相关性。缩放与归一化将原始分数除以键向量维度的平方根为了梯度稳定然后通过Softmax函数归一化得到权重和为1。加权求和用上一步得到的权重对所有的值向量进行加权求和得到目标词新的表示向量。这个新向量就融合了全局上下文信息。用伪代码表示其核心思想# 假设 Q, K, V 分别是查询、键、值矩阵维度为 [序列长度, 特征维度] import torch.nn.functional as F def scaled_dot_product_attention(Q, K, V): d_k K.size(-1) # 键向量的维度 # 1. 计算点积分数 scores torch.matmul(Q, K.transpose(-2, -1)) # 2. 缩放 scores scores / torch.sqrt(torch.tensor(d_k, dtypetorch.float32)) # 3. 归一化得到注意力权重 attention_weights F.softmax(scores, dim-1) # 4. 加权求和 output torch.matmul(attention_weights, V) return output, attention_weights3.2 Transformer整体架构拆解原始的Transformer是一个编码器-解码器结构但像GPT这样的纯解码器模型只用了解码器部分BERT这样的模型只用了编码器部分。编码器由N个相同的层堆叠而成每层包含两个子层多头自注意力层将3.1中的自注意力机制并行执行多次即多个“头”每个头关注不同方面的信息最后将结果拼接并线性变换。这增强了模型在不同表示子空间中的关注能力。前馈神经网络层一个简单的全连接网络对每个位置的向量独立进行非线性变换。每个子层周围都有残差连接和层归一化这是训练深层网络的关键技术能有效缓解梯度消失问题。解码器同样由N个相同的层堆叠。除了包含编码器中的两个子层它还插入了第三个子层 3.编码器-解码器注意力层让解码器中的词关注编码器的最终输出。在翻译任务中这帮助解码器在生成目标语言词时聚焦于源语言句子的相关部分。解码器的自注意力层是掩码自注意力确保在生成第i个词时只能看到前i-1个词防止信息泄露这是生成式模型的核心。3.3 位置编码让模型感知顺序自注意力机制本身是位置无关的打乱输入顺序输出权重关系不变。为了注入序列的顺序信息Transformer引入了位置编码——一组固定的、表示位置信息的向量与词嵌入向量相加后作为输入。原始论文使用正弦和余弦函数来生成位置编码PE(pos, 2i) sin(pos / 10000^(2i/d_model)) PE(pos, 2i1) cos(pos / 10000^(2i/d_model))其中pos是位置i是维度索引。这种函数式编码使得模型能够轻松学习到相对位置关系例如位置 posk 的编码可以由位置 pos 的编码线性表示。理解了这些你就抓住了Transformer的灵魂。接下来我们通过代码来固化这些概念。4. 实战一用PyTorch手撕一个简易Transformer组件理论必须结合实践。我们将实现一个简化版的多头自注意力层这是Transformer中最核心的部件。创建Notebook文件在你的Jupyter工作目录新建一个名为1_transformer_attention.ipynb的笔记本。# 单元格1导入必要的库 import torch import torch.nn as nn import torch.nn.functional as F import math # 单元格2实现缩放点积注意力函数 def scaled_dot_product_attention(query, key, value, maskNone): 计算缩放点积注意力。 参数: query: 查询张量形状 [batch_size, num_heads, seq_len_q, depth] key: 键张量形状 [batch_size, num_heads, seq_len_k, depth] value: 值张量形状 [batch_size, num_heads, seq_len_v, depth_v] mask: 可选的掩码张量形状 [batch_size, 1, 1, seq_len_k] 或 [batch_size, 1, seq_len_q, seq_len_k] 返回: 输出张量注意力权重 d_k key.size(-1) # 获取键向量的深度维度 # 计算点积分数 scores torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(d_k) # 如果提供了掩码将掩码位置的值替换为一个极小的负数在softmax后权重接近0 if mask is not None: scores scores.masked_fill(mask 0, -1e9) # 在最后一个维度seq_len_k上应用softmax得到注意力权重 attention_weights F.softmax(scores, dim-1) # 用注意力权重对value加权求和 output torch.matmul(attention_weights, value) return output, attention_weights # 单元格3实现多头注意力层 class MultiHeadAttention(nn.Module): def __init__(self, d_model, num_heads): super(MultiHeadAttention, self).__init__() assert d_model % num_heads 0, d_model must be divisible by num_heads self.d_model d_model # 模型总维度 self.num_heads num_heads # 注意力头的数量 self.depth d_model // num_heads # 每个头的维度 # 定义线性变换层用于生成Q, K, V self.wq nn.Linear(d_model, d_model) self.wk nn.Linear(d_model, d_model) self.wv nn.Linear(d_model, d_model) # 最终的输出线性层 self.dense nn.Linear(d_model, d_model) def split_heads(self, x, batch_size): 将最后的d_model维度分割为 (num_heads, depth)并转置以便于注意力计算 x x.view(batch_size, -1, self.num_heads, self.depth) return x.permute(0, 2, 1, 3) # [batch_size, num_heads, seq_len, depth] def forward(self, v, k, q, maskNone): batch_size q.size(0) # 1. 线性变换并分割头 q self.split_heads(self.wq(q), batch_size) # [batch, heads, seq_len_q, depth] k self.split_heads(self.wk(k), batch_size) # [batch, heads, seq_len_k, depth] v self.split_heads(self.wv(v), batch_size) # [batch, heads, seq_len_v, depth] # 2. 计算缩放点积注意力 scaled_attention, attention_weights scaled_dot_product_attention(q, k, v, mask) # 3. 合并多头将头维度转回末尾然后拼接 scaled_attention scaled_attention.permute(0, 2, 1, 3).contiguous() # [batch, seq_len, heads, depth] concat_attention scaled_attention.view(batch_size, -1, self.d_model) # [batch, seq_len, d_model] # 4. 最终线性变换 output self.dense(concat_attention) return output, attention_weights # 单元格4测试我们的多头注意力层 if __name__ __main__: # 模拟输入batch_size2, seq_len5, d_model64 d_model 64 num_heads 8 batch_size 2 seq_len 5 # 创建随机输入在真实场景中这是经过嵌入和位置编码后的向量 sample_input torch.randn(batch_size, seq_len, d_model) # 初始化多头注意力层 mha MultiHeadAttention(d_modeld_model, num_headsnum_heads) # 前向传播在自注意力中Q, K, V 都来自同一输入 output, attn_weights mha(sample_input, sample_input, sample_input) print(f输入形状: {sample_input.shape}) print(f输出形状: {output.shape}) # 应该和输入形状一致 [2, 5, 64] print(f注意力权重形状: {attn_weights.shape}) # [2, 8, 5, 5] (batch, heads, q_len, k_len) print(\n注意力权重第一个样本第一个头:) print(attn_weights[0, 0])运行这个Notebook你会看到多头注意力层成功地将输入转换为相同形状的输出并得到了注意力权重矩阵。这个矩阵直观地展示了序列中每个词与其他词的关联强度。通过这个实战你不仅理解了自注意力的公式还亲手实现了它。这为你后续理解和使用Hugging Face的transformers库打下了坚实基础。5. 实战二构建你的第一个RAG问答系统理解了模型核心后我们进入应用层。RAG是目前将大模型与私有知识结合最实用的技术。其核心流程是检索 生成。5.1 RAG系统工作流程索引阶段文档加载从PDF、Word、TXT、网页等来源读取文本。文本分割将长文档切分成语义连贯的小块如200-500字符以便检索。向量化使用嵌入模型将每个文本块转换为一个高维向量嵌入。存储将文本块及其对应的向量存入向量数据库。查询阶段问题向量化将用户问题用同样的嵌入模型转换为向量。相似度检索在向量数据库中查找与问题向量最相似的K个文本块通常使用余弦相似度。上下文构建将检索到的文本块作为“参考依据”与用户问题一起构建成一个增强的Prompt。答案生成将构建好的Prompt发送给大语言模型生成最终答案。5.2 使用LangChain和ChromaDB快速搭建我们将使用langchain和chromadb来快速搭建一个原型。创建新的Notebook2_rag_with_langchain.ipynb。# 单元格1导入库并设置环境 import os from langchain_community.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma from langchain_community.embeddings import HuggingFaceEmbeddings from langchain.chains import RetrievalQA from langchain_community.llms import Ollama # 使用本地Ollama运行的模型例如llama3 # 如果没有Ollama可以用OpenAI API替代需API Key # from langchain_openai import ChatOpenAI # 设置一个本地嵌入模型这里使用轻量级的 sentence-transformers embedding_model HuggingFaceEmbeddings(model_nameall-MiniLM-L6-v2) # 单元格2准备知识库文档 # 假设我们有一个关于公司产品的知识文档 product_guide.txt doc_path product_guide.txt # 为了演示我们直接创建一个示例文档内容 sample_knowledge 我们的旗舰产品是SmartAI Assistant版本2.1。 主要功能包括自然语言对话、日程管理、邮件自动摘要、代码片段生成。 该产品支持API和Web界面两种调用方式。 定价分为三个层级基础版免费限100次/天、专业版$29/月、企业版定制报价。 系统要求需要Python 3.8环境至少4GB内存。 常见问题如何重置密码答在设置页面点击‘忘记密码’通过邮箱验证重置。 with open(doc_path, w, encodingutf-8) as f: f.write(sample_knowledge) # 单元格3加载、分割文档 loader TextLoader(doc_path, encodingutf-8) documents loader.load() # 使用递归字符分割器尽量按段落、句子等自然边界分割 text_splitter RecursiveCharacterTextSplitter( chunk_size200, # 每个块的最大字符数 chunk_overlap50, # 块之间的重叠字符避免语义断裂 length_functionlen, separators[\n\n, \n, 。, , , , , , ] ) texts text_splitter.split_documents(documents) print(f原始文档被分割成了 {len(texts)} 个文本块。) for i, text in enumerate(texts[:2]): # 打印前两个块看看 print(f\n--- 块 {i} ---) print(text.page_content[:150] ...) # 单元格4向量化并存入向量数据库 # 持久化存储到本地目录 ./chroma_db persist_directory ./chroma_db vectordb Chroma.from_documents( documentstexts, embeddingembedding_model, persist_directorypersist_directory ) vectordb.persist() # 将数据持久化到磁盘 print(f向量数据库已创建并保存到 {persist_directory}) # 单元格5初始化大语言模型 # 方案A使用本地Ollama需先安装并运行Ollama并pull模型如llama3 # 确保Ollama服务正在运行 llm Ollama(modelllama3, temperature0.1) # temperature控制创造性越低答案越确定 # 方案B使用OpenAI API取消注释并填入你的API Key # os.environ[OPENAI_API_KEY] your-api-key-here # llm ChatOpenAI(model_namegpt-3.5-turbo, temperature0) # 单元格6创建检索式问答链 qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # 将检索到的所有文档内容“塞”进Prompt retrievervectordb.as_retriever(search_kwargs{k: 3}), # 检索最相关的3个块 return_source_documentsTrue, # 返回参考来源 verboseFalse # 设置为True可以看到详细的Prompt构建过程 ) # 单元格7进行问答测试 query SmartAI Assistant的价格是多少有哪些版本 result qa_chain({query: query}) print(问题, query) print(\n答案, result[result]) print(\n参考来源) for i, doc in enumerate(result[source_documents]): print(f[{i1}] {doc.page_content[:100]}...) # 再测试一个需要“综合”知识的问题 query2 我想使用SmartAI Assistant需要准备什么样的电脑环境 result2 qa_chain({query: query2}) print(\n *50) print(问题, query2) print(\n答案, result2[result])运行这个Notebook你将看到一个简单的RAG系统从文档加载、处理到回答问题的完整流程。通过调整search_kwargs{k: 3}中的k值你可以控制参考文本的数量平衡答案的相关性和上下文长度限制。6. 实战三打造你的第一个AI AgentAgent是大模型应用的另一个前沿方向。一个简单的Agent通常由几个核心部分组成规划器、工具集、执行引擎和记忆。我们将实现一个能调用简单工具计算器、搜索的Agent。创建新的Notebook3_simple_agent.ipynb。我们将使用LangChain的Agent框架它抽象了复杂的循环逻辑。# 单元格1导入库并设置工具 from langchain.agents import Tool, AgentExecutor, create_react_agent from langchain.prompts import PromptTemplate from langchain_community.llms import Ollama # 需要安装 duckduckgo-search 用于网络搜索 # pip install duckduckgo-search from langchain_community.tools import DuckDuckGoSearchRun from langchain_community.utilities import WikipediaAPIWrapper import math # 初始化LLM llm Ollama(modelllama3, temperature0) # 单元格2定义自定义工具 # 工具1一个简单的计算器 def calculator(input_str): 执行数学计算。输入是一个数学表达式字符串例如 3 5 * 2。 try: # 警告使用eval有安全风险仅用于演示。生产环境应用更安全的解析器如ast.literal_eval。 result eval(input_str, {__builtins__: None}, {math: math}) return f计算结果: {result} except Exception as e: return f计算错误: {e} # 工具2获取当前日期模拟 def get_current_date(placeholderNone): 返回当前日期。此函数为模拟实际应调用datetime库。 from datetime import datetime return f当前日期是: {datetime.now().strftime(%Y-%m-%d %H:%M:%S)} # 工具3网络搜索使用DuckDuckGo search DuckDuckGoSearchRun() # 工具4维基百科查询 wikipedia WikipediaAPIWrapper() # 单元格3封装工具列表 tools [ Tool( nameCalculator, funccalculator, description当需要回答数学计算问题时使用。输入应该是一个明确的数学表达式如 3 5 或 sqrt(16)。 ), Tool( nameCurrentDate, funcget_current_date, description当被问到关于今天日期或当前时间的问题时使用。不需要输入。 ), Tool( nameWebSearch, funcsearch.run, description当问题涉及最新事件、实时信息或未知领域知识时使用。输入是一个搜索查询词。 ), Tool( nameWikipedia, funcwikipedia.run, description当需要查询关于人物、地点、公司、历史事件等事实性知识时使用。输入是一个主题词。 ) ] # 单元格4创建Agent提示模板 # ReActReasoning Acting是一种经典的Agent提示框架 prompt_template 你是一个有帮助的AI助手可以访问以下工具 {tools} 请严格遵循以下格式来使用工具 问题用户提出的原始问题 思考你需要分析问题决定是否需要使用工具以及使用哪个工具 行动你将要采取的行动格式为 Action: 工具名称 行动输入工具的输入内容格式为 Action Input: 输入 观察工具返回的结果 ... (这个思考/行动/观察循环可以重复多次) 思考我现在有足够的信息来回答用户的问题了 最终答案基于所有观察给出最终答案 现在开始 问题{input} {agent_scratchpad} prompt PromptTemplate.from_template(prompt_template) # 单元格5创建Agent并执行 agent create_react_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue, handle_parsing_errorsTrue) # 单元格6测试Agent queries [ 3的5次方是多少, 今天的日期是什么, 马斯克最近有什么新闻, Python编程语言的创始人是谁 ] for query in queries: print(f\n{*60}) print(f用户问题: {query}) print(f{*60}) try: result agent_executor.invoke({input: query}) print(f\n最终答案: {result[output]}) except Exception as e: print(f执行出错: {e})运行这个Notebook你将看到Agent是如何一步步“思考”的它先分析问题决定调用“Calculator”工具然后执行计算最后整合结果给出答案。对于需要搜索的问题它会调用“WebSearch”工具。verboseTrue参数让你能清晰地看到内部的ReAct循环过程。7. 整合实战与Notebook资源清单前面的三个实战项目分别攻克了核心原理Transformer、主流应用模式RAG和前沿方向Agent。但要达到“全栈”水平还需要将这些点连成线并补充工程化知识。以下是我为你准备的7个实战Notebook资源清单涵盖了从基础到进阶的完整学习路径1_transformer_attention.ipynb手撕多头自注意力。就是本章第4节的内容深入理解Transformer核心。2_rag_with_langchain.ipynb快速搭建RAG问答系统。就是本章第5节的内容使用LangChain和ChromaDB。3_simple_agent.ipynb构建ReAct智能体。就是本章第6节的内容理解Agent的基本循环。4_fine_tuning_sft.ipynb大模型指令微调实战。使用Hugging Facetransformers和trl库在特定数据集上微调一个开源模型如LLaMA或Qwen使其遵循指令。内容涵盖数据准备、LoRA/QLoRA高效微调、模型保存与评估。5_advanced_rag_optimization.ipynb高级RAG优化技巧。超越基础RAG实现混合检索结合向量检索和关键词检索。重排序使用更精细的模型对检索结果重新排序。父文档检索检索大块返回相关子块。RAG评估使用ragas等框架评估检索和生成质量。6_agent_with_memory_planning.ipynb具备记忆与规划能力的Agent。构建更复杂的Agent包含对话记忆保存历史对话。任务分解与规划将复杂问题拆解为子任务。工具学习让Agent学习何时以及如何使用新工具。7_full_stack_llm_app.ipynb全栈LLM应用Demo。整合前端Gradio简易界面、后端FastAPI、向量数据库、Agent逻辑部署一个可交互的完整应用。涵盖API设计、异步处理、简单前端开发。如何获取与使用这些Notebook由于篇幅限制本文无法贴出所有Notebook的完整代码。我已将这7个Notebook的完整代码、详细的注释、运行说明和示例数据整理成一个开源项目。你可以通过我的GitHub仓库在文末提供获取。每个Notebook都是独立的你可以按照顺序学习也可以根据兴趣跳转。8. 常见问题与排查思路在学习和大模型项目开发中你会遇到各种“坑”。这里总结一些高频问题及其解决方案。问题现象可能原因排查与解决思路导入LangChain等库报错1. 未安装对应库。2. 版本冲突。3. 库名变更如langchain拆分为langchain-core,langchain-community。1. 使用pip list | grep langchain检查安装。2. 创建新的虚拟环境严格按照文档安装指定版本。3. 检查导入语句新版本可能从langchain_community导入组件。Ollama模型加载慢或报错1. Ollama服务未启动。2. 未下载指定模型。3. 内存不足。1. 终端运行ollama serve启动服务。2. 运行ollama pull llama3下载模型。3. 尝试更小的模型如llama3:8b或检查系统内存。RAG检索结果不相关1. 文本分割策略不合理块太大或太小。2. 嵌入模型不匹配与查询语义不匹配。3. 检索数量K设置不当。1. 调整chunk_size和chunk_overlap尝试按句子或语义分割。2. 更换更强大的嵌入模型如text-embedding-3-small。3. 调整k值并考虑加入重排序步骤。Agent陷入循环或调用错误工具1. 工具描述不清晰。2. Prompt指令不够明确。3. LLM的“思考”能力有限。1. 优化工具的描述使其职责单一、明确。2. 在Prompt中提供更清晰的示例Few-shot。3. 使用更强的LLM或在Agent逻辑中加入验证和重试机制。生成速度慢1. 使用本地大模型硬件资源不足。2. 检索步骤耗时。3. Prompt过长。1. 考虑使用量化模型、API服务或更小模型。2. 对向量数据库建立索引或使用更高效的检索器。3. 精简Prompt或使用流式输出改善用户体验。答案出现“幻觉”1. RAG检索到的上下文不足或无关。2. 模型本身的知识与提供的事实冲突。1. 优化检索质量见上一条。2. 在Prompt中强调“严格依据给定上下文回答”并设置惩罚让模型少编造。9. 工程最佳实践与学习建议掌握了基础技能后要迈向生产环境或求职还需要关注以下工程化实践版本控制与依赖管理使用requirements.txt或pyproject.toml精确记录所有依赖包及其版本。使用conda env export environment.yml导出完整环境。代码务必用Git管理提交清晰的Commit信息。配置与秘钥管理永远不要将API密钥、数据库密码等硬编码在代码中。使用环境变量.env文件配合python-dotenv或专门的配置管理服务来管理敏感信息。Prompt工程标准化将Prompt模板化、模块化与业务逻辑分离。对重要的Prompt进行版本管理和测试记录不同版本的效果。可观测性与评估为你的LLM应用添加日志记录特别是输入、输出、Token消耗、耗时。建立评估体系对于RAG评估检索相关性、答案忠实度、信息完整性对于Agent评估任务完成率、步骤效率。安全与合规对用户输入进行严格的清洗和过滤防止Prompt注入攻击。在输出前对模型生成的内容进行审查或过滤避免产生有害、偏见或不合规的内容。了解并遵守数据隐私法规如GDPR谨慎处理用户数据。持续学习路径深入理论精读《Attention Is All You Need》等经典论文。跟进框架关注LangChain、LlamaIndex、Semantic Kernel等框架的更新。参与社区在Hugging Face、GitHub、相关论坛上阅读优秀项目源码参与讨论。动手复现尝试复现论文中的关键模型或算法这是提升能力最快的方式。这条从Transformer到RAG、Agent的完整路线配合7个层层递进的实战Notebook旨在为你构建一个坚实且可验证的学习体系。大模型领域变化迅速但核心思想和工程能力是相通的。不要停留在阅读和收藏打开你的编辑器运行第一个Notebook从今天开始一行代码一行代码地构建你的理解。当你能够独立调试一个RAG系统或让一个Agent完成你设定的复杂任务时你就已经走在了大多数人的前面。

相关新闻

[C语言]《Dev-C++ 报错解决手册(Day0607 精华版)》

[C语言]《Dev-C++ 报错解决手册(Day0607 精华版)》

————新手必备:从编译错误到运行崩溃,一篇搞定前言Dev-C 是许多 C/C 初学者的入门 IDE,但其报错信息有时不够直观,容易让人一头雾水。本文整理了一些高频错误及其解决方法,希望能帮你节省调试时间。错误速查表DeepS…

2026/8/24 12:32:29 阅读更多 →
[Vue/HTML]ECharts 使用指南:从入门到绘制各种常用图表

[Vue/HTML]ECharts 使用指南:从入门到绘制各种常用图表

————数据可视化必备,一篇搞定折线图、柱状图、饼图、散点图什么是 ECharts?ECharts 是一款由百度开源、Apache 基金会孵化的纯 JavaScript 图表库。它底层依赖轻量级的 Canvas 库 ZRender,提供直观、交互丰富、可高度个性化定制的数据可视…

2026/8/24 12:32:29 阅读更多 →
拆字我最强 - cocos creator 3.8 - 精品源码

拆字我最强 - cocos creator 3.8 - 精品源码

cocos creator 3.8 - 精品源码 - 拆字我最强游戏介绍功能介绍源码获取游戏介绍 《拆字我最强》是一款休闲益智游戏,是从汉字中找到可拆解出来的新汉字,比如从 “马到成功”这四个字中可以找到十几个字,是通过选择拼字中的笔画组成新的汉字&a…

2026/8/24 12:32:29 阅读更多 →

最新新闻

基于大语言模型与多智能体仿真的疫苗舆论动力学研究

基于大语言模型与多智能体仿真的疫苗舆论动力学研究

1. 项目概述:当大语言模型遇见多智能体仿真最近几年,大语言模型(LLM)的火爆程度有目共睹,从写代码到做PPT,几乎无所不能。但作为一名长期关注复杂系统与社会仿真的研究者,我一直在思考一个问题&…

2026/8/24 18:10:10 阅读更多 →
PN结非理想特性深度解析:温漂、耗尽区与漏电的工程真相

PN结非理想特性深度解析:温漂、耗尽区与漏电的工程真相

1. 为什么教科书里那个“理想PN结”在实验室里根本测不出来?刚带完一届模电实验课,有个学生举手问:“老师,书上说PN结正向导通压降是0.7V,我用万用表二极管档测1N4148,怎么有时0.58V、有时0.63V、冬天还掉到…

2026/8/24 18:10:10 阅读更多 →
ODA X9-2心跳中断根因:Mellanox CX5固件BUG深度解析

ODA X9-2心跳中断根因:Mellanox CX5固件BUG深度解析

1. 问题浮现:ODA X9-2集群心跳中断不是网络配置错误,而是固件在“装睡”去年底接手一个Oracle ODA X9-2双节点集群的例行健康巡检,客户报障说“集群偶尔出现脑裂告警,但所有业务数据库都正常运行,ASM磁盘组也没掉线”。…

2026/8/24 18:10:10 阅读更多 →
Java大厂面试技巧:技术深度与幽默应对的平衡

Java大厂面试技巧:技术深度与幽默应对的平衡

1. 面试场景的戏剧性冲突解析 "严肃面试官vs搞笑程序员"这个组合之所以能形成戏剧张力,本质上反映了技术面试中两种典型角色的认知差异。大厂技术面试通常采用"压力面试"模式,面试官会刻意保持严肃表情和尖锐提问方式,这…

2026/8/24 18:10:10 阅读更多 →
鸣潮模组怎么装?WuWa-Mod 安装与配置完整指南,一步到位

鸣潮模组怎么装?WuWa-Mod 安装与配置完整指南,一步到位

鸣潮模组怎么装?WuWa-Mod 安装与配置完整指南,一步到位 【免费下载链接】wuwa-mod Wuthering Waves pak mods 项目地址: https://gitcode.com/GitHub_Trending/wu/wuwa-mod WuWa-Mod 是一个开源的鸣潮模组项目,它为《鸣潮》&#xff0…

2026/8/24 18:10:10 阅读更多 →
恶霸鲁尼崩溃修复指南:3 条路径快速解决 Windows 10 闪退

恶霸鲁尼崩溃修复指南:3 条路径快速解决 Windows 10 闪退

恶霸鲁尼崩溃修复指南:3 条路径快速解决 Windows 10 闪退 【免费下载链接】SilentPatchBully SilentPatch for Bully: Scholarship Edition (fixes crashes on Windows 10) 项目地址: https://gitcode.com/gh_mirrors/si/SilentPatchBully Windows 10 上玩《恶霸鲁尼:奖…

2026/8/24 18:09:09 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →