Kihagyás

Spring AI - Tool

pom.xml

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>2.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

Tool

@Service
public class TodoTools {

    private final List<String> items = new ArrayList<>();

    @Tool(description = "Add an item to the todo list")
    String addTodo(String item) {
        items.add(item);
        return "Added: " + item;
    }

    @Tool(description = "List all todo items")
    List<String> listTodos() {
        return items.isEmpty() ? List.of("The list is empty.") : items;
    }
}

Config

@Bean
ChatClient chatClient(ChatClient.Builder builder, TodoTools todoTools) {
    return builder.defaultTools(todoTools).build();
}

application.yaml

spring:
  ai:
    openai:
      base-url: https://example.com/
      api-key: shhh
      chat:
        options:
          model: Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf

ChatController

@RestController
public class ChatController {

    private final ChatClient chatClient;

    public ChatController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return chatClient.prompt().user(message).call().content();
    }
}

Curl

curl --get --data-urlencode "message=Add to list: cleaning" localhost:8080/chat
curl --get --data-urlencode "message=What does the list contain?" localhost:8080/chat