当前位置: 首页 > news >正文

站在 Java 程序员的角度如何学习和使用 AI?从 MVC 到智能体,范式变了!

文章目录

  • 前言
  • 那么到底什么是 LLM 以及它自身的限制——AI 智能体解决了什么问题
  • 一切都是围绕输入输出展开的 —— Prompt 工程、RAG 与 MCP
    • 1. Prompt Engineering(提示词工程):控制 LLM 的行为
    • 2. RAG(Retrieval-Augmented Generation):把“外部知识”注入模型
        • Retrieval(检索)
      • 拼接成 Prompt
    • 🛠 3. MCP(Multi-step Code Planning / Tool Use):让模型有“动手能力”
    • MCP 的常见分类
    • 大模型是如何选择调用哪个工具的?
  • 进一步提升——多模态、多轮检索
    • 1. 多模态输入
    • 2. 多轮对话 & 多角色协作
  • 规范化——Spring AI 和 LangChain4j
    • 1. Spring AI(Spring 官方出品)
    • 2. LangChain4j
  • 如何学习

前言

今天给大家分享一下站在 Java 程序员的角度如何学习和使用 AI,在开始之前,先问大家几个问题:

  • 你能分清楚使用 AI 和开发 AI 吗?
  • 你能区分出 LLM 和 AI 智能体吗,ChatGPT 官网是一个 LLM 还是一个 AI 智能体?

其实 LLM 刚火的时候我并不关心。作为一个后端开发者,我第一反应是:又来了一个能调 API 的新中间件而已嘛。但随着项目深入,我意识到,这不仅是多了个 SDK,更像是一次开发范式的升级

调用层
Services
DAO
MCP
AI Agent 模式
Prompt Engineering
Prompt
RAG
用户对话框
Router
Traditional_Service
AI_Service
传统开发模式(MVC)
Controller1
接口一
接口二
Controller2
接口三
Controller3
数据库 / 系统 API / 脚本

我们来看一下这张图,左边是我们熟悉的传统 MVC 开发流程:

  • 一个接口进来,对应一个 controller;
  • controller 调用 service;
  • service 最终访问数据库、缓存,或者调用远程服务。

这个过程的控制流和数据流都非常明确。而在右边,AI 应用的结构就完全不一样了:

  • 用户进来的不是一个“接口请求”,而是一段自然语言;
  • 中间的“控制器”被一个**提示词工程(Prompt Engineering)**替代;
  • 它可能是一个简单 prompt,也可能是一个复杂的 RAG 流程(比如先去向量库查资料);
  • 然后通过“路由”逻辑,决定调用哪个工具、数据库、系统,执行实际操作。

值得注意的是,在 AI Agent 模式下,各个模块的流程控制并不是手动调用的,而是由 LLM 的输入输出自行决定的。所以说,从传统 MVC 到 AI Agent,就像 Spring 框架的控制反转一样,我们正在经历一次从“我来写逻辑”到“模型来选逻辑”的范式转变。

那么到底什么是 LLM 以及它自身的限制——AI 智能体解决了什么问题

LLM 是一个可以根据用户输入的 Token 并结合自己的训练数据集预测下一个最可能出现的 Token 的软件,仅此而已,并且这个过程是无状态的。所以 LLM 天然具有以下限制:

  • 输入 Token 是有限制的,输入输出 Token 的总和限制在一个范围内
  • 没有记忆功能
  • 无法知道训练集之外的信息
  • 没有操作本地环境的能力

而 AI 智能体,就是在解决了这些问题之上,具有一定功能的应用。

一切都是围绕输入输出展开的 —— Prompt 工程、RAG 与 MCP

我们用大模型做应用,核心就是控制两个东西:

  • 喂进去什么(输入)
  • 读出来什么(输出)

围绕这个目标,发展出了三个核心组件:

用户提问
嵌入向量化
向量检索 / 全文检索
资料片段
Prompt拼接
LLM调用
判断是否调用工具
工具结构输出
工具执行
调用结果
LLM再次调用
最终回答

1. Prompt Engineering(提示词工程):控制 LLM 的行为

提示词就是你给模型的指令。比如:

  • “你是一个精通 Java 的工程师,帮我解释这段代码。”
  • “根据以下内容写一个摘要。”

它可以简单一句话,也可以是几百行的复杂提示(带格式要求、角色扮演等)。

但提示词工程解决不了两个痛点:

  • 模型知识有限(不知道你的内部资料)
  • 提示词太长会超过 Token 限制

这就引出了 RAG


2. RAG(Retrieval-Augmented Generation):把“外部知识”注入模型

RAG 是为了给 LLM 提供“参考资料”,它的流程可以分为两个阶段:

Retrieval(检索)

你不能把所有资料塞进 prompt,只能在用户提问时动态选出最相关的内容。这一步我们有两种技术路线:

方法说明优势劣势
全文检索(Full-text Search)用关键词匹配(如 Elasticsearch)精度高、实时性好不理解语义
向量检索(Semantic Search)把问题和文档都转成 embedding,算相似度(如 Qdrant、Weaviate、FAISS)能理解同义词、上下文依赖 embedding 质量

通常我们会向量检索为主,关键词检索为辅,提高覆盖率和准确率。

拼接成 Prompt

选出相关文档后,把它们和问题一起组成新的 Prompt,再送给 LLM,让它在有背景资料的情况下回答。

这样就绕过了模型的知识盲区,答案更准确。


🛠 3. MCP(Multi-step Code Planning / Tool Use):让模型有“动手能力”

即便模型有了知识,它也不能执行操作。比如它不能:

  • 查询数据库
  • 发起 HTTP 请求
  • 调用 Java 方法
  • 执行脚本 / 命令行

这时我们就要加上一套机制,让 LLM 能说:

“请调用 searchProduct 接口,参数是 name=MacBook”

你把这段结构化输出解析出来,真正去调用你写的函数、API、服务,执行完再把结果传回模型。

这个过程就叫 Tool Use / Function Calling / MCP


MCP 的常见分类

工具类型示例技术说明
HTTP API 工具查天气、搜索、调用接口封装成 REST 调用,返回结构化数据
数据库工具查库存、查员工表模型输出 SQL,系统执行
代码执行工具数学计算、生成代码调用沙箱环境执行模型生成的代码
系统操作工具打开文件、执行脚本提供安全封装的 shell 执行接口
Agent 工具链多步计划 / 调度LLM 先计划,再执行多个工具组合

大模型是如何选择调用哪个工具的?

大部分框架都有两种方式:

调用方式说明适用场景
Tool Schema 触发提供多个函数定义,让模型决定调用哪个(如 OpenAI Function calling)函数少、结构清晰
Router Agent 分发先让一个“路由模型”判断:当前问题属于哪个工具或任务,然后再交给子 Agent 处理多工具、多业务线应用

进一步提升——多模态、多轮检索

随着大模型的能力不断演进,我们已经不再局限于单轮文本输入输出,AI 应用正进入两个重要方向:

多智能体协作
输入层
角色1_分析Agent
角色2_规划Agent
角色3_执行Agent
角色4_总结Agent
用户文本
用户图片
用户语音
多模态感知
任务拆解
最终输出

1. 多模态输入

现在主流大模型(如 GPT-4o、Claude 3、Gemini)都支持多模态输入:

  • 图片、图表、PDF、语音、视频,甚至是拖拽上传文件
  • 输出也可以是结构化 JSON、图片,甚至带情感语音

例如你上传一张图表问:“这图说明了什么?”,模型不仅能识别内容,还能结合标题和颜色给出分析——这超出了传统 NLP 的范畴。

2. 多轮对话 & 多角色协作

复杂任务通常不能一问一答搞定,这时候我们需要多个模型/组件协作执行任务

例如一个任务链可以分成:

  • 思考 Agent:判断用户意图
  • 检索 Agent:找相关信息(RAG)
  • 规划 Agent:组织调用顺序
  • 工具执行 Agent:执行具体操作

最后由一个模型将结果整合,给出自然语言回复。这种流程就叫多轮多步协作(multi-agent planning + multi-step RAG)

你可以理解为:我们在用 AI 模拟一个“多角色协同工作的程序架构”。

规范化——Spring AI 和 LangChain4j

前面提到的 Prompt、RAG、MCP、Memory 等,虽然可以用 HTTP + JSON 手写实现,但工程上显然不现实。这时就需要“把这些通用组件封装起来”,而对 Java 工程师来说,现在有两个主流框架可以用:

1. Spring AI(Spring 官方出品)

  • 支持常见模型:OpenAI、Azure、Gemini、HuggingFace 等
  • 用 Spring Boot 风格配置模型调用、RAG、Function calling
  • 内建 Prompt 模板(Thymeleaf)、Embedding 支持、Memory 支持

2. LangChain4j

  • Java 社区实现的 LangChain 生态移植
  • 专注构建 Agent、RAG、Retriever、ToolChain 等组件
  • 支持与向量数据库、嵌入模型无缝对接

如何学习

如果你是 Java 工程师,想要从 0 到 1 掌握 AI 应用开发,我推荐这样一个路线:

timelinetitle Java 工程师学习 AI 应用开发路线图起步 : 学习 LLM 基础、Prompt 工程初步实战 : 用 Java 接 OpenAI API,构建对话机器人进阶 : 接入 RAG,学习向量检索提升 : 加入工具调用(MCP),构建 Agent 执行链规范化 : 学会使用 LangChain4j 或 Spring AI深入 : 探索模型微调、私有部署、本地 LLM
http://www.lryc.cn/news/579568.html

相关文章:

  • 渗透测试中 phpinfo() 的信息利用分析
  • Part 0:射影几何,变换与估计-第三章:3D射影几何与变换
  • 工作中用到过哪些设计模式?是怎么实现的?
  • Robot---能打羽毛球的机器人
  • Linux操作系统之文件(二):重定向
  • 物联网MQTT协议与实践:从零到精通的硬核指南
  • 【王阳明代数】基于Perplexica二次开发的道装资源标识符与重定向知识路由系统
  • 使用HAProxy搭建Web群集:原理、步骤与实战总结
  • Node.js特训专栏-实战进阶:12. 数据库事务处理与并发控制
  • 基于 alpine 构建 .net 的基础镜像
  • 基于MATLAB的风力发电机无人机巡检路径优化研究
  • 利用人名语言分类案例演示RNN、LSTM和GRU的区别(基于PyTorch)
  • Go调度器的抢占机制:从协作式到异步抢占的演进之路|Go语言进阶(7)
  • Android Profiler 丢帧分析教程及案例
  • WPF学习笔记(22)项面板模板ltemsPanelTemplate与三种模板总结
  • 【Git】同时在本地使用多个github账号进行github仓库管理
  • 两级缓存 Caffeine + Redis 架构:原理、实现与实践
  • locate 命令更新机制详解
  • 小红书自动化操作:使用本地Chrome和User Data实现高效反检测
  • Linux系统(信号篇):信号的处理
  • spring6合集——spring概述以及OCP、DIP、IOC原则
  • MongoDB Memory Server与完整的MongoDB的主要区别
  • CANFD芯片在工控机数据采集和测量中的应用分析
  • 重新学习Vue中的按键监听和鼠标监听
  • PDF的图片文字识别工具
  • 110道Python面试题(真题)
  • Spring AI ETL Pipeline使用指南
  • 01_前后端打包发布、API接口调试
  • Stata如何做机器学习?——SHAP解释框架下的足球运动员价值驱动因素识别:基于H2O集成学习模型
  • Spring生态:引领企业级开发新纪元