AgentScope 2.0实战指南:构建可观测可信任的多智能体系统

【免费下载链接】agentscope Build and run agents you can see, understand and trust. 【免费下载链接】agentscope 项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope

在多智能体系统开发中,开发者常面临三大挑战:如何确保系统透明可观测?如何建立智能体间的信任机制?如何实现生产环境的稳定部署?AgentScope 2.0作为生产就绪的多智能体框架,通过统一的事件系统、细粒度权限控制和多租户架构,为这些难题提供了优雅的解决方案。本文将带你从零开始构建一个可观测、可信任的多智能体应用,深入剖析其核心架构,并分享实战中的性能调优技巧。

多智能体系统开发的现实困境

在实际的多智能体应用开发中,我经常遇到这样的场景:需要协调多个AI助手完成复杂任务,比如数据分析师负责数据清洗,报告撰写员生成分析报告,项目经理监督整个流程。传统的开发方式要么过于僵化,要么缺乏必要的监控和权限控制。当智能体数量增多时,系统变得难以调试;当涉及敏感操作时,又缺乏有效的安全机制。

面对这些问题,开发者通常有三种选择:自行构建完整框架、使用现有但功能有限的工具,或者寻找一个平衡灵活性与控制性的解决方案。自行构建耗时耗力,功能有限的工具难以满足复杂需求,而AgentScope 2.0恰好提供了这个平衡点。

AgentScope 2.0 vs 其他解决方案对比分析

让我们通过一个对比表格来理解AgentScope 2.0的独特价值:

特性维度 AgentScope 2.0 传统智能体框架 自定义开发
事件系统 统一事件总线,支持人在环控制 通常只有简单消息传递 需要自行设计实现
权限控制 细粒度、可配置的权限系统 基础权限或无权限控制 从头开始设计安全机制
多租户支持 内置多租户和多会话隔离 单租户或有限隔离 复杂的隔离逻辑实现
工作空间 本地、Docker、E2B沙箱支持 通常只有本地环境 需要集成多种运行环境
可观测性 内置OpenTelemetry支持 有限的日志和监控 需要额外集成监控系统
部署灵活性 支持本地、云原生、K8s部署 部署选项有限 部署架构需要自行设计

AgentScope 2.0的核心优势在于它既提供了足够的灵活性让智能体充分发挥LLM的推理能力,又通过完善的工程化设计确保了系统的可控性和可观测性。

核心架构:分层设计的智能体生态系统

AgentScope 2.0采用分层架构设计,每个层次都有明确的职责边界。让我们通过架构图来理解其设计理念:

AgentScope 2.0系统架构图

从上图可以看出,AgentScope 2.0的架构分为几个关键层次:

模型层:支持主流大语言模型,包括OpenAI、Anthropic、Gemini、DeepSeek、Qwen等,通过统一的接口抽象,开发者可以轻松切换不同的模型提供商。

智能体引擎层:这是系统的核心,包含推理引擎、批量行动、权限系统和工具集。智能体引擎采用模块化设计,支持多种推理模式,如ReAct、Chain-of-Thought等。

工具层:提供丰富的内置工具,如Bash命令执行、文件操作、搜索等,同时支持自定义工具扩展。每个工具都有严格的权限控制。

存储层:支持多种存储后端,包括MySQL、PostgreSQL、Redis等,确保数据的持久化和高性能访问。

部署层:灵活的部署选项,从本地开发环境到Docker容器,再到E2B云沙箱和K8s集群部署,满足不同场景的需求。

这种分层设计使得系统具有良好的可维护性和可扩展性,每个组件都可以独立升级或替换。

实战演练:构建智能数据分析工作流

让我们通过一个具体的案例来展示如何使用AgentScope 2.0构建一个智能数据分析系统。这个系统将包含三个智能体:数据收集员、数据分析师和报告生成器。

步骤1:环境准备与安装

首先,我们需要安装AgentScope并配置开发环境:

# 克隆AgentScope仓库
git clone https://gitcode.com/GitHub_Trending/ag/agentscope

# 进入项目目录
cd agentscope

# 安装依赖(推荐使用uv)
uv pip install -e .

如果你没有安装uv,也可以使用pip:

pip install agentscope

步骤2:定义智能体角色

src/analytics_system.py中定义我们的智能体:

from agentscope.agent import Agent
from agentscope.tool import Toolkit, Read, Write
from agentscope.permission import PermissionEngine
from agentscope.model import OpenAIChatModel
from agentscope.credential import OpenAICredential
import os

class DataCollectorAgent(Agent):
    """数据收集智能体"""
    
    def __init__(self, name="数据收集员"):
        super().__init__(
            name=name,
            model=OpenAIChatModel(
                credential=OpenAICredential(
                    api_key=os.environ["OPENAI_API_KEY"]
                ),
                model="gpt-4o-mini"
            ),
            system_prompt="你是一个专业的数据收集专家,擅长从各种数据源获取和整理数据。",
            toolkit=Toolkit(tools=[Read(), Write()])
        )
    
    async def collect_data(self, data_source: str) -> dict:
        """从指定数据源收集数据"""
        # 这里可以集成各种数据源API
        # 例如:数据库查询、API调用、文件读取等
        return {"source": data_source, "status": "collected"}

class DataAnalystAgent(Agent):
    """数据分析智能体"""
    
    def __init__(self, name="数据分析师"):
        super().__init__(
            name=name,
            model=OpenAIChatModel(
                credential=OpenAICredential(
                    api_key=os.environ["OPENAI_API_KEY"]
                ),
                model="gpt-4o"
            ),
            system_prompt="你是一个数据分析专家,擅长发现数据中的模式和洞察。",
            toolkit=Toolkit(tools=[Read()])
        )
    
    async def analyze_data(self, data: dict) -> dict:
        """分析数据并生成洞察"""
        analysis_result = await self.reason(
            prompt=f"分析以下数据:{data}",
            context={
                "analysis_type": ["趋势分析", "异常检测", "相关性分析"]
            }
        )
        return analysis_result

class ReportGeneratorAgent(Agent):
    """报告生成智能体"""
    
    def __init__(self, name="报告生成器"):
        super().__init__(
            name=name,
            model=OpenAIChatModel(
                credential=OpenAICredential(
                    api_key=os.environ["OPENAI_API_KEY"]
                ),
                model="gpt-4o"
            ),
            system_prompt="你是一个专业的报告撰写专家,擅长将复杂分析转化为清晰的报告。",
            toolkit=Toolkit(tools=[Write()])
        )
    
    async def generate_report(self, analysis: dict, format: str = "markdown") -> str:
        """根据分析结果生成报告"""
        report = await self.generate(
            messages=[
                {"role": "system", "content": "生成专业的数据分析报告"},
                {"role": "user", "content": f"分析结果:{analysis}\n格式:{format}"}
            ]
        )
        return report.content

步骤3:配置工作流编排

接下来,我们需要创建一个工作流编排器来协调这三个智能体的协作:

from agentscope.app import AgentService
from agentscope.workspace import LocalWorkspace
from agentscope.event import EventSystem
import asyncio

class AnalyticsWorkflow:
    """数据分析工作流编排器"""
    
    def __init__(self):
        self.agent_service = AgentService()
        self.workspace = LocalWorkspace()
        self.event_system = EventSystem()
        
        # 初始化智能体
        self.collector = DataCollectorAgent()
        self.analyst = DataAnalystAgent()
        self.reporter = ReportGeneratorAgent()
        
        # 配置权限
        self.permission_engine = PermissionEngine()
        self._setup_permissions()
        
        # 注册事件监听器
        self._setup_event_listeners()
    
    def _setup_permissions(self):
        """配置智能体权限"""
        # 数据收集员可以读取和写入数据
        self.permission_engine.grant_permission(
            agent_name="数据收集员",
            resources=["data_source/*"],
            actions=["read", "write"]
        )
        
        # 数据分析师只能读取数据
        self.permission_engine.grant_permission(
            agent_name="数据分析师",
            resources=["data_source/*"],
            actions=["read"]
        )
        
        # 报告生成器可以写入报告
        self.permission_engine.grant_permission(
            agent_name="报告生成器",
            resources=["reports/*"],
            actions=["write"]
        )
    
    def _setup_event_listeners(self):
        """设置事件监听器"""
        @self.event_system.on("data_collected")
        async def handle_data_collected(event):
            print(f"数据收集完成:{event.data['source']}")
            # 触发数据分析
            await self.analyze_data(event.data)
        
        @self.event_system.on("analysis_completed")
        async def handle_analysis_completed(event):
            print(f"数据分析完成:{event.data['insights_count']} 个洞察")
            # 触发报告生成
            await self.generate_report(event.data)
    
    async def execute_pipeline(self, data_sources: list) -> dict:
        """执行完整的数据分析流水线"""
        results = {}
        
        for source in data_sources:
            # 1. 数据收集
            print(f"开始收集数据:{source}")
            collected_data = await self.collector.collect_data(source)
            await self.event_system.emit("data_collected", collected_data)
            
            # 2. 数据分析
            print(f"开始分析数据:{source}")
            analysis = await self.analyst.analyze_data(collected_data)
            await self.event_system.emit("analysis_completed", analysis)
            
            # 3. 报告生成
            print(f"生成报告:{source}")
            report = await self.reporter.generate_report(analysis)
            
            # 4. 保存结果
            report_path = f"reports/{source}_analysis.md"
            await self.workspace.write_file(report_path, report)
            
            results[source] = {
                "data": collected_data,
                "analysis": analysis,
                "report_path": report_path
            }
        
        return results

# 使用示例
async def main():
    workflow = AnalyticsWorkflow()
    
    # 定义数据源
    data_sources = [
        "sales_data_2024.csv",
        "customer_feedback.json",
        "website_analytics.db"
    ]
    
    # 执行工作流
    results = await workflow.execute_pipeline(data_sources)
    
    print(f"分析完成!生成了 {len(results)} 份报告")
    for source, result in results.items():
        print(f"- {source}: {result['report_path']}")

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

步骤4:添加人在环控制

在实际应用中,我们可能需要在关键步骤引入人工审核。AgentScope的人机交互功能让这变得简单:

from agentscope.middleware import HumanInTheLoopMiddleware

class HumanApprovalWorkflow(AnalyticsWorkflow):
    """带人工审批的工作流"""
    
    def __init__(self):
        super().__init__()
        self.hitl_middleware = HumanInTheLoopMiddleware(
            approval_required=True,
            timeout_seconds=60,
            fallback_action="wait"
        )
    
    async def execute_pipeline_with_approval(self, data_sources: list) -> dict:
        """带人工审批的执行流程"""
        results = {}
        
        for source in data_sources:
            # 1. 数据收集(需要审批)
            print(f"请求数据收集审批:{source}")
            approval = await self.hitl_middleware.request_approval(
                action="data_collection",
                context={"source": source, "sensitivity": "high"}
            )
            
            if approval.approved:
                collected_data = await self.collector.collect_data(source)
                await self.event_system.emit("data_collected", collected_data)
                
                # 2. 数据分析
                analysis = await self.analyst.analyze_data(collected_data)
                
                # 3. 报告生成前再次审批
                print(f"请求报告生成审批:{source}")
                report_approval = await self.hitl_middleware.request_approval(
                    action="report_generation",
                    context={"source": source, "analysis": analysis}
                )
                
                if report_approval.approved:
                    report = await self.reporter.generate_report(analysis)
                    report_path = f"reports/{source}_analysis_approved.md"
                    await self.workspace.write_file(report_path, report)
                    
                    results[source] = {
                        "data": collected_data,
                        "analysis": analysis,
                        "report_path": report_path,
                        "approved": True
                    }
                else:
                    results[source] = {"approved": False, "reason": "报告生成被拒绝"}
            else:
                results[source] = {"approved": False, "reason": "数据收集被拒绝"}
        
        return results

这个工作流展示了AgentScope 2.0的核心功能:智能体协作、事件驱动、权限控制和人在环交互。通过这样的设计,我们可以构建既自动化又可控的智能系统。

进阶技巧:性能优化与监控配置

当你的多智能体系统投入生产环境时,性能优化和监控变得至关重要。以下是一些实用的进阶技巧:

1. 智能体缓存策略优化

from agentscope.state import AgentStateCache
import redis
import json
import asyncio

class RedisAgentCache(AgentStateCache):
    """基于Redis的智能体状态缓存"""
    
    def __init__(self, redis_url: str, ttl: int = 3600):
        self.redis_client = redis.from_url(redis_url)
        self.ttl = ttl  # 缓存过期时间(秒)
        
    async def get_state(self, agent_id: str, key: str):
        """获取智能体状态"""
        cache_key = f"agent:{agent_id}:state:{key}"
        cached_data = self.redis_client.get(cache_key)
        if cached_data:
            return json.loads(cached_data)
        return None
        
    async def save_state(self, agent_id: str, key: str, state: dict):
        """保存智能体状态"""
        cache_key = f"agent:{agent_id}:state:{key}"
        self.redis_client.setex(
            cache_key,
            self.ttl,
            json.dumps(state)
        )
    
    async def invalidate_state(self, agent_id: str, key: str = None):
        """使缓存失效"""
        if key:
            cache_key = f"agent:{agent_id}:state:{key}"
            self.redis_client.delete(cache_key)
        else:
            # 删除该智能体的所有状态缓存
            pattern = f"agent:{agent_id}:state:*"
            keys = self.redis_client.keys(pattern)
            if keys:
                self.redis_client.delete(*keys)

# 使用缓存的智能体
class CachedDataAnalystAgent(DataAnalystAgent):
    """带缓存的智能体"""
    
    def __init__(self, cache: RedisAgentCache, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.cache = cache
    
    async def analyze_data_with_cache(self, data: dict) -> dict:
        """带缓存的数据分析"""
        cache_key = f"analysis:{hash(str(data))}"
        
        # 尝试从缓存获取
        cached_result = await self.cache.get_state(self.name, cache_key)
        if cached_result:
            print(f"使用缓存结果:{cache_key}")
            return cached_result
        
        # 缓存未命中,执行分析
        print(f"缓存未命中,执行分析:{cache_key}")
        result = await self.analyze_data(data)
        
        # 保存到缓存
        await self.cache.save_state(self.name, cache_key, result)
        
        return result

2. 批量处理与并发优化

from concurrent.futures import ThreadPoolExecutor
import asyncio
from typing import List

class BatchProcessor:
    """批量处理器"""
    
    def __init__(self, max_workers: int = 5, batch_size: int = 10):
        self.max_workers = max_workers
        self.batch_size = batch_size
        self.executor = ThreadPoolExecutor(max_workers=max_workers)
    
    async def process_batch(self, tasks: List[callable]) -> List:
        """批量处理任务"""
        results = []
        
        # 分批处理
        for i in range(0, len(tasks), self.batch_size):
            batch = tasks[i:i + self.batch_size]
            print(f"处理批次 {i//self.batch_size + 1}/{len(tasks)//self.batch_size + 1}")
            
            # 并发执行
            batch_results = await asyncio.gather(
                *[self._process_task(task) for task in batch],
                return_exceptions=True
            )
            
            # 处理结果
            for result in batch_results:
                if isinstance(result, Exception):
                    print(f"任务失败:{result}")
                else:
                    results.append(result)
            
            # 批次间延迟,避免API限流
            if i + self.batch_size < len(tasks):
                await asyncio.sleep(1)
        
        return results
    
    async def _process_task(self, task: callable):
        """处理单个任务"""
        loop = asyncio.get_event_loop()
        return await loop.run_in_executor(self.executor, task)

# 使用批量处理器
async def optimize_workflow(workflow: AnalyticsWorkflow, data_sources: List[str]):
    """优化的工作流执行"""
    processor = BatchProcessor(max_workers=3, batch_size=5)
    
    # 准备任务
    tasks = []
    for source in data_sources:
        async def process_source(src=source):
            return await workflow.execute_pipeline([src])
        tasks.append(process_source)
    
    # 批量执行
    results = await processor.process_batch(tasks)
    
    # 汇总结果
    final_report = {
        "total_sources": len(data_sources),
        "successful": sum(1 for r in results if r),
        "failed": sum(1 for r in results if not r),
        "details": results
    }
    
    return final_report

3. 监控与可观测性配置

AgentScope内置了OpenTelemetry支持,让我们配置完整的监控系统:

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.instrumentation.asyncio import AsyncioInstrumentor
import logging

def setup_monitoring(service_name: str = "agentscope-analytics"):
    """设置监控和追踪"""
    
    # 设置追踪器
    tracer_provider = TracerProvider()
    trace.set_tracer_provider(tracer_provider)
    
    # 配置多个导出器
    exporters = []
    
    # 控制台导出器(开发环境)
    console_exporter = ConsoleSpanExporter()
    exporters.append(BatchSpanProcessor(console_exporter))
    
    # Jaeger导出器(生产环境)
    try:
        jaeger_exporter = JaegerExporter(
            agent_host_name="localhost",
            agent_port=6831,
        )
        exporters.append(BatchSpanProcessor(jaeger_exporter))
    except Exception as e:
        logging.warning(f"Jaeger exporter初始化失败:{e}")
    
    # OTLP导出器(云原生环境)
    try:
        otlp_exporter = OTLPSpanExporter(
            endpoint="localhost:4317",
            insecure=True,
        )
        exporters.append(BatchSpanProcessor(otlp_exporter))
    except Exception as e:
        logging.warning(f"OTLP exporter初始化失败:{e}")
    
    # 添加所有处理器
    for processor in exporters:
        tracer_provider.add_span_processor(processor)
    
    # 启用异步追踪
    AsyncioInstrumentor().instrument()
    
    # 设置日志
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    return trace.get_tracer(service_name)

# 在智能体中使用追踪
class TracedAgent(Agent):
    """带追踪的智能体"""
    
    def __init__(self, tracer, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.tracer = tracer
    
    async def traced_operation(self, operation_name: str, **kwargs):
        """带追踪的操作"""
        with self.tracer.start_as_current_span(operation_name) as span:
            # 记录操作参数
            for key, value in kwargs.items():
                span.set_attribute(f"operation.{key}", str(value))
            
            # 记录智能体信息
            span.set_attribute("agent.name", self.name)
            span.set_attribute("agent.timestamp", str(asyncio.get_event_loop().time()))
            
            try:
                # 执行操作
                result = await self._perform_operation(**kwargs)
                
                # 记录结果
                span.set_attribute("operation.success", "true")
                if result:
                    span.set_attribute("operation.result_size", str(len(str(result))))
                
                return result
            except Exception as e:
                # 记录错误
                span.set_attribute("operation.success", "false")
                span.set_attribute("operation.error", str(e))
                span.record_exception(e)
                raise

最佳实践:经验总结与避坑指南

基于实际项目经验,我总结了以下最佳实践:

1. 智能体设计原则

单一职责原则:每个智能体应该专注于一个特定的领域。例如,不要创建一个既处理数据分析又生成报告的智能体,而是分别创建DataAnalystAgentReportGeneratorAgent

明确接口定义:为每个智能体定义清晰的输入输出规范。使用类型提示和文档字符串来说明期望的输入格式和返回结果。

class WellDefinedAgent(Agent):
    """良好定义的智能体示例"""
    
    async def process_data(
        self,
        data: dict,
        options: Optional[dict] = None
    ) -> Dict[str, Any]:
        """
        处理数据并返回结果
        
        Args:
            data: 输入数据,必须是字典格式
            options: 处理选项,可选
            
        Returns:
            处理结果字典,包含:
            - status: 处理状态
            - result: 处理结果
            - metadata: 元数据信息
        """
        # 实现逻辑
        return {
            "status": "success",
            "result": processed_data,
            "metadata": {"processing_time": time.time()}
        }

2. 错误处理策略

分级错误处理:根据错误严重程度采取不同的处理策略:

from agentscope.exception import (
    AgentException,
    RetryableException,
    FatalException
)

class ResilientWorkflow:
    """具有弹性错误处理的工作流"""
    
    async def execute_with_fallback(self, operation, max_retries=3):
        """带重试和降级的操作执行"""
        for attempt in range(max_retries):
            try:
                return await operation()
            except RetryableException as e:
                if attempt == max_retries - 1:
                    # 最后一次重试失败,执行降级
                    return await self.fallback_operation()
                # 指数退避
                await asyncio.sleep(2 ** attempt)
            except FatalException as e:
                # 致命错误,立即失败
                logging.error(f"致命错误:{e}")
                raise
            except Exception as e:
                # 未知错误,记录并继续
                logging.warning(f"未知错误,尝试继续:{e}")
                continue
        
        return await self.fallback_operation()

3. 性能监控指标

建立关键性能指标监控体系:

指标类别 具体指标 监控频率 告警阈值
响应时间 平均响应时间、P95响应时间 每分钟 > 5秒
成功率 请求成功率、任务完成率 每分钟 < 95%
资源使用 CPU使用率、内存使用率 每5分钟 > 80%
智能体状态 活跃智能体数、队列长度 每分钟 队列长度 > 100
错误率 各类错误发生率 每分钟 > 5%

4. 部署配置优化

针对不同环境优化部署配置:

# config/production.yaml
agent_service:
  max_workers: 10
  worker_timeout: 300
  enable_health_check: true
  health_check_interval: 30

cache:
  redis:
    url: "redis://redis:6379"
    max_connections: 50
    connection_timeout: 5

monitoring:
  tracing:
    enabled: true
    exporter: "jaeger"
    endpoint: "jaeger:6831"
  metrics:
    enabled: true
    port: 9090

security:
  permission_strict_mode: true
  audit_log_enabled: true
  rate_limiting:
    enabled: true
    requests_per_minute: 100

未来展望:多智能体系统的发展趋势

随着AgentScope 2.0的成熟和AI技术的快速发展,多智能体系统正朝着以下几个方向演进:

1. 更智能的编排引擎

未来的智能体编排将更加动态和自适应。系统能够根据任务复杂度、资源可用性和历史表现,自动调整智能体的协作策略。AgentScope正在探索基于强化学习的编排优化,让系统能够从经验中学习最优的协作模式。

2. 边缘计算支持

随着边缘设备的普及,将智能体部署到边缘设备成为趋势。AgentScope计划优化资源占用,支持在资源受限的环境中运行,同时保持核心功能。这将使得智能体能够更接近数据源,减少延迟并提高隐私保护。

3. 联邦学习集成

在多组织协作场景中,联邦学习让智能体能够在保护数据隐私的前提下共享知识。AgentScope正在研究如何将联邦学习机制集成到多智能体系统中,使得不同组织的智能体能够协同学习而不暴露原始数据。

4. 自适应安全模型

安全始终是多智能体系统的核心关切。未来的AgentScope将引入自适应安全模型,能够根据上下文动态调整权限策略,实现更细粒度的访问控制。例如,在处理敏感数据时自动提高安全等级,而在常规操作中保持高效。

5. 跨平台互操作性

随着不同智能体框架的出现,跨平台互操作性变得重要。AgentScope计划支持更多的开放标准,如MCP(Model Context Protocol)和A2A(Agent-to-Agent)协议,使得不同框架的智能体能够无缝协作。

结语

AgentScope 2.0为构建可观测、可信任的多智能体系统提供了完整的解决方案。通过本文的实战指南,你应该已经掌握了从基础部署到高级优化的全流程技能。记住,成功的多智能体系统不仅仅是技术的堆砌,更是对业务需求的深刻理解和对用户体验的持续优化。

多智能体协作场景

正如上图所示,多智能体协作就像团队合作,每个智能体发挥自己的专长,共同解决复杂问题。AgentScope 2.0为你提供了构建这样团队的工具和框架,剩下的就是发挥你的创造力,构建出真正有价值的智能应用。

开始你的多智能体开发之旅吧!从官方示例目录开始,探索更多可能性:examples/agent_service/、examples/rag/、examples/long_term_memory/。在实际项目中应用这些技术,你会发现AgentScope 2.0带来的不仅是效率的提升,更是开发体验的革命性改变。

【免费下载链接】agentscope Build and run agents you can see, understand and trust. 【免费下载链接】agentscope 项目地址: https://gitcode.com/GitHub_Trending/ag/agentscope

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐