AI实践与学习7_AI解场景Agent应用预研demo

前言

学习大模型Agent相关知识,使用llama_index实现python版的Agent demo,根据AI解题场景知识密集型任务特点,需要实现一个偏RAG的Agent WorkFlow,辅助AI解题。

使用Java结合Langchain4j支持的RAG流程一些优化点以及自定义图结构的workflow,创建Agentic RAG,实现AI解题demo,并测试解题效果。

Agent概述

image.png
image.png
Agent智能体(Agent)是指在特定环境中能够自主感知、决策和行动的计算机系统或软件实体。Agent智能体通常具备以下几个关键特性:

  1. 自主性(Autonomy):Agent智能体能够独立运行,不需要持续的人工干预。它们可以根据自身的感知和内部状态做出决策。
  2. 感知能力(Perception):Agent智能体能够感知其环境,通过传感器或数据输入获取外部信息。这些信息可以是物理环境中的数据,也可以是其他系统或Agent智能体提供的信息。
  3. 决策能力(Decision-Making):Agent智能体能够基于感知到的信息和内部状态进行分析和决策。决策过程可能涉及规则、逻辑推理、机器学习算法等。
  4. 行动能力(Action):Agent智能体能够执行特定的动作或任务,以实现其目标。这些动作可以是物理操作(如机器人移动)或虚拟操作(如发送数据、修改文件等)。
  5. 目标导向(Goal-Oriented):Agent智能体通常被设计为实现特定的目标或任务。它们会根据目标调整其行为,以最大化目标的实现。
  6. 交互能力(Interactivity):许多Agent智能体能够与其他Agent智能体或人类用户进行交互。这种交互可以是协作性的,也可以是竞争性的。

开源的一些Agent框架

主要是python生态使用的,可以参考思想。

推荐收藏!九大最热门的开源大模型 Agent 框架来了_agent框架-CSDN博客
AI解题11-RAG流程优化以及Agent学习

agent demo

RAG相关优化思路

RAG流程的一些优化思路

  • Query理解(Query NLU):使用LLM作为基础引擎来重写用户Query以提高检索质量,涉及Query意图识别、消歧、分解、抽象等
  • Query路由(Query Routing):查询路由是LLM支持的决策步骤,根据给定的用户查询下一步该做什么
  • 索引(Indexing):是当前RAG中比较核心的模块,包括文档解析(5种工具)、文档切块(5类)、嵌入模型(6类)、索引类型(3类)等内容
  • Query检索(Query Retrieval):重点关注除典型RAG的向量检索之外的图谱与关系数据库检索(NL2SQL)
  • 重排(Rerank):来自不同检索策略的结果往往需要重排对齐,包括重排器类型(5种),自训练领域重排器等
  • 生成(Generation):实际企业落地会遇到生成重复、幻觉、通顺、美化、溯源等问题,涉及到RLHF、偏好打分器、溯源SFT、Self-RAG等等
  • 评估与框架:RAG需要有全链路的评价体系,作为RAG企业上线与迭代的依据

一个基于RAG的Agentic RAG智能体最终目的是让大模型回答内容是完全以及事实文档的,不要根据幻觉输出内容。

Lv2-智能体提出一个问题。
while (Lv2-智能体无法根据其记忆回答问题) {Lv2-智能体提出一个新的子问题待解答。Lv2-智能体向Lv1-RAG提问这个子问题。将Lv1-RAG的回应添加到Lv2-智能体的记忆中。
}
Lv2-智能体提供原始问题的最终答案

langchain4j-agent-demo

langchain4j提供多种优化策略优化RAG流程,对于Java中构建一个Agent,需要使用langchain4j实现RAG流程以及系列优化(如借助Function Call等实现问题重写、文档打分、幻觉检查、答案评分等),然后重写一套流程图工作流,支持定义行为节点、条件边、流转条件,节点输出状态等。

参考:https://github.com/bsorrentino/langgraph4j
为了兼容在jdk21,支持copy了所有类,代码地址:https://git.xkw.cn/mp-alpha/qai/-/tree/feat-agent

构建Graph

public CompiledGraph<NodeData> buildGraph() throws Exception {var workflow = new StateGraph<>(NodeData::new);// Define the nodesworkflow.addNode("web_search", node_async(this::webSearch));  // web searchworkflow.addNode("retrieve", node_async(this::retrieve));  // retrieveworkflow.addNode("grade_documents", node_async(this::retrievalGrader));  // grade documentsworkflow.addNode("generate", node_async(this::generate));  // generateworkflow.addNode("transform_query", node_async(this::transformQuery));  // transform_query// Build graph// 入口节点workflow.setConditionalEntryPoint(edge_async(this::routeQuestion),Map.of("web_search", "web_search","retrieve", "retrieve"));workflow.addEdge("web_search", "generate");workflow.addEdge("retrieve", "grade_documents");// 条件边workflow.addConditionalEdges("grade_documents",edge_async(this::decideToGenerate),Map.of("transform_query", "transform_query","web_search", "web_search","generate", "generate"));workflow.addEdge("transform_query", "retrieve");// 条件边workflow.addConditionalEdges("generate",edge_async(this::gradeHallucination),Map.of("not supported", "generate","useful", END,"not useful", END,"not support ready web search", "web_search"));return workflow.compile();}

image.png

本质还是尽可能防止大模型幻觉输出,借助一些工具让大模型自行决策,希望大模型的输出都是来自于文档事实。

  • 试题重写,生成相似试题,增强RAG召回内容。
  • 文档相关性评分:对RAG的文档进行相关性打分。
  • 支持接入web search:增强文档召回。
  • 幻觉检查:检查生成的答案是否是有召回的文档上下文为依据的。
  • 答案评分:评估答案是否正确解答了试题。

企业微信截图_97ec3a05-22f9-4a26-ab34-bac0093757a8.png

入口会先进行retrieve、web_search路由

  • 优先进行retrieve流程,接着一系列文档相关性评分、问题/试题重写、评估是否答案幻写、评估答案得分(是否基于文档事实)、答案生成等。如果retrieve最终结果为not sure开启web_search流程。
  • web_search流程:文档search、文档相关性评分、问题/试题重写、答案生成。

拓展一些图状态节点元数据,实现循环次数限制,防止进入死循环

  • 总的图状态转移的最大次数设置为xx,得不到结果,就返回答案未知。
  • 设置maxTransformQueryCount,控制transform_query 和 grade_documents 图节点转移的最大次数为x,判定检索到文档没有帮助,就不再转换查询,终止状态循环,生成结果。
  • 设置maxHallucinationGraderCount,grade_hallucation 和 generate 图节点转移最大次数为x,判定生成的答案不是基于文档、事实,就不再重复生成,终止循环状态,进行 grade_answer。
  • 设置maxWebSearchCount,grade_hallucation 和 web search 图节点转移最大次数为x,判断RAG之后答案仍不以文档为依据进行web search,然后在评分,加上异常捕获和控制最大次数;

另外需要对transform_query做一些处理,因为是解答试题场景,需要保存最初的试题,最后生成答案是基于最初的试题,中间转换生成的试题,只起到 增强RAG召回以及辅助解题上下文的作用。

解题测试

AI解题12-解题场景智能体Agentic RAG预研demo
100道高中英语单选,模型使用base4o,RAG参数设置召回数量为5,召回最小阈值为20.0

  • 使用Agent大概能解答对94;
  • 直接使用RAG解答的话大概能解答对90;

使用该Agent之后,token消耗会增多,解题时间也会变长。
综合测试结果分析,可以考虑使用在那些直接RAG解答错误的试题,可以使用此Agent重新生成答案,一定几率会生成正确答案。

llama-index-agent-lats-demo

Language Agent Tree Search - LlamaIndex

image.png
使用python实现的llamaindex-lats-agent-demo,java版的应该还没框架直接支持。

目前的提示词场景ToT

image.png

原理类似上面,有状态节点,拆分子任务,号称是ToT的加强版,具有反思、外部反馈
改善推理和决策,反向传播等
demo见文档:https://mxkw.yuque.com/dsd6et/qbm/fqoi5viogs1g0rd8#BI6Rn

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

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

相关文章

go语言day11 错误 defer(),panic(),recover()

错误&#xff1a; 创建错误 1&#xff09;fmt包下提供的方法 fmt.Errorf(" 格式化字符串信息 " &#xff0c; 空接口类型对象 ) 2&#xff09;errors包下提供的方法 errors.New(" 字符串信息 ") 创建自定义错误 需要实现error接口&#xff0c;而error接口…

go 为什么是抢占式调度

GMP 模型 gmp模型是 golang 中用于调度管理 goroutine 的调度器。 调度器的发展史 在 Go 语言中&#xff0c;Goroutine 早期是没有设计成抢占式的&#xff0c;早期 Goroutine 只有读写、主动让出、锁等操作时才会触发调度切换。 这样有一个严重的问题&#xff0c;就是垃圾回…

【实习问题记录】Nodeclub本地部署

问题描述 在按照官方网站给出的教程一步一步操作以后发现出现以下报错&#xff1a; 问题分析 显示连接不上mongodb&#xff0c;分析报错可能是因为版本不匹配导致的&#xff0c;查看安装的mongodb版本发现是7.0.4&#xff0c;与目标版本不匹配&#xff0c;同时查看mongodb官…

如何选择AI数字人直播saas系统源码部署服务商?技巧分享!

随着人工智能时代的来临&#xff0c;AI数字人直播逐渐成为众多企业降本增效的主要模式之一。根据官方资料&#xff0c;由京东云言犀数字人提出的“闲时直播”场景&#xff0c;成本不足真人的1/10&#xff0c;交易转化率却能提升30%。这对于许多资金不足或想要在短视频直播板块减…

Go-Zero 框架使用 MongoDB,数据采集入库如此简单

目录 引言 环境准备 如何使用 main入口代码实现 实现采集网络接口 总结 其他资源 引言 Go-Zero 是一个高性能、可扩展的微服务框架&#xff0c;专为 Go 语言设计。它提供了丰富的功能&#xff0c;如 RPC、RESTful API 支持、服务发现、熔断器、限流器等&#xff0c;使开…

HSG金属表面缺陷检测

HSG金属表面缺陷检测 1. 项目背景1.1 项目简述1.2 项目目标 2. 解决方案3. 数据集3.1 收集各种缺陷的图片3.2 利用有限图片创造更多可能3.3 分割图像3.4 打标签 4. 部分代码4.1 数据集划分4.2图像分割4.3 训练模型4.4 预测 5. 预测结果 1. 项目背景 1.1 项目简述 iPad HSG 的…

【NLP学习路线的总结】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 目录 0. 👉前言1. 👉前置知识👉基础数学知识👉编程语言👉…

LabVIEW干涉仪测向系统

开发了一套基于LabVIEW的软件系统&#xff0c;结合硬件设备&#xff0c;构建一个干涉仪测向实验教学平台。该平台应用于信号处理课程&#xff0c;帮助学生将理论知识与实际应用相结合&#xff0c;深化对信号处理核心概念的理解和应用。 项目背景&#xff1a; 当前信号处理教学…

初识c++(命名空间,缺省参数,函数重载)

一、命名空间 1、namespace的意义 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全 局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名 冲突…

路径规划 | 基于蜣螂优化算法的栅格地图机器人路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 基于蜣螂优化算法的栅格地图机器人路径规划&#xff08;Matlab&#xff09; 1.利用蜣螂算法DBO优化栅格地图机器人路径规划&#xff0c;效果如图所示&#xff0c;包括迭代曲线图、栅格地图等等&#xff5e…

【智能算法改进】多策略改进的蜣螂优化算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】蜣螂优化算法&#xff08;DBO&#xff09;原理及实现 2.改进点 混沌反向学习初始化 采用 Pwlcm 分段混沌映射&#xff0c;由于 Pwlcm 在其定义区间上具有均匀的密度函数&#xff0c;在特定的…

PyCharm中如何将某个文件设置为默认运行文件

之前在使用JetBrain公司的另一款软件IDEA的时候&#xff0c;如果在选中static main函数后按键altenter可以默认以后运行Main类的main函数。最近在使用PyCharm学习Python&#xff0c;既然同为一家公司的产品而且二者的风格如此之像&#xff0c;所以我怀疑PyCharm中肯定也有类似的…

day01:项目概述,环境搭建

文章目录 软件开发整体介绍软件开发流程角色分工软件环境 外卖平台项目介绍项目介绍定位功能架构 产品原型技术选型 开发环境搭建整体结构&#xff1a;前后端分离开发前后端混合开发缺点前后端分离开发 前端环境搭建Nginx 后端环境搭建熟悉项目结构使用Git进行版本控制数据库环…

【Mathematical14.0最新进阶教学】-1-基础计算拓展

我在真正使用Mathematica后&#xff0c;才发觉这个软件的神奇&#xff0c;但是又有对于不知道如何使用这个神奇软件&#xff0c;因此我将我学习《The Student’s Introduction to Mathematica and the Wolfram Language (Bruce F. Torrence, Eve A. Torrence) 》的一些心得进行…

【AI大模型】驱动的未来:穿戴设备如何革新血液、皮肤检测与营养健康管理

文章目录 1. 引言2. 现状与挑战3. AI大模型与穿戴设备概述4. 数据采集与预处理4.1 数据集成与增强4.2 数据清洗与异常检测 5. 模型架构与训练5.1 高级模型架构5.2 模型训练与调优 6. 个性化营养建议系统6.1 营养建议生成优化6.2 用户反馈与系统优化 7. 关键血液成分与健康状况评…

Appium Inspector介绍和使用

一、什么是Appium Inspector 官方介绍&#xff1a;Overview - Appium Inspector 检查器的主要目的是提供应用程序页面源代码的检查功能。它主要用于测试自动化开发&#xff0c;但也可用于应用程序开发 - 或者如果只是想查看应用程序的页面源代码&#xff01; 从本质上讲&…

谈大语言模型动态思维流程编排

尽管大语言模型已经呈现出了强大的威力&#xff0c;但是如何让它完美地完成一个大的问题&#xff0c;仍然是一个巨大的挑战。 需要精心地给予大模型许多的提示&#xff08;Prompt&#xff09;。对于一个复杂的应用场景&#xff0c;编写一套完整的&#xff0c;准确无误的提示&am…

力扣hot100-普通数组

文章目录 题目&#xff1a;最大子数组和方法1 动态规划方法2 题目&#xff1a;合并区间题解 题目&#xff1a;轮转数组方法1-使用额外的数组方法2-三次反转数组 题目&#xff1a;除自身以外数组的乘积方法1-用到了除法方法2-前后缀乘积法 题目&#xff1a;最大子数组和 原题链…

MICCAI 2024Centerline Boundary Dice Loss for Vascular Segmentation

MICCAI 2024 Centerline Boundary Dice Loss for Vascular Segmentation MICCAI 2024Centerline Boundary Dice Loss for Vascular Segmentation中心线边界Dice损失用于血管分割**摘要**:1. 引言相关工作&#xff1a; 2. 方法预备知识Dice的变化 3 实验3.1 数据集3.2 设置3.3 结…

虚拟机使用

1、安装 如何安装虚拟机&#xff1f;保姆级安装教程&#xff01; - 知乎 (zhihu.com) 2、使用 2.1 快照 作用&#xff1a;保留当前系统信息为快照&#xff0c;随时可以恢复&#xff0c;以防未来系统被你玩坏&#xff0c;就好比游戏中的归档&#xff01;每配置好一个就可以保…