2424import javax .swing .JLabel ;
2525import javax .swing .JPanel ;
2626import javax .swing .JTextField ;
27+ import javax .swing .JTextArea ;
2728import javax .swing .border .EmptyBorder ;
29+ import javax .swing .border .LineBorder ;
30+ import java .awt .Color ;
2831
2932import jadx .gui .settings .JadxSettings ;
3033
@@ -48,7 +51,8 @@ public AiSettingDialog(Window owner,JadxSettings settings) {
4851apiUrlField .setText (settings .getAiApi ()==null ?"" :settings .getAiApi ());
4952apiKeyField .setText (settings .getAiApiKey ()==null ?"" :settings .getAiApiKey ());
5053modelField .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
5458private void button1MouseClicked (MouseEvent e ) {
@@ -57,7 +61,7 @@ private void button1MouseClicked(MouseEvent e) {
5761settings .setAiApi (apiUrlField .getText ()==null ?"" :apiUrlField .getText ());
5862settings .setAiApiKey (apiKeyField .getText ()==null ?"" :apiKeyField .getText ());
5963settings .setAiModel (modelField .getText ()==null ?"" :modelField .getText ());
60- settings .setAiMaxTokens (maxTokenField . getText ()== null ? "" : maxTokenField . getText () );
64+ settings .setAiMaxTokens ("4096" );
6165settings .saveWindowPos (this );
6266settings .sync ();
6367
@@ -74,18 +78,15 @@ private void initComponents() {
7478panel1 = new JPanel ();
7579label1 = new JLabel ();
7680apiUrlField = new JTextField ();
77- urlHelpLabel = new JLabel ();
78- platformsLabel = new JLabel ();
81+ urlHelpText = new JTextArea ();
7982label2 = new JLabel ();
8083apiKeyField = new JTextField ();
81- keyHelpLabel = new JLabel ();
84+ keyHelpText = new JTextArea ();
8285label3 = new JLabel ();
8386modelField = new JTextField ();
84- modelHelpLabel = new JLabel ();
85- platformModelsLabel = new JLabel ();
87+ modelHelpText = new JTextArea ();
8688label4 = new JLabel ();
87- maxTokenField = new JTextField ();
88- maxTokenHelpLabel = new JLabel ();
89+ maxTokenHelpText = new JTextArea ();
8990panel2 = new JPanel ();
9091button1 = new JButton ();
9192button2 = new JButton ();
@@ -120,119 +121,88 @@ private void initComponents() {
120121GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
121122new 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\n OpenAI: 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 ,
149133GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
150134new Insets (0 , 8 , 15 , 0 ), 0 , 0 ));
151135
152136//---- label2 ----
153137label2 .setText ("API Key:" );
154138label2 .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 ,
156140GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
157141new Insets (10 , 0 , 10 , 0 ), 0 , 0 ));
158142
159143//---- apiKeyField ----
160144apiKeyField .setPreferredSize (new Dimension (700 , 30 ));
161145apiKeyField .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 ,
163147GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
164148new 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\n OpenAI: 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 ,
185159GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
186160new Insets (0 , 0 , 15 , 0 ), 0 , 0 ));
187161
188162//---- label3 ----
189163label3 .setText ("模型名称:" );
190164label3 .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 ,
192166GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
193167new Insets (10 , 0 , 10 , 0 ), 0 , 0 ));
194168
195169//---- modelField ----
196170modelField .setPreferredSize (new Dimension (700 , 30 ));
197171modelField .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 ,
199173GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
200174new 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类模型)\n OpenAI: 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 ,
206185GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
207186new 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 ----
217189label4 .setText ("最大Token:" );
218190label4 .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 ,
220192GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
221193new 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 ,
227204GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
228205new 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}
237207contentPane .add (panel1 , new GridBagConstraints (0 , 0 , 1 , 1 , 0.0 , 0.0 ,
238208GridBagConstraints .CENTER , GridBagConstraints .BOTH ,
@@ -279,18 +249,15 @@ public void mouseClicked(MouseEvent e) {
279249private JPanel panel1 ;
280250private JLabel label1 ;
281251private JTextField apiUrlField ;
282- private JLabel urlHelpLabel ;
283- private JLabel platformsLabel ;
252+ private JTextArea urlHelpText ;
284253private JLabel label2 ;
285254private JTextField apiKeyField ;
286- private JLabel keyHelpLabel ;
255+ private JTextArea keyHelpText ;
287256private JLabel label3 ;
288257private JTextField modelField ;
289- private JLabel modelHelpLabel ;
290- private JLabel platformModelsLabel ;
258+ private JTextArea modelHelpText ;
291259private JLabel label4 ;
292- private JTextField maxTokenField ;
293- private JLabel maxTokenHelpLabel ;
260+ private JTextArea maxTokenHelpText ;
294261private JPanel panel2 ;
295262private JButton button1 ;
296263private JButton button2 ;
0 commit comments