SpringBoot整合零一万物模型API进行多轮对话

前期准备工作

零一万物官网:https://www.01.ai/cn

零一万物大模型开放平台:https://platform.lingyiwanwu.com/

选择理由

性价比高很高,模型整体不错,新用户送60元,非常适合研究学习。

开发

只提供了http接口和python的sdk。

所以Java如果想使用,可以采用http接口调用。

java 复制代码
package com.hao.controller;

import cn.hutool.json.JSONUtil;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

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

@RestController
public class TestController {
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/admin/test")
    public Object test(String[] args) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setBearerAuth("{your-own-key}");
        Input input = new Input();
        input.setModel("yi-34b-chat-0205");
        input.setTemperature(0.7);

        List<Message> messages = new ArrayList<>();

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("You:请输入...(exit退出)");
            String question = sc.next();
            if ("exit".equals(question)) {
                break;
            }
            if (messages.size() == 7) {
                messages.remove(0);
            }
            Message message = new Message();
            message.setContent(question);
            message.setRole("user");
            messages.add(message);
            input.setMessages(messages);

            HttpEntity<Input> httpEntity = new HttpEntity<>(input,headers);
            ResponseEntity<Object> obj = restTemplate.postForEntity("https://api.lingyiwanwu.com/v1/chat/completions", httpEntity, Object.class);

            // 添加assistant返回到messages列表,user/assistant消息必须交替出现
            if (messages.size() == 7) {
                messages.remove(0);
            }
//            System.out.println(obj.getBody());
            String content = JSONUtil.parseObj(obj.getBody()).getByPath("choices.0.message.content", String.class);
            Message message1 = new Message();
            message1.setContent(content);
            message1.setRole("assistant");
            messages.add(message1);
            System.out.println("Assistant: " + content);

        }

        return "OK";
    }
}

@Data
class Input{
    private String model;
    private Double temperature;
    private List<Message> messages;
}

@Data
class Message{
    private String content;
    private String role;
}

需将模型、key跟进实际情况进行替换

设置历史对话保留三轮,超出部分会移除,加入新对话,可根据实际情况调整

测试结果

shell 复制代码
You:请输入...(exit退出)
西红柿炒鸡蛋的做饭?
Assistant: 西红柿炒鸡蛋是一道简单而美味的家常菜,下面是它的基本做法:

材料:
- 西红柿 2-3个
- 鸡蛋 2-3个
- 大蒜 2-3瓣,切末
- 盐 适量
- 白糖 适量(可选)
- 植物油 适量

做法:
1. 西红柿洗净,切成小块或片状。如果西红柿比较硬,可以先用沸水烫一下,使其更容易剥皮和切块。
2. 将鸡蛋打入碗中,加入少许盐,用筷子或打蛋器打散,使蛋液均匀。
3. 热锅凉油,油温升高后倒入打好的鸡蛋液,待底部凝固后,用铲子轻轻推动,使鸡蛋液均匀受热,形成蛋块,然后盛出备用。
4. 锅中再加入少许油,放入大蒜末炒香。
5. 加入切好的西红柿块,翻炒均匀。
6. 根据个人口味,加入适量盐和白糖调味(如果西红柿比较酸,可以适当加一点糖来中和)。
7. 西红柿炒软后,加入之前炒好的鸡蛋块,快速翻炒均匀,使鸡蛋块吸收西红柿的汁液。
8. 炒至西红柿完全软烂,鸡蛋块均匀裹上西红柿汁即可出锅。

这道菜酸甜适口,色彩鲜艳,非常开胃。你可以根据个人口味调整西红柿和鸡蛋的比例,以及糖和盐的用量。如果你喜欢口感更浓郁的,可以在炒西红柿的时候加一点番茄酱。
You:请输入...(exit退出)
不放西红柿可以吗?
Assistant: 当然可以。不放西红柿的话,这道菜就变成了单纯的炒鸡蛋。以下是基本的炒鸡蛋做法:

材料:
- 鸡蛋 2-3个
- 盐 适量
- 植物油 适量

做法:
1. 将鸡蛋打入碗中,加入少许盐,用筷子或打蛋器打散,使蛋液均匀。
2. 热锅凉油,油温升高后倒入打好的鸡蛋液,待底部凝固后,用铲子轻轻推动,使鸡蛋液均匀受热,形成蛋块。
3. 待鸡蛋块成型后,用铲子继续翻炒,使鸡蛋块大小均匀。
4. 炒至鸡蛋块完全熟透,表面金黄即可出锅。

如果你想要更多的风味,可以在炒鸡蛋的时候加入一些其他蔬菜或者调料,比如葱花、火腿丁、辣椒等,增加口感和风味。
You:请输入...(exit退出)
一份可以卖多少钱?
Assistant: 西红柿炒鸡蛋的价格会根据所在地区、餐厅档次、原料质量和份量等因素而有所不同。在中国的大部分地区,如果是在街边小店或者快餐店,这样一份简单的西红柿炒鸡蛋价格可能在10-20元人民币左右。在中高档餐厅,同样的菜品价格可能会翻倍甚至更高。

在其他国家和地区,价格也会有所不同。例如,在美国的中餐馆,一份西红柿炒鸡蛋的价格可能在8-15美元之间。在欧洲或者澳大利亚等地,价格可能会更高。

需要注意的是,这只是一个大致的价格范围,具体价格还需根据当地市场情况来确定。此外,如果是在家中自己烹饪,成本会低很多,因为不需要考虑租金、人工、税费等额外开支。
You:请输入...(exit退出)
exit

最后,感谢李开复及其团队。

相关推荐
喃寻~19 分钟前
java学习总结(八):Spring boot
java·spring boot·学习
揣晓丹32 分钟前
JAVA实战开源项目:共享汽车管理系统(Vue+SpringBoot) 附源码
java·开发语言·vue.js·spring boot·开源
zhyoobo1 小时前
Spring Boot 性能优化:如何解决高并发下的瓶颈问题?
spring boot·后端·性能优化
一个处女座的程序猿2 小时前
LLMs之CoTM:《Detecting misbehavior in frontier reasoning models》翻译与解读
llm·cotm
一瓢一瓢的饮 alanchan2 小时前
通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(一)
人工智能·spring boot·单元测试·压力测试·jpa·aicoder·java crud
大模型铲屎官3 小时前
从过拟合到强化学习:机器学习核心知识全解析
人工智能·python·机器学习·llm·scikit-learn·强化学习·过拟合
tan_jianhui3 小时前
用maven生成springboot多模块项目
java·spring boot·maven
山海不说话3 小时前
从零搭建微服务项目Pro(第6-1章——Spring Security+JWT实现用户鉴权访问与token刷新)
spring boot·后端·spring·spring cloud·微服务·架构
韩曙亮4 小时前
【AI 大模型】RAG 检索增强生成 ⑤ ( 向量数据库 | 向量数据库 索引结构和搜索算法 | 常见 向量数据库 对比 | 安装并使用 向量数据库 chromadb 案例 )
数据库·人工智能·大模型·openai·向量数据库·ai大模型·chromadb
skywalk81634 小时前
使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b或DeepSeek-r1:1.5b 模型(完成度80%)
人工智能·python·大模型·paddlenlp