随着AI技术的快速发展,AI Agent开发已成为当前最热门的技术方向之一。很多开发者在学习过程中面临资料零散、环境配置复杂、实战案例缺乏等痛点。本文将基于LangChain框架,从零开始构建一个完整的RAG(检索增强生成)AI Agent,涵盖Python基础、Transformer原理、向量数据库集成到生产级部署的全流程。

无论你是零基础的编程新手,还是有一定经验的开发者,通过本文的实战教程,都能在短时间内掌握AI Agent开发的核心技能。我们将通过一个具体的文档问答项目,带你体验从环境搭建到模型部署的完整开发周期。

1. AI Agent开发基础与环境准备

1.1 什么是AI Agent及其应用场景

AI Agent(人工智能代理)是一种能够感知环境、进行决策并执行动作的智能系统。与传统的聊天机器人不同,AI Agent具备自主性、反应性和目标导向性,能够通过工具使用、环境交互和持续学习来完成复杂任务。

核心特性:

  • 自主决策 :基于当前状态和目标自主选择行动方案
  • 工具使用 :调用外部API、数据库、文件系统等资源
  • 持续学习 :从交互中积累经验并优化策略
  • 多步推理 :将复杂问题分解为可执行的子任务

典型应用场景:

  • 智能客服系统:处理用户咨询、故障排查、产品推荐
  • 数据分析助手:自动收集、清洗、分析业务数据
  • 代码开发助手:生成代码、调试程序、优化性能
  • 文档智能问答:基于企业知识库的精准问答系统

1.2 开发环境搭建与工具选型

Python环境配置(Windows/macOS/Linux):

# 检查Python版本(需要3.8+)
python --version
pip --version

# 创建虚拟环境
python -m venv ai_agent_env
source ai_agent_env/bin/activate  # Linux/macOS
ai_agent_env\Scripts\activate    # Windows

# 安装核心依赖
pip install langchain-core langchain-community langchain-openai
pip install sentence-transformers chromadb
pip install jupyter notebook  # 可选,用于代码调试

VS Code开发环境配置: 安装必要的扩展:Python、Pylance、Jupyter、GitLens等。创建 .vscode/settings.json 文件:

{
    "python.defaultInterpreterPath": "./ai_agent_env/bin/python",
    "python.analysis.extraPaths": ["./src"],
    "editor.formatOnSave": true
}

关键工具说明:

  • LangChain :AI应用开发框架,提供组件化的工作流
  • ChromaDB :轻量级向量数据库,适合本地开发
  • OpenAI API :大语言模型服务,也可替换为本地模型

2. Transformer架构深度解析

2.1 Transformer的核心组件与工作原理

Transformer模型彻底改变了自然语言处理领域,其核心创新在于自注意力机制(Self-Attention),能够并行处理序列数据并捕获长距离依赖关系。

自注意力机制数学原理:

import torch
import torch.nn as nn
import math

class SelfAttention(nn.Module):
    def __init__(self, d_model, heads):
        super().__init__()
        self.d_model = d_model
        self.heads = heads
        self.head_dim = d_model // heads
        
        self.query = nn.Linear(d_model, d_model)
        self.key = nn.Linear(d_model, d_model)
        self.value = nn.Linear(d_model, d_model)
        self.fc_out = nn.Linear(d_model, d_model)
        
    def forward(self, x, mask=None):
        batch_size, seq_length, d_model = x.shape
        
        # 线性变换得到Q、K、V
        Q = self.query(x).view(batch_size, seq_length, self.heads, self.head_dim)
        K = self.key(x).view(batch_size, seq_length, self.heads, self.head_dim)
        V = self.value(x).view(batch_size, seq_length, self.heads, self.head_dim)
        
        # 计算注意力分数
        energy = torch.einsum("bqhd,bkhd->bhqk", [Q, K]) / math.sqrt(self.head_dim)
        
        if mask is not None:
            energy = energy.masked_fill(mask == 0, -1e20)
            
        attention = torch.softmax(energy, dim=-1)
        out = torch.einsum("bhql,blhd->bqhd", [attention, V])
        out = out.reshape(batch_size, seq_length, d_model)
        
        return self.fc_out(out)

Transformer编码器结构:

class TransformerEncoderLayer(nn.Module):
    def __init__(self, d_model, heads, dropout, forward_expansion):
        super().__init__()
        self.attention = SelfAttention(d_model, heads)
        self.norm1 = nn.LayerNorm(d_model)
        self.norm2 = nn.LayerNorm(d_model)
        
        self.feed_forward = nn.Sequential(
            nn.Linear(d_model, forward_expansion * d_model),
            nn.ReLU(),
            nn.Linear(forward_expansion * d_model, d_model)
        )
        
        self.dropout = nn.Dropout(dropout)
        
    def forward(self, x, mask):
        attention = self.attention(x, mask)
        x = self.norm1(attention + x)
        x = self.dropout(x)
        
        forward = self.feed_forward(x)
        x = self.norm2(forward + x)
        x = self.dropout(x)
        
        return x

2.2 Transformer在AI Agent中的关键作用

在AI Agent开发中,Transformer模型承担着核心的推理和决策功能:

1. 理解用户意图:

  • 将自然语言查询转换为结构化表示
  • 识别查询中的关键实体和关系
  • 判断查询类型(问答、操作、分析等)

2. 上下文管理:

  • 维护多轮对话的历史记录
  • 跟踪任务执行状态和进度
  • 管理短期和长期记忆

3. 工具选择与调用:

  • 根据任务需求选择合适的工具
  • 生成工具调用的参数格式
  • 解析工具执行结果并整合到响应中

3. RAG框架原理与实战应用

3.1 RAG技术架构详解

RAG(Retrieval-Augmented Generation)通过结合检索器和生成器,让模型能够访问外部知识库,生成更准确、更具事实性的回答。

RAG工作流程:

  1. 文档处理 :将原始文档分割为可管理的块(chunk)
  2. 向量化 :使用嵌入模型将文本转换为向量表示
  3. 检索 :根据查询找到最相关的文档块
  4. 生成 :将检索到的上下文与原始查询结合生成回答
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma

class RAGSystem:
    def __init__(self, documents, chunk_size=1000, chunk_overlap=200):
        self.text_splitter = RecursiveCharacterTextSplitter(
            chunk_size=chunk_size,
            chunk_overlap=chunk_overlap
        )
        self.embeddings = OpenAIEmbeddings()
        self.vector_store = None
        self.setup_vector_store(documents)
    
    def setup_vector_store(self, documents):
        # 文档分割
        chunks = self.text_splitter.split_documents(documents)
        print(f"将文档分割为 {len(chunks)} 个块")
        
        # 创建向量数据库
        self.vector_store = Chroma.from_documents(
            chunks, 
            self.embeddings,
            persist_directory="./chroma_db"
        )
    
    def retrieve_documents(self, query, k=4):
        """检索相关文档"""
        return self.vector_store.similarity_search(query, k=k)
    
    def generate_answer(self, query, retrieved_docs, model):
        """基于检索结果生成回答"""
        context = "\n\n".join([doc.page_content for doc in retrieved_docs])
        prompt = f"""基于以下上下文信息回答问题:
        
上下文:
{context}

问题:{query}

请根据上下文提供准确、详细的回答:"""
        
        return model.generate(prompt)

3.2 文档分块策略与向量化技术

智能分块策略:

from langchain.text_splitter import (
    RecursiveCharacterTextSplitter,
    TokenTextSplitter,
    MarkdownHeaderTextSplitter
)

class AdvancedTextSplitter:
    def __init__(self):
        self.recursive_splitter = RecursiveCharacterTextSplitter(
            chunk_size=1000,
            chunk_overlap=200,
            length_function=len,
            separators=["\n\n", "\n", "。", "!", "?", ";", ",", " "]
        )
        
    def smart_split(self, document, content_type="general"):
        """根据内容类型智能分块"""
        if content_type == "markdown":
            headers_to_split_on = [
                ("#", "Header 1"),
                ("##", "Header 2"),
                ("###", "Header 3"),
            ]
            markdown_splitter = MarkdownHeaderTextSplitter(
                headers_to_split_on=headers_to_split_on
            )
            return markdown_splitter.split_text(document)
        else:
            return self.recursive_splitter.split_text(document)

多模态嵌入模型:

from sentence_transformers import SentenceTransformer
import numpy as np

class MultiModalEmbeddings:
    def __init__(self, model_name='all-MiniLM-L6-v2'):
        self.model = SentenceTransformer(model_name)
    
    def encode_text(self, texts):
        """文本向量化"""
        return self.model.encode(texts, convert_to_tensor=True)
    
    def calculate_similarity(self, query_embedding, doc_embeddings):
        """计算相似度"""
        from sklearn.metrics.pairwise import cosine_similarity
        return cosine_similarity(
            query_embedding.cpu().numpy().reshape(1, -1),
            doc_embeddings.cpu().numpy()
        )[0]

4. LangChain框架深度实战

4.1 LangChain核心组件详解

LangChain提供了模块化的组件来构建复杂的AI应用,主要包括以下几个核心模块:

工具(Tools)系统:

from langchain.tools import BaseTool
from typing import Type

class DocumentationSearchTool(BaseTool):
    name = "search_documentation"
    description = "搜索技术文档并返回相关片段"
    
    def _run(self, query: str) -> str:
        """执行文档搜索"""
        # 实现搜索逻辑
        return f"找到关于 {query} 的文档内容"
    
    async def _arun(self, query: str) -> str:
        """异步执行搜索"""
        raise NotImplementedError("不支持异步执行")

class CalculatorTool(BaseTool):
    name = "calculator"
    description = "执行数学计算"
    
    def _run(self, expression: str) -> str:
        """执行计算"""
        try:
            result = eval(expression)
            return f"{expression} = {result}"
        except Exception as e:
            return f"计算错误: {str(e)}"

智能体(Agents)架构:

from langchain.agents import AgentType, initialize_agent
from langchain.llms import OpenAI

class AdvancedAgent:
    def __init__(self, tools, llm_model):
        self.tools = tools
        self.llm = llm_model
        self.agent = self.setup_agent()
    
    def setup_agent(self):
        """初始化智能体"""
        return initialize_agent(
            tools=self.tools,
            llm=self.llm,
            agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
            verbose=True,
            handle_parsing_errors=True
        )
    
    def run_task(self, task_description):
        """执行任务"""
        try:
            result = self.agent.run(task_description)
            return {
                "status": "success",
                "result": result,
                "steps": self.agent.agent.llm_chain.verbose
            }
        except Exception as e:
            return {
                "status": "error",
                "error": str(e),
                "suggestion": "请重新表述您的问题"
            }

4.2 记忆(Memory)管理系统

对话记忆实现:

from langchain.memory import ConversationBufferWindowMemory
from langchain.schema import BaseMemory
from typing import Dict, List, Any

class CustomMemory(BaseMemory):
    """自定义记忆系统"""
    
    def __init__(self, k=10):
        self.k = k  # 记忆窗口大小
        self.conversations: List[Dict] = []
    
    @property
    def memory_variables(self) -> List[str]:
        return ["chat_history", "current_context"]
    
    def load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
        """加载记忆变量"""
        recent_chats = self.conversations[-self.k:] if self.conversations else []
        return {
            "chat_history": recent_chats,
            "current_context": self._get_current_context(inputs)
        }
    
    def save_context(self, inputs: Dict[str, Any], outputs: Dict[str, str]):
        """保存对话上下文"""
        self.conversations.append({
            "input": inputs.get("input", ""),
            "output": outputs.get("output", ""),
            "timestamp": datetime.now().isoformat()
        })
    
    def clear(self):
        """清空记忆"""
        self.conversations.clear()
    
    def _get_current_context(self, inputs: Dict[str, Any]) -> str:
        """获取当前上下文"""
        # 实现上下文提取逻辑
        return "当前对话上下文"

5. 生产级AI Agent项目实战

5.1 项目架构设计与技术选型

系统架构图:

AI Agent系统架构:
┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   用户接口层     │    │   业务逻辑层      │    │   数据访问层     │
│ - Web界面       │◄──►│ - 任务调度器     │◄──►│ - 向量数据库    │
│ - API接口       │    │ - 工作流引擎     │    │ - 关系数据库    │
│ - 命令行工具     │    │ - 错误处理      │    │ - 缓存系统      │
└─────────────────┘    └──────────────────┘    └─────────────────┘
                              │
                              ▼
                     ┌──────────────────┐
                     │   模型服务层      │
                     │ - LLM模型       │
                     │ - 嵌入模型       │
                     │ - 工具执行器     │
                     └──────────────────┘

技术栈选择理由:

  • 后端框架 :FastAPI(高性能、异步支持、自动文档生成)
  • 数据库 :PostgreSQL(关系型)+ ChromaDB(向量)
  • 缓存 :Redis(高速缓存会话状态)
  • 任务队列 :Celery(分布式任务处理)
  • 监控 :Prometheus + Grafana(系统监控)

5.2 核心代码实现

主应用入口:

# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Dict, Any
import uvicorn

app = FastAPI(title="AI Agent API", version="1.0.0")

class ChatRequest(BaseModel):
    message: str
    session_id: str = None
    tools: List[str] = []

class ChatResponse(BaseModel):
    response: str
    session_id: str
    tools_used: List[str]
    confidence: float

@app.post("/chat", response_model=ChatResponse)
async def chat_endpoint(request: ChatRequest):
    """处理聊天请求"""
    try:
        # 初始化或获取会话
        session_manager = SessionManager()
        session = session_manager.get_or_create_session(request.session_id)
        
        # 处理用户消息
        agent = AIAgent(session=session)
        result = await agent.process_message(request.message, request.tools)
        
        return ChatResponse(
            response=result["response"],
            session_id=session.session_id,
            tools_used=result["tools_used"],
            confidence=result["confidence"]
        )
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/health")
async def health_check():
    """健康检查端点"""
    return {"status": "healthy", "timestamp": datetime.now().isoformat()}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

智能体核心类:

# agent.py
import asyncio
from datetime import datetime
from typing import Dict, List, Any
import logging

logger = logging.getLogger(__name__)

class AIAgent:
    def __init__(self, session, model_provider="openai"):
        self.session = session
        self.model_provider = model_provider
        self.tool_registry = ToolRegistry()
        self.setup_agent()
    
    def setup_agent(self):
        """初始化智能体组件"""
        # 初始化LLM
        self.llm = self._init_llm()
        
        # 初始化工具
        self.tools = self.tool_registry.get_tools()
        
        # 初始化记忆系统
        self.memory = ConversationBufferWindowMemory(
            k=10,
            return_messages=True
        )
        
        # 初始化智能体
        self.agent_executor = initialize_agent(
            tools=self.tools,
            llm=self.llm,
            agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
            verbose=True,
            memory=self.memory,
            handle_parsing_errors=True
        )
    
    async def process_message(self, message: str, enabled_tools: List[str] = None):
        """处理用户消息"""
        try:
            start_time = datetime.now()
            
            # 预处理消息
            processed_message = self._preprocess_message(message)
            
            # 执行智能体任务
            result = await asyncio.get_event_loop().run_in_executor(
                None, 
                lambda: self.agent_executor.run(processed_message)
            )
            
            # 后处理结果
            processed_result = self._postprocess_result(result)
            
            # 记录执行时间
            execution_time = (datetime.now() - start_time).total_seconds()
            logger.info(f"消息处理完成,耗时: {execution_time:.2f}秒")
            
            return {
                "response": processed_result,
                "tools_used": self._extract_used_tools(result),
                "confidence": self._calculate_confidence(result),
                "execution_time": execution_time
            }
            
        except Exception as e:
            logger.error(f"消息处理失败: {str(e)}")
            return {
                "response": "抱歉,处理您的请求时出现了问题。请稍后重试。",
                "tools_used": [],
                "confidence": 0.0,
                "error": str(e)
            }
    
    def _preprocess_message(self, message: str) -> str:
        """消息预处理"""
        # 实现消息清洗、标准化等逻辑
        return message.strip()
    
    def _postprocess_result(self, result: Any) -> str:
        """结果后处理"""
        # 实现结果格式化、敏感信息过滤等逻辑
        return str(result)
    
    def _extract_used_tools(self, result: Any) -> List[str]:
        """提取使用的工具"""
        # 从结果中解析使用的工具
        return []
    
    def _calculate_confidence(self, result: Any) -> float:
        """计算置信度"""
        # 基于结果质量计算置信度
        return 0.8

6. 高级特性与优化策略

6.1 子代理(Subagents)系统

子代理管理器:

class SubagentManager:
    def __init__(self):
        self.subagents = {}
        self.setup_subagents()
    
    def setup_subagents(self):
        """初始化子代理"""
        # 文档分析子代理
        self.subagents["doc_analyst"] = {
            "name": "documentation-analyst",
            "description": "分析技术文档片段",
            "system_prompt": """你是一个专业的技术文档分析师。
你的任务是分析给定的文档片段,提取关键信息并总结主要内容。
请关注:API说明、配置步骤、代码示例、注意事项等关键内容。""",
            "tools": ["read_file", "analyze_code"]
        }
        
        # 数据查询子代理
        self.subagents["data_query"] = {
            "name": "data-query-agent", 
            "description": "执行数据查询和分析",
            "system_prompt": """你是一个数据分析专家。
负责执行数据库查询、数据分析和结果解释。
确保查询准确、高效,并对结果进行清晰的解释。""",
            "tools": ["sql_query", "data_visualization"]
        }
    
    async def delegate_to_subagent(self, subagent_name, task_description, context):
        """委托任务给子代理"""
        if subagent_name not in self.subagents:
            raise ValueError(f"未知的子代理: {subagent_name}")
        
        subagent_config = self.subagents[subagent_name]
        
        # 创建子代理实例
        subagent = create_deep_agent(
            model=self.llm,
            tools=subagent_config["tools"],
            system_prompt=subagent_config["system_prompt"]
        )
        
        # 执行子代理任务
        result = await subagent.ainvoke({
            "input": f"任务: {task_description}\n上下文: {context}"
        })
        
        return result

6.2 流式输出与实时交互

流式响应实现:

import json
from fastapi.responses import StreamingResponse
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

class CustomStreamingCallback(StreamingStdOutCallbackHandler):
    def __init__(self, websocket):
        self.websocket = websocket
    
    def on_llm_new_token(self, token: str, **kwargs) -> None:
        """处理新生成的token"""
        asyncio.create_task(
            self.websocket.send_text(json.dumps({
                "type": "token",
                "content": token,
                "timestamp": datetime.now().isoformat()
            }))
        )

@app.websocket("/ws/chat")
async def websocket_endpoint(websocket: WebSocket):
    """WebSocket聊天端点"""
    await websocket.accept()
    
    try:
        while True:
            # 接收消息
            data = await websocket.receive_text()
            message_data = json.loads(data)
            
            # 创建流式回调
            callback = CustomStreamingCallback(websocket)
            
            # 处理消息(流式)
            agent = AIAgent()
            result = await agent.process_message_streaming(
                message_data["message"],
                callback=callback
            )
            
            # 发送完成信号
            await websocket.send_text(json.dumps({
                "type": "complete",
                "final_result": result
            }))
            
    except WebSocketDisconnect:
        logger.info("WebSocket连接断开")
    except Exception as e:
        logger.error(f"WebSocket处理错误: {str(e)}")
        await websocket.close()

7. 部署与生产环境优化

7.1 Docker容器化部署

Dockerfile配置:

FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    gcc \
    g++ \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件
COPY requirements.txt .

# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 创建非root用户
RUN useradd -m -u 1000 agentuser && chown -R agentuser:agentuser /app
USER agentuser

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Docker Compose配置:

version: '3.8'

services:
  ai-agent:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/ai_agent
      - REDIS_URL=redis://redis:6379/0
      - OPENAI_API_KEY=${OPENAI_API_KEY}
    depends_on:
      - db
      - redis
    volumes:
      - ./logs:/app/logs
    restart: unless-stopped

  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=ai_agent
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

  redis:
    image: redis:6-alpine
    volumes:
      - redis_data:/data
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - ai-agent
    restart: unless-stopped

volumes:
  postgres_data:
  redis_data:

7.2 性能监控与日志管理

结构化日志配置:

# logging_config.py
import logging
import json
from datetime import datetime

class JSONFormatter(logging.Formatter):
    def format(self, record):
        log_entry = {
            "timestamp": datetime.now().isoformat(),
            "level": record.levelname,
            "logger": record.name,
            "message": record.getMessage(),
            "module": record.module,
            "function": record.funcName,
            "line": record.lineno
        }
        
        if hasattr(record, 'extra_data'):
            log_entry.update(record.extra_data)
            
        return json.dumps(log_entry)

def setup_logging():
    """配置结构化日志"""
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    # 文件处理器
    file_handler = logging.FileHandler('app.log')
    file_handler.setFormatter(JSONFormatter())
    
    # 控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(JSONFormatter())
    
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

性能监控中间件:

# monitoring.py
from fastapi import Request
import time
from prometheus_client import Counter, Histogram, generate_latest

# 定义指标
REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP requests', ['method', 'endpoint', 'status'])
REQUEST_DURATION = Histogram('http_request_duration_seconds', 'HTTP request duration')

class MonitoringMiddleware:
    def __init__(self, app):
        self.app = app
    
    async def __call__(self, scope, receive, send):
        if scope['type'] != 'http':
            return await self.app(scope, receive, send)
        
        start_time = time.time()
        method = scope['method']
        path = scope['path']
        
        async def send_wrapper(message):
            if message['type'] == 'http.response.start':
                status_code = message['status']
                REQUEST_COUNT.labels(method=method, endpoint=path, status=status_code).inc()
            
            await send(message)
        
        try:
            await self.app(scope, receive, send_wrapper)
        finally:
            duration = time.time() - start_time
            REQUEST_DURATION.observe(duration)

8. 常见问题排查与优化建议

8.1 性能问题排查清单

高延迟问题排查:

class PerformanceOptimizer:
    def __init__(self):
        self.metrics = {}
    
    async def analyze_performance(self, request_data):
        """分析性能瓶颈"""
        bottlenecks = []
        
        # 检查模型响应时间
        model_latency = await self._check_model_latency()
        if model_latency > 2.0:  # 超过2秒
            bottlenecks.append({
                "issue": "模型响应延迟过高",
                "latency": model_latency,
                "suggestion": "考虑使用更轻量级的模型或优化提示词"
            })
        
        # 检查向量检索性能
        retrieval_time = await self._check_retrieval_performance()
        if retrieval_time > 0.5:  # 超过500ms
            bottlenecks.append({
                "issue": "向量检索性能不足",
                "retrieval_time": retrieval_time,
                "suggestion": "优化索引结构或减少检索数量"
            })
        
        # 检查内存使用
        memory_usage = await self._check_memory_usage()
        if memory_usage > 80:  # 超过80%
            bottlenecks.append({
                "issue": "内存使用率过高",
                "usage": f"{memory_usage}%",
                "suggestion": "增加内存或优化数据缓存策略"
            })
        
        return bottlenecks

8.2 错误处理与重试机制

智能重试策略:

import asyncio
from typing import Callable, Any
from tenacity import retry, stop_after_attempt, wait_exponential

class SmartRetryHandler:
    def __init__(self, max_retries=3, base_delay=1, max_delay=10):
        self.max_retries = max_retries
        self.base_delay = base_delay
        self.max_delay = max_delay
    
    @retry(
        stop=stop_after_attempt(3),
        wait=wait_exponential(multiplier=1, min=1, max=10)
    )
    async def execute_with_retry(self, func: Callable, *args, **kwargs) -> Any:
        """带重试的执行函数"""
        try:
            result = await func(*args, **kwargs)
            return result
        except Exception as e:
            logger.warning(f"操作失败: {str(e)},进行重试...")
            raise e
    
    async def execute_with_fallback(self, primary_func: Callable, fallback_func: Callable, *args, **kwargs):
        """带降级策略的执行"""
        try:
            return await self.execute_with_retry(primary_func, *args, **kwargs)
        except Exception as e:
            logger.error(f"主操作失败,使用降级方案: {str(e)}")
            return await fallback_func(*args, **kwargs)

通过本文的完整学习路径,你已经掌握了从零开始构建生产级AI Agent的全套技能。在实际项目中,建议先从简单的用例开始,逐步增加复杂度,同时注重代码质量、测试覆盖和监控告警。AI Agent开发是一个快速发展的领域,持续学习和实践是保持竞争力的关键。

Logo

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

更多推荐