当前位置: 首页 > article >正文

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路径下,找到你需要新增哪个一级菜单下添加二级菜单,比如需要在我自己新增的一级菜单中添加二级菜单,关于如何添加一级菜单,可以在之前文章中进行学习,这里不再赘述,内容如下:

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助手的交互框,我们需要进行操作
第一步:新增触发事件,代码如下

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助手界面出发以后,我们需要对界面上的功能进行实现,代码如下

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

}

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


http://www.kler.cn/news/365719.html

相关文章:

  • 05方差分析续
  • ESlint代码规范
  • kafka 的高可用机制是什么?
  • qt creator 转 visual stdio 项目调试
  • Python学习路线:从新手到专家
  • 安全见闻---清风
  • 企业自建邮件系统选U-Mail ,功能强大、安全稳定
  • jenkins国内插件源
  • 深入解析 MySQL 数据库:更新和删除
  • 【Java小白图文教程】-05-数组和排序算法详解
  • docker 可用镜像服务地址(2024.10.25亲测可用)
  • 【ChatGPT插件漏洞三连发之二】零点击Github仓库接管
  • Visual 使用技巧合辑
  • 栅格的着色器实现【最完善】
  • 使用AutoDL训练YOLO等计算机视觉网络模型(AutoDL+Xftp+VS Code),附详细操作步骤
  • 打开Windows来体验AIGC或者ChatGPT
  • Python使用asyncio实现异步操作
  • 深度学习系列——RNN/LSTM/GRU,seq2seq/attention机制
  • AI学习指南自然语言处理篇-Transformer模型的编码器-解码器结构
  • OpenCV通道拆分:深入理解图像处理
  • Swift 是一种由苹果公司开发的强大而直观的编程语言,主要用于开发 iOS、macOS、watchOS 和 tvOS 等苹果平台的应用程序。
  • Spring Boot:植物健康监测的智能解决方案
  • Spring Boot框架下的Java多线程
  • 【继承】讲解
  • Halcon图像颜色通道拆分合并与四则运算
  • Matlab中实现智能优化算法的平均排序图