OkHttp请求本地Ollama模型
OkHttp实现的RealEnventSource只能解析text/event-stream,会报响应头异常;由于是流式响应,此处理方式为异步SSE返回数据,需要使用CountDownLatch保护线程;解决方式:自主使用代码实现响应解析,并构造stream格式返回数据。
·
由于本地ollama模型返回格式为:
|
Content-Type |
application/x-ndjson |
OkHttp实现的RealEnventSource只能解析text/event-stream,会报响应头异常;
解决方式:自主使用代码实现响应解析,并构造stream格式返回数据
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
logger.info("调用接口失败{}", e);
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
if(response.isSuccessful()){
try(ResponseBody responseBody = response.body()){
if(responseBody !=null){
//逐行读取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(responseBody.byteStream(), StandardCharsets.UTF_8));
String line;
while((line = reader.readLine())!=null){
AiResponse aiResponse = JsonUtils.convertJson2Obj(line, AiResponse.class);
if(aiResponse.getDone()){
break;
}
logger.info(aiResponse.getResponse());
pw.write("data:"+JsonUtils.convertObj2Json(new ContentDto(aiResponse.getResponse()))+"\n\n");
pw.flush();
}
eventLatch.countDown();
}
}
}else {
logger.error("调用接口失败",response);
}
}
});
由于是流式响应,此处理方式为异步SSE返回数据,需要使用CountDownLatch保护线程;
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)