通用模型 API

为了为所有人工智能模型客户端提供一个基础,创建了通用模型 API。通过遵循通用模式,这使得向 Spring AI 贡献新的人工智能模型支持变得更加容易。以下部分介绍了这个 API。

类图

spring ai generic model api

ModelClient

ModelClient 接口提供了一个用于调用人工智能模型的通用 API。它旨在通过抽象化发送请求和接收响应的过程来处理各种类型的人工智能模型的交互。该接口使用 Java 泛型来适应不同类型的请求和响应,增强了在不同人工智能模型实现之间的灵活性和适应性。

接口定义如下:

public interface ModelClient<TReq extends ModelRequest<?>, TRes extends ModelResponse<?>> {

	/**
	 * 执行对人工智能模型的方法调用。
	 * @param request 要发送到人工智能模型的请求对象
	 * @return 来自人工智能模型的响应
	 */
	TRes call(TReq request);

}

StreamingModelClient

StreamingModelClient 接口提供了一个用于调用具有流式响应的人工智能模型的通用 API。它抽象了发送请求和接收流式响应的过程。该接口使用 Java 泛型来适应不同类型的请求和响应,增强了在不同人工智能模型实现之间的灵活性和适应性。

public interface StreamingModelClient<TReq extends ModelRequest<?>, TResChunk extends ModelResponse<?>> {

	/**
	 * 执行对人工智能模型的方法调用。
	 * @param request 要发送到人工智能模型的请求对象
	 * @return 来自人工智能模型的流式响应
	 */
	Flux<TResChunk> stream(TReq request);

}

ModelRequest

接口,表示对AI模型的请求。该接口封装了与AI模型交互所需的必要信息,包括指令或输入(泛型T类型)以及其他模型选项。它提供了一种标准化的方式来向AI模型发送请求,确保所有必要的细节都包含在内,并且可以轻松管理。

public interface ModelRequest<T> {

	/**
	 * 获取AI模型所需的指令或输入。
	 * @return AI模型所需的指令或输入
	 */
	T getInstructions(); // required input

	/**
	 * 获取AI模型交互的可定制选项。
	 * @return AI模型交互的可定制选项
	 */
	ModelOptions getOptions();

}

ModelOptions

接口,表示AI模型交互的可定制选项。此标记接口允许指定各种设置和参数,这些设置和参数可以影响AI模型的行为和输出。它旨在在不同的AI场景中提供灵活性和适应性,确保可以根据特定要求对AI模型进行微调。

public interface ModelOptions {

}

ModelResponse

接口,表示从AI模型接收到的响应。该接口提供了访问由AI模型生成的主要结果或结果列表以及响应元数据的方法。它作为一种标准化的方式来封装和管理来自AI模型的输出,确保轻松检索和处理生成的信息。

public interface ModelResponse<T extends ModelResult<?>> {

	/**
	 * 获取AI模型的结果。
	 * @return AI模型生成的结果
	 */
	T getResult();

	/**
	 * 获取AI模型生成的输出列表。
	 * @return 生成的输出列表
	 */
	List<T> getResults();

	/**
	 * 获取与AI模型响应相关的响应元数据。
	 * @return 响应元数据
	 */
	ResponseMetadata getMetadata();

}
以下是您提供的 HTML 片段的翻译:

模型结果

这个接口提供了访问 AI 模型主要输出和与该结果相关的元数据的方法。它旨在提供一种标准化和全面的方式来处理和解释 AI 模型生成的输出。
public interface ModelResult<T> {

    /**
     * 获取 AI 模型生成的输出。
     * @return AI 模型生成的输出
     */
    T getOutput();

    /**
     * 获取与 AI 模型结果相关的元数据。
     * @return 与结果相关的元数据
     */
    ResultMetadata getMetadata();

}