qwen-vl-chat-v1多轮会话(附ajax)

在这里插入图片描述

后端

环境:springboot

ai版本:qwen-vl-chat-v1(免费)

apikey:安装DashScope SDK(DashScope SDK

通义千问VL:官方文档

application.properties

qwkey=你自己的apikey
public class QwController {

    private final static String BANBEN = "qwen-vl-chat-v1";
    @Value("${qwkey}")
    private String apikey;

    @PostMapping("/callWithMessage")
    public Object callWithMessage(HttpServletRequest request) throws ApiException, NoApiKeyException, UploadFileException, JsonProcessingException {

        Map dataMap = new HashMap();
        String code = "000";
        String messge = "成功";
        String data = "";
        Constants.apiKey = apikey;

        MultiModalConversation conv = new MultiModalConversation();
        ObjectMapper mapper = new ObjectMapper();
        List<Map<String, Object>> messageList = new ArrayList<>();
        List<MultiModalConversationMessage> messages = new ArrayList<>();

        String message = request.getParameter("message");
        String memory = request.getParameter("memory"); // 记忆
        String img = request.getParameter("img");

        if (memory!=null&!"".equals(memory)) {
            messageList = mapper.readValue(memory,
                    TypeFactory.defaultInstance().constructCollectionType(List.class, Map.class));
        }

        Map<String,Object> userMap = new HashMap<>();

        userMap.put("role",Role.USER.getValue());
        userMap.put("text",message);
        userMap.put("img",img);
        messageList.add(userMap);

        for (Map<String,Object> map :messageList){
            String role1 = map.get("role").toString();
            String msg1 = map.get("text").toString();
            String img1 = map.get("img").toString();
            MultiModalMessageItemText userText = new MultiModalMessageItemText(msg1);

            if (img1!=null&!"".equals(img1)){
                messages.add(MultiModalConversationMessage.builder().role(role1)
                        .content(Arrays.asList(userText)).build());
            }else {
                MultiModalMessageItemImage userImg = new MultiModalMessageItemImage(img1);
                messages.add( MultiModalConversationMessage.builder().role(Role.USER.getValue())
                        .content(Arrays.asList(userImg, userText)).build());
            }
        }

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .model(BANBEN)
                .messages(messages)
                .build();

        param.setMessages(new ArrayList<Object>(messages));
        MultiModalConversationResult result = conv.call(param);

        //调用保存记忆传到前台
        Map<String,Object> assistentMap = new HashMap<>();
        assistentMap.put("role",Role.ASSISTANT.getValue());
        assistentMap.put("text",result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text").toString());
        messageList.add(assistentMap);

        dataMap.put("code",code);
        dataMap.put("megges",result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text").toString());
        dataMap.put("memory",messageList);
        String resultString = JSONObject.toJSONString(dataMap, SerializerFeature.WriteMapNullValue);
        return resultString;
    }

Js 前端页面

function sendToServer(message) {
			//记忆代码
            var memoryData = localStorage.getItem('memory');
            $.ajax({
                url: '../qw/callWithMessage',
                method: 'POST',
                data: {
                    "message":message,
                    "memory":memoryData
                },
                contentType: 'application/x-www-form-urlencoded',
                success: function(response) {
                    var jsonResponse = JSON.parse(response);
                    const reply = jsonResponse.megges;
                    //把记忆存在本地
                    localStorage.setItem('memory', JSON.stringify(jsonResponse.memory));
                    appendMessage(reply, 'ai-message');

                },
                error: function(error) {
                    console.error('Error:', error);
                }
            });
        }
        

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值