
科普文:AI时代的程序员【Java访问Ollama中的模型服务:deepseek-r1:8b、qwen:0.5b-chat】
前面演示了通过DeepSeek API分别访问deepseek和火山引擎提供的模型服务,均以失败告终,这里我们再来看看如何访问本地的模型服务。ollama run操作前的准备工作:安装ollama、deepseek-r1:8b、qwen:0.5b-chat,可参考下面链接,这里就不再赘述。
概叙
科普文:AI时代的程序员【DeepSeek API 请求参数和API调用说明】-CSDN博客
前面演示了通过DeepSeek API分别访问deepseek和火山引擎提供的模型服务,均以失败告终,这里我们再来看看如何访问本地的模型服务。
环境要求
- 已安装 Ollama 服务并加载 DeepSeek 模型(如执行
ollama run
deepseek-r1:8b完成部署) - 本地 Ollama 服务运行在默认端口 11434(可通过
http://localhost:11434
验证)
操作前的准备工作:安装ollama、deepseek-r1:8b、qwen:0.5b-chat,可参考下面链接,这里就不再赘述。
科普文:AI时代DeepSeek【ollama本地傻瓜式安装deepseek-r1】_630的显卡可以装deepseek嘛-CSDN博客
科普文:AI时代的程序员【Page Assist插件搭建本地DeepSeek服务】-CSDN博客
Java 中调用Ollama 服务的模型
Ollama 服务:确保模型服务已经开启
访问Ollama 服务地址
访问Ollama中的模型服务
协议/方法/请求体格式:http ,请求方法POST,application/json
Ollama的API URL: http://localhost:11434/v1/
generate
请求体参数:
{
"model": "deepseek-r1:8b",
"prompt": "中国全称和简介",
"max_tokens": 50,
"temperature": 0.7,
"top_p": 1,
"stream": false
}
java实现
public String callOllamaApi(String query,String model) {
// 设置请求头(根据需要添加)
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// 构建请求体
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("model",model);
requestBody.put("prompt", query);
requestBody.put("keep_alive", "10m");
requestBody.put("stream", false);
// 将请求体和请求头封装到HttpEntity中
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBody, headers);
// 发送POST请求,并接收响应
ResponseEntity<String> response = restTemplate.postForEntity(
ollamaApiUrl,
entity,
String.class
);
if (response.getStatusCode() == HttpStatus.OK) {
}
// 返回响应体
return response.getBody();
}
关键参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
model | String | 是 |
模型标识符,需与 C:\Users\Admin>ollama ps |
prompt | String | 是 | 输入的问题或指令文本 |
stream | Boolean | 否 | 是否启用流式传输(true 实时返回 /false 完整响应) |
max_tokens | Integer | 否 | 限制生成文本的最大长度(默认无限制) |
temperature | Float | 否 | 控制输出随机性(0.0-1.0,值越高创造性越强) |
ollama的这两个地址的异同
在 Ollama 框架中,http://localhost:11434/v1/completions
和http://localhost:11434/api/generate
两个接口地址具有以下核心差异与关联:
功能定位与协议兼容性
-
OpenAI API 兼容接口
/v1/completions
是 Ollama 对 OpenAI API 规范的兼容实现,其参数格式、请求头定义(如Authorization
字段)及响应结构均遵循 OpenAI 标准。该接口适用于需要与现有 OpenAI 生态工具(如 LangChain、OpenAI SDK)无缝集成的场景。 -
Ollama 原生接口
/api/generate
为 Ollama 原生 API 端点,采用其自定义的请求参数和响应格式。此接口支持更细粒度的模型控制,例如流式传输(stream
参数)、上下文管理(context
字段)等专有特性。
技术参数对比
特性 | /v1/completions |
/api/generate |
---|---|---|
请求方法 | POST | POST |
Content-Type | application/json |
application/json |
必填参数 | model , prompt |
model , prompt |
流式响应支持 | 通过stream: true 启用 |
默认支持流式,需设置stream: true |
上下文管理 | 依赖messages 数组传递历史对话 |
需显式传递context 字段维护状态 |
超时控制 | 通过timeout 参数(单位:秒) |
无原生超时参数 |
典型应用场景
-
迁移开发场景
若项目原基于 OpenAI 接口开发,需迁移至本地模型,优先选择/v1/completions
以减少代码改动量。 -
高性能交互场景
当需要低延迟流式输出或深度定制模型参数时,建议使用原生接口/api/generate
,其响应速度优化更适配本地部署环境。
请求示例对比
// OpenAI兼容接口请求
{
"model": "deepseek-s1",
"prompt": "中国的全称和简介",
"max_tokens": 512,
"temperature": 0.7
}
// Ollama原生接口请求
{
"model": "deepseek-s1",
"prompt": "中国的全称和简介",
"stream": false,
"options": {
"num_ctx": 4096,
"seed": 42
}
}
实际开发中,接口选择需综合项目架构兼容性、功能需求及性能要求进行权衡。若需同时兼容云服务与本地模型,建议采用抽象层封装两类接口的差异化逻辑。
访问效果
跑起来真的慢,真的耗资源,建议配置的restTemplate超时时间设置长一些。
deepseek-r1:8b
访问成功,不过真的很慢,都快300秒(5分钟):GET: application/json;charset=UTF-8: status: 200: costTime: 294585ms;所以本地还是尽量选择小一点的参数模型。
返回结果:{"model":"deepseek-r1:8b","created_at":"2025-02-23T01:37:19.9524682Z","response":"\u003cthink\u003e\n好,我需要详细地介绍一下关于“中国”这个词的全称、简介以及相关的历史背景。首先,中国的全称应该是中华人民共和国,这是我了解到的最常用的正式名称。然后,简介部分要涵盖它的位置、人口、面积,还有发展成就,比如经济和科技方面。\n\n接下来,时间轨迹部分需要从古代到现在梳理一下历史大致脉络,提到几个重要的朝代如秦、汉、唐宋等,以及近现代的革命和改革开放。地理位置方面,要包括中国的具体坐标,大致描述其周围的地形,比如山川河流。\n\n最后,在语言表达上,我要保持口语化,用自然的方式连接这些信息,让读者容易理解。不过,注意不要使用任何Markdown格式,只用纯文本回答。内容需要全面,但也要简洁明了,不涉及过于深入的专业知识。\n\u003c/think\u003e\n\n**中国的全称和简介**\n\n**全称:** 中华人民共和国 \n**简介:** 中国位于东亚大陆,是世界上人口最多、面积第二大的国家。拥有超过14亿的人口,国土面积广阔,自然资源丰富。在经济、科技、文化等方面都取得了显著的发展。\n\n**时间轨迹:** \n中国有着悠久的历史和文化,古代文明如黄河流域的原始社会、商周青铜文化、中世纪的秦汉唐宋等都对世界文明产生了深远影响。近现代中国经历了多次重大变革,尤其是在20世纪中叶的新民主主义革命后,建立中华人民共和国,开启了社会主义建设的新纪元。改革开放以来,中国经济快速发展,成为世界第二大经济体,并在国际舞台上扮演重要角色。\n\n**地理位置:** \n中国位于东亚,与北朝鲜、韩国、日本等国家接壤,西部与蒙古和俄罗斯接壤,南部有印度洋和太平洋沿岸。首都北京是政治、文化中心,上海、广州、深圳等城市是重要的经济中心。\n\n中国不仅在国际社会中扮演着重要角色,而且在全球治理和发展中发挥着越来越重要的作用。","done":true,"done_reason":"stop","context":[128011,59795,9554,37087,25666,34208,99337,75910,128012,128013,198,53901,101602,86206,67933,105986,30590,117814,111230,111912,2118,59795,863,103624,106015,9554,37087,25666,5486,99337,75910,109717,79656,9554,113691,124858,1811,61075,61826,3922,59795,9554,37087,25666,107585,21043,119635,118514,103138,120651,114706,123703,32335,40053,116958,117727,31091,1811,109530,3922,99337,75910,105494,31634,96311,113,113333,103282,9554,82912,5486,113073,5486,122858,110235,19361,106246,13153,81258,126900,30624,109144,34208,107015,108900,3490,30177,113931,3922,21082,15568,101,120671,105494,86206,46281,102491,31640,28037,105456,101862,111,22649,111230,113691,27384,105260,101171,231,69165,3922,29172,28037,123092,107693,9554,103293,31640,30624,120006,5486,108850,5486,112609,74138,50667,120920,60358,120589,9554,125981,34208,119254,124648,1811,30590,22649,82912,108900,114985,108399,59795,9554,118789,107810,31944,112886,105260,54581,42246,41642,105885,126315,83799,126900,30624,58911,101701,103232,89753,3490,112271,97150,120074,21405,94588,17905,101602,31634,118551,40526,73981,33208,119977,109683,9554,76868,65164,108787,28469,114165,58653,30046,119237,113954,125241,3922,61633,113473,38129,109545,69105,69905,107191,11883,118465,17161,22656,113925,1811,44915,86206,123201,102378,75863,31634,99337,121730,31958,35287,102836,117947,82317,39282,35304,102987,17701,9554,107371,116658,9174,128014,271,334,59795,9554,37087,25666,34208,99337,75910,57277,334,37087,25666,5232,334,73958,86461,118514,2355,334,99337,75910,5232,334,107637,121245,68464,101630,27384,98245,105187,102616,17905,113073,32335,43240,5486,122858,106135,108199,106444,1811,123882,121150,975,54456,104123,40526,3922,29504,74090,122858,82042,33443,242,3922,109683,86429,113928,105469,107644,109144,5486,107015,5486,106581,50667,108900,72368,115181,35287,105593,102700,9554,106246,3490,334,21082,15568,101,120671,5232,334,2355,59795,19361,100815,116511,101704,9554,113691,34208,106581,3922,102491,31640,17161,31958,30624,105310,103232,89753,103438,9554,124586,106222,5486,33122,41642,103271,44659,250,106581,121270,101083,108142,9554,120006,108850,112609,74138,50667,72368,33764,102616,17161,31958,116498,35287,102987,106297,109829,1811,60358,120589,59795,54493,82302,35287,43240,33671,125478,75140,107804,3922,120308,42246,112213,508,101083,108142,16325,109339,9554,17039,121302,115657,125981,34547,3922,114690,119635,118514,3922,30867,69496,35287,106222,115657,108053,9554,17039,108142,24186,1811,119254,124648,123434,3922,59795,109144,119702,106246,3922,112743,102616,106135,27384,109144,33014,91495,19000,107604,107875,55038,17905,15355,106,102446,107693,125499,3490,334,30590,22649,82912,5232,334,2355,59795,121245,68464,101630,126240,49409,103293,118882,5486,109863,29504,123085,50667,106444,30177,45826,97,3922,61786,34048,58318,110919,102491,34208,113231,127037,30177,45826,97,3922,59563,34048,19361,104371,27479,106390,34208,101402,50211,106390,117989,111418,1811,61075,72368,70090,21043,110886,5486,106581,104356,3922,110666,5486,82042,55139,5486,119365,50667,109572,21043,107693,9554,109144,104356,3490,59795,16937,110395,19000,107604,106222,16325,15355,106,102446,100815,107693,125499,116496,19000,117805,71005,22649,34208,106246,16325,29391,115683,100815,104087,37507,104087,107693,9554,113266,1811],"total_duration":293261184600,"load_duration":10525717700,"prompt_eval_count":10,"prompt_eval_duration":3726000000,"eval_count":520,"eval_duration":279005000000}
返回status:200
qwen:0.5b-chat
访问成功,千问的小模型,5秒就能给出结果:GET: application/json;charset=UTF-8: status: 200: costTime: 5190ms
返回结果:{"model":"qwen:0.5b-chat","created_at":"2025-02-23T01:41:00.9368795Z","response":"中国全称:中华人民共和国。\n简介:中华人民共和国(简称“中国”)是世界上人口最多的国家,也是世界上面积最大的发展中国家。","done":true,"done_reason":"stop","context":[151644,872,198,105538,35987,24641,33108,102335,151645,198,151644,77091,198,58695,35987,24641,5122,105492,104773,1773,198,102335,5122,105492,104773,9909,102500,2073,58695,854,7552,20412,102506,102055,106654,99599,3837,100000,102506,100210,104003,99185,58695,45629,1773],"total_duration":4244444400,"load_duration":2124928400,"prompt_eval_count":13,"prompt_eval_duration":306000000,"eval_count":32,"eval_duration":1811000000}
返回status:200
更多推荐
所有评论(0)