后端调用大模型api用org.apache.http.*踩过的雷,hutool包yyds

实习时遇到一个需求,里面需要调用大模型的api,原先使用的是

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;

代码如下

    public String quary(String question) {
        String address = "";
        String chatId = "";
        String apiKey = "";
        String responseString = null;
        String responseStr = null;
        String session_id = null;

        String url = "http://" + address + "/api/v1/chats/" + chatId + "/completions";

        HttpClient client = HttpClients.createDefault();
        HttpPost post = new HttpPost(url);

        // 设置请求头
        post.setHeader("Content-Type", "application/json");
        post.setHeader("Authorization", "Bearer " + apiKey);
        // 设置请求体
        String json = "{\"question\": \"hello\"}";

        StringEntity entity = null;
        try {
            entity = new StringEntity(json);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        post.setEntity(entity);


        try {
            HttpResponse res = client.execute(post);
            responseStr = EntityUtils.toString(res.getEntity(), "UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        }

但执行之后发现:调用大模型所传的问题乱码,想了很多招也无法解决,最后在导师的建议下使用了hutool包

1、导入依赖

	<dependency>
		<groupId>cn.hutool</groupId>
		<artifactId>hutool-all</artifactId>
	</dependency>

2、编写代码

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;



 public String quary(String question) {

        String address = "";
        String Apikey="";
        String url = "http://" + address + "/api/v1/chat/completions";

        // 构建请求体
        JSONObject json = new JSONObject();
        //json.put("chatId", "my_chatId");
        json.put("stream", false);
        json.put("detail", false);
        json.put("responseChatItemId", "my_responseChatItemId");

        JSONObject variables = new JSONObject();
        variables.put("uid", "asdfadsfasfd2323");
        variables.put("name", "张三");
        json.put("variables", variables);

        JSONObject message = new JSONObject();
        message.put("role", "user");
        message.put("content", question);

        JSONObject[] messagesArray = {message};
        json.put("messages", messagesArray);

        // 发送 POST 请求
        HttpResponse res = (HttpResponse) HttpRequest.post(url)
                .header("Authorization", "Bearer " + Apikey)
                .header("Content-Type", "application/json")
                .body(json.toString())
                .execute();

        // 获取响应字符串
        String responseStr = res.body();
        JSONObject jsonObject = JSONUtil.parseObj(responseStr);
        JSONArray choicesArray = jsonObject.getJSONArray("choices");
        // 获取数组中的第一个元素(JSONObject)
        JSONObject firstChoiceObject = choicesArray.getJSONObject(0);
        // 获取 message 对象
        JSONObject messageObject = firstChoiceObject.getJSONObject("message");
        // 提取 content 字段
        String content = messageObject.getStr("content");
        return content;

    }

### Yyds.Auto 技术实现与使用方法 #### 1. 技术架构概述 Yyds.Auto 是一种基于深度强化学习的自动化解决方案,主要用于游戏《原神》中的自动钓鱼功能。其核心由两部分构成:YOLOX 和 DQN(Deep Q-Network)。YOLOX 负责目标检测,用于识别游戏中鱼漂的位置和其他环境特征[^1]。而 DQN 则负责决策过程,通过拟玩家的操作来完成钓鱼动作。 此外,该项目还采用了迁移学习和半监督学习的方法进行型训练,从而减少标注数据的需求并提升型泛化能力。对于某些特定场景下的细节处理,则引入了 OpenCV 等传统数字图像处理工具,这些部分不依赖于机器学习算法,而是通过硬编码逻辑实现。 --- #### 2. 使用方法详解 ##### (1)环境准备 在开始之前,需确保安装以下依赖库: - **Python**: 推荐版本为 Python 3.8 及以上。 - **PyTorch**: 提供深度学习框架支持。 - **OpenCV**: 处理图像输入。 - **YOLOX**: 完成目标检测任务。 以下是典型的环境配置命令: ```bash pip install torch torchvision opencv-python yolox ``` ##### (2)型加载与初始化 运行程序时,首先需要加载预训练好的 YOLOX 型以及自定义训练的 DQN 型。代码示例如下: ```python import cv2 from yolox.exp import get_exp_by_name from dqn_agent import DQNAgent # 自定义块 # 加载 YOLOX 检测器 exp = get_exp_by_name("yolox-s") # 小规型 detector = exp.get_model() checkpoint = torch.load("path/to/yolox_checkpoint.pth") detector.load_state_dict(checkpoint["model"]) # 初始化 DQN Agent dqn_agent = DQNAgent(state_size=..., action_size=...) dqn_agent.load_weights("path/to/dqn_weights.h5") ``` ##### (3)实时推理流程 在实际应用中,整个系统的工作流可以分为以下几个阶段: 1. **屏幕捕获**: 使用 `pyautogui` 或其他第三方库截取当前游戏画面。 2. **目标检测**: 对截图调用 YOLOX 进行预测,获取鱼漂位置坐标。 3. **状态提取**: 结合历史帧信息构建适合 DQN 输入的状态向量。 4. **行为选择**: 根据当前状态计算最优操作序列。 5. **执行控制**: 向操作系统发送鼠标点击事件或其他交互指令。 具体实现实例如下所示: ```python import pyautogui def run_auto_fishing(): while True: # 截图 screenshot = pyautogui.screenshot(region=(...)) frame = np.array(screenshot) # 目标检测 results = detector(frame) fish_float_position = extract_fish_float(results) # 自定义函数 if fish_float_position is not None: state = construct_state(fish_float_position, history_buffer) action = dqn_agent.act(state) if action == "click": perform_mouse_click(fish_float_position) time.sleep(0.1) # 控制频率 ``` --- #### 3. 数据集与训练策略 由于该游戏环境中存在量未标记的数据样本,因此采用迁移学习的方式将已有的 COCO 数据集上的权重迁移到新领域上,并利用少量人工标注数据微调网络参数。同时,在线收集的部分无标签数据可以通过一致性正则化等手段进一步优化性能表现。 另外值得注意的是,为了提高效率,还可以借鉴分布式训练的思想,将数据划分为多个子集分别交给不同的 MapTask 来独立运算后再汇总结果[^4]。 --- #### 4. 性能评估指标 针对此类 AI 应用,通常会关注以下几个方面作为衡量标准: - 准确率 (Accuracy): 鱼漂定位精度; - 平均奖励值 (Average Reward): 单次尝试获得收益情况; - 成功率 (Success Rate): 整体成功率统计。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值