ARTICLE DETAIL

资讯详情

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

AI抗拒者生存指南:从本地RAG到边缘计算的工程实践

AI抗拒者生存指南:从本地RAG到边缘计算的工程实践 “Ask HN: How to deal with gen AI as a gen AI-resistant person”——这个话题在 Hacker News 上一出现就引发大量讨论。原因很简单你不是一个人。尤其是很多写了多年代码、拥有成熟技术判断力的工程师面对生成式 AI 的冲击第一反应不是兴奋而是烦躁甚至抵触。这种抵触并不丢人。它通常来自两个真实的痛点一是大量媒体把 AI 吹成了“什么人都不用写代码”的终极神器明眼人都知道这是夸大二是生成式 AI 的输出质量参差不齐别人拿来封装成“效率神器”自己拿去却得到一堆似是而非的推荐。你越是懂技术就越容易觉得这东西在添乱。但这篇文章想给你一个不太一样的角度与其把生成式 AI 当成一个需要表态的技术不如把它当成一个需要理解的工程变化。变化的核心不是“AI 能不能取代程序员”而是整个软件开发的工序正在被重新拆分。你不需要喜欢这个变化但你需要知道自己在抵抗什么、保留什么、利用什么。本文会从 AI 的底层构成、经典应用场景、最小可上手的本地项目到“纯软件 AI 与嵌入式 AI 硬件”的最新趋势逐一拆开讲清楚。1. 这篇文章真正要解决的问题很多人对“AI 抗拒者”有误解觉得抗拒者就是拒绝学习和使用新工具的老顽固。实际上HN 那个帖子下的高赞回复大部分来自资深工程师他们每天都在使用 Git、Docker、Kubernetes技术敏锐度并不低他们真正反感的是生成式 AI 的不可预测性和上下文丢失。一个很典型的痛点场景你想让 AI 帮你写一个 Spring Boot 接口它确实很快生成了一版代码但你审查之后发现它把异常处理写得很随意事务边界也没有标明放在生产环境就是隐患。于是你花时间纠错、重写最后算下来效率反而更低了。第二次、第三次遇到类似情况后你就开始怀疑这工具到底是提升效率还是制造更多 review 工作量这个问题的根源不是 AI 能力不行而是使用范式错了。把 AI 当成“自动补全代码的实习生”和把它当成“一个不会主动追问需求、但知识面极广的编码搭档”完全是两种用法。前者必然带来返工后者才能带来真正的协作收益。这篇文章要解决的就是下面三个问题生成式 AI 实际的边界在哪里哪些任务它确实擅长哪些任务它在硬撑一个技术型开发者如何在避免被工具绑架的前提下用最小成本把 AI 纳入自己的开发流程除了解答代码问题AI 在嵌入式、边缘计算这些“不那么 AI”的领域正在发生什么变化读完你应该能得到一套很稳的判断标准包括什么场景坚决不用 AI、什么场景必须用 AI以及当你决定用时如何设计出可验证的使用流程。2. 基础概念生成式 AI 到底改变了工程流程的哪个环节ChatGPT 这类工具给普通人的直观印象是一个“聊天框”。但对于工程师来说更准确的类比是你获得了一个可以无限提问的技术专家但它的记忆只有你当前这段对话而且它会非常有自信地给出错误答案。理解生成式 AI 的本质要先看它的技术结构。主流大模型本质上是一个参数规模巨大的深度神经网络训练目标是“给定前文预测下一个 token”。所谓 token可以近似理解为词块或子词单元。训练过程读入海量互联网文本让网络学会根据历史 token 预测下一个 token。当模型足够大、数据足够多时这种简单的自监督目标会涌现出一定的推理、总结、代码生成能力。这个机制决定了它的几个工程特点第一它没有真正的“理解”和“记忆”。所有输出都是概率采样后的结果。同一个问题换一种问法答案可以是完全不同的。这不是 bug而是设计使然。你不能把“它上轮回答过什么”当成可靠状态。第二它对常见模式有很强覆盖能力但对冷门边界极不稳定。如果你让它写一个常见的二分查找它写得很好让它写一个特定芯片厂商 SDK 的回调处理它就会一本正经地编造不存在的 API。第三它对“局部正确”的追求会导致整体结构失衡。比如写一个微服务模块它可能把 Controller、Service、Mapper 三层的代码都生成了但包名不一致、依赖注入方式混用、事务注解缺失。因为这些细节分散在不同文件里单看任何一段都觉得没问题合在一起却无法编译。你还需要理解两个被频繁提到、但经常混淆的概念“生成式 AI”和“大模型”。生成式 AI 指的是能够生成文本、图像、代码等内容的一类模型GPT、Claude、文心一言、通义千问都属于这个范畴。大模型则是对参数规模的一种描述。所有生成式 AI 产品背后几乎都是大模型但大模型不只用于文本生成也用于向量化、Embedding、多模态理解等等。从工程流程来看生成式 AI 真正改变的是“从需求到代码的第一版”这段路程。过去你需要自己搭框架、查文档、试 API现在 AI 可以帮你直接生成一个能跑的初版。但“初版到上线”这条路AI 目前能做的非常有限仍然需要人来做设计评审、Code Review、测试、性能调优、安全加固。这就是为什么很多老工程师天然抗拒它——他们最值钱的经验恰恰集中在“初版到上线”这一段。AI 的生成能力对他们来说是锦上添花而不是雪中送炭。但如果因此完全拒绝生成式 AI又会错过它在那里确实能带来十倍效率的场景。正确姿势是把 AI 放在“快速生成初稿”的位置然后用自己的工程能力去加工它。3. 生成式 AI 的经典应用场景与能力边界在决定“用还是不用”之前先把你手头的工作拆成一个个具体的原子任务然后判断每个任务 AI 做得好不好。我在实际项目里总结出一套很粗但实用的三分法可以帮你快速筛选。3.1 AI 明确擅长的任务代码翻译和语言迁移。把一段 C 代码改成 Java把 Python 的脚本改成 Go这类任务 AI 做得又快又好因为语法转换是典型的高频模式匹配。脚手架和样板代码生成。建 Maven 项目、生成 Controller 层代码、写一个 Dockerfile 模板这些内容重复度高、规则明确AI 生成效率远超手写。正则表达式和 SQL 编写。让 AI 帮你把“匹配以 2024 开头、中间 4 位数字、结尾 a 或 b 的字符串”转换成正则表达式基本不用检查一次性就能成功。单元测试代码生成。给它一个已有函数让它补充边界条件和正常路径的测试用例。虽然生成质量一般但它能快速覆盖你没想到的边界情况。文档和注释生成。让 AI 把一段复杂逻辑用自然语言描述清楚或者给接口方法批量生成 Javadoc效果往往不错。3.2 AI 能做但必须人工强校验的任务业务逻辑实现。比如“根据用户等级计算折扣VIP 再打 8 折但活动期间不叠加”。AI 能写出代码但一旦遇到隐藏规则它可能会忽略。必须靠你自己用业务场景去验证。配置项生成。比如 Nginx 反向代理配置、Kubernetes Deployment YAML。AI 生成的配置在简化场景下能跑但生产环境需要的滚动更新策略、资源限制、探针配置它不一定想得全。代码优化建议。AI 能指出“这个循环可以改成 stream”但改造后是否引入性能回退需要你来判断。3.3 AI 目前明确不擅长的任务涉及多模块、多团队协作的架构设计。AI 不了解你们团队的代码规范、发布节奏、数据依赖关系很难给出真正可落地的架构方案。安全敏感代码的实现。登录认证、权限校验、加密解密、支付回调这些场景一旦 AI 生成逻辑有漏洞后果非常严重。不是不能辅助而是必须建立在最少授权、严格测试、充分 Code Review 的基础上。需要调试真实环境问题的时候。线上服务宕机、数据库死锁、内存泄漏AI 只能给你一个排查思路真正的定位过程需要看日志、看监控、看线程 dumpAI 无法代替。版本强相关的技术栈问题。如果你用的是一个小众框架的某个少有人用的版本AI 的训练数据里很可能没有相关内容它会按照流行版本的 API 来回答。这个能力边界列表非常重要。你可以把自己的日常工作列成清单然后逐项打勾。你会发现自己真正想“抵抗 AI”的那部分其实只占工作总量的三分之一——而另外三分之二的重复劳动交给 AI 处理能帮你节省大量时间去做更有挑战性的事。4. 最小可用实践搭建一个不依赖云端的本地知识库问答系统不少 AI 抗拒者抵触 AI 的另一个原因是“所有数据都要上传到云端”。这个顾虑很实际。值得高兴的是现在完全可以在本地跑通一套最小可用的 RAGRetrieval-Augmented Generation检索增强生成问答系统不把代码和数据交给第三方。这套系统的原理是先用 Embedding 模型把文档切成向量存进向量数据库用户提问时用同样的 Embedding 把问题向量化从库里检索最相关的片段把问题和片段一起交给本地大模型生成答案。这种方式最大的好处是可控。你的文档不出机器模型跑在本地因此既能体验 AI 带来的效率提升又不用被迫接受“数据上云”的代价。下面用一个实际可运行的最小示例来说明。4.1 安装依赖推荐环境Python 3.10 及以上版本。需要安装以下 Python 包pip install langchain langchain-community chromadb sentence-transformers huggingface-hub其中 chromadb 是本地向量数据库sentence-transformers 用于加载 Embedding 模型huggingface-hub 用来从 Hugging Face 下载模型文件。如果你网络环境下载模型遇到困难可以手动下载模型文件放到本地目录再把模型路径指向本地。4.2 准备本地模型这里以 Qwen2-1.5B-Instruct 为例。它参数规模小普通消费级显卡甚至纯 CPU 环境也能跑适合作为入门模型。如果你机器配置更好可以换更大的模型比如 Qwen2-7B-Instruct。# 通过 huggingface-cli 下载模型到本地 huggingface-cli download Qwen/Qwen2-1.5B-Instruct --local-dir ./models/qwen2-1.5b-instruct如果遇到网络问题也可以使用 ModelScope 的镜像源pip install modelscope modelscope download --model Qwen/Qwen2-1.5B-Instruct --local_dir ./models/qwen2-1.5b-instruct这里需要说明一点下载模型前建议看看硬盘空间1.5B 参数量的模型大约需要 3GB 左右的空间。如果磁盘空间有限可以先用更小的 0.5B 模型做实验。4.3 编写本地问答脚本下面是一段可以直接运行的 Python 代码功能是把目录下的 txt 文档切块、向量化并存入 Chroma然后根据问题检索并调用本地模型回答。# 文件路径local_rag.py import os from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.document_loaders import TextLoader from langchain_community.llms import HuggingFacePipeline from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline # 1. 加载本地文档 loader TextLoader(docs/your_doc.txt, encodingutf-8) documents loader.load() # 2. 文本切块 splitter RecursiveCharacterTextSplitter( chunk_size300, chunk_overlap50, separators[\n\n, \n, 。, , ] ) chunks splitter.split_documents(documents) # 3. 初始化本地 Embedding 模型 embedding_model HuggingFaceEmbeddings( model_name./models/qwen2-1.5b-instruct, model_kwargs{device: cpu} ) # 4. 构建向量库 vectordb Chroma.from_documents( documentschunks, embeddingembedding_model, persist_directory./chroma_db ) # 5. 加载本地大模型 tokenizer AutoTokenizer.from_pretrained(./models/qwen2-1.5b-instruct) model AutoModelForCausalLM.from_pretrained(./models/qwen2-1.5b-instruct) pipe pipeline( text-generation, modelmodel, tokenizertokenizer, max_new_tokens512, temperature0.3 ) local_llm HuggingFacePipeline(pipelinepipe) # 6. 检索 生成 def ask(question: str): docs vectordb.similarity_search(question, k3) context \n.join([doc.page_content for doc in docs]) prompt f基于以下资料回答用户问题。 资料 {context} 问题{question} 回答 result local_llm.invoke(prompt) print(参考资料, context[:200]) print(回答, result) if __name__ __main__: ask(你的文档中提到了哪些关键配置项)这段代码的逻辑很清晰先加载本地文本切成 300 字左右的小块然后通过 Embedding 模型转换成向量存入 Chroma。提问时相似度检索找出最相关的 3 个片段连同问题一起拼成 prompt交给本地大模型生成答案。运行方式很简单python local_rag.py如果一切正常你会看到程序先打印出检索到的参考资料片段再打印出生成的回答。注意“参考资料”这一行它直接显示了模型回答问题所依据的原文。这个设计是故意的——RAG 最有价值的点在于答案可溯源。模型的回答哪怕不准确你也可以通过看检索到的资料判断是检索错了还是生成错了而不是盲信模型输出。4.4 如何判断这套系统是否达标这里给出最简单的三条验收标准问题与文档主题相关时回答里应该能看到文档中的关键词和关键句子而不是模型自己兜圈子。问题与文档完全无关时模型应该诚实说“资料中没有相关信息”而不是强行编一个答案。连续问三个不同的问题只有大约三分之一的问题能回答得很好这套系统也许还不适合直接当生产工具。但如果你是第一次接触本地 RAG这个结果已经说明你对整个流程有了完整理解。这个项目的意义不在于它的问答质量有多高而在于你亲身体验了一次“不把数据交给第三方也能用上 AI”的完整路径。对一个有数据安全洁癖的开发者来说这种掌控感比任何“效率提升”都重要。5. 从“对话式 AI”到“函数式 AI”如何把模型嵌进开发流程完成本地 RAG 实践之后你可能已经发现一个事实AI 最有用的地方不是让你和它聊天而是让你通过代码调用它、把它的输出当作一个“函数”来使用。这就是“AI 作为函数”的工程思路。这个思路的核心是不要问“AI 能帮我写代码吗”而要问“我能把 AI 封装成一个什么样的函数输入什么、输出什么、校验什么”。对这个工具越是抗拒越应该抓住这个思路——因为你仍然在掌握流程而不是把流程交给聊天框。下面展示三种常见封装方式。5.1 把 AI 封装成代码补全函数以 OpenRouter 这类聚合 API 为例你可以把“代码注释转代码”封装成一个命令行工具。# 文件路径ai_code_gen.py import sys import requests API_KEY your_api_key MODEL openai/gpt-4o-mini def codegen(comment: str) - str: resp requests.post( https://openrouter.ai/api/v1/chat/completions, headers{ Authorization: fBearer {API_KEY}, Content-Type: application/json }, json{ model: MODEL, messages: [ {role: system, content: 你是资深后端工程师只输出可运行的代码不要解释。}, {role: user, content: f根据注释生成 Python 函数{comment}} ], temperature: 0.2, } ) data resp.json() return data[choices][0][message][content] if __name__ __main__: comment sys.argv[1] print(codegen(comment))运行它python ai_code_gen.py 读取csv文件返回DataFrame过滤掉amount0的行它会输出代码而不是长篇解释。这种封装最大的价值是场景固定、参数固定输出格式可控。你在使用过程中只要负责审查生成的代码逻辑即可。5.2 用 AI 自动生成 CI 代码审查意见在持续集成阶段可以把 PR 的 diff 塞给模型让 AI 生成审查意见。当然这不意味着 AI 能代替人做 Code Review它只能协助发现明显的代码问题。# 文件路径review_comment.py import sys import requests def review_diff(diff_text: str) - str: resp requests.post( https://openrouter.ai/api/v1/chat/completions, headers{ Authorization: Bearer your_api_key, Content-Type: application/json }, json{ model: openai/gpt-4o-mini, messages: [ {role: system, content: 你是资深代码评审专家。针对下面的 diff列出可疑问题按严重程度排序。只输出要点。}, {role: user, content: diff_text} ], temperature: 0.1 } ) data resp.json() return data[choices][0][message][content] if __name__ __main__: diff_content sys.stdin.read() print(review_diff(diff_content))在命令行里使用git diff | python review_comment.py这样做的好处并不是“让 AI 来评审”而是让人评审时多一份辅助意见清单。你可以先看 AI 发现了哪些问题再看自己与 AI 判断的差异从而校准自己对代码质量的敏感度。5.3 把 AI 接入代码搜索和文档问答你可以把公司内部技术文档切片后构建本地向量库再在 IDE 插件里调用这样提问“XX 服务如何接入鉴权”时回答都会附带原文档链接。这个过程本质上是 4.3 中 RAG 示例的工程化版本只是接入层从命令行变成了 IDE 插件。总结起来函数式使用 AI 的核心原则是输入内容高度可控、输出格式强约束、生成结果仅作为草稿或参考后续必须有自动化测试和人工 review 兜底。一旦你形成了“AI 是函数”的心智模型你对它的抵触感就会下降很多因为它不再是“一个抢饭碗的黑盒”而是“一个需要单元测试的第三方库”。6. 从纯软件到软硬协同AMD Versal AI Edge Gen 2 带来的信号如果你只关注 Web 开发可能会觉得 AI 只存在于云端 API 和聊天框里面。但实际上AI 技术正在快速向边缘计算和嵌入式领域渗透。AMD 在 2024 年发布的 Versal AI Edge Gen 2 系列就是一个很有代表性的信号。简单科普一下Versal 是 AMD原 Xilinx推出的一系列自适应计算加速平台这个家族的产品把 CPU、可编程逻辑FPGA和 AI 引擎集成在同一个芯片里。Versal AI Edge Gen 2 的重点是面向边缘场景比如工业视觉、自动驾驶、医疗影像、机器人控制在这些场景里设备需要在功耗、时延、可靠性约束下完成 AI 推理任务。和云端 GPU 相比这类边缘 AI 芯片更强调低功耗、低延迟、确定性响应。网上关于它的热门搜索词是“amd versal ai edge series gen 2 aie实现视频的开发步骤”说明很多开发者已经在关心怎么在 Versal AI Edge 上做视频处理。从技术上推测开发步骤大致包含这样几个环节首先在 PC 上使用 Vitis AI 工具链完成模型量化、编译生成可以在 AI Engine 上运行的指令流然后借助平台自带的视频处理流水线把摄像头采集的视频帧交给 AI Engine 做目标检测或像素级分割最后通过 DPUDeep Processing Unit或软核 CPU 完成结果解析和控制逻辑。整套流程的核心是把“训练好的模型”转换成“能在嵌入式平台实时运行的推理任务”这与云端 AI 的部署方式非常不一样。对于一个 AI 抗拒者来说这个硬件趋势带来三点重要启示第一AI 不是纯软件问题而是一个全栈趋势。哪怕你做的项目是嵌入式 C 开发你迟早也会遇到“甲方要求跑一个目标检测模型”这种需求。你可以不认可生成式 AI 的对话体验但很难回避 AI 推理在物理设备上的落地需求。第二底层能力依然稀缺且值钱。调用 ChatGPT 很简单但把一个 YOLO 模型经过量化、编译放到一块功耗受限的 FPGA 上让它不丢帧、不误报地跑起来这件事仍然需要大量底层功底。AI 技术的普及恰恰让这种底层能力变得更有价值而不是更不值钱。第三工程确定性正在回归。边缘 AI 和生成式 AI 最大的区别在于前者要求确定性的时延、确定性的功耗、确定性的输出。这对厌恶“黑盒”的开发者来说是一个很好的消息——AI 并不是只有“概率式生成”这一种形态在嵌入式领域它依然是一门需要精确计算的工程学科。如果你对这块感兴趣可以先去了解一下 Vitis AI 工具链的基本流程不需要买开发板先跑一个量化示例都行。重点不是马上成为一个 AI 芯片专家而是理解“AI 部署”这个环节的完整链条训练、量化、编译、部署、调优。这个链条上的每一个环节都有着大量值得深入的技术细节也欢迎有工程洁癖的开发者加入。7. 不同身份的开发者应该做出什么选择写到这里你应该已经感受到我的核心判断是不要用“支持或抵制 AI”来定义自己而是用“我在哪个环节、用什么姿势使用 AI”来定义自己的工作方式。具体到不同的开发者群体选择会不一样。7.1 资深后端 / 架构师你们的存量经验集中在系统设计、稳定性保障和成本控制。AI 对你们的冲击最小但机会也最隐蔽。建议把重点放在“AI 辅助文档生成”和“AI 辅助 Code Review”上。你们可以通过 prompt 快速生成模块说明、接口文档也可以把 PR 的 diff 交给模型提意见再结合自己的经验做分类。这种做法既不会被 AI 带偏又能节约大量文档时间。更进一步的建议是研究你自己的团队中哪些重复性工作可以做成内部工具把 AI API 包一层供团队统一使用同时对输出结果做校验。7.2 中级后端 / 业务开发你们是 AI 工具的主要使用者也是受到冲击最大的群体。因为你们的日常工作里有大量 CRUD 接口编写、配置编写和测试用例编写而这些恰好是 AI 最擅长的。如果你不愿意学 AI工作价值会越来越集中在“对业务的理解”和“跨模块协调”上而这些能力需要慢慢积累。更现实的建议是把 AI 当作一个随叫随到的代码生成器但每次使用都坚持做三件事写好注释、准备好测试用例、跑通后再提交。这样既不让 AI 替代你的思考又能把重复劳动的时间压缩到原来的三分之一。7.3 嵌入式 / 底层开发者你们的领域相对安全因为 AI 工具在嵌入式 SDK、硬件寄存器配置、外设驱动调试方面表现并不好。但你仍然要警惕这个领域正在被边缘 AI 慢慢改造。你可以每年拿出一点时间学习一下 Vitis AI 或 TensorRT 这类部署工具链了解模型怎么被压缩、量化、编译到目标硬件。不需要成为专家但至少要能看懂“AI 推理在嵌入式设备上是怎么实现的”。这样当项目需求来临时你不至于完全陌生。7.4 学生 / 刚入行的开发者你们是最需要打基础的群体。我的第一建议是先用传统方式写够 1 万行代码再开始使用 AI 辅助工具。如果你一上来就依赖 AI 补全很可能会丧失最基本的代码阅读能力和调试能力。等你对编译报错、运行时异常、逻辑边界都有直觉之后再让 AI 帮你加速你才能真正分辨出它写得好不好。这个过程没有捷径。8. 保留批判能力AI 抗拒者最值得做的事经过前面这些分析和实践你会发现真正的“AI 抗拒”不是拒绝使用工具而是拒绝盲从和放弃判断。在这个前提下我认为每个技术开发者在 AI 时代最应该坚持这么几件事。第一坚持为 AI 输出建立验证闭环。无论是生成的代码、配置还是文档都应该有明确的验证路径。代码能编译是底线能通过测试才算合格能通过 Code Review 才是真正的可用。没有验证机制之前不要信任任何模型的输出。第二坚持小步试错和回滚能力。如果你把 AI 生成的代码集成到生产环境一定要有回滚方案。更稳妥的做法是先在新项目或低风险模块里试跑通并稳定运行一段时间后再推广到别的模块。任何 AI 辅助的变更都应该走完测试、灰度、上线、监控的完整流程而不是因为“AI 写的代码”就自动可信。第三坚持理解底层原理。你可以不用手写 Transformer但你至少应该理解模型的输出为什么可能出错Embedding 为什么能表示语义RAG 为什么能缓解幻觉。这种理解能保护你使你不会把模型的错误输出当成“某种神秘的不可控力量”。工程学的核心就是消除不可控AI 产品也一样。第四坚持记录自己的使用经验和失败案例。拿一个本地笔记文件记录某次 AI 生成代码时出现了什么问题、你是如何发现的、如何修正的。这些记录比任何教程都有价值因为它们是你的思维在 AI 时代形成“免疫系统”的过程。9. 常见问题与排查思路面对生成式 AI工程实践中最常出现的问题往往不是模型本身不会回答而是你把模型用错了地方。下面给出几条高频问题的排查思路按场景整理。问题现象可能原因排查方式解决方案模型给出的代码编译不过模型没有生成配套的文件或依赖查看报错信息中的缺失类/依赖检查项目 pom.xml 或 requirements.txt补全依赖和类定义模型回答看似合理但用真实数据验证异常训练数据与你的业务范式不匹配用最小数据集复现对比模型输出与预期将输出结果限定为建议关键逻辑必须人工编写和测试本地 RAG 检索结果不相关文本切块过大或 Embedding 模型不匹配打印检索到的 chunk 内容调整 chunk_size改用中文效果更好的 Embedding 模型本地模型推理速度很慢CPU 推理过慢或模型过大查看资源占用确认是否加载到 GPU更换更小模型或开启 GPU 加速AI 生成的安全相关代码有漏洞模型不理解你的安全和认证上下文对安全类代码做专项审查安全相关代码必须人工实现并使用依赖漏洞扫描工具模型输出的配置项与当前版本不兼容模型训练数据滞后于框架版本去官方文档核对版本差异以官方文档为准模型输出只作为初稿这张表的核心思路是先判断问题出在哪一层是检索层、生成层、环境层还是业务层再动手处理。最忌讳的做法是一遇到 AI 生成结果不对就推翻整个流程重新来。实际上调整文本切分大小、更换模型、加强 prompt 约束往往是见效最快的手段。10. 最佳实践与工程建议把前面的讨论汇总成工程建议方便你在实际工作中落地。10.1 建立 AI 使用规范团队里应该有一套内部约定谁可以用 AI、在什么场景可以用、输出如何验证。比如AI 只能用于生成代码初稿和测试用例所有 AI 生成代码必须标记来源合并到主分支前必须有人工 Review。这套规范不是限制创造力而是确保风险可控。10.2 设计任务时给足上下文你越是抗拒 AI就越容易在提问时偷懒。但现实是AI 给出的答案质量与输入的上下文质量强相关。你给它“写一个接口”它只能给一个空壳你给它“用户登录后跳转到仪表盘token 存放在 Redis有效期 30 分钟请写 Spring Boot 接口”它给出的代码可用性会高很多。所以在使用 AI 前先把你的需求用结构化语言描述清楚这个过程本身也在帮助你梳理思路。10.3 用测试和静态检查兜底即使 AI 生成的代码看起来没问题也要让它在流水线里通过编译、单元测试、静态检查之后再进入 Code Review。不应该因为“AI 生成的代码”就直接上生产这是最基本的风险意识。10.4 注意数据安全与权限边界不要在未授权的环境下把公司核心代码、客户数据、密钥等内容发给第三方 AI 服务。优先采用本地化部署或者企业内部私有化部署的模型。即便使用云端服务也要注意最小化输入只发送必要的信息不发送密钥和敏感个人数据。10.5 保留你不愿意放弃的工程习惯日志、监控、配置管理、代码审查、自动化测试这些工程实践是 AI 无法替代的。正因为这些习惯的存在AI 生成的代码才能被安全地纳入生产环境。你不需要为了“拥抱 AI”而放弃这些反之它们才是你在 AI 时代最核心的竞争优势。11. 写在最后学习方向的取舍回到 HN 那个问题“作为 AI 抗拒者该如何面对生成式 AI” 我的回答其实很简单把 AI 当成一个你可以控制、可以验证、可以丢弃的函数而不是一个需要站队的信仰。真正值得你付出的精力不是争论 AI 会不会取代程序员而是搞懂它的边界在边界内利用它在边界外保持你的不可替代性。接下来的学习方向我建议从这三条线中选择一条不必全线铺开第一如果你对 AI 原理感兴趣可以从 Transformer 的结构开始学理解自注意力机制、tokenization、Embedding 这些核心概念然后跑一个 Hugging Face 上的小型微调示例逐步熟悉模型训练和评估流程。第二如果你更关心工程落地可以把本地 RAG 项目继续做深加入结构化文档解析、增量更新、多轮对话记忆、测评集评估把它做成一个能服务团队的内部工具。第三如果你是嵌入式或硬件方向的开发者可以了解 Vitis AI 或者 NVIDIA TensorRT 这类部署工具链选一个支持的公开模型经过量化、编译跑通一个边缘端的目标检测示例。这类实践会改变你对“AI 只能在云端运行”的认知也会让你在接下来几年的技术竞争中保持差异化优势。无论你选择哪条线都别丢掉那个问题这个输出我能验证吗这个系统我能掌控吗只要这两个问题能得到肯定回答那么与 AI 合作就不会让你失去工程师的尊严反而会成为你提高工作质量的新杠杆。
返回列表