不用公司的AI插件,没有年终奖
今年AI风头正盛,我所在的公司也搞起了ai编程插件,要求各部门开发人员人均月使用AI代码辅助工具次数≥110次且使用天数≥11天,不达标的直接记0分,直接看图
然而我司“自研”的AI插件实在不堪一用,不能联系上下文,响应慢容易超时,没有历史记录(这个实在不能忍,每次重新打开编辑器历史记录都没了),因此使用者寥寥无几。
作为一个程序员,代码总比困难多。有天在部门程序员吹水群谈到这个时,突然心生一计,如果可以抓包到公司的AI插件调用的api地址,就可以实现自动化“使用”插件了,不就可以不用插件而完成KPI了吗。
抓包配置
说干就干!准备使用使用 Fiddler 抓取 IntelliJ IDEA 插件调用的 API。
- 配置 Fiddler 捕获 HTTPS 流量:
- 进入菜单 Tools > Options > HTTPS勾选 Capture HTTPS CONNECTs勾选 Decrypt HTTPS traffic点击 Actions > Trust Root Certificate 安装 Fiddler 根证书
2. 配置 IntelliJ IDEA 使用代理:- 进入菜单 File > Settings (Windows/Linux) 或 IntelliJ IDEA > Preferences (macOS)- 导航 Appearance & Behavior > System Settings > HTTP Proxy- 选择 Manual proxy configuration- 设置 Host name: 127.0.0.1;Port number: 8888 (Fiddler 默认端口);勾选 HTTP 和 HTTPS;点击 Check connection 测试代理是否工作;点击 OK 保存设置
开始抓包
于是,在idea的公司插件提问问题“11+11”:
很快,在 Fiddler 就抓取到对应的数据,抓到调用的api地址是公司的某个域名 + /v1/chat/completions
开始写代码
接下来就是写代码调用该接口:
public static String callAI(String api, String token, String model, String prompt) { // 构造请求体JSON JSONObject requestBody = new JSONObject(); requestBody.set("model", model); requestBody.set("stream", false); // 构造messages数组 JSONObject message = new JSONObject(); message.set("role", "user"); message.set("content", prompt); requestBody.set("messages", JSONUtil.createArray().put(message)); // 发送POST请求 HttpResponse response = HttpRequest.post(api) .header(Header.AUTHORIZATION, "Bearer " + token) // Bearer Token认证 .header(Header.CONTENT_TYPE, "application/json") // JSON内容类型 .body(requestBody.toString()) // 请求体 .timeout(40000) // 超时时间 .execute(); // 检查响应状态 if (!response.isOk()) { throw new RuntimeException("请求失败: " + response.getStatus() + " - " + response.body()); } return response.body();}
调用成功!
让AI去解决AI
当前只能自己想问题,然后再去调用公司的AI插件接口,远远还没实现全自动化。于是我就开始尝试设计提示词PROMPT,然后AI回答对应的问题列表,且按要求的格式进行回复。经过再三调优,最终的提示词是:“请随机出50道技术题,要求:1、请直接给出问题,不要过多思考;2、每道题目单独一行;3、每道题目不需要序号。”。要求1主要是避免AI过多思考导致请求接口超时,要求2、3可以根据AI的回复,进行换行分割成为问题数组,然后循环调用提问问题接口。经过测试,每次AI生成的问题都能满足条件。下图是某次生成的问题列表:
下图完成了自动生成问题并自动调用,为避免被检测为机器人,每次调用接口间隔休眠30~90秒时间:
为了方便使用,额外开发H5版本,只需要打开浏览器就能愉快刷KPI。
小插曲
在使用自动化程序调用公司AI插件几百次后,周五统计AI插件使用情况时本人的使用次数仍是个位数。问题到底出在了哪里呢?重新查看抓包过程,才发现遗漏了一个接口/api/v1/tracking/events。
原来统计方式并不是简单计算调用AI接口的次数。公司idea插件在每次调用AI接口后,都会自动调用统计接口,从而统计使用次数、idea版本、插件版本、AI模型、账号等信息。于是,依样画葫芦,增加调用统计接口。
KPI刷爆了
时间来到下周五,在最新的AI插件使用情况统计中,本人的使用次数一骑绝尘、一枝独秀、出类拔萃、遥遥领先。完美撒花!