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

news/2024/10/25 12:25:15/

前期准备工作

零一万物官网:https://www.01.ai/cn
零一万物大模型开放平台:https://platform.lingyiwanwu.com/

选择理由

性价比高很高,模型整体不错,新用户送60元,非常适合研究学习。
在这里插入图片描述

开发

只提供了http接口和python的sdk。
所以Java如果想使用,可以采用http接口调用。

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 {@AutowiredRestTemplate 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跟进实际情况进行替换
设置历史对话保留三轮,超出部分会移除,加入新对话,可根据实际情况调整

测试结果

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

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


http://www.ppmy.cn/news/1429566.html

相关文章

针对窗口数量多导致窗口大小显示受限制的问题,使用滚动条控制窗口

建议&#xff1a;首先观察结果展示&#xff0c;判断是否可以满足你的需求。 目录 1. 问题分析 2. 解决方案 2.1 界面设计 2.2 生成代码 2.3 源码实现 3. 结果展示 1. 问题分析 项目需要显示的窗口数量颇多&#xff0c;主界面中&#xff0c;如果一次性显示全部窗口&#x…

案例一:分析ARP解析过程

1、实验环境 主机A和主机B连接到交换机&#xff0c;并与一台路由器互连&#xff0c;如图7.17所示&#xff0c;路由器充当网关。 图7.17 实验案例一示意图 2、需求描述 查看 ARP 相关信息,熟悉在PC 和 Cisco 设备上的常用命令,设置主机A和主机B为同一个网段网关设置为路由接口…

R语言使用installr包对R包进行整体迁移

今天分享一个R语言的实用小技巧&#xff0c;如果咱们重新安装了电脑&#xff08;我重装了电脑&#xff09;或者因为需要卸载旧版本的R软件&#xff0c;安装新版本的R&#xff0c;那么必然会造成R包的库缺失&#xff0c;需要重新下载&#xff0c;有些还不是官方的R包&#xff0c…

文本嵌入新方案:合合信息acge模型荣登C-MTEB榜首

目录 0 写在前面1 文本嵌入&#xff1a;LLM落地的根基2 C-MTEB&#xff1a;acge荣夺榜一2.1 max tokens2.2 文本分类2.3 文本聚类 3 acge demo演示与体验总结 0 写在前面 随着信息技术的发展和应用场景的不断扩大&#xff0c;人们需要处理和利用大量的文档信息。而传统的手动处…

.NET/C#汇总 —— WPF

1.WPF由哪两部分组成? wpf 由两个主要部分 组成:引擎和编程框架。 1 引擎。wpf引擎是基于窗体的应⽤程序 图形 视频 ⾳频和⽂档提供了⼀个单⼀的运⾏时库。重要的是 WPF基于⽮量的呈现引擎使应⽤程序可以灵活地利⽤⾼DPI监视器,⽀持图形的硬件加速。2 框架。WPF框架为媒体 …

Spring Boot集成Https快速入门Demo

1.什么是https? HTTPS&#xff0c;也称作HTTP over TLS。TLS的前身是SSL&#xff0c;TLS 1.0通常被标示为SSL 3.1&#xff0c;TLS 1.1为SSL 3.2&#xff0c;TLS 1.2为SSL 3.3 HTTPS和HTTP协议相比提供了 数据完整性&#xff1a;内容传输经过完整性校验数据隐私性&#xff1a;内…

配置路由器实现互通

1.实验环境 实验用具包括两台路由器(或交换机)&#xff0c;一根双绞线缆&#xff0c;一台PC&#xff0c;一条Console 线缆。 2.需求描述 如图6.14 所示&#xff0c;将两台路由器的F0/0 接口相连&#xff0c;通过一台PC 连接设备的 Console 端口并配置P地址&#xff08;192.1…

鸿蒙入门10-CheckBoxGroup组件

复选框群组 用于控制多个复选框全选或者不全选状态 参数 参数形式 &#xff1a; CheckboxGroup( options?: { group?: string } ) 创建复选框群组&#xff0c;可以用于控制群组内的 CheckBox 成员 全选 或者 不全选 相同 group 的 CheckBox 和 CheckBoxGroup 为同一群组 参…