本文將介紹集成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方式,并未涉及其它特殊三方包的引用。
添加服務開發基礎框架
- 導入導入服務基礎依賴包
倉庫地址: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:{