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

Tao-8k智能体(Agent)框架开发实战:自主任务规划与执行

Tao-8k智能体Agent框架开发实战自主任务规划与执行最近和不少做AI应用的朋友聊天大家都有一个共同的感受现在的AI模型能力很强但很多时候还是像个“一问一答”的机器。你问什么它答什么稍微复杂点的任务比如“帮我分析一下上个月的销售数据然后写一份总结报告”它就有点力不从心了。这背后缺的就是一个能自己“动脑子”、会“动手”的智能体Agent。它得能理解你的复杂意图自己规划出一步步该怎么做然后调用各种工具去执行最后把结果整理好给你。听起来是不是很酷今天我就结合Tao-8k这个框架来聊聊怎么亲手打造一个这样的智能体。我们不谈那些虚的架构图就从一个工程师的角度看看怎么从零开始让AI真正“动”起来去解决客服、数据分析这些实际场景里的麻烦事。1. 智能体到底是什么从“聊天”到“做事”的转变在开始敲代码之前我们得先统一一下认识。当我说“智能体”的时候我指的可不是聊天机器人里那个简单的对话模块。你可以把它想象成给你的AI模型配了一个“私人助理”和一套“工具箱”。这个助理的核心能力有三样思考Think不是简单回复而是能理解复杂任务并自己拆解成一步步可执行的子任务。比如你让它“订一张明天下午从北京飞上海、价格低于1000元的机票”它会先想到要去查航班、比价格、看时间最后下单。行动Act光想不行得会做。这就需要它能调用外部的“工具”Tools比如调用搜索引擎去查信息、调用计算器算个账、或者通过API去操作某个真实的系统比如真的去订票网站下单。记忆Memorize得记住之前的对话历史和行动结果这样在规划下一步或者回答你后续问题时才能有上下文不会颠三倒四。所以一个智能体的基础工作流大致就是“思考 - 行动 - 观察结果 - 再思考 - 再行动...”这样一个循环直到完成任务。业内常提的ReActReason Act或者CoTChain of Thought范式本质上都是在强化这个循环中的“思考”环节让规划更靠谱。理解了这些我们就能明白开发一个智能体核心就是两件事一是设计好它的“大脑”规划逻辑二是给它准备好顺手的“工具”执行能力。接下来我们就用Tao-8k来具体实现。2. 搭建智能体的核心骨架思考、行动与记忆Tao-8k提供了一个很好的基础来构建智能体。我们从一个最简单的架子搭起这个架子包含了智能体最核心的循环逻辑。# agent_core.py - 智能体核心循环示例 class SimpleAgent: def __init__(self, llm, tools): 初始化智能体 :param llm: 大语言模型实例用于思考决策 :param tools: 可用的工具列表 self.llm llm self.tools {tool.name: tool for tool in tools} # 工具字典方便按名调用 self.memory [] # 简易记忆存储历史交互 def run(self, user_input): 执行智能体的主循环 print(f用户输入: {user_input}) self.memory.append({role: user, content: user_input}) # 初始规划让模型思考第一步该做什么 plan_prompt f 你是一个智能助手。当前任务{user_input} 你可以使用的工具有{list(self.tools.keys())} 请思考你的第一步行动应该是什么。直接返回你要调用的工具名称和参数。 例如调用工具[search]参数为{{query: 什么是人工智能}} 如果任务已经完成或无需工具请返回“最终答案”开头的内容。 response self.llm.generate(plan_prompt) print(f初始规划: {response}) # 开始思考-行动循环 max_steps 5 # 防止无限循环 for step in range(max_steps): if response.startswith(最终答案): final_answer response.replace(最终答案, ).strip() print(f任务完成最终答案: {final_answer}) self.memory.append({role: assistant, content: final_answer}) return final_answer # 解析模型响应提取工具调用指令 tool_name, params self._parse_action(response) if tool_name in self.tools: # 执行行动 print(f步骤{step1}: 调用工具[{tool_name}]参数{params}) tool_result self.tools[tool_name].run(**params) print(f工具返回: {tool_result}) # 将行动和结果存入记忆 self.memory.append({ role: assistant, content: f调用{tool_name}结果{tool_result} }) # 基于结果进行下一步思考 next_plan_prompt f 历史记录{self.memory[-3:]} # 取最近几条记忆 当前工具执行结果{tool_result} 请根据结果和任务目标决定下一步行动。 返回格式同上。 response self.llm.generate(next_plan_prompt) print(f下一步规划: {response}) else: print(f错误未知工具 {tool_name}) break return 任务执行超时或遇到错误。 def _parse_action(self, response): 一个简单的解析函数用于从模型响应中提取工具调用信息 # 这里是一个简化示例实际应用中可能需要更复杂的解析或让模型输出结构化数据如JSON import re pattern r调用工具\[(\w)\]参数为({.*?}) match re.search(pattern, response) if match: return match.group(1), eval(match.group(2)) # 注意实际生产环境慎用eval return None, {}这段代码定义了一个最简单的智能体核心。它有一个记忆列表一个主循环。循环中模型先根据任务和可用工具进行“思考”规划然后我们解析出它想做的“行动”调用哪个工具执行后得到“观察”结果再把结果喂给模型进行下一轮“思考”。这就是智能体最本质的运作模式。当然这个解析函数_parse_action非常简陋。在实际项目中我们更倾向于让模型直接输出结构化的数据比如JSON这样更可靠。或者使用Tao-8k框架中可能提供的更高级的Action解析模块。3. 给智能体装上“手和脚”工具集成的艺术智能体光有脑子不行得有能力改变外部世界。这就是工具Tools的作用。工具可以是任何能通过代码调用的功能一个函数、一个Web API、一个数据库查询。3.1 定义标准化的工具接口首先我们定义一个统一工具接口让智能体能以相同的方式调用所有工具。# tools/base.py from abc import ABC, abstractmethod from typing import Any, Dict class BaseTool(ABC): 所有工具的基类 def __init__(self, name, description): self.name name self.description description # 这个描述很重要用于告诉模型工具是干什么的 abstractmethod def run(self, **kwargs) - Any: 执行工具的核心方法 pass def to_dict(self) - Dict: 将工具信息转换为字典方便传递给模型 return { name: self.name, description: self.description, parameters: self._get_parameters_schema() # 描述工具需要的参数 } def _get_parameters_schema(self) - Dict: 定义工具参数的JSON Schema指导模型如何提供参数 # 这是一个示例实际应根据工具具体参数定义 return { type: object, properties: { # 例如搜索工具的参数 query: {type: string, description: 搜索关键词} }, required: [query] }3.2 实现几个常用工具有了基类我们就可以实现具体的工具了。这里举三个例子搜索、计算和查询数据库。# tools/implementations.py import requests import json from tools.base import BaseTool class WebSearchTool(BaseTool): 一个简单的网络搜索工具示例实际可使用SerperAPI、Google Search API等 def __init__(self): super().__init__( nameweb_search, description使用搜索引擎获取最新信息。当你需要查询实时、事实性或未知领域的信息时使用此工具。 ) def run(self, query: str) - str: # 注意这是一个模拟示例。实际应用中请替换为真正的搜索API并遵守相关服务条款。 print(f[搜索工具] 正在搜索: {query}) # 模拟返回结果 mock_results [ f关于{query}的百科摘要..., f近期关于{query}的新闻报道..., f相关数据统计... ] return \n.join(mock_results[:2]) # 返回前两条结果 class CalculatorTool(BaseTool): 计算器工具用于执行数学运算 def __init__(self): super().__init__( namecalculator, description执行数学计算。可以处理加减乘除、乘方、开方等运算。输入应为数学表达式字符串。 ) def run(self, expression: str) - str: print(f[计算器] 计算表达式: {expression}) try: # 警告生产环境中直接使用eval有安全风险此处仅作演示。 # 应使用更安全的表达式求值库如 ast.literal_eval 配合自定义解析。 result eval(expression, {__builtins__: None}, {}) return f计算结果: {result} except Exception as e: return f计算错误: {e} class DatabaseQueryTool(BaseTool): 数据库查询工具示例 def __init__(self, db_connection): super().__init__( namequery_database, description查询内部数据库以获取结构化信息如用户数据、产品库存、销售记录等。 ) self.db db_connection def _get_parameters_schema(self): # 重写参数模式更具体 return { type: object, properties: { table: {type: string, description: 要查询的表名}, columns: {type: string, description: 要查询的列用逗号分隔或用*表示所有列}, condition: {type: string, description: 查询条件例如 age 30} }, required: [table] } def run(self, table: str, columns: str *, condition: str None) - str: print(f[数据库工具] 查询表{table}列{columns}条件{condition}) # 模拟查询 # 实际应使用参数化查询防止SQL注入 sql fSELECT {columns} FROM {table} if condition: sql f WHERE {condition} sql LIMIT 5; # 限制返回条数 # result self.db.execute(sql) # 实际执行 # 模拟返回 return f执行了查询: {sql}\n返回了5条模拟数据。3.3 将工具集成到智能体现在我们可以把这些工具装配到之前的智能体骨架上。# main.py - 组装并运行智能体 from agent_core import SimpleAgent from tools.implementations import WebSearchTool, CalculatorTool # 假设有一个模拟的数据库连接 from dummy_db import dummy_connection def main(): # 1. 初始化大模型这里需要接入实际的Tao-8k模型调用 # class DummyLLM: # def generate(self, prompt): # # 模拟模型响应 # return 模拟模型响应调用工具[web_search]参数为{\query\: \用户问题关键词\} # llm DummyLLM() # 实际应替换为llm Tao8kClient(...) # 2. 创建工具集 tools [ WebSearchTool(), CalculatorTool(), DatabaseQueryTool(dummy_connection), ] # 3. 创建智能体 agent SimpleAgent(llmllm, toolstools) # 4. 运行示例任务 task 请先搜索一下‘新能源汽车市场增长率’然后用计算器算算如果今年增长15%明年市场规模是多少假设今年是1000亿。 result agent.run(task) print(\n *50) print(智能体执行完毕。) if __name__ __main__: main()通过这样的设计智能体就具备了“手和脚”。模型通过工具描述来学习每个工具能干什么、需要什么参数然后在规划时决定调用哪一个。这种设计模式非常灵活添加新工具就像拼装乐高一样简单。4. 实战演练让智能体在真实场景中工作理论说得再多不如看它实际干一次活。我们来看两个常见的场景智能客服和数据分析。4.1 场景一升级版智能客服传统的客服机器人只能回答预设QA。有了智能体客服可以主动查询知识库、核对用户订单、甚至进行简单的故障诊断。假设我们有一个工具叫query_knowledge_base另一个叫get_user_order_status。# 模拟一个客服任务 customer_query “我上周买的订单号是ORD-12345的手机壳现在到哪了另外手机壳脏了怎么清洗”一个具备规划能力的智能体会这样处理思考识别出两个子任务查询物流状态 获取清洁建议。行动1调用get_user_order_status工具参数order_id“ORD-12345”获取物流信息。观察得到结果“已发货正在派送中”。思考第一个任务完成开始第二个。行动2调用query_knowledge_base工具参数question“手机壳清洁方法”。观察得到清洁指南。思考任务全部完成组织最终回复。最终答案“您的订单ORD-12345已发货正在派送中预计明天送达。关于清洁建议使用软布蘸取少量中性清洁剂擦拭避免使用酒精或粗糙物品。”整个过程完全自动化无需人工拆解问题。你只需要告诉客服智能体“去解决用户的问题”它自己会想办法。4.2 场景二自助数据分析助手想象一下业务人员可以直接用自然语言提问“上个月华东区销售额最高的前三个产品是什么和去年同期比怎么样”这背后智能体需要理解“上个月”、“华东区”、“销售额最高”、“前三个”、“去年同期比”这些概念。规划出查询步骤先查当月数据再查去年同期数据然后计算对比最后排序取前三。调用数据库查询工具query_database执行这些查询。可能还需要调用计算器工具calculator来计算增长率。将多个查询结果整合成一份人类可读的报告。# 伪代码展示智能体的思考过程通过Prompt引导 analysis_prompt f 用户问题{user_question} 可用工具query_database查询销售数据表 calculator计算增长率。 请规划分析步骤并调用相应工具。 # 模型可能生成的规划 # 1. 调用query_database查询本月华东区各产品销售额。 # 2. 调用query_database查询去年同月华东区各产品销售额。 # 3. 调用calculator计算各产品同比增长率。 # 4. 综合结果筛选出本月销售额前三的产品并附上增长率。通过这种方式我们就把复杂的数据库查询和数据分析封装成了一个可以用自然语言交互的智能助手极大地降低了数据使用的门槛。5. 总结走完这一趟你应该对如何用Tao-8k构建一个能自主规划与执行的智能体有了比较清晰的认识。它不是一个魔法黑盒其核心就是一个基于大模型“思考”的决策循环加上一套标准化、可扩展的“工具”执行体系。从简单的搜索、计算到复杂的数据库操作、API调用工具赋予了智能体改变现实的能力。而ReAct这类范式则是在不断优化它的思考方式让它规划出的步骤更合理、更有效。在实际开发中你会遇到更多挑战比如如何让工具调用更稳定可靠更好的参数解析、错误处理如何设计更高效的记忆机制记住关键信息而不是所有对话以及如何评估智能体的任务完成质量。但只要你抓住了“思考-行动”这个核心循环并搭建好工具生态你就已经迈出了最关键的一步。下次当你面对一个需要多步骤、多系统协作的复杂任务时不妨想想能不能训练一个智能体来替我完成也许这就是你工作效率提升的下一个突破口。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

Tao-8k智能体(Agent)框架开发实战:自主任务规划与执行

Tao-8k智能体(Agent)框架开发实战:自主任务规划与执行 最近和不少做AI应用的朋友聊天,大家都有一个共同的感受:现在的AI模型能力很强,但很多时候还是像个“一问一答”的机器。你问什么,它答什么…...

别再手动点点点了!用Camunda Modeler + SpringBoot 5分钟搞定一个审批流程(附完整代码)

5分钟极速搭建企业级审批流:Camunda Modeler与SpringBoot实战指南 每次看到团队还在用if-else硬编码审批逻辑时,我的内心都是崩溃的。上周又有个新来的实习生问我:"为什么请假审批要改三天代码?" 今天我就用Camunda这个…...

GLM-4.1V-9B-Base实战:手把手教你做图片内容识别与场景描述

GLM-4.1V-9B-Base实战:手把手教你做图片内容识别与场景描述 1. 认识GLM-4.1V-9B-Base视觉理解模型 GLM-4.1V-9B-Base是智谱AI开源的一款强大的视觉多模态理解模型,专门用于处理图像内容识别与理解任务。这个模型的核心优势在于它能够像人类一样"看…...

Qt插件开发实战:从零构建可动态加载的自定义控件

1. 为什么需要Qt自定义控件插件 第一次用Qt设计师拖控件的时候,我就被它的便捷性惊艳到了。但用久了发现一个问题:默认控件库里的组件根本不够用啊!比如要做个十六进制输入框,或者带特殊效果的进度条,官方压根没提供现…...

从单机到云原生:基于 AgentScope Java 构建高可用实时翻译机器人的完整工程实践

从单机到云原生:基于 AgentScope Java 构建高可用实时翻译机器人的完整工程实践 一、前言:为什么“实时翻译”不是调个 API 就能上线 很多团队第一次做实时翻译机器人时,脑海里的链路通常很简单: 音频输入 -> 语音识别 -> 大模型翻译 -> 返回结果 Demo 阶段这…...

智能家居入门:用51单片机实现光照自动控制的窗帘系统(含Proteus仿真文件)

智能家居DIY实战:从零搭建51单片机光控窗帘系统 清晨的阳光透过窗帘缝隙洒进房间,你是否想过让窗帘能自动感知光线变化,为你营造最舒适的室内环境?今天我们将用最经典的51单片机,配合光照传感器和步进电机,…...

鸿蒙权限管理避坑指南:为什么你的元服务总是权限申请失败?

鸿蒙元服务权限管理实战:从原理到避坑指南 在鸿蒙生态中开发元服务时,权限管理往往是开发者遇到的第一个"拦路虎"。许多看似简单的功能调用,却因为权限配置不当而频频报错。我曾在一个智能家居控制元服务项目中,花了整整…...

从理论到实践:深入解析GNSS完好性监测中的RAIM算法家族

1. GNSS完好性监测为什么需要RAIM? 当你用手机导航时,有没有遇到过定位突然漂移几百米的情况?这就是典型的卫星导航信号异常。对于普通用户可能只是多走几步路,但对于自动驾驶汽车或民航飞机,这种误差可能造成严重后果…...

TI MSPM0G3507硬件开发实战:用SysConfig图形化工具5分钟配置GPIO点灯

TI MSPM0G3507开发实战:SysConfig图形化工具5分钟实现GPIO高效配置 在嵌入式开发领域,快速验证硬件功能是每个工程师的基本诉求。传统的手动编写寄存器配置方式不仅耗时耗力,还容易因人为疏忽导致错误。Texas Instruments推出的SysConfig工具…...

AI绘画进阶技巧:从出图到商用,避开版权坑与同质化的核心方法

如何提升AI绘画作品质量选择适合的模型和工具:Stable Diffusion、MidJourney等工具各有特点,针对不同风格需求选择合适模型。例如,写实风格可使用RealESRGAN增强细节,动漫风格可尝试NovelAI模型。优化提示词(Prompt&am…...

基于Qt6.4的PDF阅读器开发:实现高效章节目录与预览图功能

1. Qt6.4 PDF模块开发环境搭建 第一次接触Qt6.4的PDF模块时,我着实被它的便捷性惊艳到了。相比之前用Qt5.9时折腾第三方库的痛苦经历,现在只需要在安装时勾选一个选项就能获得完整的PDF处理能力,这感觉就像从手动挡升级到了自动驾驶。 开发环…...

Zig命令行开发实战:用zigcli库实现参数解析与表格输出的完整指南

Zig命令行开发实战:用zigcli库实现参数解析与表格输出的完整指南 最近在重构团队内部工具链时,我尝试用Zig重写几个常用CLI工具。相比传统方案,Zig的编译时特性和轻量级运行时特别适合这类场景。今天重点分享如何用zigcli库快速构建带参数解析…...

MogFace-large实战教程:结合OpenCV后处理实现人脸关键点对齐

MogFace-large实战教程:结合OpenCV后处理实现人脸关键点对齐 1. 引言:从人脸检测到关键点对齐 人脸检测是计算机视觉领域最基础也最经典的任务之一。无论是手机解锁、美颜相机,还是视频会议里的虚拟背景,背后都离不开一个精准、…...

C++实战笔记(2): 栈

1. 基础知识 栈(Stack)是一种非常经典的线性数据结构,它最核心的特点是 后进先出(Last In First Out, LIFO)。也就是说,最后进入栈的元素,会最先被取出;而最早进入的数据&#x…...

实测AI人脸隐私卫士:远距离小脸也能精准识别并打码

实测AI人脸隐私卫士:远距离小脸也能精准识别并打码 关键词:AI人脸检测、隐私保护、MediaPipe、自动打码、图像脱敏、本地离线处理、远距离识别 1. 背景与需求分析 1.1 远距离人脸识别的技术挑战 在集体活动拍摄、监控安防等场景中,人脸识…...

Pixel Couplet Gen 算法解析:LSTM网络在序列文本生成中的应用

Pixel Couplet Gen 算法解析:LSTM网络在序列文本生成中的应用 1. 传统对联遇上现代AI 春节贴对联是中国延续千年的文化传统,一副好对联讲究平仄相对、对仗工整、意境相合。传统上,这需要深厚的文学功底才能创作。而今天,Pixel C…...

告别环境冲突!用Docker在Ubuntu 22.04上5分钟搞定ROS2 Humble和rviz2

容器化ROS2开发实战:Ubuntu 22.04Docker高效环境搭建指南 在机器人操作系统(ROS)开发中,环境配置一直是开发者面临的棘手问题。不同ROS版本间的依赖冲突、系统库版本不兼容、开发环境污染等问题常常让开发者陷入无休止的调试循环。…...

U9C与钉钉集成,选‘谁发起’很重要!从系统设计角度聊聊两种对接方案的优劣与选型建议

U9C与钉钉集成:从系统设计视角解析发起方选择的关键逻辑 当企业资源计划(ERP)系统与协同办公平台需要深度整合时,"谁作为数据发起方"这个看似简单的决策,往往成为影响整个系统稳定性的关键因素。作为经历过多…...

OpenCASCADE法向获取避坑指南:为什么你的法线方向总是不对?

OpenCASCADE法向获取避坑指南:为什么你的法线方向总是不对? 在三维建模领域,法线方向的重要性不言而喻。它不仅影响着光照计算、碰撞检测等基础功能,更直接关系到后续的有限元分析、数控加工等高级应用的准确性。作为一款开源的几…...

基于海康SDK+YOLOv8n-pose的智能监控开发:如何用Python实现跌倒检测报警系统

基于海康SDK与YOLOv8n-pose的智能跌倒检测系统开发实战 在养老院、医院病房等特殊场所,跌倒事件往往意味着高风险。传统监控系统只能被动记录画面,而结合计算机视觉的智能分析技术,我们可以实现主动预警。本文将手把手教你如何用Python整合海…...

多模态家居系统崩溃频发?3类隐性跨模态对齐失效正在吞噬你的AIoT稳定性

第一章:多模态家居系统崩溃频发的奇点警讯 2026奇点智能技术大会(https://ml-summit.org) 当语音指令未被响应、视觉传感器突然黑屏、温控模块在零下15℃自动切换至制冷模式——这些并非孤立故障,而是多模态家居系统在跨模态语义对齐失效后集体退化的表…...

【仅限本届参会者解密】:SITS2026圆桌闭门纪要流出——多模态→AGI的3个非线性跃迁窗口期(含时间坐标)

第一章:SITS2026圆桌:多模态与AGI路径 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026圆桌讨论中,来自DeepMind、OpenAI、中科院自动化所及斯坦福HAI的七位研究者围绕“多模态表征统一性”与“AGI涌现临界条件”展开深度交锋。核…...

BetterGI:5大核心功能彻底解放你的原神双手![特殊字符]

BetterGI:5大核心功能彻底解放你的原神双手!🎮 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙…...

2026年3月亲测:GEO优化厂家实操分享

行业痛点分析在AI搜索流量占比超65%的2026年,全国GEO优化领域正面临三大核心挑战:地域精准度不足导致无效流量占比高达38%(数据来源:中国互联网协会2026年Q1报告),平台适配滞后使企业错失72%的算法更新红利…...

【AI入门系列】车市先知:二手车价格预测学习赛507

深度学习方案...

技术书籍速读:年度Top 5推荐

——软件测试从业者的专业进阶指南在AI与云原生技术深度重塑软件测试行业的2026年,高效阅读技术书籍已成为测试工程师的核心竞争力。面对自动化测试框架的快速迭代、DevSecOps的全面普及以及AI测试工具的爆发式增长,测试从业者亟需通过科学速读掌握前沿知…...

优化EFI引导配置:实现WIN10与UBUNTU20.04双系统无缝切换

1. 双系统引导的痛点与EFI解决方案 每次开机都要狂按F12选择系统?两个系统互相找不到对方?删除一个系统导致另一个也无法启动?这些困扰我多年的双系统问题,终于在一次重装系统时找到了完美解决方案。传统BIOSMBR的方式确实可以实现…...

RK3588 AI开发选型指南:RKNN-Toolkit-Lite2 vs. RKNPU2 SDK,C接口和Python接口到底怎么选?

RK3588 AI开发选型指南:RKNN-Toolkit-Lite2与RKNPU2 SDK深度对比 当项目进入部署阶段,RK3588开发者常面临一个关键抉择:选择Python生态的RKNN-Toolkit-Lite2还是C语言的RKNPU2 SDK?这个选择直接影响开发效率、运行性能和后期维护成…...

测试左移与右移平衡:工作流优化

在快速迭代的软件交付环境中,测试左移(Shift-Left Testing)和测试右移(Shift-Right Testing)已成为提升质量与效率的核心策略。测试左移强调在开发生命周期早期介入测试,而测试右移聚焦于生产环境的持续验证…...

C# winform 自制分页功能

一个精简的分页类&#xff0c;配合现有的界面按钮使用&#xff1a;分页类&#xff08;Pagination.cs&#xff09; using System; using System.Collections.Generic;/// <summary> /// 分页管理类 /// </summary> public class Pagination {private int _pageIndex…...