MarkTechPost@AI 前天 17:04
A Coding Implementation to Build a Self-Adaptive Goal-Oriented AI Agent Using Google Gemini and the SAGE Framework
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本教程详细介绍了如何基于SAGE框架(自适应目标导向执行)并结合Google Gemini API,构建一个先进的AI代理系统。文章深入讲解了框架的四大核心组件:自我评估、自适应规划、目标导向执行和经验整合。通过这些组件的协同工作,旨在创建一个能够分解高层目标、规划执行步骤、系统化地完成任务并从结果中学习的智能、自学习代理。文中提供了代码实现,帮助读者理解底层架构,并展示了如何通过实时AI生成来协调复杂的决策过程。

💡 **SAGE框架核心组件解析**:文章详细阐述了SAGE框架的四个关键组成部分:自我评估(Self-Assessment)用于评估当前状态和能力,自适应规划(Adaptive Planning)用于动态创建任务分解,目标导向执行(Goal-oriented Execution)负责专注执行具体任务,以及经验整合(Experience Integration)用于从执行结果中学习和更新知识。

🤖 **Gemini API驱动的AI代理实现**:教程展示了如何利用Google的Gemini API来驱动AI代理的各项功能。通过`google.generativeai`库,代理能够生成评估报告、规划任务列表、执行具体指令并提取学习经验,从而实现智能化的工作流程。

📋 **任务管理与执行流程**:文章介绍了如何使用`Task`数据类来管理任务,包括任务ID、描述、优先级、状态和依赖关系。代理通过`execute_sage_cycle`方法来编排整个SAGE流程,包括迭代执行自我评估、自适应规划、目标导向执行和经验整合,直至目标达成或达到最大迭代次数。

🧠 **持续学习与上下文更新**:AI代理通过`integrate_experience`方法学习任务执行的成功与否,并将学习到的经验(如关键洞察、模式、调整建议)整合到记忆中。同时,代理的上下文信息会根据执行结果进行更新,这有助于代理在后续的迭代中做出更优的决策。

🚀 **应用与扩展潜力**:通过一个具体的“研究并创建可持续城市园艺实践综合指南”的例子,展示了SAGE代理的实际应用。文章最后指出,这种模块化设计为进一步扩展到更复杂的、多代理环境或特定领域应用提供了基础。

In this tutorial, we dive into building an advanced AI agent system based on the SAGE framework, Self-Adaptive Goal-oriented Execution, using Google’s Gemini API. We walk through each core component of the framework: Self-Assessment, Adaptive Planning, Goal-oriented Execution, and Experience Integration. By combining these, we aim to create an intelligent, self-improving agent that can deconstruct a high-level goal, plan its steps, execute tasks methodically, and learn from its outcomes. This hands-on walkthrough helps us understand the underlying architecture and also demonstrates how to orchestrate complex decision-making using real-time AI generation. Check out the FULL CODES here.

import google.generativeai as genaiimport jsonimport timefrom typing import Dict, List, Any, Optionalfrom dataclasses import dataclass, asdictfrom enum import Enumclass TaskStatus(Enum):   PENDING = "pending"   IN_PROGRESS = "in_progress"   COMPLETED = "completed"   FAILED = "failed"

We start by importing the necessary libraries, including google.generativeai for interacting with the Gemini model, and Python modules like json, time, and dataclasses for task management. We define a TaskStatus enum to help us track the progress of each task as pending, in progress, completed, or failed. Check out the FULL CODES here.

@dataclassclass Task:   id: str   description: str   priority: int   status: TaskStatus = TaskStatus.PENDING   dependencies: List[str] = None   result: Optional[str] = None     def __post_init__(self):       if self.dependencies is None:           self.dependencies = []class SAGEAgent:   """Self-Adaptive Goal-oriented Execution AI Agent"""     def __init__(self, api_key: str, model_name: str = "gemini-1.5-flash"):       genai.configure(api_key=api_key)       self.model = genai.GenerativeModel(model_name)       self.memory = []       self.tasks = {}       self.context = {}       self.iteration_count = 0         def self_assess(self, goal: str, context: Dict[str, Any]) -> Dict[str, Any]:       """S: Self-Assessment - Evaluate current state and capabilities"""       assessment_prompt = f"""       You are an AI agent conducting self-assessment. Respond ONLY with valid JSON, no additional text.       GOAL: {goal}       CONTEXT: {json.dumps(context, indent=2)}       TASKS_PROCESSED: {len(self.tasks)}             Provide assessment as JSON with these exact keys:       {{           "progress_score": <number 0-100>,           "resources": ["list of available resources"],           "gaps": ["list of knowledge gaps"],           "risks": ["list of potential risks"],           "recommendations": ["list of next steps"]       }}       """             response = self.model.generate_content(assessment_prompt)       try:           text = response.text.strip()           if text.startswith('```'):               text = text.split('```')[1]               if text.startswith('json'):                   text = text[4:]           text = text.strip()           return json.loads(text)       except Exception as e:           print(f"Assessment parsing error: {e}")           return {               "progress_score": 25,               "resources": ["AI capabilities", "Internet knowledge"],               "gaps": ["Specific domain expertise", "Real-time data"],               "risks": ["Information accuracy", "Scope complexity"],               "recommendations": ["Break down into smaller tasks", "Focus on research first"]           }     def adaptive_plan(self, goal: str, assessment: Dict[str, Any]) -> List[Task]:       """A: Adaptive Planning - Create dynamic, context-aware task decomposition"""       planning_prompt = f"""       You are an AI task planner. Respond ONLY with valid JSON array, no additional text.       MAIN_GOAL: {goal}       ASSESSMENT: {json.dumps(assessment, indent=2)}             Create 3-4 actionable tasks as JSON array:       [           {{               "id": "task_1",               "description": "Clear, specific task description",               "priority": 5,               "dependencies": []           }},           {{               "id": "task_2",               "description": "Another specific task",               "priority": 4,               "dependencies": ["task_1"]           }}       ]             Each task must have: id (string), description (string), priority (1-5), dependencies (array of strings)       """             response = self.model.generate_content(planning_prompt)       try:           text = response.text.strip()           if text.startswith('```'):               text = text.split('```')[1]               if text.startswith('json'):                   text = text[4:]           text = text.strip()                     task_data = json.loads(text)           tasks = []           for i, task_info in enumerate(task_data):               task = Task(                   id=task_info.get('id', f'task_{i+1}'),                   description=task_info.get('description', 'Undefined task'),                   priority=task_info.get('priority', 3),                   dependencies=task_info.get('dependencies', [])               )               tasks.append(task)           return tasks       except Exception as e:           print(f"Planning parsing error: {e}")           return [               Task(id="research_1", description="Research sustainable urban gardening basics", priority=5),               Task(id="research_2", description="Identify space-efficient growing methods", priority=4),               Task(id="compile_1", description="Organize findings into structured guide", priority=3, dependencies=["research_1", "research_2"])           ]     def execute_goal_oriented(self, task: Task) -> str:       """G: Goal-oriented Execution - Execute specific task with focused attention"""       execution_prompt = f"""       GOAL-ORIENTED EXECUTION:       Task: {task.description}       Priority: {task.priority}       Context: {json.dumps(self.context, indent=2)}             Execute this task step-by-step:       1. Break down the task into concrete actions       2. Execute each action methodically       3. Validate results at each step       4. Provide comprehensive output             Focus on practical, actionable results. Be specific and thorough.       """             response = self.model.generate_content(execution_prompt)       return response.text.strip()     def integrate_experience(self, task: Task, result: str, success: bool) -> Dict[str, Any]:       """E: Experience Integration - Learn from outcomes and update knowledge"""       integration_prompt = f"""       You are learning from task execution. Respond ONLY with valid JSON, no additional text.       TASK: {task.description}       RESULT: {result[:200]}...       SUCCESS: {success}             Provide learning insights as JSON:       {{           "learnings": ["key insight 1", "key insight 2"],           "patterns": ["pattern observed 1", "pattern observed 2"],           "adjustments": ["adjustment for future 1", "adjustment for future 2"],           "confidence_boost": <number -10 to 10>       }}       """             response = self.model.generate_content(integration_prompt)       try:           text = response.text.strip()           if text.startswith('```'):               text = text.split('```')[1]               if text.startswith('json'):                   text = text[4:]           text = text.strip()                     experience = json.loads(text)           experience['task_id'] = task.id           experience['timestamp'] = time.time()           self.memory.append(experience)           return experience       except Exception as e:           print(f"Experience parsing error: {e}")           experience = {               "learnings": [f"Completed task: {task.description}"],               "patterns": ["Task execution follows planned approach"],               "adjustments": ["Continue systematic approach"],               "confidence_boost": 5 if success else -2,               "task_id": task.id,               "timestamp": time.time()           }           self.memory.append(experience)           return experience     def execute_sage_cycle(self, goal: str, max_iterations: int = 3) -> Dict[str, Any]:       """Execute complete SAGE cycle for goal achievement"""       print(f" Starting SAGE cycle for goal: {goal}")       results = {"goal": goal, "iterations": [], "final_status": "unknown"}             for iteration in range(max_iterations):           self.iteration_count += 1           print(f"\n SAGE Iteration {iteration + 1}")                     print(" Self-Assessment...")           assessment = self.self_assess(goal, self.context)           print(f"Progress Score: {assessment.get('progress_score', 0)}/100")                     print("  Adaptive Planning...")           tasks = self.adaptive_plan(goal, assessment)           print(f"Generated {len(tasks)} tasks")                     print(" Goal-oriented Execution...")           iteration_results = []                     for task in sorted(tasks, key=lambda x: x.priority, reverse=True):               if self._dependencies_met(task):                   print(f"  Executing: {task.description}")                   task.status = TaskStatus.IN_PROGRESS                                     try:                       result = self.execute_goal_oriented(task)                       task.result = result                       task.status = TaskStatus.COMPLETED                       success = True                       print(f"   Completed: {task.id}")                   except Exception as e:                       task.status = TaskStatus.FAILED                       task.result = f"Error: {str(e)}"                       success = False                       print(f"   Failed: {task.id}")                                     experience = self.integrate_experience(task, task.result, success)                                     self.tasks[task.id] = task                   iteration_results.append({                       "task": asdict(task),                       "experience": experience                   })                     self._update_context(iteration_results)                     results["iterations"].append({               "iteration": iteration + 1,               "assessment": assessment,               "tasks_generated": len(tasks),               "tasks_completed": len([r for r in iteration_results if r["task"]["status"] == "completed"]),               "results": iteration_results           })                     if assessment.get('progress_score', 0) >= 90:               results["final_status"] = "achieved"               print(" Goal achieved!")               break             if results["final_status"] == "unknown":           results["final_status"] = "in_progress"             return results     def _dependencies_met(self, task: Task) -> bool:       """Check if task dependencies are satisfied"""       for dep_id in task.dependencies:           if dep_id not in self.tasks or self.tasks[dep_id].status != TaskStatus.COMPLETED:               return False       return True     def _update_context(self, results: List[Dict[str, Any]]):       """Update agent context based on execution results"""       completed_tasks = [r for r in results if r["task"]["status"] == "completed"]       self.context.update({           "completed_tasks": len(completed_tasks),           "total_tasks": len(self.tasks),           "success_rate": len(completed_tasks) / len(results) if results else 0,           "last_update": time.time()       })

We define a Task data class to encapsulate each unit of work, including its ID, description, priority, and dependencies. Then, we build the SAGEAgent class, which serves as the brain of our framework. It orchestrates the full cycle, self-assessing progress, planning adaptive tasks, executing each task with focus, and learning from outcomes to improve performance in future iterations. Check out the FULL CODES here.

if __name__ == "__main__":   API_KEY = "Use Your Own API Key Here"      try:       agent = SAGEAgent(API_KEY, model_name="gemini-1.5-flash")             goal = "Research and create a comprehensive guide on sustainable urban gardening practices"             results = agent.execute_sage_cycle(goal, max_iterations=2)             print("\n" + "="*50)       print(" SAGE EXECUTION SUMMARY")       print("="*50)       print(f"Goal: {results['goal']}")       print(f"Status: {results['final_status']}")       print(f"Iterations: {len(results['iterations'])}")             for i, iteration in enumerate(results['iterations'], 1):           print(f"\nIteration {i}:")           print(f"  Assessment Score: {iteration['assessment'].get('progress_score', 0)}/100")           print(f"  Tasks Generated: {iteration['tasks_generated']}")           print(f"  Tasks Completed: {iteration['tasks_completed']}")             print("\n Agent Memory Entries:", len(agent.memory))       print(" Total Tasks Processed:", len(agent.tasks))         except Exception as e:       print(f"Demo requires valid Gemini API key. Error: {e}")       print("Get your free API key from: https://makersuite.google.com/app/apikey")

We wrap up the tutorial by initializing the SAGEAgent with our Gemini API key and defining a sample goal on sustainable urban gardening. We then execute the full SAGE cycle and print a detailed summary, including progress scores, task counts, and memory insights, allowing us to evaluate how effectively our agent performed across iterations.

In conclusion, we successfully implemented and ran a complete SAGE cycle with our Gemini-powered agent. We observe how the system assesses its progress, dynamically generates actionable tasks, executes them with precision, and refines its strategy through learned experience. This modular design empowers us to extend the framework further for more complex, multi-agent environments or domain-specific applications.


Check out the FULL CODES here. Feel free to check out our GitHub Page for Tutorials, Codes and Notebooks. Also, feel free to follow us on Twitter and don’t forget to join our 100k+ ML SubReddit and Subscribe to our Newsletter.

The post A Coding Implementation to Build a Self-Adaptive Goal-Oriented AI Agent Using Google Gemini and the SAGE Framework appeared first on MarkTechPost.

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AI代理 SAGE框架 Gemini API 自适应学习 目标导向执行
相关文章