当前位置: 首页 > article >正文

A3. Springboot3.x集成LLama3.2实战

本文将介绍集成ollama官网提供的API在Springboot工程中进行整合。由于没找到java-llama相关合适的sdk可以使用,因此只好对接官方给出的API开发一套RESTFull API服务。下面将从Ollama以下几个API展开介绍,逐渐的了解其特性以及可以干些什么。具体llama API说明可参数我前面写的《A2. 大语言模型llama API服务调研》文章,根据官网整理出来的参数定义与数据响应说明等。

  • Ollama Version(版本接口)
  • List Local Models(列出本地可用的模型)
  • List Running Models(列出已加载到内存即正式运行的模型)
  • Create a Model(创建一个模型)
  • Show Model Information(查看模型信息)
  • Copy a Model(复制模型)
  • Delete a Model(删除一个模型)
  • Pull a Model(拉取一个模型)
  • Push a Model(推送一个模型)
  • Generate Embeddings(文本嵌入-将文本转换为固定维度的向量)
  • Generate a completion(根据提示生成答复性文本)
  • Load a Model (加载模型到内存)
  • Unload a Model(从内存中卸载模型)
  • Generate a chat completion(根据对话内容生成内容)

Springboot工程创建及基础组件引用

这里请参考我前面写的《Springboot3.x工程创建及必要引用(基础篇)》这篇文章,因为这里直接用API方式,并未涉及其它特殊三方包的引用。

添加服务开发基础框架

  1. 导入导入服务基础依赖包

仓库地址:https://mvn.geease.com/repository/cloud-group/

<dependency>
    <groupId>com.eyinfo</groupId>    
    <artifactId>webx</artifactId>
    <version>1.0.22</version>
</dependency>

Ollama服务基础地址

即是你Springboot项目部署机器或容器所对应的主机地址(这里记为baseUrl=http://:)
以下接口实现服务的jar包已发布到mavenCentral中央仓库,请前往下载后部署到自己的服务上即可。

Ollama Version(版本接口)

请求方式:GET
请求路径:baseUrl/llama/version
响应参数:

字段 描述
version ollama大模型工具盒子版本

响应示例:

{
   
    "code": 0,
    "msg": "success",
    "data": {
   
        "version": "0.5.4"
    }
}

List Local Models(列出本地可用的模型)

请求方式:GET
请求路径:baseUrl/llama/models
响应参数(结果中单个对象各字段说明):

字段 描述
size 模型大小,以字节为单位
name 模型版本名称
digest 模型的校验和,用于验证模型的完整性。这个字段是一个哈希值,确保模型在传输过程中没有被篡改。
model 模型类型
details
|— parent_model 父模型
|— format 模型格式
|— family 模型系列
|— families 模型系列列表。这里重复提到了"mllama",可能是一个错误或者表示该模型属于多个系列
|— parameter_size 模型参数大小,以字节为单位
|— quantization_level 量化级别
modified_at 模型最后修改的时间

响应示例:

{
   
    "code": 0,
    "msg": "success",
    "data": [
        {
   
            "size": 4661224786,
            "name": "mario_copy:latest",
            "digest": "aa1ae71e221765d5e1d16003b62f275a28a14d5e9611fe5be769a13050732a67",
            "model": "mario_copy:latest",
            "details": {
   
                "parent_model": "",
                "format": "gguf",
                "family": "llama",
                "families": [
                    "llama"
                ],
                "parameter_size": "8.0B",
                "quantization_level": "Q4_0"
            },
            "modified_at": "2025-01-11T16:44:27.715875862+08:00"
        }
    ]
}

List Running Models(列出已加载到内存即正式运行的模型)

请求方式:GET
请求路径:baseUrl/llama/running/models
响应参数:参考List Local Models(列出本地可用的模型)
响应示例:参考List Local Models(列出本地可用的模型)

Create a Model(创建一个模型)

请求方式:POST
请求路径:baseUrl/llama/model/create
请求参数:

参数名 描述
model 指定创建的模型名称
modelfile (可选):模型文件的内容
stream (可选)如果是false,响应将作为单个响应对象返回,而不是对象流
path (可选):模型文件的路径
quantize (可选):创建非量化(例如float16)模型 量化类型:q2_K、q3_K_L、q3_K_M、q3_K_S、q4_0、q4_1、q4_K_M、q4_K_S、q5_0、q5_1、q5_K_M、q5_K_S、q6_K、q8_0

请求示例:

curl baseUrl/llama/model/create -X POST -H "Content-Type: application/json" -d '{
  "model": "mario",
  "modelfile": "FROM llama3\nSYSTEM You are mario from Super Mario Bros."
}'

调用模型(Java调用Ollama API创建模型关键代码):

WebClient webClient = webClientBuilder.baseUrl(lLamaConfig.getHost()).build();
return webClient.post()
        .uri("/api/create")
        //设置参数接收数据类型
        .contentType(MediaType.APPLICATION_JSON)
        //这里设置参数对象
        .bodyValue(modelRequest)
        //接收三方API流式响应数据类型,以文本流方式
        .accept(MediaType.TEXT_EVENT_STREAM)
        .retrieve()
        .bodyToFlux(String.class);

响应示例:

data:{
   "status":"using existing layer sha256:6a0746a1ec1aef3e7ec53868f220ff6e389f6f8ef87a01d77c96807de94ca2aa"}

data:{
   

http://www.kler.cn/a/500780.html

相关文章:

  • 深度学习与计算机视觉 (博士)
  • 服务器多节点 Grafana、Prometheus 和 Node-Exporter Docker版本部署指南
  • 【Notepad++】Notepad++如何删除包含某个字符串所在的行
  • B+ 树的实现原理与应用场景
  • 20250112面试鸭特训营第20天
  • 移动端屏幕分辨率rem,less
  • 前端开发:HTML常见标签
  • 慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)
  • Linux权限管理(用户和权限之间的关系)
  • MATLAB语言的文件操作
  • 《分布式光纤测温:解锁楼宇安全的 “高精度密码”》
  • 如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)
  • mark 一下conductor github
  • 【前端动效】原生js实现拖拽排课效果
  • 第二届城市建设与交通运输国际学术会议(UCT 2025)
  • Maven多模块项目如何灵活构建
  • 1.两数之和--力扣
  • 关于使用FastGPT 摸索的QA
  • Vue:Syntax Error: TypeError: this.getOptions is not a function的解决
  • 【Rust学习笔记】Rust 的所有权介绍
  • Python爬虫基础——selenium模块进阶(模拟鼠标操作)
  • Blender常规设置
  • SAP赋能汽车零配件行业,加速企业数字化转型