AI 编程技巧、技术笔记
想使用AI进行开发,还有有很多技巧的。——如何让AI生成的代码更准确?
**************************************************************************************************************
编程技巧
上篇说到Prompt提示词,提问的质量决定了回答的准确性。所以优化Prompt让开发更轻松。
1、优化Prompt
Prompt的质量直接决定了AI生成代码的准确性,正因如此,就有了Prompt工程概念。
想要掌握最基本的Prompt优化技巧,比如明确AI的角色,提供具体的细节要求,拆解任务没提供示例等等,可以看看智谱AI开放平台,进行学习。
有需求的话,建议手写Prompt扔给AI,让其帮我们生成一段高质量、结构化的需求文档,再喂给AI工具,通义灵码、Cursor等,效率和效果会更好。
完成需求文档通常包括 | |
· 明确项目背景和目标 | · 详细列出功能要求和技术栈 |
· 执行代码风格和架构模式 | · 提供示例和参考资料 |
· 明确限制条件和边界场景 |
2、复杂项目的生成技巧
对于复杂的项目,可以采用分布迭代策略:
1、先利用工具(Cursor的Agent模式+高级推理模型)生成基础项目框架,暂时能运行即可
2、划分模块和功能点,依次向AI提问,逐步实现核心功能并验证是否可用
3、在保证不影响功能的前提下,优化实现细节
招式:
1、项目模块化。由于AI的脑容量不大,能接受的上下文是有限的,随着项目信息量不断增大,它有可能忘记之前的信息,导致生成错误代码。所以尽量把项目功能隔离开,把一个大项目分割成多个小项目,让AI生成某个功能时只需要关注小部分上下文,得到的结果会更精准。
例子:开发一个电商系统,可以把商品管理模块独立出来,当需要AI生成添加商品功能的代码时,只需要提供商品表字段设计、添加商品的业务逻辑规则,不需要把支付结算,用户会员等关联不大的功能作为上下文提供给AI。
2、修改限定范围。AI生成的代码可能没有那么可控,经常改A功能,同时把B功能也顺带修改了,这个问题会经常遇到,只要在提示词中限定修改范围即可。
例子:
仅修改service.impl/GoodsServiceImpl.java中的updateGoods方法:
1、添加分布式锁防止超卖
2、保持现有日志格式
3、不改动其他文件和逻辑
3、抽象和复用。假如我们要让AI生成2个布局一样的页面,他生成的方式就会死板,生成1后复制2,这样一方修改不利于维护。所以可以适当告诉AI:帮我抽象1页面,1代码为可复用组件。这样会减少项目代码量,,也有助于减轻AI记忆负担。
4、版本控制。建议利用Git版本控制工具对代码进行管理,每正确生成一个功能后提交一个版本,在每次生成新代码后,人工进行对比,出了问题可以快速还原,防止代码丢失。
**************************************************************************************************************
编程技术
“AI时代,所有的传统业务都值得利用AI重塑”
学习AI,不只是会用AI工具,能利用AI工具开发项目,还能自主开发AI项目,同时把AI的能力接入到自己的项目中。
1、AI开发框架
目前主流的AI开发框架,Spring AI 、LangChain4j、LangGraph
Spring AI和LangChain4j比较类似,都提供了很多现成的方法,可以提高开发AI应用的效率,
比如快速对接大模型、保存会话上下文、对接向量数据库实现RAG 等等等等。
区别是Spring AI更容易和主流java开发框架Spring集成,容易上手;LangChain4j则更灵活,适合开发复杂的智能体。比如开发一个智能文档分析系统时,利用LangChain4j,智能体能够自动读取文档内容,调用搜索 引擎获取相关背景知识,然后根据任务需求,将文档信息与外部知识结合,生成分析报告。
建议,从Spring AI 学起。
场景 | 推荐框架 | 优势 |
Java企业应用 | Spring AI | 无缝集成Spring生态 |
智能体开发 | LangChain4j | 完整Agent工具链 |
复杂工作流 | LangGraph | 可视化编排 |
2、AI集成
开发AI应用的前提是要有大模型,但是大模型需要消耗算力才能运行,算力就需要money,所以可以使用2中方法,接入大模型:1、AI云服务、2、本地部署大模型
AI云服务
AI云服务就是其他企业为我们部署了AI大模型,通过API接口方式提供给我们使用,按量计费。
比如:阿里云百炼、火山引擎、硅基流动、Open AI,这些广告机场、高铁等很常见。
重点掌握:
1、如何通过API接入云服务
2、如何通过使用AI云服务来创建智能体和配置参数
3、如何选择合适的云服务?需要关注和对比各家云服务的计费模式和服务质量
4、如何更低成本,更稳定的使用云服务?需要重点学习Prompt工程额高可用技术
本地部署大模型
本地部署大模型对于很多企业来说既是刚需,也是资源开销(部署大模型的难度不在于技术,在于算力,也就是money)。
好处是数据无需上传云端,能够有效保障数据的安全性和隐私性,尤其适用于医疗、金融等对数据安全比较敏感的行业。
本地部署大模型,较为常见的Ollama工具,可实现一键部署各种主流开源模型。
3、AI领域业务
企业中的AI业务开发,不仅仅是和AI进行对话就够了,还要掌握复杂的业务开发,比如RAG知识库,多模态、MCP服务、ReAct智能体。
RAG知识库
各家公司都有自己的业务和文档内容,会构建适合自己的问答系统和客服,这就需要用到RAG检索增强生成技术。先通过文本嵌入模型,将企业文化和内容文档转化为向量,存入向量数据库;用户提问时,系统在向量数据库中检索相关向量数据,找到最相似文档片段,和问题一起输入大模型进行处理,这样的话,大模型能够基于企业真实数据作答,更准确贴合实际。
关于RAG需要掌握,向量数据库Milvus和PGVector、文档的抽取/转换/加载、索引的构建、查询策略的优化等等。
多模态
多模态也是主流的AI业务场景,即融合文本、图像、音频、视频等多种不同类型的数据模态,从而提高产品使用的易用性,扩展出更多创意的功能。
比如做个智能导购系统,既可以输入文字描述,又可以上传图片,甚至可以理解上传的音频文件或者分析视频文件。系统会将这些来自不同模态的数据进行整合处理,在商品数据库中精准匹配符合要求的商品,并返回结果。
想开发多模态应用,需要掌握模态转换技术,比如文本转语音(TTS)、语音转文本(STT)、光学字符识别(OCR)等,不过这些都有现成的工具库或者云服务,掌握调用方式即可。
还可以通过Spring AI、LangChain等AI开发框架调用不同模态大模型,降低开发难度。
MCP服务
MCP(Model Context Protocol,模型上下文协议)可以理解为 提供给AI的各种服务,AI利用这些服务能够实现更强大的功能。
如何在项目中接入MCP服务,来真强自己的项目能力;以及如何开发自己的MCP服务,让别人可以使用,就很强。
ReAct智能体
ReAct是一种构建智能体的开发范式,目的是打造能够依据推理结果自主采取行动的智能体。
他的开发过程会涉及到任务规划、工具调用、交互I/O,异常处理等知识。尤其是工具调用,可以通过Function Call或MCP实现,天气查询,文件读写,网页运行,信息检索,终端命令执行等功能
示例:
开发视频网站为例,用户说“帮我开发Dilidili视频网站并部署上线”的指令时,智能体首先会深入理解任务内容,通过推理,梳理出一系列执行步骤,包括明确需求,设计方案,搭建框架,生成代码,部署上线等流程。
那么智能体会调用相应的工具来执行这些行动。如果执行过程遇到问题,还会询问我们的意见,重新推理并及时调整行动方案。
4、AI工具链
AI开发过程中可能会用到平台、工具和类库。
低代码平台
比如:低代码AI开发平台Dify,可以通过拖拽的方式构建自己的AI智能体,创建知识库并导入自己的文档,搭建复杂的工作流等等,哪怕是不会代码,依然很强。
工具库
开发AI智能体时会用到工具库。
1、Apache Tika,功能强大的文件解析器工具库,支持解析PDF、Word、Excel、PowerPoint等各种文档,然后提供给AI作为知识。
2、Playwright,用于模拟浏览器行为的工具库,AI需要运行网页,抓取网页数据,自动化测试时,可用。
3、JSON格式解析库GSON和Kryo
4、HTML文档解析库jsoup
部署工具
项目的最终部署上线,可以让AI应该从开发环境顺利过渡到生产环境。为用户提供稳定的服务。
如果追求价格和稳定,优先选择大厂提供的云服务部署。如果快速上线AI小应用,可以选择:
Vercel:适合前端应用的部署平台,支持自动构建、在线浏览,CDN分发,而且还免费提供可访问的域名。
Sealos:云原生应用管理平台,支持Kubernetes集群管理里,为AI应用提供容器化部署环境,适合需要弹性伸缩的AI服务。
Railway:能让开发人员轻松部署Docker容器,无需操心服务器配置与运维,且自带自动化构建工具,环境管理能力等
想快速部署服务Docker可以轻松搞定,像安装app一样简单。
Docker是一个开放源代码的软件容器化平台,它极大地简化了应用程序的部署、扩展和管理。通过Docker,开发者可以将应用程序及其依赖打包到一个称为“容器”的独立单元中,这个容器可以在任何环境中运行,无论是开发者的个人电脑、测试服务器还是生产环境中的服务器。这种一致性确保了应用在不同阶段的环境中行为一致。
容器与虚拟机类似,但更轻量级。虚拟机需要运行一整个操作系统,而容器只是共享主机操作系统的内核,并在其上运行多个隔离的用户空间实例。这使得容器比虚拟机启动更快、占用资源更少。
Docker的主要特性包括:
镜像(Images):Docker容器的基础是镜像,这是一个轻量级、独立、可执行的软件包,包含了运行某个软件所需的一切:代码、运行时、库、环境变量和配置文件。
容器(Containers):容器是从镜像创建的运行实例。你可以使用一个镜像创建多个容器,每个都是相互隔离的。
仓库(Registry):用于存储和分发镜像的地方。Docker Hub是Docker官方提供的一个公共仓库,除此之外,用户也可以建立自己的私有仓库。
Docker已经成为现代软件开发流程中不可或缺的一部分,尤其是在持续集成和持续交付(CI/CD)领域。通过使用Docker,团队能够加快开发速度,提高生产力,同时减少从开发到生产的环境差异带来的问题。