精品一区二区三区在线成人,欧美精产国品一二三区,Ji大巴进入女人66h,亚洲春色在线视频

Java AI 實戰:本地模型JSON結構化輸出

人工智能
Ollama 的結構化輸出功能為我們提供了一種強大的方式來集成 AI 能力到現有系統中。通過使用 JSON 格式,我們可以更容易地處理和使用 AI 生成的內容。

在人工智能和機器學習領域,大語言模型(LLM)的應用日益廣泛。Ollama 作為一個強大的開源 LLM 工具,不僅可以進行自然語言對話,還能生成結構化的輸出數據。本文將詳細介紹如何使用 Ollama 生成 JSON 格式的輸出,并提供完整的 Java 實現方案。

注意:本文采用原生 HTTP 調用方式實現與 Ollama 的交互,不依賴任何第三方 SDK(如 Spring AI、LangChain4j 等)。這種方式可以讓你更好地理解底層實現原理,并且可以根據實際需求自由選擇是否使用其他 SDK。

為什么選擇結構化輸出?

在實際應用中,我們經常需要將 LLM 的輸出集成到現有的系統中。這時,結構化的輸出格式(如 JSON)就顯得尤為重要:

  1. 易于解析:JSON 是一種標準的數據交換格式,可以輕松地轉換為編程語言中的對象
  2. 結構清晰:相比于純文本輸出,JSON 的層次結構更加清晰
  3. 便于集成:可以輕松地集成到現有的系統和工作流程中

技術實現

1. 環境準備

首先,我們需要在本地環境中安裝并運行 Ollama。

macOS 安裝

# 使用 Homebrew 安裝
brew install ollama

Linux 安裝

# 使用官方腳本安裝
curl -fsSL https://ollama.com/install.sh | sh

啟動 Ollama 服務

安裝完成后,在終端運行:

# 啟動 Ollama 服務
ollama serve

拉取并運行模型

打開新的終端窗口,運行以下命令拉取通義千問2.5模型:

# 拉取通義千問2.5 32B參數量模型
ollama pull qwen2.5:32b

你可以通過以下命令測試模型是否正常工作:

# 測試模型
ollama run qwen2.5:32b "你好,請做個自我介紹"

驗證 API 服務

確保 Ollama API 服務正常運行:

# 測試 API 服務是否正常
curl http://localhost:11434/api/version

如果返回版本信息,說明服務已經準備就緒。

2. Java 代碼實現

我們將使用 Spring Boot 框架來實現一個簡單的示例。首先創建必要的 POJO 類:

@Data
@Builder
public class ChatMessage {
    private String role;
    private String content;
}

@Data
@Builder
public class ChatCompletionRequest {
    private String model;
    private List<ChatMessage> messages;
    private String format;
}

@Data
public class ChatCompletionResponse {
    private String model;
    private String createdAt;
    private ChatMessage message;
    private String done;
}

接下來,實現調用 Ollama API 的服務類:

@Service
@Slf4j
public class ChatCompletionService {
    private static final String API_ENDPOINT = "http://localhost:11434/api/chat";
    private final RestTemplate restTemplate;

    public ChatCompletionService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String generateStructuredResponse(String prompt) {
        ChatCompletionRequest request = ChatCompletionRequest.builder()
            .model("qwen2.5:32b")
            .messages(List.of(ChatMessage.builder()
                .role("user")
                .content(prompt)
                .build()))
            .format("json")
            .build();

        ResponseEntity<ChatCompletionResponse> response = restTemplate.postForEntity(
            API_ENDPOINT,
            request,
            ChatCompletionResponse.class
        );

        return Optional.ofNullable(response.getBody())
            .map(ChatCompletionResponse::getMessage)
            .map(ChatMessage::getContent)
            .orElse("");
    }
}

實踐示例

讓我們通過一個具體的例子來說明如何使用這個系統。假設我們想要獲取一款車型的推薦信息:

String prompt = """
    請生成問界M9車型的推薦信息,返回JSON格式,結構如下:
    {
        "model": string,
        "brand": string,
        "priceRange": string,
        "powerType": string,
        "scenarios": string[],
        "advantages": string[],
        "recommendation": {
            "trim": string,
            "color": string,
            "options": string[]
        }
    }
    """;

String response = chatCompletionService.generateStructuredResponse(prompt);

Ollama 會返回類似這樣的 JSON 響應:

{
    "model": "問界M9",
    "brand": "問界AITO",
    "priceRange": "50-70萬元",
    "powerType": "增程式混動",
    "scenarios": [
        "商務接待",
        "家庭出行",
        "長途旅行",
        "城市通勤"
    ],
    "advantages": [
        "華為智能座艙",
        "超大空間",
        "豪華舒適",
        "智能駕駛",
        "低油耗"
    ],
    "recommendation": {
        "trim": "旗艦版",
        "color": "星際銀",
        "options": [
            "全自動泊車輔助",
            "行政座椅套件",
            "全景天幕"
        ]
    }
}

最佳實踐

在使用 Ollama 生成結構化輸出時,有以下幾點建議:

  1. 明確的提示詞:在提示詞中明確指定你期望的 JSON 結構,并指定format json
  2. 錯誤處理:添加適當的錯誤處理機制,因為 LLM 的輸出可能不總是完全符合預期
  3. 輸出驗證:使用 JSON Schema 驗證輸出的格式是否符合要求
  4. 性能優化:考慮添加緩存機制,避免重復請求相同的內容

結論

Ollama 的結構化輸出功能為我們提供了一種強大的方式來集成 AI 能力到現有系統中。通過使用 JSON 格式,我們可以更容易地處理和使用 AI 生成的內容。本文提供的 Java 實現方案可以作為一個起點,幫助你開始使用 Ollama 的結構化輸出功能。

責任編輯:武曉燕 來源: JAVA架構日記
相關推薦

2025-06-12 02:30:00

人工智能LLM大語言模型

2018-04-03 14:00:03

結構化數據非結構化數據數據庫

2021-12-12 08:37:18

結構化數據非結構化數據數據

2023-12-25 15:00:18

結構化布線光纖

2024-05-27 00:32:45

2025-03-12 06:55:00

2025-09-02 01:25:00

LangGraph智能體格式化

2024-08-08 12:44:40

2024-07-17 09:47:18

2025-08-14 13:37:36

2023-05-13 00:06:33

2012-02-08 15:54:05

ibmdw

2009-10-16 12:55:27

結構化布線系統

2009-10-15 13:49:23

結構化布線系統

2011-03-01 09:39:51

結構化布線

2022-07-04 22:08:52

結構化數據谷歌

2009-10-21 15:20:28

結構化布線技術

2023-07-25 17:21:20

綜合布線結構化布線

2021-12-29 10:51:19

JavaSPL架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 南漳县| 辽宁省| 玉环县| 璧山县| 镇巴县| 鹤岗市| 昔阳县| 资源县| 六安市| 济源市| 高台县| 嘉祥县| 定州市| 鄂尔多斯市| 西贡区| 桦甸市| 乐亭县| 夏河县| 凤凰县| 淮阳县| 怀安县| 大冶市| 新疆| 萍乡市| 射阳县| 灵台县| 五大连池市| 建阳市| 博罗县| 威信县| 武邑县| 漳州市| 博湖县| 嘉兴市| 泗水县| 鄄城县| 来安县| 东阿县| 新郑市| 怀宁县| 隆化县|