ARTICLE DETAIL

资讯详情

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

AI替代任务时代,技术人如何用RAG与Prompt工程重构工作流

AI替代任务时代,技术人如何用RAG与Prompt工程重构工作流 比尔·盖茨在多个公开场合提醒AI 可能引发大规模就业冲击。这个判断对技术人来说不是一条普通新闻而是一次职业发展路径的重新校准。过去几年大模型从对话机器人延伸到编程、设计、客服、数据分析等具体岗位任务自动化的边界正在从机械重复扩展到知识劳动。与其纠结哪些岗位会被 AI 吃掉不如先想清楚一个更实际的问题面对 AI 带来的任务级替代技术人员应该补齐哪些能力才能让自己从“执行者”变成“使用者”和“构建者”。这篇文章从 AI 替代任务的逻辑出发梳理技术人的应对策略然后给出一个最小 RAG 问答助手、一个 AI 辅助开发示例演示如何把大模型能力接到真实工作流里。最后会整理调用大模型时的常见报错排查清单和生产环境落地建议。案例都以可复现为导向适合正在转向 AI 应用开发的后端工程师、测试工程师也适合想用 AI 改造自己工作流的技术从业者。1. 先从“盖茨警告”说起AI 真正替代的是任务不一定是岗位1.1 盖茨的提醒为什么值得认真对待比尔·盖茨是技术领域的长期观察者他的判断基于一个朴素的逻辑当大模型能够以较低成本完成过去只有受过专业训练的人才能完成的信息处理和生成任务时企业会优先重新设计岗位职责。这里的关键词不是“岗位”而是“任务”。一个岗位通常包含多个任务。AI 可能先替换其中可明确量化的部分比如数据整理、草稿生成、代码片段撰写、客服话术匹配。岗位本身可能保留但岗位内涵会改变。以前需要 5 个人完成的重复性工作引入 AI 后可能只需要 2 个人加一套 AI 工作流。这不是科幻而是已经在很多企业发生的流程再造。这种变化和技术人的关系非常直接。程序员、产品经理、运维、测试、数据分析师这些岗位每天处理大量文本、代码和信息。生成式 AI 的出现让这些信息处理类任务可以被自动完成初稿。理解这个趋势不是为了制造焦虑而是为了决定下一步往哪里学。1.2 大模型把自动化的边界推向哪些任务传统自动化解决的是规则明确、重复度高的任务。大模型带来的变化是它能够处理“没有标准答案但有一定模式”的任务。这些任务的共同特点是需要语言理解、模式识别、生成能力。例如从一段长文本中提取关键字段把技术需求翻译成初步代码将用户问题归类到具体业务场景生成测试用例、产品文案、会议纪要根据历史工单总结故障处理建议。大模型在大量语料训练后已经具备这些能力虽然准确性需要人工校验但在“辅助初稿”层面足够有效。于是企业的分工逻辑发生变化以前一个人完成“读需求、写方案、写代码、测试”全流程现在 AI 可以承担其中部分步骤的初稿人负责校验、决策和最终交付。这里要特别说明一点AI 自动化的不是“职业”而是“任务”。一个招聘专员的工作包含简历筛选、面试安排、薪酬沟通、团队协调。AI 可以自动筛选简历并生成面试问题但很难代替招聘专员去和候选人建立信任。所以评估风险时不要只看岗位名称要看具体任务组成。1.3 哪些任务容易被替代哪些任务还很难判断一个任务是否容易被 AI 替代可以从三个维度入手是否依赖大规模多步推理是否涉及真实世界的物理操作或人际信任是否有明确可验证的正确答案。如果一个任务主要依赖语言模式、信息检索和生成且结果可以被快速校验它就更容易被 AI 增强甚至替代。如果任务需要在复杂环境中做长期决策、承担法律责任、协调多方利益AI 目前只能辅助不太可能独立完成。任务类型当前 AI 能力替代风险评估示例信息提取强高合同关键字段抽取、发票信息录入代码补全较强中高生成通用代码模板、补全函数体技术方案设计中中给出候选方案需要人类决策跨团队沟通弱低会议协调、需求谈判、冲突调解物理操作弱低设备维修、现场巡检从表格里可以看到越是靠近“信息处理”的任务越容易被 AI 改变越是靠近“物理执行、人际协同、责任承担”的任务AI 的作用越有限。技术人要警惕的不是某个岗位被整体替代而是自己的日常工作里只剩下“信息处理”没有“决策、校验、协作”这些高价值动作。2. 技术人应对冲击的核心策略从“被替代”到“用 AI 干活”2.1 替代逻辑下最危险的做法是停止学习AI 被引入后岗位数量不一定立刻下降但岗位技能要求会变化。如果一个研发岗位只要求“调用封装好的接口写 CRUD”AI 自动化这个环节的速度会非常快。反过来如果一个人能设计数据模型、能判断业务规则、能把 AI 输出接入系统并验证质量AI 反而会成为放大能力的工具。所以应对策略的第一条是把“AI 会不会替代我”这个问题换成“哪些原本要我花时间的任务现在可以交给 AI 做初稿”。停止学习新工具、拒绝使用新流程才是风险最高的选择。这里有一个常见误区觉得 AI 生成的代码和文档还需要改不如自己写更快。短期看确实如此尤其是简单任务。但长期看当 AI 完成初稿的时间从五分钟降到三十秒而你只需要花一分钟检查时效率差异会非常明显。先接受“AI 初稿 人工校验”的工作方式再持续优化 Prompt 和输出质量。2.2 三种能力层次使用、集成、开发按技术深度可以把 AI 相关工作分为三个层次使用层熟练使用现有 AI 工具提升效率比如用 AI 写邮件、总结文档、生成 SQL、做代码审查。集成层通过 API 将大模型能力接入自己的业务系统比如知识库问答、内容审核、智能客服。开发层训练、微调、部署模型或开发 Agent 系统让 AI 能自主完成多步骤任务。大多数后端、前端、测试工程师最需要的是先达到集成层。原因很现实使用层门槛虽然低但很难形成竞争力开发层需要深度学习算法基础对业务研发团队不一定适用。而集成层直接解决企业现实问题也是目前 AI 应用工程师岗位的核心要求。三种能力不是互斥而是递进。使用 AI 工具的体验会帮助你理解 AI 输出格式和提示词边界API 集成实践会帮助你掌握请求、超时、重试、成本控制等到业务复杂度上来再自然延伸到 Agent、RAG 和微调。2.3 学习路径和资源选择这里给一个相对可行的学习路径清单第一周选择一个 AI 编码助手或聊天产品每天用它处理至少三类工作包括代码片段、文档总结、错误信息解释第二周到第四周学习 Python 基础、requests 库、JSON 数据处理把大模型 API 接入一个小脚本第五周到第八周实现一个 RAG 问答库理解向量化、召回、重排、提示词拼接第九周以后选择业务场景把 AI 能力封装成内部服务增加日志、权限、降级和成本统计。这不是唯一路径但足够让一个业务开发者在三个月内具备基本的 AI 应用开发能力。核心原则是“边用边做”不要先把深度学习理论学完再动手。3. 最小可复现案例用 RAG 架构搭建一个 AI 问答助手3.1 先想清楚这个案例解决什么问题RAGRetrieval-Augmented Generation检索增强生成是目前把大模型应用到私域知识库最常用的方案。它的核心思想是用户提问后先从知识库中检索出相关片段再把片段和问题一起拼成 Prompt 交给大模型让模型基于片段回答。这样做有两个好处模型不需要记住所有业务知识不会因为知识过时而出错回答可以追溯来源降低幻觉风险。本案例实现一个极简的本地 RAG 服务用一小段模拟知识库文本通过 TF-IDF 向量做检索然后调用大模型 API 生成回答。选用 TF-IDF 是因为它不依赖外部嵌入模型方便在本地快速演示。生产环境通常会使用向量数据库和语义向量模型但整体思路一致。3.2 环境准备和依赖安装需要 Python 3.9 以上版本。建议新建虚拟环境python -m venv .venv source .venv/bin/activate # Windows 下为 .venv\Scripts\activate安装依赖pip install fastapi uvicorn scikit-learn requests说明FastAPI 和 Uvicorn 用来提供 HTTP 接口scikit-learn 中的 TfidfVectorizer 用来构建 TF-IDF 向量requests 用来调用大模型 API。如果你使用 OpenAI 兼容接口需要准备 API Key 和 API 地址如果使用国内大模型平台同样需要把密钥配置到环境变量里。建议不要在代码中硬编码密钥。3.3 项目结构和核心代码项目结构可以保持简单rag_demo/ ├── knowledge_base.py # 知识库文本 ├── vector_store.py # TF-IDF 向量化与检索 ├── llm_client.py # 大模型调用 ├── main.py # FastAPI 服务 └── requirements.txt先写知识库# knowledge_base.py KNOWLEDGE_DOCS [ AI 应用开发需要掌握 Prompt 工程、RAG 和模型评估。, RAG 是指检索增强生成先检索相关资料再让大模型生成回答。, 大模型推理时会消耗 token生成内容有成本需要设置上限。, 向量化是将文本转换为数值向量语义相近的文本向量距离更近。, ]这个列表只是演示。实际项目中知识库通常是几十个甚至更多文档会从数据库、文件服务、对象存储中读取。然后是向量检索# vector_store.py from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity import numpy as np from knowledge_base import KNOWLEDGE_DOCS class SimpleVectorStore: def __init__(self, docs): self.docs docs self.vectorizer TfidfVectorizer() self.matrix self.vectorizer.fit_transform(docs) def search(self, query, top_k2): q_vec self.vectorizer.transform([query]) scores cosine_similarity(q_vec, self.matrix).flatten() top_indices np.argsort(scores)[::-1][:top_k] return [(self.docs[i], float(scores[i])) for i in top_indices]代码解释初始化时把所有文档转成 TF-IDF 向量搜索时把用户问题转成同一个特征空间再计算余弦相似度返回得分最高的 top_k 条片段。调用大模型# llm_client.py import os import requests API_URL os.getenv(LLM_API_URL, https://your-llm-endpoint/v1/chat/completions) API_KEY os.getenv(LLM_API_KEY, ) def call_llm(prompt, max_tokens500): headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } payload { model: your-model-name, messages: [ {role: user, content: prompt} ], max_tokens: max_tokens, temperature: 0.3, } resp requests.post(API_URL, jsonpayload, headersheaders, timeout30) resp.raise_for_status() data resp.json() return data[choices][0][message][content]说明API_URL 和 API_KEY 从环境变量读取避免写死在代码里max_tokens 控制生成长度temperature 设为 0.3让输出更稳定这里使用 chat/completions 接口格式换成任意兼容服务都能工作。FastAPI 服务# main.py from fastapi import FastAPI from pydantic import BaseModel from vector_store import SimpleVectorStore from knowledge_base import KNOWLEDGE_DOCS from llm_client import call_llm app FastAPI() store SimpleVectorStore(KNOWLEDGE_DOCS) class Query(BaseModel): question: str app.post(/ask) def ask(query: Query): question query.question docs store.search(question, top_k2) context \n.join([f片段{i1}: {doc} for i, (doc, _) in enumerate(docs)]) prompt f请根据下面的知识库片段回答问题。 如果片段中没有足够信息请直接说“知识库中没有相关内容”不要编造。 知识库片段 {context} 用户问题{question} answer call_llm(prompt) return { question: question, answer: answer, sources: [doc for doc, _ in docs] }这里把检索出的原文放到返回结果的 sources 中方便人工验证回答是否基于知识库。3.4 运行与验证启动服务export LLM_API_KEYyour-key export LLM_API_URLhttps://your-llm-endpoint/v1/chat/completions uvicorn main:app --host 0.0.0.0 --port 8000在另一个终端发送请求curl -X POST http://127.0.0.1:8000/ask \ -H Content-Type: application/json \ -d {question: 什么是 RAG}预期返回类似{ question: 什么是 RAG, answer: RAG 是指检索增强生成先检索相关资料再让大模型生成回答。, sources: [ RAG 是指检索增强生成先检索相关资料再让大模型生成回答。 ] }如果 API 密钥或地址未配置请求会在调用大模型时报连接错误。建议分段调试先确认检索模块能返回相关片段再确认大模型调用模块能返回文本最后联调。4. 把 AI 能力接入日常开发自动生成代码说明和单元测试4.1 开发者的日常可以被 AI 增强的环节RAG 问答只是完成了一个服务。对大多数后端工程师来说更直接的变化来自日常开发写代码注释、生成测试用例、解释报错、评审代码。这些任务不需要单独建立服务可以做成命令行小工具也可以接入 IDE 插件。一个推荐做法把“调用大模型”封装成内部函数放到工具模块再用不同 Prompt 封装不同能力。比如生成代码说明可以给函数源码和指定模板生成单元测试可以给函数签名和输入输出要求。这样做的好处是所有 AI 调用都经过同一个超时、重试和日志入口便于统一管理。4.2 一个“AI 助手”函数的具体实现下面是一个简单示例用来根据 Python 函数代码生成单元测试。它使用上一节定义的 call_llm 函数# ai_dev_assistant.py import inspect from llm_client import call_llm def generate_unit_tests(func): source inspect.getsource(func) prompt f请根据下面的 Python 函数生成 pytest 单元测试。 要求 1. 覆盖正常输入、边界输入和异常输入 2. 不修改函数实现 3. 只输出测试代码不要额外解释。 函数代码 {source} return call_llm(prompt, max_tokens800)使用示例def add_goods_price(base_price, discount_rate1.0): if base_price 0: raise ValueError(base_price must be 0) if not 0 discount_rate 1: raise ValueError(discount_rate must be in (0, 1]) return round(base_price * discount_rate, 2) if __name__ __main__: test_code generate_unit_tests(add_goods_price) print(test_code)这个函数通过 inspect 获取源码再让大模型生成测试代码。关键点是 Prompt 中明确说了“不要额外解释”减少输出噪声。生成的测试代码需要人工检查尤其是异常分支是否符合业务预期。4.3 如何控制输出质量大模型生成结果不稳定控制质量必须依赖工程手段。以下方式在日常 AI 辅助开发中非常实用限制输出格式在 Prompt 中写明“只输出 JSON”“只输出测试代码”使用较低温度temperature 设为 0.2 到 0.4设置 max_tokens防止生成过长导致成本失控自动校验如果生成的是 JSON用 json.loads 解析失败则重试或降级人工 reviewAI 输出作为草稿必须由有经验的开发确认后再合入。这里有一个常见误区不要盲目相信 AI 生成的测试用例。它可能生成正确的语法但断言逻辑与业务不符。比如上面函数中 discount_rate 不允许大于 1如果 AI 生成一个 discount_rate1.5 的用例需要人工确认异常分支含义后再决定是否保留。5. 调用大模型时的常见问题排查5.1 API 超时和连接错误现象代码在 requests.post 抛出连接超时或者返回 503。可能原因API 地址配置错误网络不可达请求 payload 太大处理时间超过客户端超时服务端限流。检查方式先用 curl 模拟同一个请求确认服务可用检查环境变量中 URL 和 Key 是否正确打印响应状态码和响应体逐步增大 timeout 重试。解决方案修正 URL在调用层加入重试机制建议对 429、503 使用指数退避重试大文档检索时压缩上下文字数避免超长输入。5.2 输出幻觉和答案不稳定现象回答内容与知识库片段矛盾或者同一问题两次回答不一致。常见原因Prompt 中没限定“只能依据知识库回答”知识库片段被截断temperature 设置过高检索召回到无关片段模型强行补全。解决方案在 Prompt 中加入“如果信息不足请说不知道”返回结果中带来源便于核对调低 temperature优化检索的 top_k增加相关性阈值。5.3 上下文超长和成本失控现象请求时报 token 超过模型支持的上下文长度或者账单快速增长。常见原因把整篇文档拼入 Prompt未统计真实 token 消耗没有缓存相同问题重复调用。解决方案检索时只保留 top_k 相关片段而不是全部文档对长文档做切片每片控制在模型上下文允许范围内设置 max_tokens 上限增加日志记录每次请求的 token 数按天统计成本对高频重复问题使用缓存。5.4 RAG 检索不到关键内容现象知识库里明明有答案但回答看不到。常见原因文本分词或向量化方式不匹配切块过小把关键句子切散用户问题的用词与知识库差异过大top_k 过小遗漏了相关片段。解决方案调整切块策略让每块保留完整语义段落增加 top_k或者对多个相关片段做重排对问题和知识做同义词扩展或者在向量检索外增加关键词召回。下表整理了这几类问题的检查优先级问题现象首要检查次要检查常见处理连接超时API 地址和网络载荷大小修正地址、超时重试答案不一致temperature上下文截断调低温度、增加限制上下文超长输入拼接方式切片大小只拼检索片段检索不到切块与 top_k向量化方式调参并增加召回6. 生产环境落地 AI 应用这些方面不能省6.1 本地实验与生产部署的差别本地跑通一个 RAG 服务和生产环境发布差别不只是“能访问公网”。生产环境需要额外考虑配置管理、日志、监控、权限、降级、回滚和成本控制。比如本地可以直接写环境变量生产环境建议接入配置中心本地可以同步调用生产环境要考虑超时重试和异步队列本地单机演示不需要鉴权生产环境必须做 API 鉴权和用户权限本地模型服务挂掉可以重启生产环境需要高可用方案本地可以直接把文本发给模型服务生产环境要评估隐私与合规要求。学习环境的主要目标是验证逻辑生产环境的主要目标是稳定服务。两者要分开设计不要在本地代码里直接写生产密钥也不要把本地调试逻辑原样部署到生产。6.2 可复用的发布前检查清单发布一个 AI 应用前建议按以下清单逐项确认密钥是否正确注入环境变量或配置中心大模型 API 是否配置超时、重试和熔断是否记录请求日志、响应日志和 token 消耗是否设置单次请求的 max_tokens 上限知识库版本是否可追踪更新后是否清理缓存是否对大模型输出做基础校验比如 JSON 格式和长度是否定义服务降级策略比如模型不可用时返回兜底文案是否有回滚方案包括代码回滚和数据回滚是否压测过并发确认 API 限流阈值是否评估过隐私与合规要求敏感数据不能直接发送给模型服务。这个清单可以直接打印出来作为团队上线评审模板。不要等到线上出问题再逐项补救。6.3 长期扩展方向Agent、多模态、模型微调如果项目已经从简单问答发展到需要 AI 自主完成多步骤任务可以考虑 Agent 方向。Agent 的本质是在大模型基础上加入工具调用、任务规划和记忆管理。比如一个运维助手可以接收告警拉取日志调用分析工具最后生成处理建议。这种场景下工程难点从“能不能生成回答”变成了“如何规划步骤、如何管理工具结果、如何在出错时恢复”。再往后是模型微调。RAG 适合把外部知识告诉模型但如果想让模型学习某种固定说法、输出风格或私有术语微调更合适。微调需要标注数据、训练资源和评估流程门槛比 API 调用高很多。建议先跑通 RAG再根据实际效果决定是否引入微调。多模态方向同样值得关注。当前大模型已经能处理图片、音频和视频。把多模态能力接入业务比如工单图片识别、会议录音转写会进一步拓宽 AI 应用范围。无论哪个方向核心仍然一致理解任务如何拆解、Prompt 如何设计、输出如何校验。比尔·盖茨关于 AI 导致大规模就业变化的提醒可以看作一次职业方向的重新校准。技术人真正需要担心的不是 AI 自己而是自己是否还靠重复性的信息处理工作生存。与其等待被替代不如主动把 AI 纳入技能栈会用工具提升效率会调 API 接入业务会搭 RAG 解决知识库问题会排查生成质量。这几个案例并不复杂但足以开启从“被 AI 影响者”到“AI 应用构建者”的转变。下一步选择一个真实场景把文章里的代码跑通再根据业务需求改造成自己的服务这才是最有价值的练习。
返回列表