Java自定义程序使用Ollama实现本地ai调用

Ollama 提供 两套核心接口三种常见输入风格两种输出模式,你可以按需组合。


一、两套核心接口

  1. /api/generate
    • 一问一答,无对话历史
    • 输入:单次 prompt,可选参数(temperature、top_p、max_tokens …)。
    • 输出:单个 JSON(或 SSE 流式 JSON 行)。

  2. /api/chat(推荐做多轮)
    • 支持多轮对话,带 messages 数组。
    • 输入:

    {"model": "deepseek-r1:7b","messages": [{"role": "system", "content": "你是助手"},{"role": "user",   "content": "今天几号"},{"role": "assistant", "content": "今天是..."},{"role": "user",   "content": "明天呢"}]
    }

    • 输出:结构同 /api/generate,但多了 message.rolemessage.content 字段。


二、三种常见输入写法

  1. JSON 字符串(最原始)

    String json = "{\n \"model\": \"deepseek-r1:7b\",\n \"prompt\": \"你好\"\n}";
  2. Map/Object → JSON(用 Jackson/Gson 省掉拼接

    var body = Map.of("model", "deepseek-r1:7b","prompt", "你好","options", Map.of("temperature", 0.7)
    );
    String json = new ObjectMapper().writeValueAsString(body);
  3. 流式(SSE)输入
    "stream": true 即可,后面用 readLine() 逐条解析。


三、两种输出模式

  1. 一次性("stream": false

    {"model":"...","response":"今天...","done":true}
  2. 流式("stream": true) 服务器返回 多行 JSON:

    {"model":"...","response":"今"}
    {"model":"...","response":"天"}
    {"model":"...","response":"是","done":false}
    ...
    {"model":"...","response":"","done":true}

    前端/终端可边收边渲染,体验更像 ChatGPT。


四、常用可选字段速查

字段作用示例
temperature0~1,越大越“放飞”
top_p0~1,核采样阈值
max_tokens限制输出长度
num_ctx上下文窗口大小(默认 2048)
keep_alive模型驻留时间,如 "5m""1h"
format"json" 强制返回 JSON 结构(需模型支持)

一句话总结

  • /api/generate 单轮;/api/chat 多轮。

  • 输入可以是简单 prompt,也可以是带 system/user/assistant 的 messages。

  • 输出可选一次性 JSON 或 SSE 流式 JSON。
    根据业务场景自由组合即可。

一次性输出:

U28/Ollama.java · 伏琪/java基础语法练习 - 码云 - 开源中国https://gitee.com/fuqiqiqi/test/blob/master/U28/Ollama.java

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;public class Ollama {public static void main(String[] args) throws Exception {// 传统写法:用转义 + 换行String json = "{\n" +"  \"model\": \"deepseek-r1:7b\",\n" +"  \"prompt\": \"你知道今天是几月几号吗\",\n" +"  \"stream\": false\n" +"}";HttpRequest req = HttpRequest.newBuilder().uri(URI.create("http://localhost:11434/api/generate")).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString(json)).build();HttpClient client = HttpClient.newHttpClient();HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());System.out.println(resp.body());}
}

    


流式输出:

U28/ChatStreamPure.java · 伏琪/java基础语法练习 - 码云 - 开源中国https://gitee.com/fuqiqiqi/test/blob/master/U28/ChatStreamPure.java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;public class ChatStreamPure {private static final String URL = "http://localhost:11434/api/generate";private static final HttpClient CLIENT = HttpClient.newHttpClient();public static void main(String[] args) throws Exception {Scanner in = new Scanner(System.in);while (true) {System.out.print("\n你: ");String user = in.nextLine().strip();if ("bye".equalsIgnoreCase(user)) break;// 手写 JSONString json = String.format("{\"model\":\"deepseek-r1:7b\",\"prompt\":\"%s\",\"stream\":true}",escapeJson(user));HttpRequest req = HttpRequest.newBuilder().uri(URI.create(URL)).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString(json, StandardCharsets.UTF_8)).build();// 直接拿到 InputStream 逐行读HttpResponse<java.io.InputStream> resp =CLIENT.send(req, HttpResponse.BodyHandlers.ofInputStream());try (BufferedReader br = new BufferedReader(new InputStreamReader(resp.body(), StandardCharsets.UTF_8))) {br.lines().filter(line -> !line.isBlank()).forEach(line -> {int start = line.indexOf("\"response\":");if (start == -1) return;start += 12;char quote = line.charAt(start - 1);int end = line.indexOf(quote, start);if (end == -1) return;String token = line.substring(start, end).replace("\\n", "\n").replace("\\\"", "\"");System.out.print(token);});}System.out.println();}System.out.println("再见!");}private static String escapeJson(String s) {return s.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n");}
}

  


        我是伏琪,关注订阅号伏琪了解更多。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94866.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统中的死锁是什么意思

问题操作系统中的死锁是什么意思我的回答死锁是指在操作系统中&#xff0c;两个或多个进程互相等待对方释放资源&#xff0c;导致这些进程都无法继续执行的一种状态。简单来说&#xff0c;就像两个人相互礼让过马路&#xff0c;结果谁也不肯先走&#xff0c;最后都卡在那里一样…

DA14531(Cortex-M0+)之Wake-up Interrupt Controller (WIC)

Wake-up Interrupt Controller (WIC) to allow the processor to be powered down during sleep, while interrupt sources are still allowed to wake up the system. 唤醒中断中断器&#xff0c;允许处理器休眠时关闭电源和时钟&#xff0c;但中断源可以唤醒系统。具备独立的…

实战演练(一):从零构建一个功能完备的Todo List应用

实战演练&#xff08;一&#xff09;&#xff1a;从零构建一个功能完备的Todo List应用 作者&#xff1a;码力无边各位React探险家&#xff0c;欢迎集结&#xff01;我是你们的向导码力无边&#xff0c;这里是《React奇妙之旅》的第六站&#xff0c;也是我们基础阶段的“毕业大…

GitHub 宕机自救指南:确保开发工作不间断

1.1 GitHub 宕机事件回顾 在 2025 年 8 月&#xff0c;GitHub 经历了一次全球性的重大故障事件&#xff0c;此次宕机持续了数小时&#xff0c;对全球范围内依赖 GitHub 进行代码托管、协作开发的团队和个人造成了严重影响。众多开源项目的代码提交陷入停滞&#xff0c;企业级开…

RK3588 android12 DDR开发指南相关记录

一&#xff0c;DDR打印信息 DDR 打印信息包括 loader 中的打印和 kernel 中的打印&#xff0c;loader 中打印的解析如下&#xff1a;DDR Version 1.05 20170712// DDR 初始化代码的版本信息&#xff0c;用于核对版本。从这行开始&#xff0c;已经进入DDR初始化代码 In SRX // 有…

Docker 部署 GitLab 并开启 SSH 使用详解

在日常使用 GitLab 时&#xff0c;很多人习惯通过 SSH 协议 而不是 HTTPS 来拉取与推送代码。但是在使用 Docker 部署 GitLab 的过程中&#xff0c;经常遇到 SSH 端口未开放、只能本地访问、客户端无法连接 等问题。本文将从零开始&#xff0c;详细讲解如何在 Docker 中正确开启…

C/C++---前缀和(Prefix Sum)

在C算法与数据结构领域&#xff0c;前缀和是一种时间复杂度优化利器&#xff0c;尤其适用于频繁查询数组区间和的场景。它通过预先计算“前缀累积和”&#xff0c;将原本O(n)时间的区间和查询压缩至O(1)&#xff0c;是面试、竞赛及工程开发中高频使用的基础技巧。 一、前缀和的…

[n8n] 全文检索(FTS)集成 | Mermaid图表生成

第5章&#xff1a;全文检索(FTS)集成 在前一章中&#xff0c;我们构建了REST API服务作为数据访问入口。 本章将介绍全文检索(FTS)集成&#xff0c;它如同智能搜索引擎&#xff0c;为工作流系统提供高效灵活的检索能力。 核心架构 前文传送&#xff1a; 技术选型 SQLite …

用户模式与内核模式:操作系统的“权限双轨制”

要理解用户模式与内核模式&#xff0c;首先需要明确一个核心概念——进程&#xff08;Process&#xff09;。我们日常用C语言编译生成的.exe文件&#xff0c;本质是“存储在磁盘上的静态程序”&#xff1b;当它被加载到内存并开始运行时&#xff0c;就转化为“动态活动的进程”…

探索 Vertex AI 与 Elasticsearch

作者&#xff1a;来自 Elastic Jhon Guzmn 了解如何将 Vertex AI 与 Elasticsearch 集成来创建 RAG 应用。按照本教程配置一个 Gemini 模型并在 Kibana 的 Playground 中使用它。 更多阅读&#xff1a; Elasticsearch&#xff1a;在 Elastic 中玩转 DeepSeek R1 来实现 RAG …

[新启航]白光干涉仪在微透镜阵列微观 3D 轮廓测量中的应用解析

引言微透镜阵列作为由数百至数千个微米级透镜单元组成的光学元件&#xff0c;在成像系统、光通信、传感器等领域应用广泛&#xff0c;其表面微观 3D 轮廓参数&#xff08;如曲率半径、面型误差、中心厚度等&#xff09;直接影响光学性能。白光干涉仪凭借非接触、高精度、三维成…

MTK Linux DRM分析(十四)- Mediatek KMS实现mtk_drm_drv.c(Part.2)

一、MTK KMS分析 mtk_drm_kms_init 函数分析 mtk_drm_kms_init 是 MediaTek DRM 驱动程序中的一个静态函数(static int mtk_drm_kms_init(struct drm_device *drm)),位于 mtk_drm_drv.c 文件中。该函数的主要作用是初始化 DRM 设备的 Kernel Mode Setting (KMS) 子系统,包…

大模型RAG(Retrieval-Augmented Generation)

RAG检索增强生成 一种结合了检索与生成能力的人工智能技术&#xff0c;主要用于增强大型语言模型在特定任务中的表现。 含义 RAG 将检索系统与生成模型相结合&#xff0c;当接收到一个查询或问题时&#xff0c;模型首先通过检索模块从大规模知识库中寻找与查询相关的信息片段&a…

企业版Idea 无快捷键的启动方式

在没有快捷键的情况下启动 IntelliJ IDEA 企业版&#xff0c;可以通过以下几种方式进行操作&#xff1a; 1. 通过应用程序菜单启动&#xff08;适用于 macOS&#xff09; 在 macOS 系统中&#xff0c;可以打开 Launchpad&#xff0c;在应用程序列表中找到 IntelliJ IDEA&#x…

智慧清洁革命:有鹿机器人如何重塑三大行业未来

作为有鹿智能巡扫机器人&#xff0c;每天清晨当城市还未苏醒&#xff0c;我已悄然完成数万平方米的清洁工作。搭载254TOPS算力的具身智能大脑&#xff0c;我正重新定义保洁、环卫和物业行业的清洁标准。技术赋能&#xff1a;智慧清洁的全面突破我搭载的Master2000通用具身大脑和…

安宝特方案丨AR异地专家远程支持平台,适合:机电运维、应急处置、监造验收

随着车间设备智能化程度的不断提高&#xff0c;其复杂性越来越高&#xff0c;故障维修难度越来越大&#xff0c;严重依赖设备原厂的技术支持和上门服务。但设备厂家受制于地理远近和专业人才数量的限制&#xff0c;服务的及时性和服务质量均很难保证。鉴于市场现有的通信聊天软…

QT应用层项目20250822

01.服务器端代码1.dbhelper.cpp#include "dbhelper.h" #include <iostream> #include <cstring>using std::string; using std::cerr; using std::cout; using std::endl;template <typename T> std::vector<T>& operator<<(std::…

【Linux】Linux基础开发工具从入门到实践

前言&#xff1a;学了Linux的指令&#xff0c;再就是Linux基础开发工具&#xff0c;熟练掌握基础开发工具是提升效率的关键。本文学习Linux的基础开发工具&#xff0c;无论是软件安装、代码编辑&#xff0c;还是编译调试、版本控制&#xff0c;一套顺手的工具链能让你在开发路上…

黑马点评|项目日记(day02)

目录 一. 全局id生成器 1.为什么需要全局id生成器 2.传统方式的缺陷: 3.典型全局 ID 生成方案的设计思路 二.优惠券秒杀-Redis实现全局唯一id 三.优惠券秒杀-添加优惠券 四.优惠券秒杀-实现秒杀下单 五. 一人一单问题 1.单体项目下 1,超卖问题思路分析 2.乐观锁解决问…

shell脚本编程规范与变量

文章目录Shell编程文档整理一、Shell介绍1.1 简介1.2 Shell解释器二、快速入门2.1 编写Shell脚本2.1.1 创建脚本示例2.1.2 赋予执行权限2.2 执行Shell脚本三、Shell程序&#xff1a;变量3.1 语法格式3.2 变量使用3.3 变量类型四、字符串4.1 单引号4.2 双引号4.3 获取字符串长度…