JMeter与大模型融合应用之JMeter创建二级菜单的简单大模型交互

JMeter与大模型融合应用之JMeter创建二级菜单的简单大模型交互

需求描述

我们需要实现如下业务

1.在JMeter的一级菜单下面,生产一个AI Assistant的二级菜单

2.点击AI Assistant能够弹出AI助手弹框

3.输入内容以后,大模型能够进行回答

业务实现

增加菜单

第一步:在org\apache\jmeter\gui\action\ActionNames.java路径下新增如下代码

public static final String AI_ASSISTANT = "ai_assistant"; //

第二步:在org/apache/jmeter/gui/util/JMeterMenuBar.java路径下,找到你需要新增哪个一级菜单下添加二级菜单,比如需要在我自己新增的一级菜单中添加二级菜单,关于如何添加一级菜单,可以在之前文章中进行学习,这里不再赘述,内容如下:

java 复制代码
private void makeTCMenu(){
        //中间代码省略
        TCMenu = makeMenuRes("config_tc_tools",'C'); //$NON-NLS-1$
        //中间代码省略
        JMenuItem aiAssistant = makeMenuItemRes("ai_assistant", ActionNames.AI_ASSISTANT);//$NON-NLS-1$
        //中间代码省略
        TCMenu.add(aiAssistant);
        //中间代码省略
    }

至此二级菜单设置完毕。

增加点击菜单事件

当面点击以后,我们需要跳出AI助手的交互框,我们需要进行操作

第一步:新增触发事件,代码如下

java 复制代码
import org.apache.jmeter.gui.action.AbstractAction;
import org.apache.jmeter.gui.action.ActionNames;
import org.apache.jmeter.sptp.gui.ChatWindow;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;


public class AIAssistant extends AbstractAction {

    //设置事件
    private static final Logger log = LoggerFactory.getLogger(AIAssistant.class);
    private static final Set<String> commandSet;
    static {
        Set<String> commands = new HashSet<>();
        commands.add(ActionNames.AI_ASSISTANT);
        commandSet = Collections.unmodifiableSet(commands);
    }

    //获取事件列表
    @Override
    public Set<String> getActionNames(){
        return  AIAssistant.commandSet;
    }

    //对应动作信息
    @Override
    public void doAction(ActionEvent e){
        if(e.getActionCommand().equals(ActionNames.AI_ASSISTANT)){
            SwingUtilities.invokeLater(() -> new ChatWindow());
        }
    }
}

AI助手交互

当我们有对应的AI助手界面出发以后,我们需要对界面上的功能进行实现,代码如下

java 复制代码
import org.apache.jmeter.sptp.business.Qwen;
import org.apache.jmeter.util.JMeterUtils;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChatWindow extends JFrame {
    private JTextArea chatArea;
    private JTextArea inputArea;
    private JButton sendButton;
    private JButton clearButton;

    public ChatWindow() {
        super("AI助手");
        setIconImage(JMeterUtils.getImage("AI.png").getImage());
        setLayout(new BorderLayout());
        setSize(500, 400);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        // 创建聊天区域
        chatArea = new JTextArea();
        chatArea.setEditable(false);
        chatArea.setLineWrap(true); // 设置自动换行
        chatArea.setWrapStyleWord(true); // 设置单词级别的换行
        JScrollPane scrollPane = new JScrollPane(chatArea);
        add(scrollPane, BorderLayout.CENTER);

        // 创建输入区域
        inputArea = new JTextArea(3, 20);
        inputArea.setLineWrap(true);
        inputArea.setWrapStyleWord(true);
        JScrollPane inputScrollPane = new JScrollPane(inputArea);
        inputScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        inputScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        // 创建发送按钮
        sendButton = new JButton("发送内容");
        sendButton.addActionListener(new SendActionListener());

        // 创建清空按钮
        clearButton = new JButton("清空内容");
        clearButton.addActionListener(new ClearActionListener());

        // 创建按钮面板
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(sendButton);
        buttonPanel.add(clearButton);

        // 创建输入面板
        JPanel inputPanel = new JPanel();
        inputPanel.add(inputScrollPane);
        inputPanel.add(buttonPanel);

        add(inputPanel, BorderLayout.SOUTH);

        // 设置窗口居中显示
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private class SendActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String message = inputArea.getText();
            if (!message.isEmpty()) {
                chatArea.append("你:" + message + "\n");
                inputArea.setText("");
                new SwingWorker<String, Void>() {
                    @Override
                    protected String doInBackground() throws Exception {
                        setTitle("AI助手正在思考中...");
                        setIconImage(JMeterUtils.getImage("thinking.png").getImage());
                        Qwen qwen = new Qwen();
                        return qwen.QwenAI(message);
                    }

                    @Override
                    protected void done() {
                        try {
                            String result = get();
                            chatArea.append("大模型:" + result + "\n");
                            setTitle("AI助手");
                            setIconImage(JMeterUtils.getImage("AI.png").getImage());
                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }
                    }
                }.execute();
                setTitle("AI助手");
                setIconImage(JMeterUtils.getImage("AI.png").getImage());
            }
        }
    }

    private class ClearActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            chatArea.setText("");
        }
    }

}

至此我们就实现了上述的需求内容

相关推荐
海姐软件测试1 天前
Postman参数化设置如何设置?
开发语言·jmeter
江上清风山间明月1 天前
一周掌握Flutter开发--9. 与原生交互(下)
flutter·交互·原生·methodchannel
lifewange1 天前
Jmeter面试题
jmeter
一棵树长得超出它自己1 天前
jmeter if控制器在loop控制器执行结束后执行
前端·jmeter
chen_song_2 天前
WebRTC的ICE之TURN协议的交互流程中继转发Relay媒体数据的turnserver的测试
算法·音视频·webrtc·交互·媒体
zzhz9252 天前
Jmeter(性能指标、指标插件、测试问题、面试题、讲解稿)
java·jvm·jmeter
熙客2 天前
Jmeter-负载测试
jmeter·压力测试
ylatin2 天前
jmeter web压力测试 压测
jmeter·压力测试
Julian.zhou3 天前
MCP服务:五分钟实现微服务治理革命,无缝整合Nacos/Zookeeper/OpenResty
人工智能·微服务·zookeeper·交互·openresty
zzhz9253 天前
Jmeter操作(数据库)
数据库·jmeter