Skip to content

Commit bf4b62c

Browse files
committed
针对提出的问题,完善了一下ai设置页面
1 parent 5029b9d commit bf4b62c

File tree

1 file changed

+55
-88
lines changed

1 file changed

+55
-88
lines changed

jadx-gui/src/main/java/jadx/gui/ui/dialog/AiSettingDialog.java

Lines changed: 55 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@
2424
import javax.swing.JLabel;
2525
import javax.swing.JPanel;
2626
import javax.swing.JTextField;
27+
import javax.swing.JTextArea;
2728
import javax.swing.border.EmptyBorder;
29+
import javax.swing.border.LineBorder;
30+
import java.awt.Color;
2831

2932
import jadx.gui.settings.JadxSettings;
3033

@@ -48,7 +51,8 @@ public AiSettingDialog(Window owner,JadxSettings settings) {
4851
apiUrlField.setText(settings.getAiApi()==null?"":settings.getAiApi());
4952
apiKeyField.setText(settings.getAiApiKey()==null?"":settings.getAiApiKey());
5053
modelField.setText(settings.getAiModel()==null?"":settings.getAiModel());
51-
maxTokenField.setText(settings.getAiMaxTokens()==null?"":settings.getAiMaxTokens());
54+
settings.setAiMaxTokens("4096");
55+
maxTokenHelpText.setText("固定使用4096 Token,此值已针对代码分析优化");
5256
}
5357

5458
private void button1MouseClicked(MouseEvent e) {
@@ -57,7 +61,7 @@ private void button1MouseClicked(MouseEvent e) {
5761
settings.setAiApi(apiUrlField.getText()==null?"":apiUrlField.getText());
5862
settings.setAiApiKey(apiKeyField.getText()==null?"":apiKeyField.getText());
5963
settings.setAiModel(modelField.getText()==null?"":modelField.getText());
60-
settings.setAiMaxTokens(maxTokenField.getText()==null?"":maxTokenField.getText());
64+
settings.setAiMaxTokens("4096");
6165
settings.saveWindowPos(this);
6266
settings.sync();
6367

@@ -74,18 +78,15 @@ private void initComponents() {
7478
panel1 = new JPanel();
7579
label1 = new JLabel();
7680
apiUrlField = new JTextField();
77-
urlHelpLabel = new JLabel();
78-
platformsLabel = new JLabel();
81+
urlHelpText = new JTextArea();
7982
label2 = new JLabel();
8083
apiKeyField = new JTextField();
81-
keyHelpLabel = new JLabel();
84+
keyHelpText = new JTextArea();
8285
label3 = new JLabel();
8386
modelField = new JTextField();
84-
modelHelpLabel = new JLabel();
85-
platformModelsLabel = new JLabel();
87+
modelHelpText = new JTextArea();
8688
label4 = new JLabel();
87-
maxTokenField = new JTextField();
88-
maxTokenHelpLabel = new JLabel();
89+
maxTokenHelpText = new JTextArea();
8990
panel2 = new JPanel();
9091
button1 = new JButton();
9192
button2 = new JButton();
@@ -120,119 +121,88 @@ private void initComponents() {
120121
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
121122
new Insets(10, 5, 10, 15), 0, 0));
122123

123-
//---- urlHelpLabel ----
124-
urlHelpLabel.setText("<html><font color='#666666'>请输入完整的API服务器地址,包含https://<br>示例:<br>OpenAI: <a href='https://api.openai.com/v1'>https://api.openai.com/v1</a><br>百度千帆: <a href='https://aip.baidubce.com/v1'>https://aip.baidubce.com/v1</a><br>阿里云: <a href='https://dashscope.aliyuncs.com/v1'>https://dashscope.aliyuncs.com/v1</a><br>火山引擎: <a href='https://open.volcengineapi.com/v1'>https://open.volcengineapi.com/v1</a></font></html>");
125-
urlHelpLabel.setFont(urlHelpLabel.getFont().deriveFont(urlHelpLabel.getFont().getSize() - 2f));
126-
urlHelpLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
127-
urlHelpLabel.addMouseListener(new MouseAdapter() {
128-
@Override
129-
public void mouseClicked(MouseEvent e) {
130-
String url = e.getSource().toString();
131-
if (url.contains("href='")) {
132-
url = url.substring(url.indexOf("href='") + 6, url.indexOf("'>"));
133-
try {
134-
Desktop.getDesktop().browse(new URI(url));
135-
} catch (Exception ex) {
136-
// 忽略异常
137-
}
138-
}
139-
}
140-
});
141-
panel1.add(urlHelpLabel, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
142-
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
143-
new Insets(0, 8, 8, 0), 0, 0));
144-
145-
//---- platformsLabel ----
146-
platformsLabel.setText("<html><font color='#666666'>支持的平台: OpenAI, 百度千帆, DeepSeek, 火山引擎, 阿里云</font></html>");
147-
platformsLabel.setFont(platformsLabel.getFont().deriveFont(platformsLabel.getFont().getSize() - 2f));
148-
panel1.add(platformsLabel, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0,
124+
//---- urlHelpText ----
125+
urlHelpText.setText("支持的平台: 硅基流动(首选), OpenAI, 火山引擎, 阿里云\n\n请输入完整的API服务器地址,包含https://\n示例:\n硅基流动: https://api.guiji.ai/v1\nOpenAI: https://api.openai.com/v1\n阿里云: https://dashscope.aliyuncs.com/v1\n火山引擎: https://open.volcengineapi.com/v1");
126+
urlHelpText.setFont(urlHelpText.getFont().deriveFont(urlHelpText.getFont().getSize() - 2f));
127+
urlHelpText.setBackground(new Color(245, 245, 245));
128+
urlHelpText.setBorder(new LineBorder(new Color(200, 200, 200)));
129+
urlHelpText.setEditable(false);
130+
urlHelpText.setLineWrap(true);
131+
urlHelpText.setWrapStyleWord(true);
132+
panel1.add(urlHelpText, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
149133
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
150134
new Insets(0, 8, 15, 0), 0, 0));
151135

152136
//---- label2 ----
153137
label2.setText("API Key:");
154138
label2.setFont(label2.getFont().deriveFont(label2.getFont().getStyle() | Font.BOLD));
155-
panel1.add(label2, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
139+
panel1.add(label2, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
156140
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
157141
new Insets(10, 0, 10, 0), 0, 0));
158142

159143
//---- apiKeyField ----
160144
apiKeyField.setPreferredSize(new Dimension(700, 30));
161145
apiKeyField.setToolTipText("输入您的API密钥");
162-
panel1.add(apiKeyField, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0,
146+
panel1.add(apiKeyField, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0,
163147
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
164148
new Insets(10, 0, 10, 0), 0, 0));
165149

166-
//---- keyHelpLabel ----
167-
keyHelpLabel.setText("<html><font color='gray'>在API提供商处获取的密钥,请妥善保管<br>获取方式:<br>OpenAI: <a href='https://platform.openai.com/api-keys'>https://platform.openai.com/api-keys</a><br>百度千帆: <a href='https://console.bce.baidu.com/qianfan/overview'>https://console.bce.baidu.com/qianfan/overview</a><br>阿里云: <a href='https://dashscope.console.aliyun.com/apiKey'>https://dashscope.console.aliyun.com/apiKey</a><br>火山引擎: <a href='https://console.volcengine.com/iam/keymanage/'>https://console.volcengine.com/iam/keymanage/</a></font></html>");
168-
keyHelpLabel.setFont(keyHelpLabel.getFont().deriveFont(keyHelpLabel.getFont().getSize() - 2f));
169-
keyHelpLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
170-
keyHelpLabel.addMouseListener(new MouseAdapter() {
171-
@Override
172-
public void mouseClicked(MouseEvent e) {
173-
String url = e.getSource().toString();
174-
if (url.contains("href='")) {
175-
url = url.substring(url.indexOf("href='") + 6, url.indexOf("'>"));
176-
try {
177-
Desktop.getDesktop().browse(new URI(url));
178-
} catch (Exception ex) {
179-
// 忽略异常
180-
}
181-
}
182-
}
183-
});
184-
panel1.add(keyHelpLabel, new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0,
150+
//---- keyHelpText ----
151+
keyHelpText.setText("在API提供商处获取的密钥,请妥善保管\n获取方式:\n硅基流动: https://console.guiji.ai/api-keys\nOpenAI: https://platform.openai.com/api-keys\n阿里云: https://dashscope.console.aliyun.com/apiKey\n火山引擎: https://console.volcengine.com/iam/keymanage/");
152+
keyHelpText.setFont(keyHelpText.getFont().deriveFont(keyHelpText.getFont().getSize() - 2f));
153+
keyHelpText.setBackground(new Color(245, 245, 245));
154+
keyHelpText.setBorder(new LineBorder(new Color(200, 200, 200)));
155+
keyHelpText.setEditable(false);
156+
keyHelpText.setLineWrap(true);
157+
keyHelpText.setWrapStyleWord(true);
158+
panel1.add(keyHelpText, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0,
185159
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
186160
new Insets(0, 0, 15, 0), 0, 0));
187161

188162
//---- label3 ----
189163
label3.setText("模型名称:");
190164
label3.setFont(label3.getFont().deriveFont(label3.getFont().getStyle() | Font.BOLD));
191-
panel1.add(label3, new GridBagConstraints(0, 5, 1, 1, 0.0, 0.0,
165+
panel1.add(label3, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0,
192166
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
193167
new Insets(10, 0, 10, 0), 0, 0));
194168

195169
//---- modelField ----
196170
modelField.setPreferredSize(new Dimension(700, 30));
197171
modelField.setToolTipText("输入要使用的AI模型名称");
198-
panel1.add(modelField, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0,
172+
panel1.add(modelField, new GridBagConstraints(1, 4, 1, 1, 1.0, 0.0,
199173
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
200174
new Insets(10, 0, 10, 0), 0, 0));
201175

202-
//---- modelHelpLabel ----
203-
modelHelpLabel.setText("<html><font color='gray'>各平台支持的模型示例:<br>OpenAI: gpt-4-turbo-preview, gpt-3.5-turbo<br>百度千帆: qianfan-chinese-llama-2-13b, qianfan-chinese-llama-2-7b<br>阿里云: qwen-max, qwen-plus<br>火山引擎: skylark-chat, skylark-pro</font></html>");
204-
modelHelpLabel.setFont(modelHelpLabel.getFont().deriveFont(modelHelpLabel.getFont().getSize() - 2f));
205-
panel1.add(modelHelpLabel, new GridBagConstraints(1, 6, 1, 1, 0.0, 0.0,
176+
//---- modelHelpText ----
177+
modelHelpText.setText("推荐使用授权code类模型: Qwen2.5-Coder-32B-Instruct, gpt-4, qwen-max, skylark-chat等\n\n各平台支持的模型示例:\n硅基流动: Qwen2.5-Coder-32B-Instruct (推荐使用授权code类模型)\nOpenAI: gpt-4-turbo-preview, gpt-3.5-turbo\n阿里云: qwen-max, qwen-plus\n火山引擎: skylark-chat, skylark-pro\n\n注意:请勿使用r1类逻辑模型,可能会导致分析结果不准确");
178+
modelHelpText.setFont(modelHelpText.getFont().deriveFont(modelHelpText.getFont().getSize() - 2f));
179+
modelHelpText.setBackground(new Color(245, 245, 245));
180+
modelHelpText.setBorder(new LineBorder(new Color(200, 200, 200)));
181+
modelHelpText.setEditable(false);
182+
modelHelpText.setLineWrap(true);
183+
modelHelpText.setWrapStyleWord(true);
184+
panel1.add(modelHelpText, new GridBagConstraints(1, 5, 1, 1, 0.0, 0.0,
206185
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
207186
new Insets(0, 0, 15, 0), 0, 0));
208187

209-
//---- platformModelsLabel ----
210-
platformModelsLabel.setText("<html><font color='gray'>各平台模型: qianfan-chinese-llama-2, deepseek-chat, chatglm3-6b等</font></html>");
211-
platformModelsLabel.setFont(platformModelsLabel.getFont().deriveFont(platformModelsLabel.getFont().getSize() - 2f));
212-
panel1.add(platformModelsLabel, new GridBagConstraints(1, 7, 1, 1, 0.0, 0.0,
213-
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
214-
new Insets(0, 0, 0, 0), 0, 0));
215-
216188
//---- label4 ----
217189
label4.setText("最大Token:");
218190
label4.setFont(label4.getFont().deriveFont(label4.getFont().getStyle() | Font.BOLD));
219-
panel1.add(label4, new GridBagConstraints(0, 7, 1, 1, 0.0, 0.0,
191+
panel1.add(label4, new GridBagConstraints(0, 6, 1, 1, 0.0, 0.0,
220192
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
221193
new Insets(10, 0, 10, 0), 0, 0));
222194

223-
//---- maxTokenField ----
224-
maxTokenField.setPreferredSize(new Dimension(700, 30));
225-
maxTokenField.setToolTipText("设置AI响应的最大Token数量");
226-
panel1.add(maxTokenField, new GridBagConstraints(1, 7, 1, 1, 1.0, 0.0,
195+
//---- maxTokenHelpText ----
196+
maxTokenHelpText.setText("固定使用4096 Token,此值已针对代码分析优化");
197+
maxTokenHelpText.setFont(maxTokenHelpText.getFont().deriveFont(maxTokenHelpText.getFont().getSize() - 2f));
198+
maxTokenHelpText.setBackground(new Color(245, 245, 245));
199+
maxTokenHelpText.setBorder(new LineBorder(new Color(200, 200, 200)));
200+
maxTokenHelpText.setEditable(false);
201+
maxTokenHelpText.setLineWrap(true);
202+
maxTokenHelpText.setWrapStyleWord(true);
203+
panel1.add(maxTokenHelpText, new GridBagConstraints(1, 6, 1, 1, 1.0, 0.0,
227204
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
228205
new Insets(10, 0, 10, 0), 0, 0));
229-
230-
//---- maxTokenHelpLabel ----
231-
maxTokenHelpLabel.setText("<html><font color='gray'>默认值为4096,根据您使用的模型可以适当调整<br>建议值:<br>OpenAI GPT-4: 4096-8192<br>百度千帆: 2048-4096<br>阿里云: 2048-4096<br>火山引擎: 2048-4096</font></html>");
232-
maxTokenHelpLabel.setFont(maxTokenHelpLabel.getFont().deriveFont(maxTokenHelpLabel.getFont().getSize() - 2f));
233-
panel1.add(maxTokenHelpLabel, new GridBagConstraints(1, 8, 1, 1, 0.0, 0.0,
234-
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
235-
new Insets(0, 0, 0, 0), 0, 0));
236206
}
237207
contentPane.add(panel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
238208
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
@@ -279,18 +249,15 @@ public void mouseClicked(MouseEvent e) {
279249
private JPanel panel1;
280250
private JLabel label1;
281251
private JTextField apiUrlField;
282-
private JLabel urlHelpLabel;
283-
private JLabel platformsLabel;
252+
private JTextArea urlHelpText;
284253
private JLabel label2;
285254
private JTextField apiKeyField;
286-
private JLabel keyHelpLabel;
255+
private JTextArea keyHelpText;
287256
private JLabel label3;
288257
private JTextField modelField;
289-
private JLabel modelHelpLabel;
290-
private JLabel platformModelsLabel;
258+
private JTextArea modelHelpText;
291259
private JLabel label4;
292-
private JTextField maxTokenField;
293-
private JLabel maxTokenHelpLabel;
260+
private JTextArea maxTokenHelpText;
294261
private JPanel panel2;
295262
private JButton button1;
296263
private JButton button2;

0 commit comments

Comments
 (0)