首页 / 资讯中心 / 文章详情

开发者LLM入门:提示工程、RAG与微调实战路径解析

开发者LLM入门:提示工程、RAG与微调实战路径解析 ★ FEATURED ARTICLE
简介面向国内开发者的大语言模型入门教程基于吴恩达系列课程内容以中文翻译与代码复现方式指导开发者利用大模型快速构建应用程序。整套资源共469个文件压缩包约226MB包含176个Markdown学习笔记、74个Jupyter Notebook可运行示例、13个Python脚本以及大量图片、PDF讲义、CSV/JSON数据文件和模型参数文件覆盖从理论讲解到动手实验的完整链路。目前已有1305人学习下载适合具备一定编程基础、希望系统入门大模型开发的开发者。通过中文课程笔记、可复现的Prompt写法与配套实验代码读者能理解大模型调用、提示工程、应用集成等核心环节并参照中文说明快速落地自己的项目。内容结构清晰尤其适合国内学习者对照原版课程查漏补缺省去自行翻译与复现场景的摸索时间。1. 面向开发者的 LLM 入门为什么我劝你别跳过吴恩达这套课做了几年后端又转过机器学习我看过太多人学大模型上来就啃源码、跑微调结果折腾两周连 Prompt 都写不利索。这套吴恩达大模型系列课程中文版本质上是一套给开发者踩过坑之后总结的“最短路径”它不教你背 Transformer 公式而是带着你用代码把 LLM 的三种核心能力——提示工程、检索增强、微调——逐个跑通。我拆完这套资源最大的感受是它把“会用 ChatGPT 聊天”和“能在代码里调用模型”之间的那道坎用十几个小时代掉了。适合刚接触大模型的后端、前端和数据工程师也适合那些已经调过 API 但总觉得在“黑匣子”里瞎试的人。下面我按自己复现的顺序把这套资源里真正值钱的部分拆开讲。2. 课程脉络与选型逻辑先搞清楚该学什么再动手2.1 为什么这套课的顺序值得照着跟吴恩达这套系列不是一门课而是好几门短课程拼起来的。粗略数一下大概有七八门每门一两小时左右全部围绕一个主题开发者怎么用 LLM 解决实际问题。最关键的在于它的排序逻辑。最早推出的是 ChatGPT 提示工程课然后是 LangChain 系列再往后是 RAG 和微调。这个顺序不是随意的它隐含了一条很清晰的成长路径。我最初拿到这套课的时候跳过了提示工程直接看微调结果发现代码里全是 LangChain 的链式调用连 langchain.llms 和 langchain.chains 都分不清。后来老老实实从提示工程开始才明白前面课程里每一个概念都是后面代码的基础。比如提示工程课里反复强调的“给模型思考时间”LangChain 课里就用 CoTChain of Thought的 PromptTemplate 直接实现了。所以如果你也是第一次接触别跳这个顺序是踩过坑的人排出来的。从资源整理的角度看中文版把每门课的幻灯片、Jupyter Notebook 和字幕文件都做了重组全部按原课程顺序编号。这意味着你不需要去官网挨个翻文件夹也不需要处理油管视频字幕和代码文件对不上的问题。对于英文阅读有压力的开发者中文版字幕配合代码文件一起看效率高很多。2.2 Notebook 环境别纠结本地部署直接走 Colab这套课的所有代码都在 Jupyter Notebook 里。原版建议用 Google Colab 跑中文版资源里保留了 .ipynb 文件格式。我一般会建议新手直接用 Colab原因很实际Prompt 工程课里需要调用 OpenAI API而很多人的本地环境缺 key 或者网络受限Colab 里可以直接用 os.environ 设置环境变量不用处理本地代理问题。不过要注意并不是所有 Notebook 都能一键跑通。有些较早期课程里的代码用的是 text-davinci-003而现在默认模型早换成了 gpt-3.5-turbo 或 gpt-4。你会发现代码里 If you have an OpenAI account, you can get your API key here 这样的提示需要自己替换模型名称和 API 调用方式。这个坑我在后面第 5 章会详细说。环境准备本身很简单但有一个细节容易忽略每门课引入不同的 Python 包。比如 LangChain 课需要安装 langchain、openai、tiktoken而微调课需要 openai、pandas、json。中文版资源里没有统一放 requirements.txt我复现的时候是自己按需安装的。建议你每开始一门新课先看第一个单元格里的 import缺什么装什么不要一次性全装。3. 提示工程实战把 Prompt 当代码写而不是当话聊3.1 结构化输出与分隔符让模型的回复可被解析提示工程课里最核心的一个观点是Prompt 不是自然语言聊天而是你写给模型的“代码”。开发者最容易犯的错误是像聊天一样写 Prompt最后解析结果时一团乱麻。课程花了很大篇幅讲结构化输出——要求模型返回 JSON再通过 Python json.loads 解析。这在真实项目中几乎是刚需。我自己在做一个自动生成周报的工具时就用了这个思路。先定义一个输出格式模板要求模型把工作总结、明日计划、风险项三个字段用 JSON 返回然后代码里直接解析。最开始的 Prompt 是纯文本描述模型偶尔会在 JSON 前后加几句废话解析直接失败。后来按照课程教的方法把输出格式写进 System Message加上“只输出 JSON不要额外文本”的约束问题立刻就解决了。课程里还有一个值得反复实验的技巧是分隔符。用 、###、--- 这类标记把指令和待处理的文本分开模型会更容易理解边界在哪。这个技巧看起来很简单但实际效果非常明显尤其是在处理长文档、做摘要和提取信息的时候。我给运营团队写了一个自动读取用户反馈并分类的脚本用的就是这个方法准确率从 70% 左右直接提到了 85% 以上。3.2 少样本学习与思维链两个立竿见影的调参手法少样本学习Few-shot Learning是这套课程里性价比最高的技巧之一。它的原理很简单在 Prompt 里给模型展示几个输入输出的例子模型就会模仿这个模式来回答新的问题。这比你在 Prompt 里写一万字规则都管用。课程里给了一个非常直观的例子——让模型判断用户评论的情感是正面还是负面。只写指令模型偶尔会输出“The sentiment is positive”这种废话给了两个示例后它就老老实实输出“positive”或“negative”。思维链Chain of Thought则是另一个能显著提升推理准确率的技巧。课程里展示的核心是让模型先给出推理过程再给出最终答案而不是直接让它跳过步骤给结论。这对数学题、逻辑推理类的任务特别管用。你可能觉得这有点玄学但它的背后逻辑其实很简单模型在生成答案时如果被要求先整理思路它就不容易在中间步骤出错。我在复现的时候把这个技巧用在了知识库问答里。当用户问“为什么我的服务器 CPU 占用率总是 100%”时代码会先要求模型列出排查步骤再给解决方案。这样生成的答案比直接回答质量高很多也更像是一个有经验的运维在说话。4. RAG 检索增强生成让模型学会“查资料”4.1 从向量化到检索搭建一个最小可用的问答管道RAG 大概是这几个课程里最火的一个方向了。它能解决 LLM 不擅长回答私有领域知识的问题——你公司内部的规章制度、产品文档、历史工单这些资料模型都没见过强行问只会得到胡说八道的答案。RAG 的思路是先把文档切成小块用 Embedding 模型转成向量存进向量数据库用户问问题时先把问题转成向量在库里搜索最相似的文本块最后把搜到的文本块和问题一起拼进 Prompt让模型基于搜到的内容作答。这套中文版课程里有一门专门的 LangChain 与向量数据库课代码直接用了 Chroma 这个轻量级向量数据库。它的好处是不需要单独起服务直接 pip install chromadb 就能用特别适合学习和原型验证。我复现的时候写了一个能从 PDF 里抽取内容、按固定长度切块、生成向量、然后做检索问答的脚本。核心代码如下from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma # 1. 加载 PDF 文档 loader PyPDFLoader(docs/company_manual.pdf) documents loader.load() # 2. 切块每块 500 字符重叠 50 字符避免把一句话截断 text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50, separators[\n\n, \n, 。, , , , ] ) texts text_splitter.split_documents(documents) # 3. 初始化 Embedding 模型 embeddings OpenAIEmbeddings(modeltext-embedding-ada-002) # 4. 存入 Chroma自动完成向量化 vectorstore Chroma.from_documents( documentstexts, embeddingembeddings, persist_directory./chroma_db # 本地持久化目录 ) # 5. 创建检索器默认返回前 4 个最相关文档块 retriever vectorstore.as_retriever(search_kwargs{k: 4}) # 6. 测试检索效果 question 员工请假流程是什么 docs retriever.get_relevant_documents(question) for doc in docs: print(doc.page_content[:200]) print(---)这里几个参数值得细说。chunk_size 决定每块文本多长不是越长越好——太长了会混入多个主题导致检索不精准太短了又会丢失上下文。我试过 250 和 1000效果都不如 500 稳定。chunk_overlap 的作用是让相邻块之间保留一些重叠内容避免一个完整的句子或者概念恰好被切在分界处丢掉。k 值代表检索返回几块文本如果文档很大可以适当调大到 6 或 8。向量化之后把检索结果拼进 Prompt 的工作就是 LangChain 的 RetrievalQA 链来完成的。这个链把用户问题和检索到的文本块合并交给 LLM 生成答案整个管道就这样闭合了。4.2 切块策略与 Embedding 选型检索质量的关键不在模型参数很多人第一次跑通 RAG 后会很兴奋但用起来发现问题不少检索结果不对、回答驴唇不对马嘴。这时候九成问题都出在文本切块上。课程里强调的是 RecursiveCharacterTextSplitter它比其他切分器聪明的地方在于会递归地用不同分隔符去切优先保留段落完整性而不是强行按固定字符数切。我在实际做知识库时还发现一个比切块更隐蔽的问题Embedding 模型的选择。课程里默认用 text-embedding-ada-002这个模型在英文上表现不错但在中文场景直接用它会导致近邻检索结果经常不相关。后来我换成了 m3e-base 这类针对中文优化的 Embedding 模型检索准确率有明显提升。如果你做纯中文知识库强烈建议在代码里换掉默认的 OpenAI Embedding改成 HuggingFace 上的中文模型。检索参数也有讲究。Chroma 默认的检索方式是 similarity也就是纯向量距离。但课程里还提到了 mmr最大边际相关性这个模式它的特点是能减少重复信息——如果检索出来的文本块内容高度相似得分再高也会被降权。在做开放性问答时MMR 比纯相似度检索要好用回答的信息覆盖面明显更广。5. 微调与代码实战的避坑手册我踩过的五个坑5.1 模型名称硬编码导致的兼容性翻车这是我这套课程里踩的第一个坑也是最低级的一个。早期课程的代码里写着 modeltext-davinci-003但这个模型早已被 OpenAI 下线。直接跑会报错提示模型不存在。后来我把所有代码里的模型名统一替换成 gpt-3.5-turbo但由于 Completion 接口和 ChatCompletion 接口的传参格式不同代码还是跑不通。比如 text-davinci-003 用的是 prompt 参数而 gpt-3.5-turbo 要用 messages 参数。解决办法是逐行看代码找到构造请求的那一段按新版格式改写。现象代码报错InvalidRequestError: The model text-davinci-003 does not exist。原因模型已被官方下线课程代码未更新。解决将模型替换为 gpt-3.5-turbo并把 prompt 参数改为 messages 列表结构注意 role 要写 system 和 user 区分身份。5.2 OpenAI API Key 直接硬编码在 Notebook 里我见过很多人把 API key 直接写死在代码里然后传到 GitHub。这套课程资源里就有一些用户在复现时把 key 填进 Notebook然后发布到公开仓库。这是很危险的因为 API key 一旦泄露别人就能盗用你的额度花钱。正确做法是从环境变量读取。现象代码里出现openai_api_keysk-...这种字符串。原因图省事直接复制粘贴未做脱敏。解决使用os.getenv(OPENAI_API_KEY)读取环境变量或使用 python-dotenv 加载 .env 文件并且把 .env 加入 .gitignore。5.3 LangChain 版本升级引发的 API 不兼容LangChain 更新非常频繁课程录制时的版本和现在 pip install 安装的最新版差异不小。比如早期课程里用的langchain.llms.OpenAI现在还在但一些辅助函数被迁移到了langchain_community这个新包里。你从旧代码 import 会直接报错 ModuleNotFoundError。现象ModuleNotFoundError: No module named langchain.vectorstores。原因新版本将 vectorstores 拆到了 langchain_community 包。解决安装pip install langchain_community并将 import 语句改为from langchain_community.vectorstores import Chroma。如果代码里用了其他不存在的模块优先去新版文档查一下迁移说明。5.4 中文文档切块出现乱码与截断把中文 PDF 塞进 RAG 管道时很容易出现切出来的文本块以半个句子甚至半个词结尾。RecursiveCharacterTextSplitter 是支持中文字符分隔符的但前提是你在 separators 里显式传入中文标点。我一开始没传默认分隔符只有 \n\n 和 \n结果中文段落全被强行按长度截断检索时经常匹配到不完整的句子回答质量自然差。现象检索出来的文本块内容不完整经常以“的”“了”结尾回答内容干巴巴的。原因分隔符列表中缺少中文标点切块完全按字符数硬切。解决在 separators 参数中加入中文句号、感叹号、问号等标点让句子尽量保持完整。5.5 微调数据格式错误导致训练失败微调课程里给了一个把训练数据整理成 JSON 的例子要求每条消息是 role 和 content 组成的列表。但很多人在自己的数据集上跑的时候经常忘了加最后的结束标志或者 system、user、assistant 三条消息没有交替出现。OpenAI 的微调接口对格式非常严格少一个字段或者顺序错了整个请求直接失败。现象提交微调任务后很快收到BadRequest Error: Invalid JSON。原因数据中缺少 role 字段或消息顺序不对。解决在准备数据后额外跑一段校验代码遍历每条数据确保 role 在 [system, user, assistant] 内并检查每条消息的 content 不是空字符串。6. 把理论变成本地工具一个能用起来的复现技巧学完这套课程后最怕的就是笔记记了一大堆代码也跑了一遍但换一个场景还是不会用。我自己的经验是把学到的几个关键模式沉淀成一个模板脚本每次接到新需求时往里面填内容。比如我现在做一个针对公司内部文档的问答工具就会直接复用第 4 章的 RAG 管道代码只换掉文档路径和 Prompt 模板。验证自己有没有真正学会的方式也很简单把某一门课的 Notebook 关掉凭记忆从零写一个能跑的最小实现。我用这个方法检验自己 RAG 学得怎么样结果第一次写出来完全不是那么回事——文档加载、切块、向量化、检索、生成答案这五步我漏了切块里的 overlap 参数导致检索结果连续性很差。后来补上效果才正常。另外一个很值得做的动作是给 LangChain 链加上日志输出。复现课程代码的时候接口调的多了你会发现很难判断到底是检索出了问题还是模型生成出了问题。加日志的代码很简单from langchain.callbacks import StdOutCallbackHandler handler StdOutCallbackHandler() chain RetrievalQA.from_chain_type( llmllm, retrieverretriever, callbacks[handler] ) result chain.run(打印机无法连接怎么办) print(result)这样每次运行都会在终端打印出经过了哪些步骤、Prompt 是怎么拼出来的、模型返回了什么内容。你一眼就能看出是检索到的文档不对还是模型理解有问题。我在查一个知识库回答不准确的问题时就是靠这个日志发现是切块步长太大导致检索回了无关内容而不是模型生成的问题。从那以后我每次用 LangChain 搭管道第一件事就是挂上日志回调。这套课程里没有专门讲这个调试方法但我觉得它是真正把课上学到的东西落地到项目里的关键一环。希望这套中文版资源也能让你少走几步弯路直接把时间花在真正需要解决的问题上。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站