Spring AI 1.0.0 M1 发布

2024年 5月 30日 49.8k 0

Spring AI 1.0.0 Milestone 1 版本现已发布,具有以下新功能和改进:

ChatClient Fluent API

Fluent API 提供了构造 Prompt 的方法,然后将其作为输入传递给 AI 模型。用户可以使用ChatClient.Builder对象创建一个ChatClient。可以从 Spring Boot 自动配置中获取自动配置的ChatClient.Builder对象,也可以通过编程方式创建一个。

示例:

@RestController
class MyController {

    private final ChatClient chatClient;

    MyController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/ai")
    String generation(String userInput) {
        return this.chatClient.prompt()
            .user(userInput)
            .call()
            .content();
    }
}

user方法设置 prompt 的用户文本。call方法调用 AI 模型,提供各种重载以返回响应。在本例中,content方法返回一个字符串。

还可以响应式调用 AI 模型(using WebClient under the covers),如下所示。

Flux<String> output = chatClient.prompt()
    .user("Tell me a joke")
    .stream()
    .content();

一个常见用例是从对 AI 模型的调用返回 JSON。使用entity方法可以轻松实现这一点。

record ActorFilms(String actor, List<String> movies) {
}

ActorFilms actorFilms = chatClient.prompt()
    .user("Generate the filmography for a random actor.")
    .call()
    .entity(ActorFilms.class);

@Configuration类中创建时ChatClient,可以指定默认值,例如系统文本。这种设计时和运行时的分离使得运行时代码最少,只需要属性占位符值。例如:

@Configuration
class Config {

    @Bean
    ChatClient chatClient(ChatClient.Builder builder) {
        return builder.defaultSystem("You are a friendly chat bot that answers question in the voice of a {voice}")
                .build();
    }

}

@RestController
class AIController {
	private final ChatClient chatClient
	AIController(ChatClient chatClient) {
		this.chatClient = chatClient;
	}
	@GetMapping("/ai")
	Map<String, String> completion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message, String voice) {
		return Map.of(
				"completion",
				chatClient.prompt()
						.system(sp -> sp.param("voice", voice))
						.user(message)
						.call()
						.content());
	}
}

评估(Evaluation)

帮助解决 AI 幻觉问题。用户可以使用一个 AI 模型来评估另一个 AI 模型的响应是否准确。初步使用的是一个简单的RelevancyEvaluator,但事实证明也非常有用,在 1.0 M2 中还会有所新增。

dataController.delete();
dataController.load();

String userText = "What is the purpose of Carina?";

ChatResponse response = ChatClient.builder(chatModel)
        .build().prompt()
        .advisors(new QuestionAnswerAdvisor(vectorStore, SearchRequest.defaults()))
        .user(userText)
        .call()
        .chatResponse();

var relevancyEvaluator = new RelevancyEvaluator(ChatClient.builder(chatModel));

EvaluationRequest evaluationRequest = new EvaluationRequest(userText,
        (List<Content>) response.getMetadata().get(QuestionAnswerAdvisor.RETRIEVED_DOCUMENTS), response);

EvaluationResponse evaluationResponse = relevancyEvaluator.evaluate(evaluationRequest);

assertTrue(evaluationResponse.isPass(), "Response is not relevant to the question");

新的 AI 模型

  • Bedrock Anthropic Claude 3 - ben-gineer
  • Watson AI - PabloSanchi
  • OpenAI Speech - hemeda3
  • Multi-modality support for OpenAI
  • AWS Bedrock claude3
  • MiniMax - mxsl-gr
  • ZhiPu - mxsl-gr
  • Azure Open AI image generation - bmoussaud

更新模型

  • OpenAI - 支持 GPT4o 和多模态
  • Google Gemini Pro 1.5 pro、flash 等
  • Anthropic function calling
  • Ollama 多模态支持
  • 改进了 streaming function calling 支持 - Grogdunn

新的 Vector Stores

  • Apache Cassandra - michaelsembwever
  • Elastic Search - JM-Lab
  • MongoDB Atlas - Kirbstomper
  • SAP HanaDB - rahulmitt

Test Container 支持

Spring AI 提供 Testcontainer 支持,用于在测试中或通过 docker compose 启动向量存储数据库。

更多详情可查看官方博客。

相关文章

塑造我成为 CTO 之路的“秘诀”
“人工智能教母”的公司估值达 10 亿美金
教授吐槽:985 高校成高级蓝翔!研究生基本废了,只为房子、票子……
Windows 蓝屏中断提醒开发者:Rust 比 C/C++ 更好
Claude 3.5 Sonnet 在伽利略幻觉指数中名列前茅
上海新增 11 款已完成登记生成式 AI 服务

发布评论