Java AI智能体开发实战指南:从零搭建智能体完整案例

在人工智能技术快速普及的当下,Java 开发者如何利用自身技术栈构建具备多模态交互能力的 AI 智能体?本文将通过一个完整的案例,带你从零搭建一个支持AI绘图、文案改写、多端适配的智能体系统。整个项目基于 Spring Boot + MyBatis Plus + MySQL 后端架构,前端采用 UniApp(Vue语法)实现小程序、公众号、H5及App的多端适配,管理后台使用 Vue + Element UI 构建。

我们将围绕“Java AI智能体开发”这一主题,拆解从架构设计到功能落地的全过程。无论是想搭建AI问答机器人、内容创作助手,还是智能客服系统,本文的思路均可复用。

一、AI智能体的核心架构设计

一个完整的Java AI智能体通常包含三个核心层:接入层(多终端适配)、业务逻辑层(智能体调度引擎)、数据存储层(用户行为与模型参数持久化)。我们以案例系统中的“AI智能内容助手”为例,它支持发卡、新人赠送、充值、二级分销等商业化功能,同时具备AI绘图、会员模式、文档语音导出等能力。

1.1 多平台接入层设计

根据项目需求,我们需支持小程序、H5、公众号、安卓、iOS五端。这里推荐使用 UniApp 作为前端框架,它基于Vue语法,一套代码打包多端。关键配置示例如下:

// manifest.json 多平台编译配置
{
  "mp-weixin": {
    "appid": "你的小程序AppID",
    "setting": {
      "urlCheck": false
    }
  },
  "h5": {
    "devServer": {
      "proxy": {
        "/api": {
          "target": "http://localhost:8080",
          "changeOrigin": true
        }
      }
    }
  }
}

1.2 后端服务层技术栈

后端我们采用经典的 Spring Boot 2.7 + MyBatis Plus 3.5 + MySQL 8.0 组合。核心模块划分如下:

  • 智能体引擎模块:处理用户意图识别、模型调用、上下文管理
  • 支付与分销模块:集成/支付宝支付,实现二级分销流水记录
  • 资源管理模块:处理AI生成的图片、文档、语音文件的存储与导出
  • 任务调度模块:实现轮训账号、快速回复后台自动处理
// Spring Boot 启动类示例
@SpringBootApplication
@MapperScan("com.agent.demo.mapper")
public class AgentApplication {
    public static void main(String[] args) {
        SpringApplication.run(AgentApplication.class, args);
    }
}

二、实战搭建:智能体后端业务实现

本节我们实现一个 AI文案改写智能体 的核心逻辑,包含接收用户输入、调用大模型API改写、返回结果并保存记录。这对应了前面提到的“AI伪原创 视频创作 文案改写”功能模块。

2.1 数据库表设计

首先创建用户表和改写记录表:

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `nickname` varchar(50) DEFAULT NULL,
  `balance` decimal(10,2) DEFAULT '0.00' COMMENT '余额',
  `membership_type` tinyint(1) DEFAULT '0' COMMENT '会员类型 0普通 1月卡 2季卡',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `rewrite_record` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `source_text` text NOT NULL COMMENT '原文',
  `rewritten_text` text COMMENT '改写结果',
  `model_used` varchar(50) DEFAULT 'gpt-3.5-turbo',
  `cost` decimal(10,2) DEFAULT '0.00' COMMENT '消耗金额',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2.2 核心业务层实现

使用 MyBatis Plus 的 Service 层处理改写逻辑:

@Service
public class RewriteService {

    @Autowired
    private RewriteRecordMapper recordMapper;
    @Autowired
    private UserService userService;

    // 调用大模型改写文本
    public String rewriteText(Long userId, String sourceText) {
        // 1. 校验用户余额或会员权限
        User user = userService.getById(userId);
        if (user.getBalance().compareTo(BigDecimal.ZERO) <= 0
            && user.getMembershipType() == 0) {
            throw new BusinessException("余额不足,请充值或购买会员");
        }

        // 2. 调用AI模型接口(伪代码,实际需替换为真实API)
        String rewrittenText = callAIModel(sourceText);

        // 3. 扣费逻辑(会员免费,普通用户按次扣费)
        if (user.getMembershipType() == 0) {
            userService.deductBalance(userId, new BigDecimal("0.5"));
        }

        // 4. 保存记录
        RewriteRecord record = new RewriteRecord();
        record.setUserId(userId);
        record.setSourceText(sourceText);
        record.setRewrittenText(rewrittenText);
        record.setCost(user.getMembershipType() == 0 ? new BigDecimal("0.5") : BigDecimal.ZERO);
        recordMapper.insert(record);

        return rewrittenText;
    }

    // 模拟AI模型调用
    private String callAIModel(String text) {
        // 实际项目中应调用 OpenAI、文心一言或本地部署模型
        return "【改写结果】基于原文'" + text + "'生成的优化版本...";
    }
}

2.3 智能体对话上下文管理

对于实现“轮训账号”、“快速回复”等高级功能,需要一个上下文管理器。我们可以用 ConcurrentHashMap 模拟内存缓存:

@Component
public class ContextManager {
    // 用户ID -> 对话历史列表
    private final Map<Long, LinkedList<Message>> contextMap = new ConcurrentHashMap<>();

    // 获取上下文,支持轮训策略(不同模型切换)
    public List<Message> getContext(Long userId, String modelType) {
        contextMap.putIfAbsent(userId, new LinkedList<>());
        LinkedList<Message> messages = contextMap.get(userId);
        // 保留近20条对话
        if (messages.size() > 20) messages.removeFirst();
        return messages;
    }

    public void addMessage(Long userId, Message msg) {
        contextMap.get(userId).add(msg);
    }
}

三、多端适配与界面整合

智能体只有覆盖多个平台才有实际价值。这里我们采用 Uniapp 完成用户端开发,管理后台则使用 Vue + Element UI。

3.1 用户端UniApp核心页面

为用户端的“AI文案改写”功能编写调用页面:

<template>
  <view class="container">
    <textarea v-model="sourceText" placeholder="请输入需要改写的文案"></textarea>
    <button @click="submitRewrite" :disabled="loading">
      {{ loading ? '改写中...' : '开始改写' }}
    </button>
    <view class="result" v-if="resultText">
      <text>{{ resultText }}</text>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      sourceText: '',
      resultText: '',
      loading: false
    }
  },
  methods: {
    async submitRewrite() {
      this.loading = true;
      const token = uni.getStorageSync('token');
      const res = await uni.request({
        url: '/api/rewrite',
        method: 'POST',
        header: { Authorization: token },
        data: { text: this.sourceText }
      });
      this.resultText = res.data.data;
      this.loading = false;
    }
  }
}
</script>

3.2 管理后台Vue组件

管理后台需要监控智能体的运行状态、用户充值记录以及模型调用次数。以下是一个简单的仪表盘组件:

<template>
  <el-card>
    <div slot="header">
      <span>智能体运营概览</span>
    </div>
    <el-row :gutter="20">
      <el-col :span="6">
        <div class="stat-item">
          <p>今日调用次数</p>
          <h2>{{ stats.todayCalls }}</h2>
        </div>
      </el-col>
      <el-col :span="6">
        <div class="stat-item">
          <p>活跃用户</p>
          <h2>{{ stats.activeUsers }}</h2>
        </div>
      </el-col>
      <el-col :span="6">
        <div class="stat-item">
          <p>模型响应速度(ms)</p>
          <h2>{{ stats.avgResponse }}</h2>
        </div>
      </el-col>
      <el-col :span="6">
        <div class="stat-item">
          <p>分销订单数</p>
          <h2>{{ stats.distributionOrders }}</h2>
        </div>
      </el-col>
    </el-row>
  </el-card>
</template>

<script>
export default {
  data() {
    return {
      stats: {
        todayCalls: 0,
        activeUsers: 0,
        avgResponse: 0,
        distributionOrders: 0
      }
    }
  },
  mounted() {
    this.fetchStats();
  },
  methods: {
    async fetchStats() {
      const res = await this.$axios.get('/admin/agent/stats');
      this.stats = res.data.data;
    }
  }
}
</script>

四、企业级AI智能体的高阶设计策略

基于知识库中多个项目的共性特征(支持多模型轮训、会员模式、二级分销等),在实际开发中还需要关注以下问题:

4.1 多模型轮训与负载均衡

当我们对接多个AI模型提供商(如GPT、文心一言、国产开源模型)时,需要实现一个 模型路由器。知识库中提到的“轮训账号”功能,本质就是根据用户等级或请求类型,自动分发到不同的模型:

@Component
public class ModelRouter {
    private List<AIModel> models = new ArrayList<>();

    public String call(String text, UserLevel level) {
        // 会员用户优先使用高精度模型
        if (level == UserLevel.VIP) {
            return models.stream()
                .filter(m -> m.getName().contains("gpt-4"))
                .findFirst()
                .orElse(models.get(0))
                .generate(text);
        }
        // 普通用户轮训使用
        int index = (int)(System.currentTimeMillis() % models.size());
        return models.get(index).generate(text);
    }
}

4.2 二级分销与会员体系设计

智能体的商业化离不开分销和会员机制。在数据库层面,用户表需增加parent_id字段记录推荐关系,分销佣金在用户充值时自动计算。参考某项目结构,会员权益应包括:

  • 免费使用AI绘图
  • 无限制文案改写次数
  • 语音与文档导出无限制
  • 优先使用高精度模型

会员状态的变更可以通过定时任务自动过期,或结合支付回调实时更新。


五、FAQ:Java AI智能体开发常见问题

Q1:Java AI智能体开发需要什么技术基础?
需要掌握Spring Boot、MyBatis Plus、MySQL等后端技术,以及至少一门前端框架(如Vue/UniApp)。如果涉及多端适配,建议学习UniApp。

Q2:国内有哪些适合Java集成的AI模型接口?
可以对接百度文心一言、阿里通义千问、讯飞星火等大模型API,它们都提供标准的HTTP接口,Java侧用RestTemplate或OpenFeign即可调用。开源模型可通过本地部署或第三方平台(如One API)统一管理。

Q3:Java AI智能体开发的主要挑战是什么?
一是上下文管理:长对话需要合理设计缓存策略(Redis或本地内存);二是成本控制:模型调用费用需与用户收费体系匹配;三是多端适配:不同平台对语音、图片、文件的处理差异较大。

Q4:如何快速搭建一个原型验证?
建议采用“小可行产品”策略:先用Spring Boot搭建一个单接口的改写服务,前端用UniApp的H5版本快速测试。验证通后,再逐步加入会员、分销、多模型轮训等高级功能。整个过程可参考本文第二部分的代码示例。

通过以上实战案例,我们完成了一个支持多平台、具备AI改写与绘图能力、包含会员分销体系的Java智能体系统。无论是做内容创作工具、客服机器人还是教育应用,这套架构都提供了可复用的核心范式。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐