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.pswp.cn/diannao/42072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42072.shtml
英文地址,請注明出處:http://en.pswp.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…

Python 函數遞歸

以下是一個使用遞歸計算階乘的 Python 函數示例 &#xff1a; 應用場景&#xff1a; 1. 動態規劃問題&#xff1a;在一些需要逐步求解子問題并利用其結果的動態規劃場景中&#xff0c;遞歸可以幫助直觀地表達問題的分解和求解過程。 2. 遍歷具有遞歸結構的數據&#xff1a;如遞…

智能掃地機器人的電源與續航管理策略是什么

智能掃地機器人的電源與續航管理策略是一個綜合性的方案&#xff0c;旨在提高電池利用效率、延長續航時間并優化用戶體驗。以下是一些關鍵的電源與續航管理策略&#xff1a; 智能能源分配系統 動態功率調整&#xff1a;根據清掃任務的需求和電池狀態&#xff0c;智能調整掃地機…

白嫖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代碼相同…

Mongodb索引使用限制

學習mongodb&#xff0c;體會mongodb的每一個使用細節&#xff0c;歡迎閱讀威贊的文章。這是威贊發布的第85篇mongodb技術文章&#xff0c;歡迎瀏覽本專欄威贊發布的其他文章。如果您認為我的文章對您有幫助或者解決您的問題&#xff0c;歡迎在文章下面點個贊&#xff0c;或者關…

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…

RPC與REST

RPC與REST 訪問遠程服務1遠程服務調用&#xff08;Remote Procedure Call&#xff0c;RPC&#xff09;&#xff1a;RPC 解決什么問題&#xff1f;如何解決的&#xff1f;為什么要那樣解決&#xff1f;1.1 先解決兩個進程間如何交換數據的問題&#xff0c;也就是進程間通信&…

最新扣子(Coze)實戰案例:使用擴圖功能,讓你的圖任意變換,完全免費教程

&#x1f9d9;?♂? 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI應用。 &#x1f4dc; 本教程是《AI應用開發系列教程之扣子(Coze)實戰教程》&#xff0c;完全免費學習。 &#x1f440; 微信關注公從號&#xff1a;斜杠君&#xff0c;可獲取完整版教程。&a…

如何快速搭建python項目的虛擬環境

itopen組織1、提供OpenHarmony優雅實用的小工具2、手把手適配riscv qemu linux的三方庫移植3、未來計劃riscv qemu ohos的三方庫移植 小程序開發4、一切擁抱開源&#xff0c;擁抱國產化 你在開發python工具的時候還一直使用系統默認的環境嗎&#xff1f;是否有遇到有時候…

2024年【北京市安全員-B證】報名考試及北京市安全員-B證最新解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2024年北京市安全員-B證報名考試為正在備考北京市安全員-B證操作證的學員準備的理論考試專題&#xff0c;每個月更新的北京市安全員-B證最新解析祝您順利通過北京市安全員-B證考試。 1、【多選題】《中華人民共和國安…

android輪播圖入門2——觸摸停止與指示器

前言 這次要在上一篇輪播圖的基礎上做改造&#xff0c;增加兩個功能&#xff1a; 用戶觸摸到輪播圖時&#xff0c;停止輪播在輪播圖上展示一個小指示器&#xff0c;指示當前輪播組件的位置 觸摸停播 觸摸停播的設計思路是&#xff1a;監聽實現輪播圖的觸摸事件&#xff0c;…

手把手教你從零開始構建 AI 視頻生成模型

在 GitHub 上發現一篇教程&#xff0c;作者詳細介紹了如何使用 Python 語言&#xff0c;從零開始構建一個文本到視頻生成模型。 涵蓋了從理解理論概念到架構編碼&#xff0c;最終實現輸入文本提示即可生成視頻的全過程。 相關鏈接 GitHub&#xff1a;github.com/FareedKhan-…

python-redis-lock是如何實現鎖自動續期的

python-redis-lock簡介 python-redis-lock是一個python的第三方庫&#xff0c;基于Redis&#xff0c;封裝了分布式鎖的邏輯&#xff0c;提供了更高級的API來簡化鎖的獲取、保持和釋放過程。包括自動續期、鎖超時、重入鎖等功能。 相比于直接使用redis的setnx&#xff0c;避免了…

倒退型自閉癥與輕度自閉癥有什么區別?

作為星貝育園自閉癥兒童康復中心的一名專業教師&#xff0c;我深知家長們在面對自閉癥譜系障礙&#xff08;ASD&#xff09;時的種種疑問與挑戰&#xff0c;尤其是關于倒退型自閉癥與輕度自閉癥之間的區別。今天&#xff0c;我將從專業視角出發&#xff0c;深入淺出地解析這兩種…

精通Vim編輯器:Linux系統下的強大文本編輯工具

精通Vim編輯器&#xff1a;Linux系統下的強大文本編輯工具 引言 在Linux世界中&#xff0c;Vim是一個功能強大、高度可定制的文本編輯器&#xff0c;它繼承自經典的vi編輯器并提供了一系列增強功能。無論是系統管理員、開發人員還是普通用戶&#xff0c;掌握Vim的使用都能大幅…

游戲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. 優缺點 …