SpringAI整合OpenAI系列(二)

SpringAI整合OpenAI系列(二)

一、提示词(Prompt)

Prompt:引导 AI 模型生成特定输出的输入格式,Prompt 的设计和措辞会显著影响模型的响应,讲点人话就是:你和AI对话的内容。 Prompt在最初只是简单的内容的问答,随着模型不断的完整和发展OpenAI总结了6种比较好的策略,被称之为Prompt engineering分别是:

  • Write clear instructions: 清晰的表达

  • Provide reference text: 相应参考格式

  • Split complex tasks into simpler subtasks: 拆解问题

  • Give the model time to "think"

  • Use external tools

  • Test changes systematically

清晰的问答策略,能够使得模型更容易理解你的需求,从而保证程序运行的稳定。所以在设计问题的时候,尽量遵循这些原则,使得大模型能够提供符合需求的答案。

二、Structured Outputs结构化输出

在程序设计中,非结构化的数据,我们很难对数据进行解析和处理,标准的结构化内容的输出,可以便于系统集成,所以我们需要利用SpringAI中的结构化输出的能力,集成对大模型的调用。

三、代码实现

按照以上两个概念,我们来具体实现我们的功能,需求是这样的,我需要对大模型对话,要求返回结构化的数据。

Spring AI中将数据结构化输出的实现类
org.springframework.ai.converter.BeanOutputConverter

你会发现这个convert方法的主要目的将你需要返回的数据结构,告诉大模型,然后大模型返回了一个可序列化的一个对象。

接下来,我们根据这个原理来实现功能。主要的思路是参考 BeanOutputConverter,改写成我们自己的对象。由于我们定义的字段很多时候没有严格遵循英文命名规范,因此在字段类名上,我们应该加入一些注释或说明,以便将提问请求转化为封装好的提示词,最终返回相应的数据结构。

/**
 * 这个是结构化输出的封装类
 * @param <T>
 */
public class DataBeanOutputConverter<T> implements StructuredOutputConverter<T> {

    private final Logger logger;
    private final Type type;
    private final ObjectMapper objectMapper;
    private String jsonSchema;

    public DataBeanOutputConverter(Class<T> clazz) {
        this(ParameterizedTypeReference.forType(clazz));
    }

    public DataBeanOutputConverter(Class<T> clazz, ObjectMapper objectMapper) {
        this(ParameterizedTypeReference.forType(clazz), objectMapper);
    }

    public DataBeanOutputConverter(ParameterizedTypeReference<T> typeRef) {
        this((Type)typeRef.getType(), (ObjectMapper)null);
    }

    public DataBeanOutputConverter(ParameterizedTypeReference<T> typeRef, ObjectMapper objectMapper) {
        this(typeRef.getType(), objectMapper);
    }

    private DataBeanOutputConverter(Type type, ObjectMapper objectMapper) {
        this.logger = LoggerFactory.getLogger(BeanOutputConverter.class);
        Objects.requireNonNull(type, "Type cannot be null;");
        this.type = type;
        this.objectMapper = objectMapper != null ? objectMapper : this.getObjectMapper();
        this.generateSchema();
    }

    private void generateSchema() {
      &nb
### 将 Spring AI 与 DeepSeek 集成并使用 OpenAI API 为了使应用程序能够利用 Spring AI 并通过 DeepSeek 的 OpenAI 兼容模式进行交互,开发者需遵循特定配置流程[^1]。 #### 准备工作环境 确保项目已引入必要的依赖库。对于 Maven 构建工具而言,在 `pom.xml` 文件内添加如下依赖项: ```xml <dependency> <groupId>com.deepseek</groupId> <artifactId>deepseek-openai-client</artifactId> <version>${latest.version}</version> </dependency> ``` #### 创建客户端实例 创建一个用于访问 DeepSeek 接口的服务类,并初始化支持 OpenAI 协议的客户对象。这允许应用层逻辑如同直接面对官方服务般简洁明了地发起请求。 ```java import com.deepseek.openai.client.OpenAIClient; import org.springframework.stereotype.Service; @Service public class AiService { private final OpenAIClient client; public AiService() { this.client = new OpenAIClient("your_api_key", "https://api.deepseek.com/v1"); } // 方法定义... } ``` #### 发起 API 请求 借助于上述构建好的 `client` 对象执行具体的自然语言处理任务或其他智能计算功能。例如发送提示词获取回复内容的操作可参照下面代码片段所示方式完成。 ```java String response = client.createChatCompletion( Arrays.asList(new ChatMessage(ChatRole.USER, "你好")), Model.ID_003, null ); System.out.println(response); ``` 以上过程展示了怎样快速搭建基于 Java 技术栈的应用程序框架,从而有效连接至第三方提供的先进人工智能服务平台——DeepSeek,同时享受后者所提供的广泛兼容性和便捷易用性的双重优势。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值