山东大学软件学院项目实训-创新实训-基于大模型的旅游平台 汇总(五)

 一、引言

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

二、代码解析

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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值