AIAB核心方法
2025年9月12日大约 2 分钟
AIAB核心方法
1.通用聊天逻辑方法processChatRequest()
描述
processChatRequest()方法用于接收到用户请求之后对请求进行第一步处理,对请求进行验证和相关处理
参数
下表为processChatRequest()方法的参数
参数名 | 类型 | 示例 |
---|---|---|
request | ChatCompletionRequest | 请求体 |
sdkKey | String | 1000563_ebf080bb426e7555 |
flagKey | String | buy |
userId | String | Admin123 |
示例
此示例演示了以下每个概念的用法:
当为非流式请求时,直接返回预设回答
当为流式请求时,调用分桶与转发方法获取真实响应返回
private ResponseEntity<?> processChatRequest(ChatCompletionRequest request,
String flagKey,
String sdkKey,
String userId) {
......
// 获取stream是否为流式(和AB测试平台对接都为true)
boolean stream = request.getStream() != null ? request.getStream() : true;
......
if (stream) {
try {
ResponseEntity<String> response = proxyService.chatCompletion(request, flagKey, sdkKey, userId);
String bodyData = response.getBody();
return ResponseEntity.ok()
.contentType(MediaType.TEXT_EVENT_STREAM)
.header(HttpHeaders.CACHE_CONTROL, "no-cache")
.body(bodyData);
}catch (Exception e) {
return ResponseEntity.badRequest().body(Collections.singletonMap("error", e.getMessage()));
}
}
ChatResponse response = new ChatResponse(
"chatcmpl-" + System.currentTimeMillis(),
"chat.completion",
System.currentTimeMillis() / 1000,
"custom-model",
Arrays.asList(new Choice(0, new ChatMessage("assistant", fullResponse), "stop")),
new Usage(promptTokens, completionTokens, promptTokens + completionTokens)
);
return ResponseEntity.ok(response);
}
2.处理真实大模型真实调用chatCompletion()
描述
chatCompletion()用于对大模型进行实际分桶、实际大模型API调用以及发送请求事件
参数
下表为chatCompletion()方法的各项参数
参数名 | 类型 | 示例 |
---|---|---|
request | ChatCompletionRequest | 请求体 |
sdkKey | String | 1000563_ebf080bb426e7555 |
flagKey | String | buy |
userId | String | Admin123 |
示例
此示例演示了以下每个概念的用法:
根据参数对用户进行分桶,获取抽取到的大模型
从配置中获取对应大模型的配置信息
真实调用大模型接口
public ResponseEntity<String> chatCompletion(ChatCompletionRequest request,
String flagKey,
String sdkKey,
String userId) {
// 分桶逻辑,获取抽取到的模型
Map<String, String> variableMap = proxyDecisionService.userDecide(flagKey, sdkKey, userId);
String name = variableMap.get("model");
.....
// 获取大模型配置信息
String apiKey = (String) configStore.get(name).get("apiKey");
String providerUrl = (String) configStore.get(name).get("url");
//构造真实请求体
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer " + apiKey);
// 重置model值为分桶结果值
ChatCompletionRequest modifiedRequest = new ChatCompletionRequest();
org.springframework.beans.BeanUtils.copyProperties(request,modifiedRequest);
modifiedRequest.setModel((String) configStore.get(name).get("model"));
modifiedRequest.setMaxTokens((int) Double.parseDouble(variableMap.get("max_token")));
modifiedRequest.setTemperature(Double.parseDouble(variableMap.get("temperature")));
modifiedRequest.setTopP(Double.parseDouble(variableMap.get("top_p")));
modifiedRequest.setPresencePenalty(Double.parseDouble(variableMap.get("presence_penalty")));
modifiedRequest.setFrequencyPenalty(Double.parseDouble(variableMap.get("frequency_penalty")));
if(modifiedRequest.getStream()) {
ChatCompletionRequest.StreamOptions streamOptions = new ChatCompletionRequest.StreamOptions(true);
modifiedRequest.setStreamOptions(streamOptions);
}
HttpEntity<ChatCompletionRequest> entity = new HttpEntity<>(modifiedRequest, headers);
......
//发起真实大模型请求
try {
ResponseEntity<String> response = restTemplate.exchange(
providerUrl + "/chat/completions",
HttpMethod.POST,
entity,
String.class
);
//发送请求事件
......
}catch(Exception e) {
......
}
}