当前位置:   article > 正文

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(十四)_基于大模型的文旅应用实践

基于大模型的文旅应用实践

一、引言

随着人工智能技术的飞速发展,大模型在自然语言处理、图像生成等领域的应用日益广泛。文心一言作为百度推出的一款大型语言模型,具备强大的文本生成、理解和匹配能力。在旅游领域,我们可以利用文心一言生成旅游方案、问答对话以及旅游风景图片。本文将针对一款调用文心一言大模型实现旅游方案生成、问答对话和旅游风景图片生成的代码进行详细解析。

二、代码解析

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数据的序列化和反序列化功能。

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.68</version>
  5. </dependency>

2.控制器类

控制器类YiYanController中定义了四个GetMapping接口,分别用于处理旅游方案生成、旅游风景图片生成、旅游问答和文心一言单次对话。这些接口通过@RequestMapping注解映射到不同的URL路径。

  1. /**
  2. * 文心一言 千帆大模型调用
  3. *
  4. * @date 2024年02月07日 17:34
  5. */
  6. @RestController
  7. @RequestMapping("/yiyan")
  8. public class YiYanController {

3.获取AccessToken

在获取AccessToken的方法中,我们通过API_KEY和SECRET_KEY向百度千帆大模型应用的身份验证接口发送请求,获取访问令牌。这个访问令牌将在后续的请求中作为身份验证的凭证。

  1. public String getAccessToken() {
  2. String url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY;
  3. Map map = JSONObject.parseObject(HttpUtil.get(url), Map.class);
  4. return map.get("access_token").toString();
  5. }

4.单次对话接口

单次对话接口中,我们使用了ERNIE-Bot 3.5-8k模型。首先,我们构造了一个请求体,包含了用户的输入信息。然后,我们将这个请求体转换为JSON格式的字符串,并通过HttpUtil.post方法发送到文心一言的API接口。最后,我们接收模型返回的结果,并将其转换为字符串格式返回给前端。

  1. /**
  2. * 文心一言单次对话接口
  3. * @param messages
  4. * @return
  5. */
  6. @GetMapping("/send")
  7. public String send(String messages) {
  8. // ERNIE-4.0-8K
  9. // String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + getAccessToken();
  10. // ERNIE-Bot 3.5-8k
  11. String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + getAccessToken();
  12. HashMap<String, String> msg = new HashMap<>();
  13. msg.put("role", "user");
  14. msg.put("content", messages);
  15. ArrayList<HashMap> messagesList = new ArrayList<>();
  16. messagesList.add(msg);
  17. HashMap<String, Object> requestBody = new HashMap<>();
  18. requestBody.put("messages", messagesList);
  19. String parame = JSON.toJSONString(requestBody);
  20. Map map = JSONObject.parseObject(HttpUtil.post(url, parame), Map.class);
  21. return map.get("result").toString();
  22. }

5.旅游方案生成

在旅游方案生成接口中,我们根据用户输入的信息,构造了一个详细的旅游计划,并通过HTML语言格式输出。我们首先构造了一个包含用户输入的字符串travelMessage,然后将其作为参数调用send方法,发送到文心一言的API接口。最后,我们将模型返回的结果转换为字符串格式返回给前端。

  1. /**
  2. * 标准格式旅游方案生成
  3. * @param messages
  4. * @return
  5. */
  6. @GetMapping("/travelPlan")
  7. public String travelPan(String messages) {
  8. String travelMessage = "作为一个旅游爱好者,帮我制定一个详细周全的旅游计划(不少于500字),并用HTML语言格式输出,,只生成html语言格式即可,不需要其他解释语言,不许用Markdown,排版规整,严格按照以下格式内容输出:旅游计划名称:xxx,出发地:xxx,目的地:xxx,交通方式:xxx,旅游行程:xxx,注意事项:xxx,本次生成的旅游方案内容是:"+ messages;
  9. String result = send(travelMessage);
  10. // Map<String, String> resultMap = new HashMap<>();
  11. // resultMap.put("result", result);
  12. System.out.println(result);
  13. return result;
  14. }

6.旅游风景图片生成

在旅游风景图片生成接口中,我们使用了Stable-Diffusion-XL模型。我们首先构造了一个包含用户输入的字符串travelMessage,然后将其作为参数调用textToImage方法,发送到文心一言的API接口。最后,我们将模型返回的结果转换为JSONObject格式返回给前端。

  1. /**
  2. * 标准格式生成旅游风景配图
  3. * @param messages
  4. * @return
  5. */
  6. @GetMapping("/travelImage")
  7. public JSONObject travelImage(String messages) {
  8. String travelMessage = "按照下面要求生成旅游景点照片:"+ messages;
  9. JSONObject jsonObject = textToImage(travelMessage);
  10. return jsonObject;
  11. }

7.旅游问答

在旅游问答接口中,我们模拟了一个专业的旅游导游,针对用户提出的问题进行解答。我们首先构造了一个包含用户输入的字符串travelMessage,然后将其作为参数调用send方法,发送到文心一言的API接口。最后,我们将模型返回的结果转换为字符串格式返回给前端。

  1. /**
  2. * 旅游问答
  3. * @param messages
  4. * @return
  5. */
  6. @GetMapping("/travelPlanChat")
  7. public String travelPlanChat(String messages) {
  8. String travelMessage = "作为一个专业的旅游导游,深入了解旅游方案的各类问题,帮我解答一下如下问题:"+ messages;
  9. String result = send(travelMessage);
  10. // Map<String, String> resultMap = new HashMap<>();
  11. // resultMap.put("result", result);
  12. return result;
  13. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/1011769
推荐阅读
相关标签
  

闽ICP备14008679号