奔波儿灞爱霸波尔奔

奔波儿灞爱霸波尔奔

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

需求描述

我们需要实现如下业务
1.在JMeter的一级菜单下面,生产一个AI Assistant的二级菜单
JMeter与大模型融合应用之JMeter创建二级菜单的简单大模型交互-LMLPHP
2.点击AI Assistant能够弹出AI助手弹框
3.输入内容以后,大模型能够进行回答
JMeter与大模型融合应用之JMeter创建二级菜单的简单大模型交互-LMLPHP

业务实现

增加菜单

第一步:在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("");
        }
    }

}

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

10-23 10:31