赞
踩
一、引言
随着人工智能技术的飞速发展,大模型在自然语言处理、图像生成等领域的应用日益广泛。文心一言作为百度推出的一款大型语言模型,具备强大的文本生成、理解和匹配能力。在旅游领域,我们可以利用文心一言生成旅游方案、问答对话以及旅游风景图片。本文将针对一款调用文心一言大模型实现旅游方案生成、问答对话和旅游风景图片生成的代码进行详细解析。
二、代码解析
1.包引用
代码中引入了hutool和fastjson两个依赖,分别用于简化http请求和JSON数据的处理。
2.控制器类
控制器类YiYanController中定义了四个GetMapping接口,分别用于处理旅游方案生成、旅游风景图片生成、旅游问答和文心一言单次对话。
3.获取AccessToken
在获取AccessToken的方法中,通过API_KEY和SECRET_KEY向百度千帆大模型应用的身份验证接口发送请求,获取访问令牌。
4.单次对话接口
单次对话接口中,我们使用了ERNIE-Bot 3.5-8k模型,通过构造请求体,发送用户输入的信息,并接收模型返回的结果。
5.旅游方案生成
在旅游方案生成接口中,我们根据用户输入的信息,构造了一个详细的旅游计划,并通过HTML语言格式输出。在构造请求体时,我们严格按照API要求的格式进行,以便于模型能够准确理解并生成相应的内容。
6.旅游风景图片生成
在旅游风景图片生成接口中,我们使用了Stable-Diffusion-XL模型,根据用户输入的描述生成相应的旅游景点照片。在构造请求体时,我们设置了prompt、negative_prompt和style等参数,以便于模型能够生成符合要求的图片。
7.旅游问答
在旅游问答接口中,我们模拟了一个专业的旅游导游,针对用户提出的问题进行解答。同样地,我们通过构造请求体,发送问题,并接收模型返回的答案。
三、代码详解
1.包引用
在代码的开头,我们引入了hutool和fastjson两个依赖。hutool是一个小而全的Java工具类库,它简化了http请求的操作。fastjson是阿里巴巴开源的一个高性能的JSON处理库,它提供了JSON数据的序列化和反序列化功能。
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.68</version>
- </dependency>
2.控制器类
控制器类YiYanController中定义了四个GetMapping接口,分别用于处理旅游方案生成、旅游风景图片生成、旅游问答和文心一言单次对话。这些接口通过@RequestMapping注解映射到不同的URL路径。
- /**
- * 文心一言 千帆大模型调用
- *
- * @date 2024年02月07日 17:34
- */
- @RestController
- @RequestMapping("/yiyan")
- public class YiYanController {
3.获取AccessToken
在获取AccessToken的方法中,我们通过API_KEY和SECRET_KEY向百度千帆大模型应用的身份验证接口发送请求,获取访问令牌。这个访问令牌将在后续的请求中作为身份验证的凭证。
- public String getAccessToken() {
- String url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY;
- Map map = JSONObject.parseObject(HttpUtil.get(url), Map.class);
- return map.get("access_token").toString();
- }
4.单次对话接口
单次对话接口中,我们使用了ERNIE-Bot 3.5-8k模型。首先,我们构造了一个请求体,包含了用户的输入信息。然后,我们将这个请求体转换为JSON格式的字符串,并通过HttpUtil.post方法发送到文心一言的API接口。最后,我们接收模型返回的结果,并将其转换为字符串格式返回给前端。
- /**
- * 文心一言单次对话接口
- * @param messages
- * @return
- */
- @GetMapping("/send")
- public String send(String messages) {
- // ERNIE-4.0-8K
- // String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + getAccessToken();
-
- // ERNIE-Bot 3.5-8k
- String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + getAccessToken();
- HashMap<String, String> msg = new HashMap<>();
- msg.put("role", "user");
- msg.put("content", messages);
- ArrayList<HashMap> messagesList = new ArrayList<>();
- messagesList.add(msg);
- HashMap<String, Object> requestBody = new HashMap<>();
- requestBody.put("messages", messagesList);
-
- String parame = JSON.toJSONString(requestBody);
- Map map = JSONObject.parseObject(HttpUtil.post(url, parame), Map.class);
- return map.get("result").toString();
- }
5.旅游方案生成
在旅游方案生成接口中,我们根据用户输入的信息,构造了一个详细的旅游计划,并通过HTML语言格式输出。我们首先构造了一个包含用户输入的字符串travelMessage,然后将其作为参数调用send方法,发送到文心一言的API接口。最后,我们将模型返回的结果转换为字符串格式返回给前端。
- /**
- * 标准格式旅游方案生成
- * @param messages
- * @return
- */
- @GetMapping("/travelPlan")
- public String travelPan(String messages) {
- String travelMessage = "作为一个旅游爱好者,帮我制定一个详细周全的旅游计划(不少于500字),并用HTML语言格式输出,,只生成html语言格式即可,不需要其他解释语言,不许用Markdown,排版规整,严格按照以下格式内容输出:旅游计划名称:xxx,出发地:xxx,目的地:xxx,交通方式:xxx,旅游行程:xxx,注意事项:xxx,本次生成的旅游方案内容是:"+ messages;
- String result = send(travelMessage);
- // Map<String, String> resultMap = new HashMap<>();
- // resultMap.put("result", result);
- System.out.println(result);
- return result;
- }
6.旅游风景图片生成
在旅游风景图片生成接口中,我们使用了Stable-Diffusion-XL模型。我们首先构造了一个包含用户输入的字符串travelMessage,然后将其作为参数调用textToImage方法,发送到文心一言的API接口。最后,我们将模型返回的结果转换为JSONObject格式返回给前端。
- /**
- * 标准格式生成旅游风景配图
- * @param messages
- * @return
- */
- @GetMapping("/travelImage")
- public JSONObject travelImage(String messages) {
- String travelMessage = "按照下面要求生成旅游景点照片:"+ messages;
- JSONObject jsonObject = textToImage(travelMessage);
- return jsonObject;
- }
7.旅游问答
在旅游问答接口中,我们模拟了一个专业的旅游导游,针对用户提出的问题进行解答。我们首先构造了一个包含用户输入的字符串travelMessage,然后将其作为参数调用send方法,发送到文心一言的API接口。最后,我们将模型返回的结果转换为字符串格式返回给前端。
- /**
- * 旅游问答
- * @param messages
- * @return
- */
- @GetMapping("/travelPlanChat")
- public String travelPlanChat(String messages) {
- String travelMessage = "作为一个专业的旅游导游,深入了解旅游方案的各类问题,帮我解答一下如下问题:"+ messages;
- String result = send(travelMessage);
- // Map<String, String> resultMap = new HashMap<>();
- // resultMap.put("result", result);
- return result;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。