ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从零开始学习AI工程:手把手搭建RAG问答机器人的完整路线

从零开始学习AI工程:手把手搭建RAG问答机器人的完整路线 1. 写给想入行AI工程的人这个方向到底在做什么先说个我常被问到的问题“我想学AI是不是先啃完《深度学习》再动手”问出这句话的人往往在三个月后还在第一章徘徊而真正做出东西的人早就跑通了自己的第一个AI应用。“ai-engineering-from-scratch”这个概念说白了就是一条从零开始、不依赖现成模板、不靠套壳封装一路亲手搭建AI工程能力的路线。它不要求你先成为算法科学家但要求你真正理解——你手里的模型是怎么被调起来的、数据是怎么流进去的、结果是怎么稳定输出到业务里的。这个方向能帮你解决的问题很具体比如你想做一个智能客服机器人不是买一个现成的SaaS而是从Prompt设计、模型选型、API接入、上下文管理、知识库检索到效果评估整个链路亲手搭一遍。搭完之后你不光有了一个能跑的东西还拥有了改它、扩它、修它的能力。适合谁来学说实话门槛没有想象中高。如果你已经会写Python基础语法用过Git能忍受命令行操作就已经具备了入场条件。我见过太多人栽在“准备得太充分才开始”的陷阱里——背了一堆数学公式却连一个OpenAI API调用都没跑通过。从零开始学习AI工程第一课不是数学而是把一个最小可用的AI应用跑起来。这几十年的经验教训是AI工程不是学术研究它是一门手艺。手艺就要上手练练的过程中理解原理而不是反过来。2. 为什么非得“从零开始”动手搭一遍2.1 搭积木式学习和全链路理解的区别很多人学AI是这么学的看到一个炫酷的Demo搜一下GitHub上有没有现成的开源项目直接clone下来跑通然后觉得自己会了。但真要遇到一个需求——比如把模型接入公司内部的某个业务系统——立刻就卡住了不知道请求怎么发、不知道返回怎么解析、不知道出了问题怎么定位。“从零开始”的价值恰恰在这里。当你自己动手写那几十行调用代码、亲手设计Prompt结构、亲自处理那些乱七八槽的JSON响应时你才会建立起一个完整的认知地图。这个地图告诉你模型只是整条链路中的一个节点真正的工程在于如何控制、组合和运维这个节点。我常拿做饭来打比方。照着菜谱做出一道菜不难但你不知道什么时候该大火收汁、为什么肉要提前腌制、火候过了怎么补救。从零开始学AI工程相当于先去理解食材特性和烹饪原理而不是只看菜谱。这个过程慢但扎实。2.2 AI工程与AI研究的边界在哪里明确一个边界很重要AI工程师不等于算法研究员。研究员关注的是模型本身的精度、 loss曲线的收敛、新架构的设计。而工程师关注的是——在预算、延迟、稳定性、可维护性这些现实约束下把模型能力落地成产品。举个例子研究员会花三个月优化一个模型在评测集上的准确率从92%提到93%。工程师却可能用一天时间设计一套Prompt策略把同样的效果用更便宜的小模型实现。这不是学术上的妥协而是工程上的智慧。所以“ai-engineering-from-scratch”这条路线不会让你去手写Transformer的backward传播但会让你读懂Modelscope或HuggingFace上的模型卡会分辨哪些参数是推理时要传的哪些是训练时才需要的。工程师的核心能力是选择和组合而不是发明。3. 核心知识地图AI工程必须掌握的六块拼图3.1 语言基础Python不是选修课Python是AI工程的第一语言绕不开。但不需要你会到精通Cython那种程度掌握以下内容就够用requests/httpx发HTTP请求这是调用所有大模型API的基础json处理数据大模型返回的几乎都是JSON基础异步编程asyncio处理并发请求必备环境管理工具conda或venv隔离不同项目的依赖面向对象的基本思想后面写封装好的LLM工具类会用到这里有个常见误区热衷刷LeetCode却连用requests.post发一个带Headers的请求都费劲。AI工程对算法题的要求远没有对编程基本功的要求高。把时间花在处理网络请求、异常捕获、日志打印这些实操内容上投入产出比更高。3.2 模型基础学会和“黑盒”相处现阶段学习AI工程不需要从零手写一个LLM但必须理解几个关键概念上下文窗口模型一次能“看到”多少文本。像把聊天记录、背景信息、用户问题拼在一起时超过窗口就会被截断或报错。Token化文本是怎么被切成小片段的中文一个字的Token消耗经常超出直觉。预算控制就是从这里开始。温度参数控制输出的随机性。做代码生成要低温甚至归零做头脑风暴可以用高温。系统提示与用户提示系统提示是给模型设定角色和规则的用户提示是具体问题。两者分工不同不要混用。理解了这些概念你才能在没有图形界面、没有调试器的情况下推断出一个线上问题大概出在模型的哪个环节。这是纯经验活模型看多了手感自然就有了。3.3 Prompt工程和模型对话的技术网上流传的Prompt模板很多但真正有用的Prompt工程能力是结构化的思维。我的建议是把Prompt拆成四个模块来写角色定义明确模型你是谁比如“你是一个严谨的代码审查员”任务说明告诉模型要做什么尽量具体包括输入什么、输出什么格式约束条件设定边界比如“不要解释只输出代码”“如果信息不足明确说不知道”示例演示给出一组输入输出对照模型模仿示例的能力超乎你想象别急着上很玄的思维链、少样本学习那些概念先把这四个模块写明白。我实测下来大部分应用场景4个模块就能解决80%的需求。更复杂的技巧是当你遇到真正的死角时才需要用的。3.4 RAG让模型学会查资料RAG检索增强生成这个词出现频率很高。说白了就是模型不会凭空知道你的私有数据那就先把数据检索出来塞进上下文里再让模型基于这段资料回答。这是企业级AI应用最主流的技术形态。从零开始的RAG实现不复杂一条链路是文档切块-向量化-存入向量数据库-语义检索-拼接上下文-调用模型生成。搭建过程中会遇到很多细节切块太碎语义就断了切块太大检索就糊了向量模型选便宜的国产开源就够用不必非要上最强的英文模型。这些经验只有踩过坑才能写出来。3.5 AI Agent从问答到行动的跨越如果说RAG是给模型长了“眼睛”那Agent就是给模型装了“手”——模型不再只是回答问题而是可以调用工具、执行操作、完成任务闭环。初学Agent不要被那些复杂的框架吓住。最本质的Agent模式就是一个循环模型产出意图和参数-解析成工具调用-执行工具返回结果-模型根据结果规划下一步。自己用代码实现一个只有两三个工具比如搜索引擎、计算器的最小Agent比直接上手LangChain或MetaGPT学得扎实得多。手写一遍最大的收获是你会理解工具调用背后的JSON结构化输出和循环终止条件这两个核心痛点。这些东西在框架里都是封装好的出了问题你压根不知道从哪查起。3.6 工程化基建安全、评估与运维这部分最容易被自学的人忽略但恰恰是“AI工程”中“工程”二字的分量所在安全和合规对所有输入输出做过滤和脱敏防止个人隐私数据外泄。评估体系设计一组测试用例每次改动Prompt或换模型都跑一遍看效果有没有回退。这个习惯能救命的。可观测性记录每一次请求的输入、输出、Token消耗、延迟。没有日志的AI应用就是在裸奔。成本控制按Token计费一个不小心写了个死循环Agent费用会吓你一跳。加预算上限是必须做的。这些内容在教程里往往排在最后但实际生产中的优先级更高。4. 实操路线图从零到第一个AI应用4.1 环境准备与基础设施搭建万事开头难环境更是地狱。我在这个环节踩过的坑比后面所有环节加起来都多。整理一套稳妥流程# 1. 安装Python 3.10Windows上记得勾选Add to PATH # 2. 创建虚拟环境 python -m venv ai_env # Windows激活 ai_env\Scripts\activate # macOS/Linux激活 source ai_env/bin/activate # 3. 安装核心依赖 pip install requests openai python-dotenv然后配置API密钥千万别把密钥硬编码在代码里用环境变量或者.env文件# .env文件不要提交到Git仓库 API_KEYsk-xxxxxxx BASE_URLhttps://your-endpoint.example.com/v1 MODEL_NAMEgpt-4o-mini然后写第一个调用from openai import OpenAI import os from dotenv import load_dotenv load_dotenv() client OpenAI( api_keyos.getenv(API_KEY), base_urlos.getenv(BASE_URL), ) response client.chat.completions.create( modelos.getenv(MODEL_NAME), messages[ {role: system, content: 你是一个乐于助人的助手。}, {role: user, content: 用一句话介绍你自己。} ], temperature0.7, ) print(response.choices[0].message.content)这一段代码跑通了恭喜你已经跨越了从0到1最难的心理门槛。后续的所有复杂功能都是这个基本调用的变体和扩展。写到这多唠叨一句开发环境代码编辑器VSCode就够了。加上Python插件和Git插件另外装一个类似“Continue”或“通义灵码”的AI编程插件辅助写代码是没问题的但一开始建议还是先自己写遇到报错再问AI别让AI替你写作业。4.2 从零实现一个PDF问答机器人这个项目是我很推荐的入门练手项目难度适中覆盖了上面提到的全部核心知识点。目标简单明了上传一个PDF然后向它提问回答里的信息要符合PDF内容。实现步骤拆成四段走第一步解析PDF文本import fitz # PyMuPDF def extract_text_from_pdf(pdf_path): doc fitz.open(pdf_path) texts [] for page in doc: texts.append(page.get_text()) return .join(texts)这一步要特别注意扫描版PDF是无法直接提取文字的必须先做OCR。你要是拿着一个扫描的合同文本折腾半天解析不出来先检查是不是这个原因。第二步文档切片def chunk_text(text, chunk_size500, overlap50): chunks [] for i in range(0, len(text), chunk_size - overlap): chunks.append(text[i:ichunk_size]) return chunks为什么需要overlap重叠因为一句话可能正好被切在中间后半句跑到了下一个chunk里。有重叠就能尽量保证语义完整性。这个参数没有标准答案我建议按你自己的文档类型多试几个值一般500到800之间比较平衡。第三步检索用最简单的关键词检索搞个BM25方案来理解全流程就行不急着上向量库。也可以用现成的rank_bm25库from rank_bm25 import BM25Okapi import jieba tokenized_corpus [list(jieba.cut(chunk)) for chunk in chunks] bm25 BM25Okapi(tokenized_corpus) def retrieve(query, top_k3): query_tokens list(jieba.cut(query)) scores bm25.get_scores(query_tokens) top_indices sorted(range(len(scores)), keylambda i: scores[i], reverseTrue)[:top_k] return [chunks[i] for i in top_indices]中文场景下记得先分词再检索直接按字硬切的效果会差很多。这一步跑通了再去接向量检索那时你才有能力分辨结果的差别到底来自哪里。第四步RAG调用def ask(question): context_chunks retrieve(question, top_k3) context \n---\n.join(context_chunks) prompt f基于以下资料回答问题。如果资料中没有相关内容请直接说资料中没有提到。 资料 {context} 问题{question} response client.chat.completions.create( modelyour-model, messages[ {role: system, content: 你是资料问答助手只依据提供的资料进行回答。}, {role: user, content: prompt} ], temperature0.3 ) return response.choices[0].message.content这个项目做完你就已经串起了RAG的完整链路这是目前岗位需求量极大的技能组合。把代码整理好写个README文档放上GitHub这就是你简历里一个能打的实战项目。4.3 搭建评估集不靠感觉判断效果很多自学的人做项目有一个通病改了一版Prompt随便试了几个问题觉得“嗯好像答得更好了”。但你问具体哪里好了答不上来。这是典型的缺乏“评估意识”。给每个AI应用建一个黄金测试集不需要很大二十条提问就够。关键是答案质量是经过确认的“标准答案”或者至少你心里有数。每次改动Prompt、换模型、调参数都把全集跑一遍然后做个对比。你也可以写一个简单的评分函数来做这件事def evaluate(): test_cases [ {query: PDF里的合同有效期是多久, expected: [三年]}, {query: 违约金比例是多少, expected: [20%]}, ] scores [] for case in test_cases: answer ask(case[query]) hit any(word in answer for word in case[expected]) scores.append(hit) return sum(scores) / len(scores)一开始甚至可以不用LLM当裁判用简单的关键词命中判断就好。它虽然粗糙但至少比“感觉好多了”可靠得多。这个习惯会贯穿你整个AI工程生涯越早养成越受益。5. 学习实操过程里的那些坑问题排查实录5.1 环境依赖相关的老大难问题问题表现pip install openai安装成功但代码里import openai却报错找不到模块。定位思路先分清是哪个Python环境在跑代码。终端里执行which pythonWindows上是where python再执行pip show openai看包装到了哪个路径。两个路径对不上就是虚拟环境没激活或者IDE里选了解释器不对。解决办法VSCode里按CtrlShiftP打开命令面板搜索“Python: Select Interpreter”选中你创建的那个虚拟环境路径。这类问题十个里有八个是解释器没选对。5.2 API调用相关的报错锦集401认证失败API Key写错了、过期了或者环境变量没加载到。先不要怀疑逻辑写个最简单的测试账号打印环境变量的值。429限流请求太频繁超过了那个接口的速率限制。解决方法是加退避重试用tenacity库或自己写装饰器。400参数错误messages结构不对角色名拼错了或者content是空字符串。把messages参数拖出来格式化打印一下一眼就能看出毛病。专门说一句很多平台SDK返回的错误信息已经给出了明确提示但新手容易看都不看直接贴到搜索引擎里。先自己读一遍错误信息八成问题能自答。5.3 Token溢出中文本位优势失效的那些瞬间报错信息里出现“maximum context length exceeded”时说明输入超出模型上下文窗口了。处理办法精简系统提示删除冗余背景说明减少检索返回的资料块数和每块长度保留对话历史最近N轮OpenAI的ChatCompletion接口里已经是全量传历史消息提问一轮后历史会越攒越多记得做截断实用技巧可以估算Token数量中文平均一个字约等于1到2个Token。一个模型窗口按4K算大概能容纳3000汉字左右的上下文。自己用tiktoken或各平台的Token计算接口做个精确统计比猜靠谱得多。5.4 回答质量差输出不对先别急着换更贵的模型回答质量出问题时很多人第一反应是换一个更贵的模型我建议你先按这个顺序排查Prompt写清楚了吗给模型的指令是模糊的“分析这段文本”还是明确的“提取文中所有的日期和金额以JSON格式输出”后者的效果好十倍不止。检索来的资料对吗在Prompt里加一个调试指令让模型先复述资料要点再回答。如果复述出来的东西都不对问题在检索环节不在生成环节。上下文够吗把检索到的相关片段打印出来看看是不是真包含了答案所需的全部信息。缺信息模型再有本事也是无米之炊。温度参数调低了吗问答和抽取类任务temperature0或0.1更合适。高温会让模型放飞自我回答得天花乱坠但答非所问。做过这些排查之后如果依然不满意再考虑换模型或重新设计架构。6. 选型参考模型、框架与工具的个人建议模型选型这部分我直接给出一个当前环境下的推荐矩阵但记住版本迭代很快学会“看模型卡、看社区反馈、自己跑评测”这套方法才是长久之计。场景推荐模型理由入门练手、低成本问答各家大厂的轻量版本便宜、速度快跑通链路足够用代码生成与理解在代码评测集上表现靠前的开源模型代码能力是硬指标评测榜可以参考长文档分析上下文窗口大或支持RAG的模型减少切块压力处理大文件更方便中文场景落地中文能力强的国产开源模型性价比高中文语料占比高关于框架我的态度是——“非必要不上框架”。从零开始学习阶段先用原生SDK写Prompt调用再手动实现RAG的切块检索拼接最后再尝试用LangChain或LlamaIndex整合。框架封装了很多细节会把底层逻辑藏起来。你上手就会用但出了问题毫无办法。亲手写一遍再上框架体验天差地别。我自己带新人的时候通常会让他们先手写能写出来就说明真懂了。工具方面有几样是建议尽早熟悉的Postman用来调试API、Docker用来跑中间件、Git用来管代码版本。这些不算AI专属技能但AI工程里用得比传统开发更频繁。7. 学习节奏与后续扩展方向从零到完成一个RAG问答应用按每天投入两三个小时来算大概需要三到四周。前三周会非常磨人——每一步都可能踩坑但每一步的坑都在帮长记性。到第四周把项目整体跑通的那一瞬非常有成就感。做完第一个项目之后扩展方向很多我整理几个有代表性的路线路线一到Agent开发在最简单的RAG问答基础上给模型接上工具调用能力让它能搜索、能算数、能操作内部系统。先手工实现一个最小Agent再上手Agent框架做多步骤任务拆解。路线二到AI应用的工程化讲服务部署、并发压测、日志监控、成本优化。把本地跑通的脚本封装成API服务用FastAPI写接口部署到云服务器上。这里面有很多传统后端知识但AI场景下有独特的要求比如超时怎么设、Token耗尽了怎么返回部分结果。路线三到结合领域知识做深化比如你是财务背景做一个合同审核助手你是运维背景做一个日志异常排查助手。AI技术本身是通用的结合自己熟悉的行业才是最稀缺的竞争力。同样一个RAG系统用在法律咨询和用在地质勘探上完全是两个领域。我个人在实际操作中的体会是这个领域变化快但底层的工程能力迭代慢。Prompt怎么写、RAG链路怎么搭、评估集怎么维护、成本怎么控制——这些东西今天会了三年后依然有用。别被层出不穷的新名词牵着走静下心来把一条链路吃透才是这个行业最踏实的学习方式。最后分享一个小技巧把每次调试过程中神仙报错和最终解法都写成笔记不用讲究文笔自己能看懂就行。几个月后回头看这份笔记可能是你学习过程中最有价值的财富。AI工程是一门经验学科你的经验库越厚解决问题的速度就越快。
返回列表