手机网站建站多少钱/引擎搜索优化

手机网站建站多少钱,引擎搜索优化,网站建设什么科目,wordpress 网站建设中本文主要介绍了 LangChain4j 中的 Agent(代理) 概念,以及如何使用 LangChain4j 构建代理系统,重点提供了一个客户支持系统的智能体样例 代理(Agents)| LangChain4j 注意: 请注意,“A…

本文主要介绍了 LangChain4j 中的 Agent(代理) 概念,以及如何使用 LangChain4j 构建代理系统,重点提供了一个客户支持系统的智能体样例

代理(Agents)| LangChain4j

注意: 请注意,“Agent(代理)”是一个非常宽泛的术语,具有多种定义。

概述

代理(Agent)

大多数基本的“代理”功能可以通过高层次的 AI Service 和 Tool APIs 构建。
如果你需要更多的灵活性,可以使用LangChain基础组件的以下 API:

  • ChatLanguageModel(聊天语言模型)
  • ToolSpecification(工具规范)
  • ChatMemory(聊天记忆)

多代理系统(Multi-Agent)

LangChain4j 不支持像 AutoGen 或 CrewAI 那样的高层次“代理”抽象来构建多代理系统。
然而,你仍然可以通过基础的 ChatLanguageModel、ToolSpecification 和 ChatMemory API 构建多代理系统。

示例(Examples)

客户支持代理(Customer Support Agent):一个用于客户支持的代理示例,展示如何利用 LangChain4j 构建能够处理用户问题并调用工具的智能代理。

整体项目结构如下

在这里插入图片描述

pom.xml:

项目的 Maven 配置文件,定义了项目的依赖、插件和构建配置。
该项目依赖于 Spring Boot 和一些 langchain4j 的库。

主代码目录 (java):

dev.langchain4j.example.booking
包含与预订相关的类,如 Booking, BookingService, Customer 等。
dev.langchain4j.example
包含主要的应用程序类和配置类,如 CustomerSupportAgentApplication, CustomerSupportAgentConfiguration, CustomerSupportAgentController 等。

资源文件目录 (resources):

application.properties 包含 Spring Boot 应用程序的配置。
miles-of-smiles-terms-of-use.txt 是一个示例文档,用于演示嵌入存储的功能。

测试代码目录 (java):

包含测试类
如 CustomerSupportAgentIT,用于集成测试。
utils
包含一些辅助类,用于测试断言。

测试资源文件目录 (resources):

test.http 包含一些 HTTP 请求示例,用于测试 API。

核心代码解析

BookingService 核心业务类

@Component
public class BookingService {// 模拟的客户信息private static final Customer CUSTOMER = new Customer("John", "Doe");// 模拟的预订编号private static final String BOOKING_NUMBER = "MS-777";// 模拟的预订信息private static final Booking BOOKING = new Booking(BOOKING_NUMBER,LocalDate.of(2025, 12, 13),LocalDate.of(2025, 12, 31),CUSTOMER);// 模拟的预订存储private static final Map<String, Booking> BOOKINGS = new HashMap<>() {{put(BOOKING_NUMBER, BOOKING);}};// 获取预订详情public Booking getBookingDetails(String bookingNumber, String customerName, String customerSurname) {ensureExists(bookingNumber, customerName, customerSurname);// 模拟数据库查找return BOOKINGS.get(bookingNumber);}// 取消预订public void cancelBooking(String bookingNumber, String customerName, String customerSurname) {ensureExists(bookingNumber, customerName, customerSurname);// 模拟预订取消BOOKINGS.remove(bookingNumber);}// 确保预订存在private void ensureExists(String bookingNumber, String customerName, String customerSurname) {// 模拟数据库查找Booking booking = BOOKINGS.get(bookingNumber);if (booking == null) {throw new BookingNotFoundException(bookingNumber);}Customer customer = booking.customer();if (!customer.name().equals(customerName)) {throw new BookingNotFoundException(bookingNumber);}if (!customer.surname().equals(customerSurname)) {throw new BookingNotFoundException(bookingNumber);}}
}

BookingTools 工具类

这个类主要用于与智能体建立连接,将核心业务方法通过@Tool注入工具库

package dev.langchain4j.example;import dev.langchain4j.agent.tool.Tool;
import dev.langchain4j.example.booking.Booking;
import dev.langchain4j.example.booking.BookingService;
import org.springframework.stereotype.Component;@Component
public class BookingTools {private final BookingService bookingService;// 构造函数,注入 BookingServicepublic BookingTools(BookingService bookingService) {this.bookingService = bookingService;}// 工具方法,获取预订详情@Toolpublic Booking getBookingDetails(String bookingNumber, String customerName, String customerSurname) {return bookingService.getBookingDetails(bookingNumber, customerName, customerSurname);}// 工具方法,取消预订@Toolpublic void cancelBooking(String bookingNumber, String customerName, String customerSurname) {bookingService.cancelBooking(bookingNumber, customerName, customerSurname);}
}

CustomerSupportAgent 客户支持智能体

在这个类中,通过Prompt提示词模版技术,定义了提示词,和参数构建了一个系统消息,定义了客户支持代理的行为和规则

package dev.langchain4j.example;import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.Result;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;@AiService
public interface CustomerSupportAgent {// 系统消息,定义了客户支持代理的行为和规则@SystemMessage("""你的名字是 Roger,你是一个名为 'Miles of Smiles' 的汽车租赁公司的客户支持代理。你友好、礼貌且简洁。你必须遵守的规则:1. 在获取预订详情或取消预订之前,你必须确保知道客户的名字、姓氏和预订编号。2. 当被要求取消预订时,首先确保预订存在,然后要求明确的确认。取消预订后,总是说 "我们希望很快能再次欢迎您"。3. 你应该只回答与 Miles of Smiles 业务相关的问题。当被问及与公司业务无关的问题时,道歉并说你无法提供帮助。今天是 {{current_date}}。""")Result<String> answer(@MemoryId String memoryId, @UserMessage String userMessage);
}

CustomerSupportAgentConfiguration

CustomerSupportAgentConfiguration 类是一个 Spring 配置类,主要用于配置客户支持代理所需的各种组件和服务。以下是该类的主要功能和配置:

@Configuration
public class CustomerSupportAgentConfiguration {// 配置聊天记忆提供者@BeanChatMemoryProvider chatMemoryProvider(Tokenizer tokenizer) {return memoryId -> TokenWindowChatMemory.builder().id(memoryId).maxTokens(5000, tokenizer).build();}// 配置嵌入模型@BeanEmbeddingModel embeddingModel() {// 不是最好的嵌入模型,但对于这个演示来说已经足够了return new AllMiniLmL6V2EmbeddingModel();}// 配置嵌入存储@BeanEmbeddingStore<TextSegment> embeddingStore(EmbeddingModel embeddingModel, ResourceLoader resourceLoader) throws IOException {// 通常,你的嵌入存储已经填充了你的数据。// 然而,为了演示的目的,我们将:// 1. 创建一个内存中的嵌入存储EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();// 2. 加载一个示例文档("Miles of Smiles" 使用条款)Resource resource = resourceLoader.getResource("classpath:miles-of-smiles-terms-of-use.txt");Document document = loadDocument(resource.getFile().toPath(), new TextDocumentParser());// ...existing code...}
}

聊天记忆提供者配置:

  • 定义了一个 ChatMemoryProvider Bean,用于提供聊天记忆。它使用 TokenWindowChatMemory 来管理聊天记忆,并设置了最大令牌数为 5000。

嵌入模型配置:

  • 定义了一个 EmbeddingModel Bean,使用 AllMiniLmL6V2EmbeddingModel 作为嵌入模型。虽然这不是最好的嵌入模型,但对于演示目的已经足够。

嵌入存储配置:

  • 定义了一个 EmbeddingStore Bean,用于存储嵌入数据。
  • 加载了一个示例文档(“Miles of Smiles” 使用条款),并将其分割成 100 个令牌的段落。
  • 使用 EmbeddingStoreIngestor 自动将文档段落转换为嵌入,并存储到嵌入存储中。
  • 该类通过配置这些组件,确保客户支持代理能够有效地处理和存储嵌入数据,并提供必要的聊天记忆功能。

CustomerSupportAgentController 对外接口

CustomerSupportAgentController 类定义了对外的接口

@RestController
public class CustomerSupportAgentController {private final CustomerSupportAgent customerSupportAgent;// 构造函数,注入 CustomerSupportAgentpublic CustomerSupportAgentController(CustomerSupportAgent customerSupportAgent) {this.customerSupportAgent = customerSupportAgent;}// 处理 GET 请求,调用客户支持代理的 answer 方法@GetMapping("/customerSupportAgent")public String customerSupportAgent(@RequestParam String sessionId, @RequestParam String userMessage) {Result<String> result = customerSupportAgent.answer(sessionId, userMessage);return result.content();}
}

以上是整个项目核心的部分,具体源码如下

客户支持系统智能体源码

总结

本文简要介绍了 LangChain4j 中的“代理”概念,并提供了构建代理的两种方法:使用高层次的 AI Service 和 Tool APIs,或者使用低层次的 ChatLanguageModel、ToolSpecification 和 ChatMemory API。虽然 LangChain4j 不直接支持高层次的多代理系统,但开发者可以通过低层次 API 手动实现。文章还提到了一个具体的示例——客户支持代理,展示了如何利用 LangChain4j 构建实用的代理系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)

目录 一、引言二、集成ToolContext示例步骤1: 在`@Tool`标注的工具方法中集成`ToolConext`参数步骤2:`ChatClient`运行时动态设置`ToolContext`参数三、填坑一、引言 在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地…

网络可靠性要求

目录 一、背景介绍 二、环路引发的危害 1、广播风暴 2、MAC 地址表震荡 三、STP生成树 1、STP的作用 2、STP工作过程 3、根桥选举 4、根端口选举 5、指定端口选举 6、BPDU报文分析 7、计时器 8、端口状态转化 总结 一、背景介绍 为了提高网络可靠性&#xff0c;交换网络…

《STL 六大组件之容器探秘:深入剖析 string》

目录 一、string 类简介二、string 类的常用接口1. 构造函数&#xff08;constructor function&#xff09;2. 与容量相关的接口&#xff08;capacity&#xff09;3. 与迭代器有关的接口&#xff08;iterator&#xff09;4. 与元素访问有关的接口&#xff08;element access&am…

计算机网络-OSI七层参考模型与数据封装,网络安全零基础入门到精通实战教程!

目录 一、网络 1、网络的定义 2、网络的分类 3、网络的作用 4、网络的数据传输方式 5、网络的数据通讯方式 二、OSI七层参考模型 1、网络参考模型定义 2、分层的意义 3、分层与功能 4、TCP\IP五层模型 三、参考模型的协议 1、物理层 2、数据链路层 3、网络层 4…

C++17 中的 std::to_chars 和 std::from_chars:高效且安全的字符串转换工具

文章目录 1. 传统转换方法的局限性2. std::to_chars&#xff1a;数值到字符串的高效转换函数原型&#xff1a;返回值&#xff1a;示例代码&#xff1a;输出&#xff1a; 3. std::from_chars&#xff1a;字符串到数值的高效解析函数原型&#xff1a;返回值&#xff1a;示例代码&…

深入学习解析:183页可编辑PPT华为市场营销MPR+LTC流程规划方案

华为终端正面临销售模式转型的关键时刻&#xff0c;旨在通过构建MPRLTC项目&#xff0c;以规避对运营商定制的过度依赖&#xff0c;并探索新的增长路径。项目核心在于建设一套全新的销售流程与IT系统&#xff0c;支撑双品牌及自有品牌的战略发展。 项目总体方案聚焦于四大关键议…

基于WOA鲸鱼优化的WSN网络最优节点部署算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 鲸鱼优化算法&#xff08;WOA&#xff09;是一种模拟座头鲸捕食行为的元启发式优化算法。其主要原理基于座头鲸独特的 “气泡网” 捕食策略&#xff0c;通过数学模…

excel导入Mysql中时间格式异常

问题描述&#xff1a; 当使用xls/xlsx/csv导入mysql中&#xff0c;如果列是时间类型比如excel表中显示2024/02/20 09:18:00&#xff0c;导入后时间可能就会变成1900-01-01 09:18:00这样。 问题原因&#xff1a; 这是由于excel表中和数据库中的时间类型不匹配导致。 问题解决…

在ubuntu上用Python的openpyxl模块操作Excel的案例

文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前&#xff0c;需…

GeoHD - 一种用于智慧城市热点探测的Python工具箱

GeoHD - 一种用于智慧城市热点探测的Python工具箱 详细原理请参考&#xff1a;Yan, Y., Quan, W., Wang, H., 2024. A data‐driven adaptive geospatial hotspot detection approach in smart cities. Trans. GIS tgis.13137. 代码下载&#xff1a;下载 1. 简介 在城市数据…

16 中介者(Mediator)模式

中介者模式 1.1 分类 &#xff08;对象&#xff09;行为型 1.2 提出问题 实现一个机场的起飞管理系统&#xff0c;如果由驾驶员们讨论谁先飞&#xff0c;后果可能是灾难性的。 1.3 解决方案 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&a…

最薄的机身,游最深的海

经济全球化的潮流&#xff0c;势不可挡。 “技术、通讯和全球化&#xff0c;正在消除传统的地理和经济边界&#xff0c;使竞争环境趋于平等。”《世界是平的》作者托马斯弗里德曼预言的"扁平化竞争"正加速演进。 在高端智能手机战场&#xff0c;一场由中国企业主导…

【HarmonyOS Next】鸿蒙监听手机按键

【HarmonyOS Next】鸿蒙监听手机按键 一、前言 应用开发中我们会遇到监听用户实体按键&#xff0c;或者扩展按键的需求。亦或者是在某些场景下&#xff0c;禁止用户按下某些按键的业务需求。 这两种需求&#xff0c;鸿蒙都提供了对应的监听事件进行处理。 onKeyEvent 默认的…

KMP算法:字符串匹配的智慧跳跃

文章目录 起因&#xff1a;暴力法的致命缺陷暴力搜索的局限性 KMP核心思想&#xff1a;避免重复理解前缀表&#xff08;PMT&#xff09;不匹配时的回退机制代码&#xff1a;高效字符串匹配补充&#xff1a;next表和PMT表 暴力法 vs KMP总结&#xff1a;KMP 是如何改变游戏规则的…

蓝桥杯学习大纲

&#xff08;致酷德与热爱算法、编程的小伙伴们&#xff09; 在查阅了相当多的资料后&#xff0c;发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以&#xff0c;干脆自己整理一篇&#xff0c;欢迎大家补充&#xff01; 一、蓝桥必备高频考点 我们以此为重点学习…

Linux探秘坊-------4.进度条小程序

1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后&#xff0c;会 先停顿两秒&#xff0c;再打印出hello bite&#xff0c;但是明明打印在sleep前面&#xff0c;为什么会后打印呢&#xff1f; 因为&#xff…

基于Python的Diango旅游数据分析推荐系统设计与实现+毕业论文(15000字)

基于Python的Diango旅游数据分析推荐系系统设计与实现毕业论文指导搭建视频&#xff0c;带爬虫 配套论文1w5字 可定制到某个省份&#xff0c;加40 基于用户的协同过滤算法 有后台管理 2w多数据集 可配套指导搭建视频&#xff0c;加20 旅游数据分析推荐系统采用了Python语…

Scrapy:DownloaderAwarePriorityQueue队列设计详解

DownloaderAwarePriorityQueue 学习笔记 1. 简介 DownloaderAwarePriorityQueue 是 Scrapy 中一个高级的优先级队列实现&#xff0c;它不仅考虑请求的优先级&#xff0c;还会考虑下载器的负载情况。这个队列为每个域名&#xff08;slot&#xff09;维护独立的优先级队列&#…

dify-AI 私有部署可修改前端页面

dify文档 官方文档&#xff1a;欢迎使用 Dify | Dify 源码&#xff1a;https://github.com/langgenius/dify.git 安装docker 官网&#xff1a;https://www.docker.com/ 部署服务到docker cd dify cd docker cp .env.example .env docker compose up -d查看效果 http://localh…

PHP基础部分

但凡是和输入、写入相关的一定要预防别人植入恶意代码! HTML部分 语句格式 <br> <hr> 分割符 <p>插入一行 按住shift 输入! 然后按回车可快速输入html代码(VsCode需要先安装live server插件) html:<h1>标题 数字越大越往后</h1> <p…