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("");
        }
    }

}

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

相关推荐
Bode_200210 小时前
决策设计方法
人工智能·交互·智能工厂
玹外之音2 天前
Codex CLI 非交互模式:把 AI 接入你的 CI/CD 流水线
人工智能·ci/cd·交互
sramdram2 天前
语音识别芯片类别有哪些?离线语音识别芯片交互方案分析
人工智能·交互·语音识别·语音识别芯片·离线语音识别芯片
星辰徐哥3 天前
打破社媒营销信息差:具身交互智能打造全自动化KOL情报体系
运维·python·自动化·交互·react·数字人
qq_452396233 天前
第十一篇:《前端性能优化体系:从加载到交互的全链路》
前端·性能优化·交互
zcmodeltech4 天前
污水处理设备沙盘模型控制系统设计与实现:多单元协同联动方案
网络·分布式·stm32·单片机·嵌入式硬件·交互
工业HMI实战笔记4 天前
【拯救HMI】:工业自动化交互革命:HMI 触摸屏如何成为产线智能中枢
运维·自动化·交互
必须会一定会4 天前
AI 前端项目验收:Playwright 截图、响应式视口、控制台错误与交互回归
前端·人工智能·gpt·交互·ai编程
qq7422349844 天前
Gradio 极简入门:三分钟为AI模型打造交互界面,并对比Streamlit与Dash如何选型
人工智能·算法·大模型·交互·dash
k4m7v2pz5 天前
Bevy 0.14 系统调度顺序排查实录:ESC 菜单按钮交互失效的根因定位
交互