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.mzph.cn/diannao/42072.shtml

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

相关文章

Redis基础教程(九):redis有序集合

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

【踩坑】解决undetected-chromedriver报错cannot connect to-chrome

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 更新&#xff1a; 发现一个非常好用的项目&#xff0c;直接内置uc&#xff1a; GitHub - seleniumbase/SeleniumBase: &#x1f4ca; Pythons all-in…

白嫖A100活动-入门篇-1.Linux+InterStudio

进入InterStudio 这节课是为了让大家熟悉使用InterStudio平台&#xff0c;以便后续开发 InterStudio平台是算力平台&#xff0c;可以通过平台使用A100,还可以使用“书生”团队集成好的环境、工具&#xff0c;快速部署LLMs. 进入平台&#xff1a; 记得报名&#xff0c;获得免…

Redis IO多路复用

0、前言 本文所有代码可见 > 【gitee code demo】 本文涉及的主题&#xff1a; 1、BIO、NIO的业务实践和缺陷 2、Redis IO多路复用&#xff1a;redis快的主要原因 3、epoll 架构 部分图片 via 【epoll 原理分析】 1、BIO单线程版 1.1 业务代码 client client代码相同…

Sahi+Yolov10

一、前言 了解到Sahi&#xff0c;是通过切图&#xff0c;实现提高小目标的检测效果。sahi 目前支持yolo5\yolo8\mmdet\detection2 等等算法&#xff0c;本篇主要通过实验onnx加载模型的方式使sahi支持yolov10。 二、代码 &#xff08;1&#xff09;转换模型 首先使用 conda创…

大数的排列组合公式C代码

我们知道&#xff0c;计算排列A(n,m)和组合C(n,m)可以用先求阶乘的方式实现&#xff0c;但是当数很大时求阶乘很容易溢出&#xff0c;所以这里给出非阶乘的方式求排列组合 求排列 分母和分子可以抵消&#xff0c;最后代码如下 unsigned long long A(int n, int m) {unsigned…

华为机试HJ34图片整理

华为机试HJ34图片整理 题目&#xff1a; 想法&#xff1a; 将输入的字符串中每个字符都转为ASCII码&#xff0c;再通过快速排序进行排序并输出 input_str input() input_list [int(ord(l)) for l in input_str]def partition(arr, low, high):i low - 1pivot arr[high]f…

最新扣子(Coze)实战案例:使用扩图功能,让你的图任意变换,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 微信关注公从号&#xff1a;斜杠君&#xff0c;可获取完整版教程。&a…

2024年【北京市安全员-B证】报名考试及北京市安全员-B证最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年北京市安全员-B证报名考试为正在备考北京市安全员-B证操作证的学员准备的理论考试专题&#xff0c;每个月更新的北京市安全员-B证最新解析祝您顺利通过北京市安全员-B证考试。 1、【多选题】《中华人民共和国安…

手把手教你从零开始构建 AI 视频生成模型

在 GitHub 上发现一篇教程&#xff0c;作者详细介绍了如何使用 Python 语言&#xff0c;从零开始构建一个文本到视频生成模型。 涵盖了从理解理论概念到架构编码&#xff0c;最终实现输入文本提示即可生成视频的全过程。 相关链接 GitHub&#xff1a;github.com/FareedKhan-…

倒退型自闭症与轻度自闭症有什么区别?

作为星贝育园自闭症儿童康复中心的一名专业教师&#xff0c;我深知家长们在面对自闭症谱系障碍&#xff08;ASD&#xff09;时的种种疑问与挑战&#xff0c;尤其是关于倒退型自闭症与轻度自闭症之间的区别。今天&#xff0c;我将从专业视角出发&#xff0c;深入浅出地解析这两种…

游戏AI的创造思路-技术基础-强化学习(2)

上一篇中引出了深度强化学习这个大坑&#xff0c;本篇浅浅填一下~~~~ 目录 6. 深度强化学习概述 6.1. 基本概念 6.2. 发展历史 6.3. 基本公式 6.4. Python实现 6.5. 运行原理 6.5.1. 核心要素 6.5.2. 运行原理 6.5.3. 典型算法 6.5.4. Python实现代码 6.6. 优缺点 …

大厂面试官赞不绝口的后端技术亮点【后端项目亮点合集(2)】

本文将持续更新~~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命C…

提高论文发表机会:Nature Communications 最新研究教你如何巧妙回复审稿意见

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 对于科研搬砖人来说&#xff0c;在论文投稿过程中&#xff0c;如何有效回复审稿意见才能得到审稿人的认可&#xff0c;一直是一个让人困惑又带点玄学的问题。 但是&#xff0c…

【强化学习的数学原理】课程笔记--3(蒙特卡洛方法)

目录 蒙特卡洛方法MC Basic算法sparse reward MC Greedy 算法样本使用效率MC ϵ \epsilon ϵ-Greedy 算法一些例子 蒙特卡洛方法 第二节 推导贝尔曼最优公式中的&#xff1a; q π k ( s , a ) ∑ r P ( r ∣ s , a ) r γ ∑ s ′ P ( s ′ ∣ s , a ) v π k ( s ′ ) q…

vue3 ~ pinia学习

先看两个图 一个vuex 一个pinia 根据图看出来 pinia更简单了 那么具体怎么操作呢 我们来看下~ 第一步 下载 yarn add pinia # 或者使用 npm npm install pinia 第二步 注册 创建一个 pinia 实例 (根 store) 并将其传递给应用&#xff1a; import { createApp } from v…

代码随想录算法训练Day57|LeetCode200-岛屿数量、LeetCode695-岛屿的最大面积

岛屿数量 题目描述 力扣200-岛屿数量 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此…

前端vue后端java使用easyexcel框架下载表格xls数据工具类

一 使用alibaba开源的 easyexcel框架&#xff0c;后台只需一个工具类即可实现下载 后端下载实现 依赖 pom.xml <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependen…

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类)

MATLAB-分类CPO-RF-Adaboost冠豪猪优化器&#xff08;CPO&#xff09;优化RF随机森林结合Adaboost分类预测&#xff08;二分类及多分类&#xff09; 分类CPO-RF-Adaboost冠豪猪优化器&#xff08;CPO&#xff09;优化RF随机森林结合Adaboost分类预测&#xff08;二分类及多分类…

【web前端HTML+CSS+JS】--- HTML学习笔记01

学习链接&#xff1a;黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程_哔哩哔哩_bilibili 学习文档&#xff1a; Web 开发技术 | MDN (mozilla.org) 一、前后端工作流程 WEB模型&#xff1a;前端用于采集和展示信息&#xff0c;中…