Spring AI 與 Ollama 工具支援

工程 | Christian Tzolov | 2024 年 7 月 26 日 | ...

本週稍早,Ollama 推出 一項令人振奮的新功能:大型語言模型 (LLM) 的工具支援。

今天,我們很高興地宣布 Spring AI (1.0.0-SNAPSHOT) 已完全採用此強大功能,將 Ollama 的函數呼叫功能帶入 Spring 生態系統。

Ollama 的工具支援讓模型能夠決定何時呼叫外部函數以及如何使用傳回的資料。 這開啟了無限可能,從存取即時資訊到執行複雜的計算。 Spring AI 採用此概念,並將其與 Spring 生態系統無縫整合,讓 Java 開發人員能夠在他們的應用程式中輕鬆地運用此功能。 Spring AI 的 Ollama 函數呼叫支援的主要功能包括

  • 輕鬆整合:將您的 Java 函數註冊為 Spring bean,並與 Ollama 模型一起使用。
  • 彈性配置:有多種方法可以註冊和配置函數。
  • 自動 JSON Schema 產生:Spring AI 會處理將您的 Java 方法轉換為 Ollama 可以理解的 JSON schema。
  • 支援多個函數:在單一聊天會話中註冊和使用多個函數。
  • 執行時期函數選擇:動態選擇要為每個提示啟用的函數。
  • 程式碼可攜性:重複使用您的應用程式程式碼,無需更改,即可與不同的 LLM 提供者(例如 OpenAI、Mistral、VertexAI、Anthropic、Groq)搭配使用,而無需更改程式碼。

運作方式

  • 定義自訂 Java 函數,並向 Spring AI 註冊它們。

Restored Spring AI (1)

  • 執行可能需要函數呼叫才能完成答案的聊天請求。
  • 當 AI 模型確定需要呼叫函數時,它會產生一個 JSON 物件,其中包含函數名稱和引數。
  • Spring AI 會攔截此請求、呼叫您的 Java 函數,並將結果傳回給模型。
  • 模型將函數的輸出整合到其回應中。

開始使用

先決條件

您首先需要在您的本機機器上執行 Ollama (0.2.8+)。請參考官方 Ollama 專案 README 以開始在本機機器上執行模型。然後提取支援工具的模型,例如 Llama 3.1MistralFirefunction v2Command-R +... 支援的模型清單可以在模型頁面的工具類別下找到。

ollama run mistral

相依性

若要開始將 Ollama 函數呼叫與 Spring AI 搭配使用,請將下列相依性新增至您的專案

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>

請參考相依性管理章節以將 Spring AI BOM 新增至您的建置檔案。

範例

以下是如何將 Ollama 函數呼叫與 Spring AI 搭配使用的簡單範例

@SpringBootApplication
public class OllamaApplication {

	public static void main(String[] args) {
		SpringApplication.run(OllamaApplication.class, args);
	}

	@Bean
	CommandLineRunner runner(ChatClient.Builder chatClientBuilder) {
		return args -> {
			var chatClient = chatClientBuilder.build();

			var response = chatClient.prompt()
				.user("What is the weather in Amsterdam and Paris?")
				.functions("weatherFunction") // reference by bean name.
				.call()
				.content();

			System.out.println(response);
		};
	}

	@Bean
	@Description("Get the weather in location")
	public Function<WeatherRequest, WeatherResponse> weatherFunction() {
		return new MockWeatherService();
	}

	public static class MockWeatherService implements Function<WeatherRequest, WeatherResponse> {

		public record WeatherRequest(String location, String unit) {}
		public record WeatherResponse(double temp, String unit) {}

		@Override
		public WeatherResponse apply(WeatherRequest request) {
			double temperature = request.location().contains("Amsterdam") ? 20 : 25;
			return new WeatherResponse(temperature, request.unit);
		}
	}
}

在此範例中,當模型需要天氣資訊時,它會自動呼叫 weatherFunction bean,然後可以提取即時天氣資料。

預期的回應看起來像這樣:"阿姆斯特丹目前的天氣是攝氏 20 度,巴黎目前的天氣是攝氏 25 度。"

完整的範例程式碼可在以下位置取得:https://github.com/tzolov/ollama-tools

OpenAI 相容性

Ollama 與 OpenAI API 相容,您可以使用 Spring AI OpenAI 用戶端與 Ollama 通訊並使用工具。 為此,您需要使用 OpenAI 用戶端,但設定 base-url:spring.ai.openai.chat.base-url=https://127.0.0.1:11434 並選擇提供的 Ollama Tools 模型之一:spring.ai.openai.chat.options.model=mistral

請查看 OllamaWithOpenAiChatModelIT.java 測試,以取得透過 Spring AI OpenAI 使用 Ollama 的範例。

限制

如 Ollama 部落格文章中所述,目前他們的 API 不支援 Streaming Tool Calls 也不支援 Tool choice

一旦解決這些限制,Spring AI 也已準備好為其提供支援。

更多資訊

結論

透過在 Ollama 的創新工具支援上建構,並將其整合到 Spring 生態系統中,Spring AI 為 Java 開發人員建立了一種強大的新方法來建立 AI 增強型應用程式。 此功能開啟了令人興奮的可能性,可以建立更動態和反應靈敏的 AI 驅動系統,這些系統可以與真實世界的資料和服務互動。

使用 Spring AI 的 Ollama 函數呼叫的一些優點包括

  • 擴展 AI 功能:使用自訂功能和即時資料輕鬆擴充 AI 模型。
  • 無縫整合:在您的 AI 應用程式中運用現有的 Spring bean 和基礎架構。
  • 類型安全開發:使用強型別 Java 函數,而不是處理原始 JSON。
  • 減少樣板程式碼:Spring AI 會處理函數呼叫的複雜性,讓您可以專注於您的業務邏輯。

我們鼓勵您試用這項新功能,並告訴我們您如何在您的專案中使用它。 如需更詳細的資訊和進階用法,請查看我們的官方文件。

使用 Spring AI 和 Ollama 開心編碼!

取得 Spring 電子報

透過 Spring 電子報保持聯繫

訂閱

搶先一步

VMware 提供訓練和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將舉行的活動

查看 Spring 社群所有即將到來的活動。

查看全部