From 20852c45fd6b90635d827b238408f4bcb3ed077d Mon Sep 17 00:00:00 2001 From: Alexandre Roman Date: Tue, 11 Jun 2024 11:46:59 +0200 Subject: [PATCH] Add doc --- README.md | 243 +++++++++++++++++++++++++++++++++++++++++++++++++++ chat-api.png | Bin 0 -> 45836 bytes 2 files changed, 243 insertions(+) create mode 100644 README.md create mode 100644 chat-api.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..8090fe3 --- /dev/null +++ b/README.md @@ -0,0 +1,243 @@ +# Spring AI in action + +This project showcases the use of [Spring AI](https://spring.io/projects/spring-ai) +to bring AI features to your Spring application. + +Using Spring AI, you can leverage a wide range of AI providers +(such as OpenAI, Mistral AI, Google Gemini and many others) along with additional services +such as vector databases. + +Spring AI provides an abstraction layer over AI providers API: this way you can focus +on your code by using the same API, no matter what AI provider you pick. + +![Screenshot of an application using Spring AI ChatModel API ](chat-api.png) + +This repository includes a few demos you can run to learn about Spring AI. + +## How to build and run this app? + +You need Java 21+ to build and run this app. + +Use this command to build the app: + +```shell +./mvnw clean package +``` + +Before running this app, make sure you have Docker daemon running, +along with Docker Compose. + +Use this command to bootstrap a Redis database +(which is used by some demos available in this app): + +```shell +docker compose up +``` + +You can run this app using this command: + +```shell +./mvnw spring-boot:run +``` + +The app will automatically bind to the Redis database running as a container. + +## AI providers + +This application has been tested with 3 AI providers: + +- OpenAI with `gpt4o` +- Mistral AI with `open-mixtral-8x22b` +- Ollama (local) running Mistral AI with model `mistral` + +Please note that those models are not created equal: some features (such as function calling) +may not properly work depending on the model you pick. + +You may run this app with additional AI providers and/or models, providing you add the right +Spring AI dependency provider in the file [pom.xml](pom.xml) along with the configuration. + +### OpenAI + +You need an OpenAI API key to run this app. +[Refer to this page](https://help.openai.com/en/articles/4936850-where-do-i-find-my-openai-api-key) +to create and get an API key. + +Set your API key as an environment variable: + +```shell +export OPENAI_API_KEY=xxxxxx +``` + +Set `openai` as the AI provider: + +```shell +export APP_AI_PROVIDER=openai +``` + +### Mistral AI + +You need a Mistral AI API key to run this app. +[Refer to this page](https://console.mistral.ai/api-keys/) +to create and get an API key. + +Set your API key as an environment variable: + +```shell +export MISTRALAI_API_KEY=xxxxxx +``` + +Set `mistralai` as the AI provider: + +```shell +export APP_AI_PROVIDER=mistralai +``` + +### Ollama (local) + +Using [Ollama](https://www.ollama.com/) you can run a LLM on your workstation. +Follow [these instructions](https://www.ollama.com/download) to download and install Ollama. + +Start Ollama using this command: + +```shell +ollama serve +``` + +Use this command to download the Mistral AI model for Ollama + +```shell +ollama pull mistral +``` + +## Demos + +### Chat API + +[Basic use](src/main/java/com/broadcom/tanzu/demos/springai101/chat/ChatV1Controller.java) +of the Spring AI `ChatClient`: + +```shell +http ":8080/chat/v1?q=How are you today?" +``` + +[Prompt templating](src/main/java/com/broadcom/tanzu/demos/springai101/chat/ChatV2Controller.java): + +```shell +http ":8080/chat/v2?topic=devops" +``` + +[Stateless chat conversations](src/main/java/com/broadcom/tanzu/demos/springai101/hello/HelloController.java): + +```shell +http ":8080/hello" +``` + +[Stateful chat conversations](src/main/java/com/broadcom/tanzu/demos/springai101/hello/HelloController.java) +(keep track of previous messages): + +```shell +http ":8080/hello-memory" +``` + +[Converting chat responses](src/main/java/com/broadcom/tanzu/demos/springai101/chat/ChatV3Controller.java) +to Java entities: + +```shell +http ":8080/chat/v3?topic=devops" +``` + +Same as above with content negotiation (prioritizing XML output): + +```shell +http ":8080/chat/v3?topic=devops" Accept:text/xml +``` + +### Retrieval Augmented Generation (RAG) + +[Load and index data](src/main/java/com/broadcom/tanzu/demos/springai101/movies/MovieDatasetLoader.java) +(this task actually processes input files in background): + +```shell +http ":8080/movies/init" +``` + +[Create a new movie](src/main/java/com/broadcom/tanzu/demos/springai101/movies/MoviesController.java) +using 2 movie titles: + +```shell +http ":8080/movies?titles=Lord of the Rings,Despicable Me" +``` + +Same as above but using genre drama (default is comedy): + +```shell +http ":8080/movies?titles=Furiosa,Snow White&genre=drama" +``` + +Same as above but translating the result into french: + +```shell +http ":8080/movies?titles=Ghostbusters,Despicable Me&genre=drama&lang=fr" +``` + +Clear the database (make sure you restart the app after running this command): + +```shell +redis-cli flushdb +``` + +### Function Calling + +Verify that the AI provider has no way to figure out current weather +if no function is registered: + +```shell +http ":8080/chat/v1?q=Should I bring my sunglasses when I'll get to Paris later today?" +``` + +[Call an inline function](src/main/java/com/broadcom/tanzu/demos/springai101/weather/WeatherV1Controller.java): + +```shell +http ":8080/weather/v1?city=Paris" +``` + +[Call a function](src/main/java/com/broadcom/tanzu/demos/springai101/weather/WeatherV2Controller.java) +and map the result to a Java entity: + +```shell +http ":8080/weather/v2?city=Paris" +``` + +[Using functions](src/main/java/com/broadcom/tanzu/demos/springai101/weather/WeatherV3Controller.java), +verify that the AI provider can now answer weather related questions: + +```shell +http ":8080/weather/v3?q=Should I bring my sunglasses when I'll get to Paris later today?" +``` + +Same as above but using a complex query involving many cities: + +```shell +http ":8080/weather/v3?q=Sort the top 5 most populated cities in France by temperature." +``` + +### Multimodal Prompts + +[Combining text, image and functions](src/main/java/com/broadcom/tanzu/demos/springai101/weather/WeatherV4Controller.java) +to answer a question, mapping the result to a JSON structure: + +```shell +http ":8080/weather/v4?u=https://live.staticflickr.com/65535/53740887101_423088be82_c_d.jpg" +``` + +## Contribute + +Contributions are always welcome! + +Feel free to open issues & send PR. + +## License + +Copyright © 2024 [Broadcom, Inc. or its affiliates](https://vmware.com). + +This project is licensed under the [Apache Software License version 2.0](https://www.apache.org/licenses/LICENSE-2.0). diff --git a/chat-api.png b/chat-api.png new file mode 100644 index 0000000000000000000000000000000000000000..91f35f10ae736b2e3de25e43d23bf8094c35c6e2 GIT binary patch literal 45836 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
    ?MLs*Y%1>4VZ+d=Mp(TNR$^Kbw-$Q9 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