在企业级AI应用开发中,经常遇到需要让AI系统自主完成复杂任务链的场景。传统的大模型调用往往只能完成单次问答,而AI Agent智能体技术能够实现目标分解、工具调用、状态记忆等高级能力。本文基于实际项目经验,完整拆解从零搭建企业级AI Agent的全流程,包含可运行的代码示例和部署方案。

1. AI Agent智能体核心概念解析

1.1 什么是AI Agent智能体

AI Agent智能体是一种能够感知环境、自主决策并执行动作的智能系统。与传统的大模型调用不同,AI Agent具备以下核心特征:

  • 自主性 :能够根据目标自主规划行动步骤
  • 工具使用 :可以调用外部API、数据库、计算工具等
  • 记忆能力 :具备短期和长期记忆,能够保持对话上下文
  • 推理能力 :能够进行逻辑推理和问题分解

在企业级应用中,AI Agent可以用于智能客服、数据分析助手、自动化流程执行等场景,显著提升业务效率。

1.2 企业级AI Agent的技术架构

典型的企业级AI Agent架构包含以下组件:

感知层 → 推理引擎 → 行动执行 → 记忆存储
  • 感知层 :负责接收用户输入和环境信息
  • 推理引擎 :基于大模型进行任务规划和决策
  • 行动执行 :调用工具API完成具体操作
  • 记忆存储 :维护对话历史和任务状态

这种架构确保了Agent能够处理复杂的多步骤任务,并在长时间运行中保持一致性。

2. 环境准备与开发工具选择

2.1 基础开发环境配置

企业级AI Agent开发推荐使用以下技术栈:

# 创建项目目录
mkdir enterprise-ai-agent
cd enterprise-ai-agent

# 初始化Python环境(推荐Python 3.9+)
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate  # Windows

# 安装核心依赖
pip install openai langchain sqlalchemy requests

2.2 大模型API配置

根据企业需求选择合适的大模型服务:

# config.py - API配置管理
import os
from dataclasses import dataclass

@dataclass
class ModelConfig:
    OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "your-api-key")
    OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
    MODEL_NAME = "gpt-4"  # 可根据需求调整
    
    # 本地模型配置(可选)
    LOCAL_MODEL_URL = os.getenv("LOCAL_MODEL_URL", "")

2.3 开发工具推荐

  • IDE :VS Code with Python扩展
  • 版本控制 :Git + GitHub/GitLab
  • 项目管理 :Poetry或Pipenv
  • 测试框架 :pytest
  • 文档生成 :Sphinx或MkDocs

3. 核心组件设计与实现

3.1 Agent基础框架搭建

首先实现一个基础的Agent类,包含核心的生命周期方法:

# agent/base_agent.py
from abc import ABC, abstractmethod
from typing import List, Dict, Any
import logging

class BaseAgent(ABC):
    def __init__(self, name: str, model_config: Dict[str, Any]):
        self.name = name
        self.model_config = model_config
        self.logger = logging.getLogger(f"agent.{name}")
        self.memory = []  # 短期记忆存储
        
    @abstractmethod
    async def perceive(self, input_data: Any) -> Dict[str, Any]:
        """感知输入数据并解析"""
        pass
        
    @abstractmethod
    async def plan(self, perception: Dict[str, Any]) -> List[Dict[str, Any]]:
        """规划行动步骤"""
        pass
        
    @abstractmethod
    async def act(self, plan: List[Dict[str, Any]]) -> Any:
        """执行行动计划"""
        pass
        
    def remember(self, experience: Dict[str, Any]):
        """存储重要经验到记忆"""
        self.memory.append(experience)
        # 限制记忆长度,避免无限增长
        if len(self.memory) > 100:
            self.memory = self.memory[-50:]

3.2 工具调用系统实现

工具调用是Agent的核心能力,实现一个可扩展的工具管理系统:

# agent/tool_system.py
import inspect
from typing import Callable, Dict, Any, List
import json

class ToolSystem:
    def __init__(self):
        self.tools: Dict[str, Callable] = {}
        
    def register_tool(self, name: str, function: Callable, description: str = ""):
        """注册工具函数"""
        self.tools[name] = {
            'function': function,
            'description': description,
            'signature': inspect.signature(function)
        }
        
    async def execute_tool(self, tool_name: str, **kwargs) -> Any:
        """执行指定工具"""
        if tool_name not in self.tools:
            raise ValueError(f"工具未注册: {tool_name}")
            
        tool = self.tools[tool_name]
        try:
            result = await tool['function'](**kwargs)
            return {
                'success': True,
                'result': result,
                'tool': tool_name
            }
        except Exception as e:
            return {
                'success': False,
                'error': str(e),
                'tool': tool_name
            }
            
    def get_tools_description(self) -> str:
        """获取所有工具的描述,用于提示词生成"""
        descriptions = []
        for name, tool_info in self.tools.items():
            desc = f"{name}: {tool_info['description']}"
            descriptions.append(desc)
        return "\n".join(descriptions)

3.3 记忆管理系统设计

实现短期和长期记忆管理:

# agent/memory_system.py
from typing import List, Dict, Any
from datetime import datetime
import json

class MemorySystem:
    def __init__(self, max_short_term=100, long_term_storage=None):
        self.short_term_memory: List[Dict] = []
        self.long_term_storage = long_term_storage
        self.max_short_term = max_short_term
        
    def add_memory(self, content: str, memory_type: str = "conversation", 
                  importance: float = 0.5):
        """添加记忆条目"""
        memory_entry = {
            'timestamp': datetime.now().isoformat(),
            'content': content,
            'type': memory_type,
            'importance': importance
        }
        
        self.short_term_memory.append(memory_entry)
        
        # 维护短期记忆长度
        if len(self.short_term_memory) > self.max_short_term:
            self.short_term_memory = self.short_term_memory[-self.max_short_term:]
            
        # 重要记忆存入长期存储
        if importance > 0.8 and self.long_term_storage:
            self.long_term_storage.save(memory_entry)
            
    def get_recent_memories(self, count: int = 10) -> List[Dict]:
        """获取最近的记忆"""
        return self.short_term_memory[-count:]
        
    def search_memories(self, query: str) -> List[Dict]:
        """搜索相关记忆"""
        relevant = []
        for memory in self.short_term_memory:
            if query.lower() in memory['content'].lower():
                relevant.append(memory)
        return relevant

4. 完整企业级AI Agent实战案例

4.1 项目需求分析

我们以一个"企业数据分析助手"为例,该Agent需要具备以下能力:

  • 理解自然语言的数据分析需求
  • 连接企业数据库执行SQL查询
  • 对查询结果进行统计分析
  • 生成可视化图表和报告
  • 回答后续的数据相关问题

4.2 项目结构设计

enterprise-data-agent/
├── src/
│   ├── agent/
│   │   ├── __init__.py
│   │   ├── base_agent.py
│   │   ├── data_agent.py
│   │   ├── tool_system.py
│   │   └── memory_system.py
│   ├── tools/
│   │   ├── database_tools.py
│   │   ├── analysis_tools.py
│   │   └── visualization_tools.py
│   ├── config/
│   │   └── settings.py
│   └── utils/
│       └── helpers.py
├── tests/
├── requirements.txt
└── main.py

4.3 核心工具实现

首先实现数据库查询工具:

# tools/database_tools.py
import sqlite3
import pandas as pd
from typing import List, Dict, Any
import logging

class DatabaseTools:
    def __init__(self, db_path: str):
        self.db_path = db_path
        self.logger = logging.getLogger("tools.database")
        
    async def execute_sql(self, query: str, params: Dict = None) -> Dict[str, Any]:
        """执行SQL查询并返回结果"""
        try:
            conn = sqlite3.connect(self.db_path)
            
            if params:
                result = pd.read_sql_query(query, conn, params=params)
            else:
                result = pd.read_sql_query(query, conn)
                
            conn.close()
            
            return {
                'success': True,
                'data': result.to_dict('records'),
                'columns': list(result.columns),
                'row_count': len(result)
            }
        except Exception as e:
            self.logger.error(f"SQL执行错误: {str(e)}")
            return {
                'success': False,
                'error': str(e)
            }
            
    async def get_table_schema(self, table_name: str) -> Dict[str, Any]:
        """获取表结构信息"""
        query = f"PRAGMA table_info({table_name})"
        result = await self.execute_sql(query)
        
        if result['success']:
            return {
                'success': True,
                'schema': result['data']
            }
        return result

实现数据分析工具:

# tools/analysis_tools.py
import pandas as pd
from typing import List, Dict, Any
import numpy as np

class AnalysisTools:
    @staticmethod
    async def descriptive_stats(data: List[Dict]) -> Dict[str, Any]:
        """计算描述性统计"""
        if not data:
            return {'error': '数据为空'}
            
        df = pd.DataFrame(data)
        numeric_columns = df.select_dtypes(include=[np.number]).columns
        
        stats = {}
        for col in numeric_columns:
            stats[col] = {
                'mean': df[col].mean(),
                'median': df[col].median(),
                'std': df[col].std(),
                'min': df[col].min(),
                'max': df[col].max()
            }
            
        return {
            'success': True,
            'statistics': stats,
            'row_count': len(df)
        }
        
    @staticmethod
    async def trend_analysis(data: List[Dict], date_column: str, value_column: str) -> Dict[str, Any]:
        """趋势分析"""
        df = pd.DataFrame(data)
        df[date_column] = pd.to_datetime(df[date_column])
        df = df.sort_values(date_column)
        
        # 简单线性趋势
        x = np.arange(len(df))
        y = df[value_column].values
        slope = np.polyfit(x, y, 1)[0]
        
        return {
            'success': True,
            'trend_slope': slope,
            'data_points': len(df),
            'time_range': {
                'start': df[date_column].min().strftime('%Y-%m-%d'),
                'end': df[date_column].max().strftime('%Y-%m-%d')
            }
        }

4.4 专用DataAgent实现

# agent/data_agent.py
from .base_agent import BaseAgent
from .tool_system import ToolSystem
from .memory_system import MemorySystem
from tools.database_tools import DatabaseTools
from tools.analysis_tools import AnalysisTools
import openai
import json
from typing import Dict, Any, List

class DataAgent(BaseAgent):
    def __init__(self, model_config: Dict[str, Any], db_path: str):
        super().__init__("DataAnalysisAgent", model_config)
        
        # 初始化工具系统
        self.tool_system = ToolSystem()
        self.memory_system = MemorySystem()
        
        # 注册工具
        self.db_tools = DatabaseTools(db_path)
        self.analysis_tools = AnalysisTools()
        
        self._register_tools()
        
    def _register_tools(self):
        """注册所有可用工具"""
        self.tool_system.register_tool(
            "execute_sql", 
            self.db_tools.execute_sql,
            "执行SQL查询语句,参数: query(SQL语句), params(参数字典)"
        )
        
        self.tool_system.register_tool(
            "get_table_schema",
            self.db_tools.get_table_schema,
            "获取表结构信息,参数: table_name(表名)"
        )
        
        self.tool_system.register_tool(
            "descriptive_stats",
            self.analysis_tools.descriptive_stats,
            "计算描述性统计,参数: data(数据列表)"
        )
    
    async def perceive(self, user_input: str) -> Dict[str, Any]:
        """解析用户输入"""
        # 使用大模型分析用户意图
        prompt = f"""
        分析以下用户请求,判断是否需要数据库查询或数据分析:
        用户请求: {user_input}
        
        请返回JSON格式:
        {{
            "intent": "query|analysis|explain|other",
            "entities": {{
                "tables": ["表名列表"],
                "metrics": ["指标列表"],
                "time_range": "时间范围"
            }},
            "action_plan": ["步骤描述"]
        }}
        """
        
        try:
            response = openai.ChatCompletion.create(
                model=self.model_config['MODEL_NAME'],
                messages=[{"role": "user", "content": prompt}],
                temperature=0.1
            )
            
            perception = json.loads(response.choices[0].message.content)
            return perception
            
        except Exception as e:
            self.logger.error(f"感知解析错误: {e}")
            return {
                "intent": "other",
                "entities": {},
                "action_plan": ["直接回复用户"]
            }
    
    async def plan(self, perception: Dict[str, Any]) -> List[Dict[str, Any]]:
        """根据感知结果制定计划"""
        intent = perception.get("intent", "other")
        entities = perception.get("entities", {})
        
        plan = []
        
        if intent == "query":
            # 数据库查询计划
            if entities.get("tables"):
                plan.append({
                    "action": "get_table_schema",
                    "params": {"table_name": entities["tables"][0]},
                    "purpose": "了解表结构"
                })
                
            plan.append({
                "action": "generate_sql",
                "params": {"intent": intent, "entities": entities},
                "purpose": "生成SQL查询"
            })
            
        elif intent == "analysis":
            # 数据分析计划
            plan.extend([
                {
                    "action": "execute_sql",
                    "params": {"query": "获取基础数据"},
                    "purpose": "获取分析数据"
                },
                {
                    "action": "descriptive_stats", 
                    "params": {},
                    "purpose": "计算统计指标"
                }
            ])
            
        return plan
    
    async def act(self, plan: List[Dict[str, Any]]) -> Any:
        """执行计划"""
        results = []
        
        for step in plan:
            action = step["action"]
            params = step.get("params", {})
            
            if action in self.tool_system.tools:
                # 执行工具调用
                result = await self.tool_system.execute_tool(action, **params)
                results.append(result)
                
                # 记录到记忆
                self.memory_system.add_memory(
                    f"执行{action}:{result.get('success', False)}",
                    importance=0.7
                )
            elif action == "generate_sql":
                # 使用大模型生成SQL
                sql_result = await self._generate_sql(params)
                results.append(sql_result)
                
        return results
    
    async def _generate_sql(self, params: Dict) -> Dict:
        """使用大模型生成SQL查询"""
        intent = params.get("intent")
        entities = params.get("entities", {})
        
        prompt = f"""
        根据以下需求生成SQL查询语句:
        需求类型: {intent}
        涉及表: {entities.get('tables', [])}
        指标: {entities.get('metrics', [])}
        时间范围: {entities.get('time_range', '')}
        
        可用的表结构示例:
        - sales_data: date, product, revenue, quantity
        - user_info: user_id, registration_date, region
        
        返回JSON格式:
        {{
            "sql": "生成的SQL语句",
            "explanation": "SQL语句说明"
        }}
        """
        
        try:
            response = openai.ChatCompletion.create(
                model=self.model_config['MODEL_NAME'],
                messages=[{"role": "user", "content": prompt}],
                temperature=0.1
            )
            
            return json.loads(response.choices[0].message.content)
        except Exception as e:
            return {"error": f"SQL生成失败: {str(e)}"}

4.5 主程序入口与交互界面

# main.py
import asyncio
import os
from src.agent.data_agent import DataAgent
from src.config.settings import ModelConfig
import logging

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("main")

async def main():
    # 初始化配置
    config = {
        'OPENAI_API_KEY': os.getenv('OPENAI_API_KEY'),
        'MODEL_NAME': 'gpt-4'
    }
    
    # 创建Agent实例
    db_path = "example.db"  # 示例数据库
    agent = DataAgent(config, db_path)
    
    print("企业级数据分析Agent已启动!")
    print("输入'quit'退出程序")
    
    while True:
        try:
            user_input = input("\n请输入您的数据分析需求: ").strip()
            
            if user_input.lower() in ['quit', 'exit', '退出']:
                break
                
            if not user_input:
                continue
                
            # 执行Agent完整流程
            perception = await agent.perceive(user_input)
            plan = await agent.plan(perception)
            results = await agent.act(plan)
            
            # 显示结果
            print(f"\n分析结果:")
            for i, result in enumerate(results):
                print(f"步骤{i+1}: {result}")
                
        except KeyboardInterrupt:
            break
        except Exception as e:
            logger.error(f"处理错误: {e}")
            print("抱歉,处理过程中出现了错误,请重新尝试。")

if __name__ == "__main__":
    asyncio.run(main())

5. 企业级部署与优化方案

5.1 性能优化策略

企业级应用需要关注性能表现:

# utils/performance.py
import time
import asyncio
from functools import wraps
from typing import Any, Callable

def async_timed(name: str = ""):
    """异步函数执行时间监控装饰器"""
    def decorator(func: Callable) -> Callable:
        @wraps(func)
        async def wrapper(*args, **kwargs) -> Any:
            start_time = time.time()
            try:
                result = await func(*args, **kwargs)
                return result
            finally:
                execution_time = time.time() - start_time
                print(f"{name or func.__name__} 执行时间: {execution_time:.2f}秒")
        return wrapper
    return decorator

class RateLimiter:
    """API调用频率限制器"""
    def __init__(self, calls_per_second: float = 2.0):
        self.calls_per_second = calls_per_second
        self.semaphore = asyncio.Semaphore(int(calls_per_second))
        self.last_call = 0
        
    async def __aenter__(self):
        await self.semaphore.acquire()
        now = time.time()
        delay = 1.0 / self.calls_per_second - (now - self.last_call)
        if delay > 0:
            await asyncio.sleep(delay)
        self.last_call = time.time()
        return self
        
    async def __aexit__(self, exc_type, exc_val, exc_tb):
        self.semaphore.release()

5.2 安全防护措施

企业环境必须重视安全性:

# utils/security.py
import re
from typing import Optional

class SQLInjectionChecker:
    """SQL注入检测工具"""
    
    SQL_KEYWORDS = ['DROP', 'DELETE', 'UPDATE', 'INSERT', 'ALTER', 'CREATE']
    PATTERNS = [
        r'.*;.*--',  # 注释符攻击
        r'.*union.*select',  # Union查询
        r'.*or.*=.*',  # 永真条件
    ]
    
    @classmethod
    def check_sql_safety(cls, sql: str) -> bool:
        """检查SQL语句安全性"""
        sql_upper = sql.upper()
        
        # 检查危险关键字
        for keyword in cls.SQL_KEYWORDS:
            if keyword in sql_upper and not cls._is_safe_use(sql_upper, keyword):
                return False
                
        # 检查攻击模式
        for pattern in cls.PATTERNS:
            if re.match(pattern, sql_upper, re.IGNORECASE):
                return False
                
        return True
        
    @staticmethod
    def _is_safe_use(sql: str, keyword: str) -> bool:
        """判断关键字是否安全使用"""
        # 这里可以添加更复杂的安全逻辑
        return True

class InputValidator:
    """输入验证工具"""
    
    @staticmethod
    def validate_user_input(input_text: str, max_length: int = 1000) -> Optional[str]:
        """验证用户输入"""
        if not input_text or len(input_text.strip()) == 0:
            return "输入不能为空"
            
        if len(input_text) > max_length:
            return f"输入长度超过限制({max_length}字符)"
            
        # 检查危险字符
        dangerous_patterns = [
            r'<script.*?>',  # 脚本标签
            r'javascript:',   # JS协议
            r'onerror|onload' # 事件处理器
        ]
        
        for pattern in dangerous_patterns:
            if re.search(pattern, input_text, re.IGNORECASE):
                return "检测到危险输入内容"
                
        return None

6. 常见问题与解决方案

6.1 模型API调用问题

问题现象 :API调用超时或返回错误

解决方案

# utils/api_fallback.py
import asyncio
from typing import Any, Dict
import openai

class APIFallbackHandler:
    """API故障降级处理"""
    
    def __init__(self, max_retries: int = 3, base_delay: float = 1.0):
        self.max_retries = max_retries
        self.base_delay = base_delay
        
    async def call_with_retry(self, func, *args, **kwargs) -> Any:
        """带重试的API调用"""
        last_error = None
        
        for attempt in range(self.max_retries):
            try:
                return await func(*args, **kwargs)
            except openai.error.APIConnectionError as e:
                last_error = e
                delay = self.base_delay * (2 ** attempt)  # 指数退避
                await asyncio.sleep(delay)
            except openai.error.RateLimitError as e:
                last_error = e
                await asyncio.sleep(60)  # 频率限制等待1分钟
            except Exception as e:
                last_error = e
                break
                
        raise last_error if last_error else Exception("未知错误")

6.2 内存管理优化

问题现象 :长时间运行后内存占用过高

解决方案

# agent/memory_optimizer.py
import gc
from typing import List
import weakref

class MemoryOptimizer:
    """内存优化管理器"""
    
    def __init__(self, check_interval: int = 100):
        self.check_interval = check_interval
        self.call_count = 0
        self.large_objects: List[weakref.ReferenceType] = []
        
    def track_large_object(self, obj):
        """跟踪大对象"""
        if sys.getsizeof(obj) > 1024 * 1024:  # 1MB以上
            self.large_objects.append(weakref.ref(obj))
            
    def periodic_cleanup(self):
        """定期清理"""
        self.call_count += 1
        if self.call_count % self.check_interval == 0:
            # 清理无法访问的大对象
            self.large_objects = [ref for ref in self.large_objects if ref() is not None]
            # 强制垃圾回收
            gc.collect()

6.3 工具调用错误处理

问题现象 :工具调用失败导致整个流程中断

解决方案

# agent/error_handler.py
from typing import Any, Dict, Callable
import logging

class ErrorHandler:
    """错误处理管理器"""
    
    def __init__(self, max_failures: int = 3):
        self.max_failures = max_failures
        self.logger = logging.getLogger("error_handler")
        
    async def execute_with_fallback(self, func: Callable, *args, 
                                  fallback_func: Callable = None, **kwargs) -> Any:
        """带降级方案的执行"""
        last_error = None
        
        for attempt in range(self.max_failures):
            try:
                result = await func(*args, **kwargs)
                if attempt > 0:
                    self.logger.info(f"第{attempt+1}次尝试成功")
                return result
            except Exception as e:
                last_error = e
                self.logger.warning(f"第{attempt+1}次尝试失败: {e}")
                
                if attempt == self.max_failures - 1 and fallback_func:
                    self.logger.info("执行降级方案")
                    return await fallback_func(*args, **kwargs)
                    
        raise last_error

7. 企业级最佳实践

7.1 配置管理规范

企业级项目应该采用分层配置管理:

# config/settings.py
import os
from dataclasses import dataclass
from typing import Optional

@dataclass
class DatabaseConfig:
    host: str = os.getenv('DB_HOST', 'localhost')
    port: int = int(os.getenv('DB_PORT', '5432'))
    name: str = os.getenv('DB_NAME', 'enterprise_agent')
    user: str = os.getenv('DB_USER', 'postgres')
    password: str = os.getenv('DB_PASSWORD', '')

@dataclass  
class ModelConfig:
    api_key: str = os.getenv('OPENAI_API_KEY', '')
    base_url: Optional[str] = os.getenv('OPENAI_BASE_URL')
    model_name: str = os.getenv('MODEL_NAME', 'gpt-4')
    temperature: float = float(os.getenv('MODEL_TEMPERATURE', '0.1'))
    max_tokens: int = int(os.getenv('MAX_TOKENS', '2000'))

@dataclass
class AgentConfig:
    memory_size: int = int(os.getenv('MEMORY_SIZE', '100'))
    timeout: int = int(os.getenv('AGENT_TIMEOUT', '30'))
    max_retries: int = int(os.getenv('MAX_RETRIES', '3'))

7.2 日志与监控体系

建立完整的可观测性体系:

# utils/monitoring.py
import logging
import time
from datetime import datetime
from typing import Dict, Any

class MonitoringSystem:
    """监控系统"""
    
    def __init__(self):
        self.metrics: Dict[str, Any] = {}
        self.logger = logging.getLogger("monitoring")
        
    def record_metric(self, name: str, value: float, tags: Dict[str, str] = None):
        """记录指标"""
        if name not in self.metrics:
            self.metrics[name] = []
            
        metric_data = {
            'timestamp': datetime.now(),
            'value': value,
            'tags': tags or {}
        }
        self.metrics[name].append(metric_data)
        
    def record_api_call(self, endpoint: str, duration: float, success: bool):
        """记录API调用"""
        tags = {
            'endpoint': endpoint,
            'success': str(success)
        }
        self.record_metric('api_call_duration', duration, tags)
        self.record_metric('api_call_count', 1, tags)
        
    def get_performance_report(self) -> Dict[str, Any]:
        """生成性能报告"""
        report = {}
        for metric_name, data in self.metrics.items():
            if data:
                values = [d['value'] for d in data]
                report[metric_name] = {
                    'count': len(values),
                    'avg': sum(values) / len(values),
                    'max': max(values),
                    'min': min(values)
                }
        return report

7.3 测试策略

企业级项目需要完善的测试覆盖:

# tests/test_data_agent.py
import pytest
import asyncio
from src.agent.data_agent import DataAgent
from src.config.settings import ModelConfig

class TestDataAgent:
    @pytest.fixture
    def agent(self):
        """创建测试用的Agent实例"""
        config = ModelConfig(api_key="test_key", model_name="gpt-3.5-turbo")
        return DataAgent(config, ":memory:")  # 内存数据库
        
    @pytest.mark.asyncio
    async def test_perceive(self, agent):
        """测试感知功能"""
        perception = await agent.perceive("查询销售数据")
        assert 'intent' in perception
        assert 'entities' in perception
        
    @pytest.mark.asyncio 
    async def test_tool_execution(self, agent):
        """测试工具执行"""
        result = await agent.tool_system.execute_tool(
            "descriptive_stats", 
            data=[{'value': 1}, {'value': 2}]
        )
        assert result['success'] == True

本文完整展示了企业级AI Agent智能体的开发全流程,从基础概念到实际部署,包含了可运行的代码示例和工程实践建议。在实际项目中,建议根据具体业务需求调整架构设计,重点关注安全性、性能和可维护性。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐