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

如何快速在项目中集成AI功能:AI信箱工具使用

AI的使用目前已经非常普遍了,那么作为程序员的我们,改如何在自己的项目中集成AI相关的功能呢?

1. 获取apikey和baseurl

想要完成一次AI的api调用,我们必须要在官网中获取身份认证信息apikey和请求的url,这里更推荐阿里云百炼平台,不仅包含阿里自己研发的通义千问大模型,还包括很多其他模型的调用。尤其是在deepseek官网api目前不够稳定的情况下,阿里云百炼还能稳定的提供deepseek相关的模型调用接口。最重要的是新人开通免费给大量的使用token,非常适合新人学习或尝鲜。

1.1 首先进入阿里云官网(https://www.aliyun.com/),登录账号,完成个人认证。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2 在产品中选择百炼,进入百炼平台

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击管理控制台进入

在这里插入图片描述

1.3 开通阿里云百炼

新人右下角应该有开通提示,或者其他地方有提示,记不清了,反正只要完成个人认证,就能进行开通,获取大量的试用token

在这里插入图片描述

1.4 获取baseurl

在模型广场中有api调用示例,可以在其中获取baseurl

在这里插入图片描述

在这里插入图片描述

1.5 获取apikey

点击右上角用户图标,进入apikey界面

在这里插入图片描述

选择创建我的apikey,即可获取

在这里插入图片描述

2. 使用AI信箱工具,完成AI调用

在获取了请求地址和apikey之后,就可以开始调用AI接口了,不过AI接口调用的请求体和请求头的组装,以及AI信息的管理,都非常繁琐,这里我推荐使用AI信箱工具来完成这一过程。

AI信箱致力于封装复杂,但逻辑基本重复的AI调用功能以及对于AI交互信息的管理功能,让程序开发者能够像AI使用者一样,只需要向API发送一句话,即可以得到根据上下文信息推演的AI回答。AI信箱主要向调用者提供两个功能:

  • 对多AI的访问接口维护,只需要通过简单的配置和方法调用,即可完成对多种AI接口的一次完整调用。
  • 是对用户和AI交互信息的维护。

2.1 调用前准备

  1. 在pom文件中添加如下依赖
<dependency>
    <groupId>io.gitee.du-xiuhuan</groupId>
    <artifactId>ai-mailbox</artifactId>
    <version>1.0.1</version>
</dependency>
  1. 在springboot主类上引入启动类
//通过import注解引入MailBoxStarter启动类
@Import(MailBoxStarter.class)
@SpringBootApplication(scanBasePackages = "com.mailbox")
public class BaichuanAiServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(BaichuanAiServerApplication.class, args);
    }
    
}
  1. 添加相关配置
# datasource
spring.datasource.url=jdbc:postgresql://127.0.0.1:/mailbox
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=org.postgresql.Driver

#apikeyList记录了所有模型请求时所对应的apikey,需要自行从官网,获取。AI信箱获取apikey的逻辑是;分割多个对应关系,:分割对应关系的左右两侧。所有队对于某些提供了多AI接口调用的平台(如阿里云百炼),可以将多个AI写入:左侧,然后只提供一个apikey即可。
mailbox.apikeyList=deepseek-r1,deepseek-v3,qwen-plus,qwen-max,qwen-turbo,qwen-long:sk-447fdcdhasacuaewnicwcaooica3fbbb87b;
#原理同上,记录了对应模型需要请求的url
mailbox.urlList=deepseek-r1,deepseek-v3,qwen-plus,qwen-max,qwen-turbo,qwen-long:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions;
#不同的接口提供防,虽然提供的请求体参数类似,但是请求体中消息的排列顺序却有不同。默认以阿里云百炼提供的为准,也就是时间正序排列,新发的消息在下面,对于一些相反的平台(如deepseek官网),可以将这个参数设置为true,反转消息顺序。
mailbox.build-request-body.is-reserver=false

2.2 使用AI信箱发起AI调用

AI信箱对AI的接口调用逻辑进行了封装,这使得开发者只需要调用简单的方法调用即可完成一次Ai接口调用,实例如下:

import io.gitee.duxiuhuan.mailbox.outter.TalkWithAIUtils;
import io.gitee.duxiuhuan.mailbox.service.entries.QuestionResult;
import io.gitee.duxiuhuan.mailbox.utils.IdUtils;
import io.gitee.duxiuhuan.mailbox.service.entries.QuestionResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;

@Service
public class QuestionServiceimpl implements QuestionService {
       
    //引入AI信箱的AI对话工具类
    @Autowired
    TalkWithAIUtils talkWithAIUtils;

    @Override
    public QuestionResult question(String message, Long userId, Long sessionId, String model) {
        if (sessionId == null ){
            sessionId = IdUtils.generateId();
        }
       //直接调用question方法,传入用户说的话,用户id,当前用户对话所在的会话id,想要交流的模型,以及表id(对于AI的信息管理需要分表,实例中是基于用户分表,具体分表后面会说)
        Long tableId = userId;
        return talkWithAIUtils.question(message, userId, sessionId, model, tableId);

    }

    @Override
    public StreamingResponseBody questionStream(String message, Long userId, Long sessionId, String model) {
        if (sessionId == null ){
            sessionId = IdUtils.generateId();
        }
        //调用questionStream方法可以调用AI对话的流式接口,该方法返回了一个StreamingResponseBody类型实例,这是Springmvc提供的流式接口方案,直接将返回的StreamingResponseBody类型实例响应给客户端,即可实现逐字返回给客户端,当然你也可以对其进行封装,具体需要了解springmvc的相关知识。
        Long tableId = userId;
        return talkWithAIUtils.questionStream(message, userId, sessionId, model, tableId);

    }
}

通常AI接口调用需要将上下文信息全部传入,维护,查询,使用这些信息都相当麻烦。AI信箱内部对这些信息进行了管理,并且在调用时自动查询相关上下文,组成请求体,这使得开发者只需要传入最新的对话,既可以得到关联上下文的AI推演结果。一条完整的信息结构如下:

public class MessageInfo {
    //信息id(唯一)
    private Long id;
    //当前信息的所属用户id(AI调用时不发挥作用)
    private Long userId;
    //会话id(可以自定义概念,比如说你想要在聊天室中加入AI,可以一个聊天室作为一个sessionId)
    private Long sessionId;
    //判断当前信息是用户还是AI发出的
    private Integer userOrSystem;
    //是哪个模型的回答
    private String model;
    //具体信息内容
    private String content;
    //创建时间
    private Date createTime;
}

除此之外,对于大量的信息,不能单单只靠一张数据库表来进行处理,不同情况下,需要不同的分表来提供更良好的查询性能,开发者需要自行管理分表逻辑,并给每个逻辑单元对应一条表ID(就是AI交互功能是传入的最后一个参数)。AI信息会基于这个ID去创建对应的表。(注意,分表的最小单元是sessionId,也就是相同的sessionId不能被分到不同的表中);

AI信箱提供统一工具类来让开发者可以灵活的使用这些信息,实例如下:

import io.gitee.duxiuhuan.mailbox.database.entries.MessageInfo;
import io.gitee.duxiuhuan.mailbox.outter.MessageManagerUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;

@Service
public class SessionServiceimpl {
    //引入消息管理工具类
    @Autowired
    MessageManagerUtils messageManagerUtils;
    
    public List<MessageInfo> getContent(Long userId, Long sessionId) {
        //组成messageInfo实例,用来进行查询
        MessageInfo messageInfo = new MessageInfo();
        messageInfo.setSessionId(sessionId);
        //调用selectMessage方法,传入表名和messageInfo实例
        Long tableId = userId;
        List<MessageInfo> messageInfos = messageManagerUtils.selectMessage(tableId, messageInfo);
        return messageInfos;
    }

}

除此之外,还提供对信息的增删功能,都是MessageManagerUtils工具类的方法,示例如下:

package com.mailbox.server.service.impl;

import io.gitee.duxiuhuan.mailbox.database.entries.MessageInfo;
import io.gitee.duxiuhuan.mailbox.outter.MessageManagerUtils;
import com.mailbox.server.database.SessionMapper;
import com.mailbox.server.database.entries.Session;
import com.mailbox.server.service.SessionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class SessionServiceimpl extends ServiceImpl<SessionMapper, Session> implements SessionService {
    
    @Autowired
    MessageManagerUtils messageManagerUtils;
    
    @Override
    public List<MessageInfo> getContent(Long userId, Long sessionId) {
        
        //根据会话id查询会话表内容
        MessageInfo messageInfo = new MessageInfo();
        messageInfo.setSessionId(sessionId);
        Long tableId = userId;
        //传入表ID,以及按照MessageInfo类的属性组成查询信息,即可获取对应的消息列表
        List<MessageInfo> messageInfos = messageManagerUtils.selectMessage(tableId, messageInfo);
        return messageInfos;
    }

}

AI信息也提供QueryTableUtils工具类,用来对表的增删改查,推荐开发者在表逻辑单元创建时调用对应方法生成表,不过即使你不这样做,AI信箱也会在发现表不存在时尝试创建它。

3. 结语

AI信箱gitee地址:https://gitee.com/du-xiuhuan/ai-mailbox

如果感觉好用,麻烦点一个star;

如果在使用中遇到什么问题,可以在当前帖子进行评论,或在gitee中提出issue,问题会尽量在一周内解决;

相关文章:

  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_pool_t 类型
  • C++笔记之标准库中用于处理迭代器的`std::advance`和`std::distance`
  • Rust中的collections
  • DeepSeek在学术读写翻译中的独特优势
  • Spring容器扩展点
  • 无线网络数字孪生(Digital Twin for Wireless Networks)
  • Node.js中不支持require和import两种导入模块的混用
  • 进阶——第十六届蓝桥杯嵌入式熟练度练习(eeprom的读写)
  • 【Unity精品插件】NGUI:UI设计传奇工具
  • 动态规划 之 划分型DP
  • 【Java】泛型与集合篇(四)
  • 简易的仿桌面文件夹上传(vue2)
  • AI进展不止于基准:深度解析Grok 3的局限
  • 为AI聊天工具添加一个知识系统 之109 详细设计之50 三性三量三境
  • 数据分析--数据清洗
  • C++ 设计模式-外观模式
  • openharmony中HDF驱动框架关键流程说明-观察者模式
  • Redis7——基础篇(四)
  • 安卓鸿蒙应用开发架构变迁
  • HTML之JavaScript Form表单事件
  • 4月金融数据前瞻:受去年低基数因素影响,社融增量有望同比大幅多增
  • 央行:中国政府债务扩张仍有可持续性
  • 《中国人民银行业务领域数据安全管理办法》发布,6月30日起施行
  • 屈晓华履新四川省社科联党组书记,此前担任省国动办主任
  • 国家主席习近平同普京总统出席签字和合作文本交换仪式
  • 2025江西跨境电子商务发展交流会召开,探索行业发展新趋势