导语

大语言模型的能力边界正在被智能 Agent(智能代理)不断拓展。传统的单轮对话只能回答已知问题,而智能 Agent 能够自主规划任务、调用外部工具、执行复杂操作、迭代优化结果,真正实现从 "回答问题" 到 "解决问题" 的跨越。但从零构建一个企业级 Agent 系统存在技术门槛高、工具集成复杂、多模型调度困难等挑战。

本文将手把手教你基于4sapi构建一个功能完善的企业级多工具智能 Agent 系统,利用 GPT-5.5 的强大函数调用能力,集成网络搜索、代码执行、数据查询、文件处理等多种工具,实现复杂任务的自动化处理。

一、技术背景

1.1 智能 Agent 的核心能力与技术挑战

一个完整的智能 Agent 需要具备四大核心能力:

  • 规划能力:将复杂任务拆解为多个子步骤,动态调整执行计划
  • 工具调用能力:根据任务需求自主选择并调用合适的外部工具
  • 记忆能力:保存对话历史、执行过程和中间结果
  • 反思能力:评估执行结果,发现问题并进行修正

目前构建 Agent 系统面临的主要挑战:

  • 不同模型的函数调用接口不统一,维护成本高
  • 工具集成复杂,需要处理各种 API 的认证和错误
  • 长任务执行容易出现上下文丢失和逻辑断裂
  • 缺乏统一的监控和调试机制

1.2 不同大模型在 Agent 开发中的能力对比

表格

模型 函数调用能力 逻辑推理能力 上下文长度 适合场景
GPT-5.5 🌟🌟🌟🌟🌟 🌟🌟🌟🌟🌟 128K 复杂任务规划、多工具协同、高级推理
Claude Opus 4.7 🌟🌟🌟🌟 🌟🌟🌟🌟🌟 200K 长文档处理、大型任务执行、深度分析
DeepSeek-V4 🌟🌟🌟🌟 🌟🌟🌟🌟 128K 代码相关任务、技术问题解决
Gemini 3.1 Pro 🌟🌟🌟🌟 🌟🌟🌟🌟 1M 多模态任务、图片 / 视频理解与处理

1.3 4sapi 在 Agent 开发中的核心价值

4sapi 作为一站式大模型 API 聚合平台,为构建智能 Agent 系统提供了完美的技术底座:

  • 统一函数调用接口:所有模型均兼容 OpenAI 函数调用标准,一套代码即可切换
  • 最新模型首发支持:第一时间上线 GPT-5.5 等具备最强函数调用能力的模型
  • 星链加速技术:API 响应延迟低至 18ms,大幅提升 Agent 执行效率
  • 企业级 SLA 保障:99.99% 服务可用性,支持长任务稳定运行
  • 全链路安全:数据加密传输,支持私有化部署,满足企业安全要求

二、系统整体架构设计

2.1 分层架构

我们采用模块化分层架构设计,确保系统的可扩展性和可维护性:

plaintext

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  交互层     │    │  核心层     │    │  工具层     │    │  存储层     │
│ Web界面     │───▶│ Agent引擎   │───▶│ 工具注册   │───▶│ 对话记忆   │
│ API接口     │    │ 任务规划   │    │ 工具执行   │    │ 执行日志   │
│ 命令行      │    │ 结果融合   │    │ 错误处理   │    │ 向量知识库 │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘

2.2 核心工作流程

智能 Agent 的完整工作流程如下:

  1. 任务接收:接收用户的自然语言任务请求
  2. 任务规划:分析任务复杂度,拆解为多个子步骤
  3. 工具选择:根据子步骤需求选择合适的工具
  4. 工具调用:生成工具调用参数并执行
  5. 结果处理:解析工具返回结果,判断是否需要进一步调用
  6. 迭代执行:重复步骤 3-5,直到任务完成
  7. 结果输出:整合所有执行结果,生成最终回答

三、完整实现步骤

3.1 环境准备与依赖安装

首先安装项目所需的 Python 依赖包:

bash

运行

pip install openai python-dotenv requests beautifulsoup4 pandas numpy redis python-multipart fastapi uvicorn

创建.env配置文件,填写你的 4sapi 密钥:

env

# 4sapi核心配置
4SAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4SAPI_BASE_URL=https://4sapi.com/v1

# Redis配置(用于记忆存储)
REDIS_URL=redis://localhost:6379/0

# 系统配置
MAX_ITERATIONS=10  # 最大执行迭代次数
MAX_TOOL_CALLS=5   # 单次最大工具调用数

3.2 4sapi 统一客户端封装

封装一个通用的 4sapi 客户端,支持函数调用和自动重试:

python

运行

import os
import time
from openai import OpenAI
from dotenv import load_dotenv
from typing import List, Dict, Any, Optional

load_dotenv()

class FourSAPIClient:
    def __init__(self):
        self.client = OpenAI(
            api_key=os.getenv("4SAPI_API_KEY"),
            base_url=os.getenv("4SAPI_BASE_URL"),
            timeout=120
        )
        self.max_retries = 3
        self.retry_delay = 2

    def chat_completion(
        self,
        model: str,
        messages: List[Dict[str, str]],
        tools: Optional[List[Dict[str, Any]]] = None,
        tool_choice: Optional[str] = "auto",
        stream: bool = False,
        temperature: float = 0.1,
        max_tokens: int = 4096
    ) -> Any:
        """
        统一调用4sapi的聊天完成接口,支持函数调用
        """
        for attempt in range(self.max_retries):
            try:
                kwargs = {
                    "model": model,
                    "messages": messages,
                    "stream": stream,
                    "temperature": temperature,
                    "max_tokens": max_tokens
                }
                
                if tools:
                    kwargs["tools"] = tools
                    kwargs["tool_choice"] = tool_choice
                
                return self.client.chat.completions.create(**kwargs)
            except Exception as e:
                if attempt == self.max_retries - 1:
                    raise Exception(f"API调用失败,已重试{self.max_retries}次: {str(e)}")
                time.sleep(self.retry_delay * (attempt + 1))

# 初始化全局客户端
four_sapi = FourSAPIClient()

3.3 工具管理模块

实现工具注册、管理和执行的核心模块:

python

运行

import json
import requests
from bs4 import BeautifulSoup
import pandas as pd
from typing import Callable, Dict, Any

class ToolManager:
    def __init__(self):
        self.tools: Dict[str, Callable] = {}
        self.tool_definitions: List[Dict[str, Any]] = []
        
        # 注册默认工具
        self.register_tool(
            name="web_search",
            description="搜索互联网获取最新信息",
            parameters={
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "搜索关键词"}
                },
                "required": ["query"]
            },
            func=self.web_search
        )
        
        self.register_tool(
            name="calculate",
            description="执行数学计算",
            parameters={
                "type": "object",
                "properties": {
                    "expression": {"type": "string", "description": "数学表达式,如'2+3*4'"}
                },
                "required": ["expression"]
            },
            func=self.calculate
        )
        
        self.register_tool(
            name="read_file",
            description="读取本地文件内容",
            parameters={
                "type": "object",
                "properties": {
                    "file_path": {"type": "string", "description": "文件路径"}
                },
                "required": ["file_path"]
            },
            func=self.read_file
        )
        
        self.register_tool(
            name="write_file",
            description="写入内容到本地文件",
            parameters={
                "type": "object",
                "properties": {
                    "file_path": {"type": "string", "description": "文件路径"},
                    "content": {"type": "string", "description": "要写入的内容"}
                },
                "required": ["file_path", "content"]
            },
            func=self.write_file
        )

    def register_tool(self, name: str, description: str, parameters: Dict[str, Any], func: Callable):
        """注册一个新工具"""
        self.tools[name] = func
        self.tool_definitions.append({
            "type": "function",
            "function": {
                "name": name,
                "description": description,
                "parameters": parameters
            }
        })

    def execute_tool(self, tool_call: Dict[str, Any]) -> str:
        """执行工具调用"""
        tool_name = tool_call.function.name
        tool_args = json.loads(tool_call.function.arguments)
        
        try:
            result = self.tools[tool_name](**tool_args)
            return json.dumps({"status": "success", "result": result}, ensure_ascii=False)
        except Exception as e:
            return json.dumps({"status": "error", "error": str(e)}, ensure_ascii=False)

    # 工具实现
    def web_search(self, query: str) -> str:
        """简单的网络搜索工具(示例)"""
        # 实际项目中可集成Serper、Bing Search等API
        url = f"https://www.baidu.com/s?wd={query}"
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
        }
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        results = []
        for item in soup.find_all('div', class_='result-op c-container xpath-log new-pmd')[:3]:
            title = item.find('h3').get_text() if item.find('h3') else ""
            summary = item.find('span', class_='content-right_8Zs40').get_text() if item.find('span', class_='content-right_8Zs40') else ""
            results.append({"title": title, "summary": summary})
        
        return results

    def calculate(self, expression: str) -> Any:
        """执行数学计算"""
        # 注意:生产环境中应使用更安全的计算方式
        return eval(expression)

    def read_file(self, file_path: str) -> str:
        """读取本地文件"""
        with open(file_path, 'r', encoding='utf-8') as f:
            return f.read()

    def write_file(self, file_path: str, content: str) -> str:
        """写入本地文件"""
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(content)
        return f"文件已成功写入:{file_path}"

# 初始化工具管理器
tool_manager = ToolManager()

3.4 记忆管理模块

实现对话记忆和执行历史管理:

python

运行

import redis
import json
from typing import List, Dict, Any

class MemoryManager:
    def __init__(self):
        self.redis_client = redis.from_url(os.getenv("REDIS_URL"))
        self.expire_time = 86400  # 24小时过期

    def get_conversation_history(self, session_id: str) -> List[Dict[str, str]]:
        """获取对话历史"""
        history = self.redis_client.get(f"conversation:{session_id}")
        if history:
            return json.loads(history)
        return []

    def add_message(self, session_id: str, message: Dict[str, str]):
        """添加消息到对话历史"""
        history = self.get_conversation_history(session_id)
        history.append(message)
        # 保留最近的20条消息
        if len(history) > 20:
            history = history[-20:]
        self.redis_client.setex(
            f"conversation:{session_id}",
            self.expire_time,
            json.dumps(history, ensure_ascii=False)
        )

    def clear_conversation(self, session_id: str):
        """清空对话历史"""
        self.redis_client.delete(f"conversation:{session_id}")

# 初始化记忆管理器
memory_manager = MemoryManager()

3.5 Agent 核心引擎

实现智能 Agent 的核心逻辑,包括任务规划、工具调用和结果处理:

python

运行

class AgentEngine:
    def __init__(self):
        self.model = "gpt-5.5"
        self.max_iterations = int(os.getenv("MAX_ITERATIONS"))
        self.system_prompt = """你是一个专业的智能助手,能够调用各种工具来完成用户的任务。

请遵循以下规则:
1. 仔细分析用户的需求,确定是否需要调用工具
2. 如果需要调用工具,选择最合适的工具并生成正确的参数
3. 每次可以调用多个工具,但不要超过5个
4. 工具执行完成后,根据结果判断是否需要进一步调用
5. 当所有必要的信息都收集完毕后,生成最终的回答
6. 回答要清晰、准确、有条理
7. 如果无法完成任务,如实告知用户并说明原因"""

    def run(self, session_id: str, user_query: str) -> str:
        """
        运行Agent处理用户查询
        :param session_id: 会话ID
        :param user_query: 用户查询
        :return: 最终回答
        """
        # 添加用户消息到记忆
        memory_manager.add_message(session_id, {"role": "user", "content": user_query})
        
        # 获取对话历史
        messages = [{"role": "system", "content": self.system_prompt}]
        messages.extend(memory_manager.get_conversation_history(session_id))
        
        iteration = 0
        while iteration < self.max_iterations:
            iteration += 1
            
            # 调用大模型
            response = four_sapi.chat_completion(
                model=self.model,
                messages=messages,
                tools=tool_manager.tool_definitions
            )
            
            response_message = response.choices[0].message
            messages.append(response_message)
            
            # 如果没有工具调用,直接返回结果
            if not response_message.tool_calls:
                final_answer = response_message.content
                memory_manager.add_message(session_id, {"role": "assistant", "content": final_answer})
                return final_answer
            
            # 执行工具调用
            for tool_call in response_message.tool_calls:
                print(f"执行工具调用:{tool_call.function.name},参数:{tool_call.function.arguments}")
                
                tool_response = tool_manager.execute_tool(tool_call)
                
                messages.append({
                    "tool_call_id": tool_call.id,
                    "role": "tool",
                    "name": tool_call.function.name,
                    "content": tool_response
                })
        
        # 超过最大迭代次数
        final_answer = "抱歉,任务执行时间过长,未能完成。请尝试简化你的需求。"
        memory_manager.add_message(session_id, {"role": "assistant", "content": final_answer})
        return final_answer

# 初始化Agent引擎
agent_engine = AgentEngine()

3.6 Web 接口实现

使用 FastAPI 实现高性能的 Web 接口:

python

运行

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional

app = FastAPI(title="4sapi智能Agent系统", version="1.0.0")

class QueryRequest(BaseModel):
    session_id: str
    query: str

class ClearRequest(BaseModel):
    session_id: str

@app.post("/api/agent/query")
async def agent_query(request: QueryRequest):
    """
    向Agent发送查询请求
    """
    try:
        result = agent_engine.run(request.session_id, request.query)
        return {"success": True, "result": result}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.post("/api/agent/clear")
async def clear_conversation(request: ClearRequest):
    """
    清空指定会话的历史记录
    """
    try:
        memory_manager.clear_conversation(request.session_id)
        return {"success": True, "message": "对话历史已清空"}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/api/agent/tools")
async def get_available_tools():
    """
    获取所有可用工具列表
    """
    tools = []
    for tool in tool_manager.tool_definitions:
        tools.append({
            "name": tool["function"]["name"],
            "description": tool["function"]["description"]
        })
    return {"success": True, "tools": tools}

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

四、系统使用与扩展

4.1 本地使用方法

  1. 将上述代码保存为agent_system.py
  2. 配置好.env文件中的 4sapi API 密钥
  3. 运行程序:

bash

运行

python agent_system.py
  1. 使用 curl 或 Postman 测试接口:

bash

运行

# 发送查询请求
curl -X POST http://localhost:8000/api/agent/query \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "test_session_001",
    "query": "计算2024年的天数,然后搜索2024年中国GDP预测数据"
  }'

# 获取可用工具列表
curl http://localhost:8000/api/agent/tools

4.2 扩展更多工具

你可以轻松扩展更多实用工具,例如:

  • 代码执行工具:集成 Python 沙箱执行代码
  • 数据库查询工具:连接数据库执行 SQL 查询
  • 邮件发送工具:自动发送邮件
  • PDF 处理工具:读取和生成 PDF 文件
  • 翻译工具:多语言翻译

示例:添加一个天气查询工具

python

运行

def get_weather(city: str) -> str:
    """获取指定城市的天气信息"""
    url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid=your_api_key&units=metric"
    response = requests.get(url)
    data = response.json()
    return {
        "city": city,
        "temperature": data["main"]["temp"],
        "description": data["weather"][0]["description"],
        "humidity": data["main"]["humidity"]
    }

# 注册工具
tool_manager.register_tool(
    name="get_weather",
    description="获取指定城市的天气信息",
    parameters={
        "type": "object",
        "properties": {
            "city": {"type": "string", "description": "城市名称,如'北京'"}
        },
        "required": ["city"]
    },
    func=get_weather
)

五、系统优化建议

  1. 向量知识库集成:添加向量数据库,支持 RAG 检索增强生成
  2. 任务队列:使用 Celery 等任务队列处理长时间运行的任务
  3. 监控与日志:添加详细的执行日志和监控指标
  4. 权限控制:为不同用户设置不同的工具使用权限
  5. 结果缓存:对常用工具调用结果进行缓存,提升响应速度
  6. 多模型调度:根据任务复杂度自动选择最合适的模型

六、总结

本文详细介绍了如何基于 4sapi 构建一个功能完善的企业级多工具智能 Agent 系统。通过利用 GPT-5.5 的强大函数调用能力,我们实现了任务规划、工具调用、记忆管理等核心功能,让 Agent 能够自主完成各种复杂任务。

4sapi 的统一接口和极致性能,让我们无需关注不同模型平台的差异,能够专注于 Agent 核心逻辑和工具生态的建设。同时,其企业级的安全保障和高可用服务,也让系统能够稳定运行在生产环境中。

在实际应用中,你可以根据企业的具体需求,扩展更多实用工具,集成内部系统,打造专属的智能助手。相信随着大模型技术的不断发展,智能 Agent 将在企业数字化转型中发挥越来越重要的作用,成为提升工作效率的强大工具。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐