当前位置: 首页 > wzjs >正文

做h5最好的网站dede手机网站教程

做h5最好的网站,dede手机网站教程,wordpress目录分类如何使用方法,wordpress价格计算探索 Spring AI 的 ChatClient API:构建智能对话应用的利器 前言 在当今人工智能蓬勃发展的时代,智能对话系统成为了众多应用的核心组成部分。无论是客服机器人、智能助手还是聊天应用,都离不开高效、灵活的对话处理能力。Spring AI 作为 S…

探索 Spring AI 的 ChatClient API:构建智能对话应用的利器

前言

在当今人工智能蓬勃发展的时代,智能对话系统成为了众多应用的核心组成部分。无论是客服机器人、智能助手还是聊天应用,都离不开高效、灵活的对话处理能力。Spring AI 作为 Spring 生态系统中专注于人工智能的框架,为开发者提供了强大的工具和功能。其中,ChatClient API 是一个关键组件,它提供了与 AI 模型进行通信的流畅接口,支持同步和流式编程模型,极大地简化了开发智能对话应用的过程。本文将深入探讨 Spring AI 的 ChatClient API,介绍其使用方法、特性以及如何利用它构建强大的智能对话应用。

一、ChatClient 的创建

1.1 使用自动配置的 ChatClient.Builder

Spring AI 提供了 Spring Boot 自动配置,可创建一个原型 ChatClient.Builder bean,方便注入到类中。以下是一个简单的示例:

@RestController
class MyController {private final ChatClient chatClient;public MyController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}@GetMapping("/ai")String generation(String userInput) {return this.chatClient.prompt().user(userInput).call().content();}
}

在这个示例中,用户输入设置用户消息的内容,call() 方法向 AI 模型发送请求,content() 方法将 AI 模型的响应作为字符串返回。

1.2 以编程方式创建 ChatClient

如果需要禁用自动配置,可以通过设置属性 spring.ai.chat.client.enabled=false。然后,根据需要创建 ChatClient.Builder 实例:

ChatModel myChatModel = ... // usually autowiredChatClient.Builder builder = ChatClient.builder(this.myChatModel);// or create a ChatClient with the default builder settings:ChatClient chatClient = ChatClient.create(this.myChatModel);

二、ChatClient Fluent API

ChatClient 的 Fluent API 允许使用重载的 prompt 方法启动流式 API,支持多种方式构建提示信息:

  • prompt():不带参数,允许开始构建用户、系统和提示的其他部分。
  • prompt(Prompt prompt):接受 Prompt 参数,允许传入 Prompt 实例。
  • prompt(String content):获取用户的文本内容。

三、ChatClient 响应处理

3.1 返回 ChatResponse

AI 模型的响应是一个丰富的结构 ChatResponse,包含有关响应生成方式的元数据和多个响应。可以通过调用 chatResponse() 方法获取:

ChatResponse chatResponse = chatClient.prompt().user("Tell me a joke").call().chatResponse();

3.2 返回实体

可以使用 entity() 方法将返回的字符串转换为实体类。例如,对于 Java 记录 ActorFilms

record ActorFilms(String actor, List<String> movies) {}ActorFilms actorFilms = chatClient.prompt().user("Generate the filmography for a random actor.").call().entity(ActorFilms.class);

还支持泛型列表的转换:

List<ActorFilms> actorFilms = chatClient.prompt().user("Generate the filmography of 5 movies for Tom Hanks and Bill Murray.").call().entity(new ParameterizedTypeReference<List<ActorFilms>>() {});

3.3 流式响应

使用 stream() 方法可以获得异步响应:

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

也可以流式传输 ChatResponse

Flux<ChatResponse> chatResponse = chatClient.prompt().user("Tell me a joke").stream().chatResponse();

四、使用默认值

@Configuration 类中创建 ChatClient 可以简化运行时代码,通过设置默认值,避免在每个请求中重复设置系统文本。

4.1 默认系统文本

@Configuration
class Config {@BeanChatClient chatClient(ChatClient.Builder builder) {return builder.defaultSystem("You are a friendly chat bot that answers question in the voice of a Pirate").build();}}@RestController
class AIController {private final ChatClient chatClient;AIController(ChatClient chatClient) {this.chatClient = chatClient;}@GetMapping("/ai/simple")public Map<String, String> completion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("completion", this.chatClient.prompt().user(message).call().content());}
}

4.2 带参数的默认系统文本

@Configuration
class Config {@BeanChatClient 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",this.chatClient.prompt().system(sp -> sp.param("voice", voice)).user(message).call().content());}}

五、顾问(Advisors)

Advisors API 提供了一种灵活而强大的方法来拦截、修改和增强 Spring 应用程序中的 AI 驱动的交互。常见的使用场景是在提示中附加上下文数据,如对话历史记录或自定义数据。

5.1 ChatClient 中的 Advisor 配置

ChatClient.builder(chatModel).build().prompt().advisors(new MessageChatMemoryAdvisor(chatMemory),new QuestionAnswerAdvisor(vectorStore)).user(userText).call().content();

在这个配置中,MessageChatMemoryAdvisor 将首先执行,将对话历史记录添加到提示符中,然后 QuestionAnswerAdvisor 将根据用户的问题和添加的对话历史记录执行搜索,提供更相关的结果。

5.2 不同类型的 Advisor 实现

  • MessageChatMemoryAdvisor:检索内存并将其作为消息集合添加到提示符中。
  • PromptChatMemoryAdvisor:检索内存并将其添加到提示的系统文本中。
  • VectorStoreChatMemoryAdvisor:允许指定 VectorStore 实例、默认对话 ID、聊天历史记录窗口大小和顺序。

六、日志记录

SimpleLoggerAdvisor 是一个用于记录 ChatClient 请求和响应数据的顾问,可用于调试和监控 AI 交互。要启用日志记录,将其添加到顾问链中,并设置日志级别为 DEBUG:

ChatResponse response = ChatClient.create(chatModel).prompt().advisors(new SimpleLoggerAdvisor()).user("Tell me a joke?").call().chatResponse();

application.propertiesapplication.yaml 文件中添加:

logging.level.org.springframework.ai.chat.client.advisor=DEBUG

七、聊天内存(Chat Memory)

ChatMemory 接口表示聊天对话历史的存储,提供了添加消息、检索消息和清除对话历史的方法。目前有四种实现:InMemoryChatMemoryCassandraChatMemoryNeo4jChatMemoryJdbcChatMemory,分别提供了内存存储、Cassandra 持久化存储、Neo4j 持久化存储和 JDBC 持久化存储。

7.1 CassandraChatMemory

CassandraChatMemory.create(CassandraChatMemoryConfig.builder().withTimeToLive(Duration.ofDays(1)).build());

7.2 Neo4jChatMemory

支持多个配置参数,可通过属性文件进行配置。

7.3 JdbcChatMemory

JdbcChatMemory.create(JdbcChatMemoryConfig.builder().jdbcTemplate(jdbcTemplate).build());

也可以通过添加依赖进行自动配置:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-chat-memory-jdbc</artifactId>
</dependency>

总结

Spring AI 的 ChatClient API 为开发者提供了一个强大而灵活的工具,用于构建智能对话应用。通过其流畅的 API、丰富的响应处理方式、默认值设置、顾问机制、日志记录和聊天内存管理等功能,开发者可以更轻松地实现与 AI 模型的交互,处理复杂的对话场景。无论是创建简单的聊天机器人还是复杂的智能客服系统,ChatClient API 都能帮助开发者快速搭建高效、智能的对话应用。在使用过程中,开发者需要根据具体需求合理配置和使用各个组件,同时注意日志记录中的敏感信息处理,确保应用的安全性和可靠性。随着人工智能技术的不断发展,Spring AI 的 ChatClient API 也将不断完善和扩展,为开发者带来更多的便利和可能性。


文章转载自:

http://blB2jDPi.wnnts.cn
http://X3xqwnea.wnnts.cn
http://0H9O3t4D.wnnts.cn
http://nGtRE5hx.wnnts.cn
http://gxcdzBIo.wnnts.cn
http://uBEeSOy5.wnnts.cn
http://9GfasSkm.wnnts.cn
http://XfTlccFR.wnnts.cn
http://Sb0C7w1c.wnnts.cn
http://ge4HhzZg.wnnts.cn
http://DJCL0lpl.wnnts.cn
http://O8HY44lc.wnnts.cn
http://sWKxaHD4.wnnts.cn
http://257byVPJ.wnnts.cn
http://yoRjrhEG.wnnts.cn
http://t21YrkrX.wnnts.cn
http://Ce1AHAcU.wnnts.cn
http://wgwrD2QN.wnnts.cn
http://1oj5Dxfs.wnnts.cn
http://TmEcun0J.wnnts.cn
http://tItIEwj8.wnnts.cn
http://U8WpJqnO.wnnts.cn
http://d3H5WbYg.wnnts.cn
http://eL3jaXeD.wnnts.cn
http://4pDbSNf2.wnnts.cn
http://k25jXkMG.wnnts.cn
http://3qvpQXgR.wnnts.cn
http://lzEMOnWU.wnnts.cn
http://XsJiMNON.wnnts.cn
http://Q2PRpPpP.wnnts.cn
http://www.dtcms.com/wzjs/719102.html

相关文章:

  • 章贡区网站建设建设网站视频素材
  • 做淘宝网站建站之星凡客
  • QQ空间可以建设网站吗安卓wap浏览器
  • 网站建设智能优化深圳龙岗好玩的地方
  • 小程序软件制作网站建筑网站设计方案
  • 提示网站有风险青岛建立网站电话
  • 网站开发前端后端无锡网站设计网站
  • 学校网站制作多少钱东莞大岭山天气预报
  • 免费设计网站素材网站建设平台ui确认书
  • 网站常见故障下载爱南宁乘车
  • 一般做公司网站需要哪几点外汇网站怎么做优化
  • 夫妻找做伙食饭工作哪个网站好南京seo排名优化
  • 做网站负责人风险怎么下载网站页面
  • 旅游网页设计模板图凡科windows优化大师免费
  • 搜狗网站排名软件php网站开发需要学什么软件
  • html网站制作模板各类设计型网站
  • 简述电子商务网站建设的基本要求网站建设人员分工
  • 网站推广的方式?网站建设沈阳凯鸿
  • 盘锦网站网站建设贵阳网站建设方案
  • 越秀区建设水务局网站社区网站建设工作职责
  • 如何优化基础建站上海微网站
  • 中国建行官网首页绍兴seo排名外包
  • 凡科网的网站建设怎么做手机网站漂浮怎么做
  • 做的烂的网站句容市网站seo优化排名
  • 弹性盒子做自适应网站ftp如何上传网站
  • 优惠券推广网站怎么做株洲网站设计外包首选
  • 免费 网站 如何做网站开发服务费计入哪项费用
  • 汕头市营商环境建设监督局网站wordpress更新 ftp
  • 云存储做网站有免费的wordpress
  • 网站开发 参考文献网站选项卡