java搭建ai平台(保姆级教程)_java ai

引言:我是把三个AI助手整合到一起玩的,你们也可以只调用一个助手,比如想用豆包的,就只看豆包的流程就行

一、豆包、kimi、千问

为什么没有deepseek?因为我尝试了,deepseek需要收费,并且因为资源紧张已经关闭收费平台了,我是没办法用的所以尝试了豆包、kimi、千问这些平台,虽然没有deepseek这么好用,但是日常问点问题还是可以的。

1、豆包API-key

豆包是跳动字节开发的,日常编写程序问问题什么的也算是比较好用

要接入豆包,需要做一些准备工作

注册火山引擎账号

浏览器搜索火山引擎,点击注册,导航到火山引擎控制台(火山引擎控制台),点击创建API Key,名字可以随便起,也可以默认

之后你就会得到一个API Key

点击这个小眼睛,你就可以看到你的API Key(注:API Key要妥善保管,因为豆包大模型是赠送了一定数量的Token,用完了就是没了,需要充钱,如果你不造,自己用还是够用的)

建议在桌面创建一个文本,把apikey复制粘贴到文本中,因为kimi的apikey只显示一次,要及时复制下来

2、kimi API-Key

kimi是由月之暗面科技有限公司开发的,想要使用kimi,同理,得先注册一个账号

注册MoonShot账号

浏览器搜索Moonshot Ai,点击kimi开放平台(Moonshot AI 开放平台),点击登录注册,然后点击用户中心

点击右边的导航栏里面的API Key管理新建APIKey

点击新建,名字随便起,你就会获得一个自己的APIKey

注:kimi新注册的apikey只会出现一次,要记得及时保存下来!!!!保存在创建豆包apikey的时候叫你们创建的桌面文本里

(新用户能获得15元的赠送金额,我用了两三天,每天问那么四五个小问题,才用了0.05)

3、千问API-key

千问全名是通义千问,是阿里旗下的,同理,要想使用也要注册阿里云账号

注册阿里云百炼模型服务

访问阿里云百炼模型服务官网地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台,点击“管理控制台”,并同意服务协议。

如果是新用户,可以免费领取每个模型100万tokens的额度。点击“领取免费额度”,并确认开通服务。

创建API Key

在阿里云百炼控制台的右上角,把鼠标放到自己头像上,点击API-KEY

点击创建API-KEY,名字可以随便起

同样把它复制到之前桌面创建的那个文本中

二、准备工作

1、关于idea、jdk

我的idea版本是2024.3.3,jdk版本是jdk17.0.14,其它版本的也是可以的,版本号不能过低就行了,至于低于多少我也不清楚,但是jdk版本不能低于7(好像是?),如果你们发现有些问题解决不了的就要考虑是否是自己的版本过低。

查看自己jdk版本:

按下 Win + R 组合键,输入cmd并回车,在命令提示符窗口中输入java -version回车就可以查看自己的jdk版本

2、添加依赖

编写程序需要添加jar包,也可以用maven,但是我用的是jar包,所以这里以jar包为例

因为我用的是http请求和json数据格式的,所以需要下载关于http和Gson的java包

Http可以去官网下载对应的包(Apache HttpComponents – HttpComponents Downloads),同理,Gson也可以去官网下载对应的包(http://code.google.com/p/google-gson/)比较难进,不想去的话也可以通过我的百度网盘分享的文件下载:
链接:我的百度网盘
提取码:1688

至此,准备工作就差不多了。

3、编写程序

1、打开idea,新建一个项目,名字你随便命名,如我的叫AiAssistant

2、导入包:点击文件—项目结构—找到库—点击上面的+号—选择java—找到刚才下载的JAR包,全选,导入

结果

点击java文件,分别创建doubao、kimi、qianwen的文件夹

首先,在doubao文件夹上右键,点击新建java类,命名为DouBaoAssistant,kimi,千问同理

豆包代码(注:API_KEY换成你自己的豆包Api-key,就是上面注册申请的API-key)
package doubao;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class DouBaoAssistant {
    private static final String API_URL = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";
    private static final String API_KEY = "85216578********************";//换成你自己的APIKey
    private static final String MODEL_NAME = "doubao-pro-32k-240615"; //模型名称

    public static void GetAssistantResponse(){
        List<JsonObject> messages = new ArrayList<>();
        JsonObject systemMessage = new JsonObject();
        systemMessage.addProperty("role", "system");
        systemMessage.addProperty("content", "你是豆包,是由字节跳动开发的 AI 人工智能助手");
        messages.add(systemMessage);

        while (true) {
            System.out.print("你(输入“退出”退出豆包):");
            String userInput = new java.util.Scanner(System.in).nextLine();
            if ("退出".equalsIgnoreCase(userInput)) {
                break;
            }

            JsonObject userMessage = new JsonObject();
            userMessage.addProperty("role", "user");
            userMessage.addProperty("content", userInput);
            messages.add(userMessage);

            String response = sendRequest(messages);
            JsonObject assistantMessage = new JsonObject();
            assistantMessage.addProperty("role", "assistant");
            assistantMessage.addProperty("content", response);
            messages.add(assistantMessage);

            System.out.println("豆包: " + response);
        }
    }

    private static String sendRequest(List<JsonObject> messages) {
        HttpClient client = HttpClients.createDefault();
        HttpPost post = new HttpPost(API_URL);
        post.setHeader("Authorization", "Bearer " + API_KEY);
        post.setHeader("Content-Type", "application/json");

        JsonObject requestBody = new JsonObject();
        requestBody.addProperty("model", MODEL_NAME);
        requestBody.add("messages", new Gson().toJsonTree(messages));

        post.setEntity(new StringEntity(requestBody.toString(), "UTF-8"));

        String response = null;
        try {
            response = EntityUtils.toString(client.execute(post).getEntity());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        JsonObject jsonResponse = new Gson().fromJson(response, JsonObject.class);

        return jsonResponse.getAsJsonArray("choices").get(0).getAsJsonObject().get("message").getAsJsonObject().get("content").getAsString();
    }
}

kimi代码 (注:API_KEY换成你自己的Kimi Api-key,就是上面注册申请的API-key)
package kimi;
import com.google.gson.Gson;
import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.*;

class ChatCompletionResponse {
    String id;
    String object;
    long created;
    String model;
    List<Choice> choices;
    Usage usage;
}
class Choice {
    int index;
    Message message;
    String finish_reason;
}

class Message {
    String role;
    String content;
}

class Usage {
    int prompt_tokens;
    int completion_tokens;
    int total_tokens;
}

public  class KimiMultiTurnChat {
    private static final String API_URL = "https://api.moonshot.cn/v1/chat/completions";
   
    private final String apiKey ;
    private final HttpClient  httpClient;
    private final Gson gson;
    private final List<Map<String,String>> conversationHistory;

    public KimiMultiTurnChat(String apiKey){
        this.apiKey = apiKey;
        this.httpClient = HttpClients.createMinimal();
        this.gson = new Gson();
        this.conversationHistory = new ArrayList<>();
    }

    public String chatWithKimi(String model, String userMessage) throws IOException {

        //添加用户消息到对话历史
        Map<String,String> userMessageMap = new HashMap<>();
        userMessageMap.put("role", "user");
        userMessageMap.put("content", userMessage);
        conversationHistory.add(userMessageMap);

        // 构建请求体
        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("model", model);
        requestBody.put("messages", conversationHistory);

        // 将请求体转换为 JSON 字符串
        String jsonBody = gson.toJson(requestBody);

        // 创建 HttpPost 请求
        HttpPost httpPost = new HttpPost(API_URL);
        httpPost.setHeader("Authorization", "Bearer " + apiKey);
        httpPost.setHeader("Content-Type", "application/json");

         设置请求体为 JSON 数据
        StringEntity entity = new StringEntity(jsonBody.toString(), "UTF-8");
        httpPost.setEntity(entity);

        // 执行请求
        HttpResponse response = httpClient.execute(httpPost);

        //检查响应状态码
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != 200){
            String responseBody = EntityUtils.toString(response.getEntity());
            throw new IOException("请求失败,状态码:"+statusCode);
        }

        // 解析响应
        String responseBody = EntityUtils.toString(response.getEntity());
        ChatCompletionResponse chatResponse = gson.fromJson(responseBody, ChatCompletionResponse.class);
        String assistantMessage = chatResponse.choices.get(0).message.content;

        // 添加 Kimi 的回复到对话历史
        Map<String, String> assistantMessageMap = new HashMap<>();
        assistantMessageMap.put("role", "assistant");
        assistantMessageMap.put("content", assistantMessage);
        conversationHistory.add(assistantMessageMap);

        return assistantMessage;
    }

    public static void GetAssistantResponse(){
        //换成你自己的api-key
        String apiKey = "sk-lzo1mUJ******************************";
        KimiMultiTurnChat multiTurnChat = new KimiMultiTurnChat(apiKey);
        Scanner scanner = new Scanner(System.in);

        try{

            System.out.println("欢迎!");

            while (true){
                System.out.print("你(输入“退出”退出kimi):");
                String userMessage = scanner.nextLine();

                if("退出".equals(userMessage)){
                    System.out.println("对话结束");
                    break;
                }

                String response = multiTurnChat.chatWithKimi("moonshot-v1-8k",userMessage);
                //model:moonshot-v1-8k
                System.out.println("kimi:"+response);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally{
            //scanner.close();
        }
    }

}
千问代码**(注:API_KEY换成你自己的千问Api-key,就是上面注册申请的API-key)**
package qianwen;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class QianWenAssistant {

    
    private static final String API_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
    
    //换成你自己的api-key
    private static final String API_KEY = "sk-f3b0aa***********************";

    private static final String MODEL = "qwen-plus";

    public static String sendRequest(String question) {
        HttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(API_URL);

        // 设置请求头
        httpPost.setHeader("Authorization", "Bearer " + API_KEY);
        httpPost.setHeader("Content-Type", "application/json");

        // 构造请求体,添加 messages 参数
        List<Map<String, String>> messages = new ArrayList<>();
        Map<String, String> message = new HashMap<>();
        message.put("role", "user");
        message.put("content", question);
        messages.add(message);

        Map<String, Object> requestBody = new HashMap<>();
        requestBody.put("messages", messages);
        requestBody.put("model", MODEL);

        Gson gson = new Gson();
        String jsonBody = gson.toJson(requestBody);

        try {
            // 设置请求体为 JSON 数据
            StringEntity entity = new StringEntity(jsonBody, "UTF-8");
            httpPost.setEntity(entity);

            // 执行请求
            HttpResponse response = httpClient.execute(httpPost);
            int statusCode = response.getStatusLine().getStatusCode();

            HttpEntity responseEntity = response.getEntity();
            String responseBody = EntityUtils.toString(responseEntity);

            if (statusCode == 200) {

                return responseBody;
            } else {
                if (responseBody != null && !responseBody.isEmpty()) {
                    try {
                        // 解析错误响应体,获取错误代码和错误描述
                        JsonObject errorJson = gson.fromJson(responseBody, JsonObject.class);
                        if (errorJson != null && errorJson.has("error") && errorJson.getAsJsonObject("error").has("code") && errorJson.getAsJsonObject("error").has("message")) {
                            String errorCode = errorJson.getAsJsonObject("error").get("code").getAsString();
                            String errorMessage = errorJson.getAsJsonObject("error").get("message").getAsString();
                            System.err.println("请求失败,状态码: " + statusCode + ", 错误代码: " + errorCode + ", 错误信息: " + errorMessage);
                        } else {
                            System.err.println("请求失败,状态码: " + statusCode + ", 响应体: " + responseBody);
                        }
                    } catch (JsonSyntaxException e) {
                        System.err.println("请求失败,状态码: " + statusCode + ", 响应体非 JSON 格式: " + responseBody);
                    }
                } else {
                    System.err.println("请求失败,状态码: " + statusCode + ", 响应体为空");
                }
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String extractAnswer(String responseBody) {
        try {
            Gson gson = new Gson();
            JsonObject responseJson = gson.fromJson(responseBody, JsonObject.class);
            JsonArray choices = responseJson.getAsJsonArray("choices");
            if (choices != null && choices.size() > 0) {
                JsonObject firstChoice = choices.get(0).getAsJsonObject();
                JsonObject message = firstChoice.getAsJsonObject("message");
                return message.get("content").getAsString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void GetAssistantResponse(){

        Scanner scanner = new Scanner(System.in);
        boolean keepTalking = true;

        while (keepTalking) {
            System.out.print("你(输入“退出”退出千问):");
            String questionStr = scanner.nextLine();
            if("退出".equals(questionStr)){
                keepTalking = false;
            }else {
                String responseBody = sendRequest(questionStr);
                if(responseBody != null){
                    String answer = extractAnswer(responseBody);
                    if (answer != null) {
                        System.out.println("千问:" + answer);
                    }else {
                        System.out.println("千问:无法解析回答内容。");
                    }
                }else {
                    System.out.println("千问:请求出现问题,请稍后重试。");
                }
            }
        }
        //scanner.close();
    }
}
Main函数调用(你想在其它地方调用也行,这只是做个演示)
package org.example;

import doubao.DouBaoAssistant;
import kimi.KimiMultiTurnChat;
import qianwen.QianWenAssistant;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        System.out.println("输入1:唤醒豆包助手");
        System.out.println("输入2:唤醒kimi助手");
        System.out.println("输入3:唤醒千问助手");
        System.out.println("输入“4”退出程序");

        Scanner scanner = new Scanner(System.in);
        while (true) {

            String userMessage = scanner.nextLine();

            if("1".equals(userMessage)) {

                System.out.println("开始唤醒豆包助手");

                //调用豆包助手
                DouBaoAssistant.GetAssistantResponse();
            }else if("2".equals(userMessage)) {

                System.out.println("开始唤醒kimi助手");

                //调用kimi助手
                KimiMultiTurnChat.GetAssistantResponse();

            }else if("3".equals(userMessage)) {

                System.out.println("开始唤醒千问助手");
                
                //调用千问助手
                QianWenAssistant.GetAssistantResponse();

            } else if ("4".equals(userMessage)) {
                System.out.println("退出程序");
                break;
            } else {
                System.out.println("输入无效,请重新输入");
            }

            System.out.println("输入1:唤醒豆包助手");
            System.out.println("输入2:唤醒kimi助手");
            System.out.println("输入3:唤醒千问助手");
            System.out.println("输入“4”退出程序");
        }
        scanner.close();
    }
}
演示结果,如图所示,可以实现多轮对话,因为需要先获取服务器那边的回答才会呈现出来,所以回答如果是长文本的时候可能要等个几秒钟才会有答案,并不是程序卡了

结束语:因为我本身也不是专门写Java的,为什么写这篇文章,因为我本身也是一个24届刚毕业的,本职工作是C#工程师,因为开年没啥事干被我师傅抓去搭建ai平台,才摸索出来的,也碰了很多壁,有很多知识点都还不懂,想到如果我在大学时期如果需要搭建Ai平台能看到这篇文章我一定很开心,所以有什么写的不好不对的评论区我们一起探讨。

个人小建议:遇到问题就去问AI助手,AI助手给的解决问题的方式还是比较全面的,多尝试,不要怕碰壁。

大模型岗位需求

大模型时代,企业对人才的需求变了,AIGC相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
在这里插入图片描述

掌握大模型技术你还能拥有更多可能性

• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;

• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;

• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;

• 更优质的项目可以为未来创新创业提供基石。

可能大家都想学习AI大模型技术,也想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把全套AI技术和大模型入门资料、操作变现玩法都打包整理好,希望能够真正帮助到大家。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

零基础入门AI大模型

今天贴心为大家准备好了一系列AI大模型资源,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

有需要的小伙伴,可以点击下方链接免费领取【保证100%免费

点击领取 《AI大模型&人工智能&入门进阶学习资源包》*

1.学习路线图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果大家想领取完整的学习路线及大模型学习资料包,可以扫下方二维码获取
在这里插入图片描述
👉2.大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。(篇幅有限,仅展示部分)

img

大模型教程

👉3.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(篇幅有限,仅展示部分,公众号内领取)

img

电子书

👉4.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(篇幅有限,仅展示部分,公众号内领取)

img

大模型面试

**因篇幅有限,仅展示部分资料,**有需要的小伙伴,可以点击下方链接免费领取【保证100%免费

点击领取 《AI大模型&人工智能&入门进阶学习资源包》

**或扫描下方二维码领取 **

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一粟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值