热门推荐:AI Agent开发必备!工具注册全攻略(收藏版)
在AI Agent开发中,工具管理至关重要。本文探讨了全部注册与动态注册的优劣,并提出基于语义搜索的工具发现策略及元工具概念。文章详细解析了在ReAct框架中实现动态工具切换的方案,并通过Spring AI Alibaba实战案例展示了多种工具管理模式。最后,提供了工具描述工程、向量数据库优化等最佳实践,助力开发者构建高效、智能的AI Agent系统。

1. 引言
在当今的AI Agent开发中,工具(Tools)已成为连接大语言模型与现实世界的关键桥梁。从简单的网络搜索到复杂的数据库操作,从代码执行到文件处理,工具赋予了Agent超越纯文本生成的能力。然而,随着工具数量的爆炸性增长,一个严峻的挑战浮出水面:如何高效管理这些工具?
最近在给我们的老旧项目整AI赋能的时候,就遇到了这个问题,作为一个相对底层的模型交互层,我该如何从众多功能各异、也同时存在相似性较高的工具中,精确的提供给大模型需要的工具列表呢?是不管三七二十一的全部丢进去呢,还是精挑细选一番?
1.1 背景与问题本质
在现代 Agent 架构中,工具调用通常表现为:
User Input → LLM → (Tool Selection) → Tool Execution → LLM → Final Answer
当工具数量增长时,如果每次调用大模型时都将所有工具注册进去,显然会消耗宝贵的上下文窗口,而且极大概率会降低模型的决策质量,同样的系统的调用链路、维护成本将变得极为可怕
但如果采用动态注册的方式,又该如何判断在什么场景下注册哪些工具呢?特别是在我的ReAct(Reasoning + Acting)这种强调迭代思考的框架的支持中,这些工具又应该怎么进行管理呢。
这些问题应该是每个做Agent开发的小伙伴,必然会面对的问题,本文将深入探讨这些问题,并尝试提供一套切实可行的解决方案。
2. 全部注册 vs 动态注册:优劣分析

2.1 全部注册:简单但低效
工作原理:在每次与大模型交互时,将系统中所有可用的工具一次性注册到模型的上下文中。

优点:
- 实现简单,无需复杂的工具发现机制
- 模型始终拥有完整的选择范围
- 不需要额外的工具管理逻辑
缺点:
-
上下文窗口限制
:现代大模型的上下文窗口虽然不断扩大(如GPT-4 Turbo的128K tokens),但当工具数量达到数百个时,工具描述就会占用大量空间
-
选择质量下降
:研究表明,当提供的选项过多时,模型的选择准确性会显著下降
-
性能开销
:处理大量工具描述需要更多的计算资源
-
幻觉风险增加
:模型可能在工具选择时产生混淆,调用错误的工具
适用场景:
- 工具数量 < 10
- Demo / PoC 阶段
- 工具差异明显(不易混淆)
2.2 动态注册:智能但复杂
工作原理:根据当前任务的需求,按需动态地选择并注册最相关的工具子集。

优点:
-
高效利用上下文
:只加载必要的工具,为任务相关的思考留出更多空间
-
提高选择准确性
:减少选项数量,让模型更容易做出正确决策
-
更好的可扩展性
:系统可以支持无限数量的工具,而不受上下文限制
-
降低成本
:更少的token意味着更低的API调用成本
缺点:
- 实现复杂度高,需要工具发现和选择机制
- 可能遗漏相关工具,需要精心设计的选择策略
- 需要维护工具的元数据和索引
适用场景
- 工具数量较多(>20)
- 生产级 Agent 系统
- 多领域、多能力场景
2.3 选择建议
对于工具数量少于20个的简单应用,全部注册可能是更实用的选择。但当工具数量超过这个阈值,或者工具来自多个不同领域时,动态注册的优势就会显现出来。
3. 动态工具注册的核心策略
核心思路:在 LLM 调用之前,引入一个“工具筛选层”
3.1 基于语义搜索的工具发现

动态注册的基础是工具发现——即根据当前任务快速找到最相关的工具。最常用的方法是语义搜索:
-
工具描述向量化
:为每个工具的名称和描述生成向量嵌入(embedding)
-
查询向量化
:将用户的任务描述也转换为向量
-
相似度匹配
:计算查询向量与工具向量的相似度,返回最相关的Top-K个工具
这种方法的关键在于工具描述的质量。
一个简单的实现案例如
if (query 包含 "天气") → 注册 weather_toolif (query 包含 "订单") → 注册 order_tool
当然我们也可以进一步,借助Embedding来实现更推荐的语义检索

-
为每个 Tool 构建描述:```plaintext
{ “name”: “weather_tool”, “description”: “查询城市天气”} -
转为向量(embedding)
-
用户 query → embedding → 相似度匹配
-
选择 Top-K 工具(通常 3~5 个)
3.2 元工具(Meta-Tools)的概念

元工具是专门为管理其他工具而设计的工具。它们是实现动态注册的关键组件。典型的元工具包括:
-
search_tools
:根据查询搜索相关工具
-
load_tools
:将选定的工具加载到当前上下文中
-
get_tool_info
:获取特定工具的详细信息
-
call_tool
:执行特定工具
这种设计让Agent具备了自我管理工具的能力,可以根据任务需要主动发现和加载工具。
比如设计一个 PlannerAgent:
User → Planner Agent → Tool Selection → Executor Agent
用户请求,先通过 PlannerAgent 来实现一遍需要的工具,然后将过滤的工具丢给后续的 ExecutorAgent,从而实现用户的任务响应
3.3 工具选择架构演进
根据最新的研究(Dynamic ReAct: Scalable Tool Selection for Large-Scale MCP Environments),工具选择架构经历了以下几个阶段:

架构1:直接语义搜索
- 将用户查询直接发送到向量数据库
- 简单但检索精度低
架构2:智能查询构建
- 让LLM先构建更精确的搜索查询
- 提高检索质量,但增加额外调用
架构3:搜索与加载分离
- 搜索和加载分为两个独立步骤
- LLM可以更仔细地选择工具
架构4:应用感知的分层搜索
- 先搜索相关应用,再在应用内搜索工具
- 进一步提高精度
架构5:固定工具集
- 使用固定的元工具集,动态调用其他工具
- 适合成本敏感的场景
实验表明,架构3(搜索与加载分离) 在精度和效率之间取得了最佳平衡。
4. 在ReAct框架中实现动态工具切换
4.1 ReAct框架回顾
ReAct(Reasoning + Acting)是一种让Agent交替进行推理和行动的模式。其核心循环是:

-
Think(思考)
:分析当前状态,决定下一步行动
-
Act(行动)
:执行具体操作(通常是调用工具)
-
Observe(观察)
:获取行动结果
-
重复上述步骤直到任务完成
4.2 动态工具切换的挑战
在ReAct的核心思想中,我们很容易遇到的一个问题,若工具一开始就固定,中途无法扩展工具集时,会导致推理受限,当一次推理失败之后的重试大概率也会失败
每一步 Thought 都可能需要不同工具,如何动态切换?
在ReAct框架中实现动态工具切换面临以下挑战:
-
工具发现时机
:什么时候应该触发工具搜索?
-
工具切换成本
:每次切换工具都需要额外的LLM调用
-
上下文管理
:如何在有限的上下文中平衡工具描述和推理历史
-
错误恢复
:如果工具选择错误,如何优雅地恢复
4.3 优雅的实现方案
方案一:分层工具注册

-
初始状态
:只加载元工具(search_tools, load_tools等)
-
任务分析
:Agent首先使用元工具搜索相关工具
-
工具加载
:通过load_tools加载搜索到的工具
-
任务执行
:使用加载的工具执行任务
-
动态扩展
:如果执行过程中需要新工具,重复步骤2-4
方案二:工具缓存与预加载
基于任务类型预加载常用工具组合:
# 工具组合示例TOOL_GROUPS = { "email": ["send_email", "read_email", "search_email"], "calendar": ["create_event", "list_events", "update_event"], "file": ["read_file", "write_file", "list_files"], "web": ["web_search", "fetch_url", "scrape_page"]}def get_tools_for_task(task_description): # 分析任务类型 task_type = classify_task(task_description) # 返回相关工具组 return TOOL_GROUPS.get(task_type, [])
方案三:渐进式工具加载

根据ReAct循环的进展动态调整工具集:
-
第一轮
:加载最核心的2-3个工具
-
后续轮次
:根据执行结果决定是否加载更多工具
-
工具卸载
:当工具不再需要时,从上下文中移除
这种方案的优势在于保持了上下文的简洁性,同时提供了足够的灵活性。
5. 实践案例与代码示例
5.1 案例:动态邮件处理Agent
假设我们需要构建一个处理邮件的Agent,它需要:
- 搜索邮件
- 读取邮件内容
- 发送回复
- 创建日历事件
- 更新任务列表
如果全部注册,需要加载10+个工具。但使用动态注册:
# 第一步:分析任务,搜索相关工具search_results = agent.search_tools([ "search and read emails", "send email reply"])# 结果:返回邮件相关的5个工具# 第二步:加载工具agent.load_tools(search_results[:3]) # 只加载最相关的3个# 第三步:执行任务email_content = agent.execute("search_emails", query="unread emails")# ... 处理邮件# 第四步:需要创建日历事件时,动态加载新工具calendar_tools = agent.search_tools(["create calendar event"])agent.load_tools(calendar_tools)agent.execute("create_event", title="Meeting", time="...")
5.2 Spring AI Alibaba 实战案例
在实际的Spring AI Alibaba项目中,我们发现了多种工具管理的实现模式。这些模式展示了如何在Java生态中优雅地处理工具管理问题。
5.2.1 静态工具注册模式
// ExpressOrderTools.java - 快递下单工具集publicclassExpressOrderTools { privatestaticfinalExpressOrderToolsINSTANCE=newExpressOrderTools(); privatestaticfinal List<ToolCallback> TOOLS = Arrays.asList(ToolCallbacks.from(INSTANCE)); @Tool(description = "保存快递下单的收件人信息") public String receiveAddress( @ToolParam(description = "收件人姓名") String name, @ToolParam(description = "手机号码") String phone, @ToolParam(description = "详细地址") String address) { // 实现逻辑 return"收件信息已保存"; } // 按名称查找工具 publicstatic ToolCallback findByName(String name) { return TOOLS.stream() .filter(t -> t.getToolDefinition().name().equals(name)) .findFirst() .orElse(null); } publicstatic List<ToolCallback> getTOOLS() { return TOOLS; }}
这种模式适合工具数量较少、功能明确的场景。通过@Tool注解和ToolCallbacks.from()可以快速将普通Java方法转换为Agent可调用的工具。
5.2.2 动态工具选择模式
// StepConfigInterceptor.java - 基于步骤的动态工具选择publicrecordStepConfig( String prompt, // 该步骤的系统提示词 List<ToolCallback> tools, // 可用工具列表 List<String> requiredKeys // 前置条件检查) {}// 在拦截器中根据当前步骤动态选择工具@Overridepublic List<ToolCallback> beforeToolExecution( String step, List<ToolCallback> availableTools, ToolContext context) { // 从上下文获取当前步骤配置 StepConfigconfig= stepConfigs.get(step); if (config == null) return availableTools; // 检查前置条件 Map<String, Object> state = context.getState(); for (String key : config.requiredKeys()) { if (!state.containsKey(key)) { thrownewIllegalStateException("缺少前置条件: " + key); } } // 返回该步骤允许的工具 return config.tools();}
这种模式的核心思想是状态驱动的工具选择:根据工作流的当前状态,动态决定哪些工具可用。在快递下单场景中,"填写收件信息"步骤只需要地址相关工具,而"选择快递公司"步骤才需要快递选择工具。
5.2.3 Human-in-the-Loop 审批模式
// ChatController.java - 高风险工具的人工审批HumanInTheLoopHookhumanInTheLoopHook= HumanInTheLoopHook.builder() .approvalOn("execute_sql", ToolConfig.builder() .description("⚠️ SQL 执行操作需要审批!") .build()) .approvalOn("delete_order", ToolConfig.builder() .description("⚠️ 删除订单操作需要审批!") .build()) .build();ReactAgentagent= ReactAgent.builder() .name("order_agent") .model(chatModel) .tools(orderTools) .hook(humanInTheLoopHook) .saver(newMemorySaver()) // 用于中断恢复 .build();
当Agent尝试调用被标记的工具时,执行会被中断,等待人工确认。这种模式特别适合金融、医疗等高风险领域。
5.2.4 Skill Registry 渐进式披露模式
// L03Application.java - 技能注册与按需加载SkillRegistryregistry= ClasspathSkillRegistry.builder() .classpathPath("skills") // 从类路径加载技能 .build();SkillsAgentHookhook= SkillsAgentHook.builder() .skillRegistry(registry) .build();ReactAgentagent= ReactAgent.builder() .name("skill_agent") .model(chatModel) .hook(hook) // 注册技能钩子 .build();
技能通过SKILL.md文件定义:
---name:technical-writingdescription:Writeclear,comprehensivetechnicaldocumentationallowed_tools:-read_file-write_file-list_directorytags: [writing, documentation, specs]---# Technical Writing Skill## When to use-Writingtechnicalspecifications-Creatingarchitecturedocumentation-Documentingsystemdesigns
Agent初始时只注册一个read_skill工具,当需要特定技能时,再动态加载该技能的工具集。
5.3 关键实现细节
工具描述优化:
- 使用清晰、具体的描述
- 包含参数说明和使用示例
- 添加相关的关键词和同义词
向量数据库选择:
- 推荐使用支持混合搜索的数据库(如Pinecone、Weaviate)
- 考虑使用专门优化的嵌入模型(如voyage-context-3)
错误处理:
try: result = agent.execute_tool(tool_name, params)except ToolNotFoundError: # 工具未找到,触发工具搜索 new_tools = agent.search_tools([tool_name]) agent.load_tools(new_tools) result = agent.execute_tool(tool_name, params)
6. 工具管理架构设计
6.1 分层架构模式
一个完整的工具管理系统通常采用分层架构:

各层职责:
-
编排层
:Agent运行时、ReAct循环、任务调度
-
工具管理层
:工具注册、发现、选择、执行、缓存
-
集成层
:MCP客户端、插件系统、API适配器
6.2 核心组件实现
工具注册表(Tool Registry)
class ToolRegistry: """工具注册中心 - 单一真相来源""" def__init__(self): self._tools: Dict[str, ToolDefinition] = {} self._by_category: Dict[str, Set[str]] = defaultdict(set) self._vector_store = None defregister(self, tool: ToolDefinition): """注册工具并建立索引""" self._tools[tool.name] = tool self._by_category[tool.category].add(tool.name) # 向量化工具描述用于语义搜索 ifself._vector_store: embedding = self.embeddings.embed_query(tool.description) self._vector_store.add(tool.name, embedding) defdiscover(self, query: str, top_k: int = 10) -> List[ToolDefinition]: """基于语义发现工具""" query_vec = self.embeddings.embed_query(query) scored = [ (tool, cosine_similarity(query_vec, tool.embedding)) for tool inself._tools.values() ] return [t for t, _ insorted(scored, key=lambda x: -x[1])[:top_k]]
工具选择器(Tool Selector)
class ToolSelector: """根据上下文选择最合适的工具""" defselect(self, context: AgentContext, max_tools: int = 10) -> List[Tool]: # 1. 语义搜索候选工具 candidates = self.registry.discover(context.query) # 2. 多阶段过滤 candidates = self.filter_by_permissions(candidates, context.user) candidates = self.filter_by_availability(candidates) candidates = self.filter_by_cost(candidates, context.budget) # 3. 排序和截断 returnself.rank_and_limit(candidates, max_tools)
工具执行器(Tool Executor)
class ToolExecutor: """安全、高效地执行工具""" asyncdefexecute(self, tool_call: ToolCall, context: ExecutionContext) -> ToolResult: # 1. 参数验证 validated = self.validator.validate(tool_call.tool.schema, tool_call.arguments) # 2. 权限检查 ifnotself.auth.check_permission(tool_call, context): raise PermissionError(f"User cannot call {tool_call.tool.name}") # 3. 执行(带重试) for attempt inrange(self.max_retries): try: returnawait asyncio.wait_for( tool_call.tool.execute(validated), timeout=self.timeout ) except Exception as e: if attempt == self.max_retries - 1: raise await asyncio.sleep(2 ** attempt) # 指数退避
6.3 MCP协议:工具管理的标准化
Model Context Protocol (MCP) 代表了工具管理架构的标准化方向:
| 特性 | 传统插件系统 | MCP |
|---|---|---|
| 耦合度 | 紧耦合 | 松耦合 |
| 互操作性 | 无 | 跨Agent、跨平台 |
| 发现机制 | 手动配置 | 自动发现 |
| 标准化 | 无 | 统一协议 |
# MCP客户端使用示例from mcp.client import MCPClientclient = MCPClient()# 发现可用服务器servers = await client.discover()# 连接和使用服务器async with client.connect(server_url) as session: tools = await session.list_tools() result = await session.call_tool("search", {"query": "AI agents"})
7. 最佳实践与性能优化
7.1 工具描述工程
工具描述的质量直接影响检索效果。最佳实践包括:
-
明确的功能说明
:清晰描述工具能做什么
-
详细的参数文档
:每个参数的类型、含义、是否必填
-
使用示例
:提供典型的调用示例
-
相关关键词
:添加同义词和相关术语
@tooldef calculate_mortgage( principal: float, annual_rate: float, years: int) -> dict: """ Calculate monthly mortgage payment. Args: principal: Loan amount in USD annual_rate: Annual interest rate (e.g., 0.05 for 5%) years: Loan term in years Returns: Dictionary with monthly_payment, total_payment, total_interest Example: calculate_mortgage(300000, 0.065, 30) -> {"monthly_payment": 1896.20, "total_payment": 682632, "total_interest": 382632} """ # 实现逻辑
7.2 向量数据库优化
-
选择合适的嵌入模型
:根据工具描述的语言和领域选择模型
-
定期更新索引
:工具更新时及时重建索引
-
混合搜索策略
:结合语义搜索和关键词搜索
7.3 默认工具集成
为常见操作提供默认工具,避免不必要的搜索:
-
web_search:通用网络搜索
-
create_table:创建表格数据
-
format_output:格式化输出
7.4 上下文窗口优化
| 技术 | 效果 | 适用场景 |
|---|---|---|
| 摘要 | 减少70-90% token | 长对话、多步骤任务 |
| 过滤 | 减少40-60% token | 高频调用场景 |
| 缓存 | 减少重复计算 | 频繁访问的工具结果 |
| 隔离 | 减少50% token | 多Agent并行执行 |
7.5 性能监控清单
-
实施工具数量限制(建议不超过20个/次调用)
-
使用向量嵌入加速工具发现
-
实现工具结果缓存
-
添加执行超时和重试机制
-
监控和报告工具使用成本
-
实施上下文压缩策略
7.6 安全考虑
class SecureToolExecutor: """带安全检查的工具执行器""" asyncdefexecute(self, tool_call: ToolCall, context: Context): # 1. 预执行安全检查 decision = awaitself.policy_engine.evaluate( action="tool_call", resource=tool_call.tool.name, parameters=tool_call.arguments, user_context=context ) if decision.denied: raise SecurityError(f"Tool call denied: {decision.reason}") # 2. 敏感数据脱敏 sanitized_args = self.sanitizer.sanitize( tool_call.arguments, sensitive_fields=["api_key", "password", "token"] ) # 3. 执行并审计 result = await tool_call.tool.execute(sanitized_args) self.audit_logger.log(tool_call, context, result) return result
8. 总结与展望
在Agent应用开发中,工具管理是一个需要精心设计的环节。虽然全部注册实现简单,但动态注册在可扩展性、性能和成本方面具有显著优势。
8.1 关键要点
-
动态注册是必然趋势
:随着工具数量增长,全部注册将变得不可行
-
元工具是核心组件
:通过search_tools和load_tools实现工具的自我管理
-
ReAct框架天然适配
:动态工具切换可以无缝集成到Think-Act-Observe循环中
-
质量重于数量
:精挑细选的工具比大量平庸的工具更有效
-
持续优化
:工具描述、向量模型、搜索策略都需要持续调优
8.2 技术趋势
从本次调研可以看到几个关键趋势:
-
动态化
从静态配置向动态加载演进,支持运行时适配
-
标准化
MCP等协议推动工具接口统一
-
智能化
基于语义的工具选择和预算感知调度
-
工程化
从原型研究向生产级架构演进,强调监控、成本控制和安全性
8.3 实践建议

| 场景 | 推荐方案 |
|---|---|
| 工具 < 20个 | 全部注册,简单直接 |
| 工具 20-100个 | 语义搜索 + 动态加载 |
| 工具 > 100个 | 元工具 + 向量数据库 + 分层架构 |
| 高风险操作 | Human-in-the-Loop审批模式 |
| 多租户系统 | MCP协议 + 动态权限管理 |
未来,随着工具生态的进一步发展,动态工具管理将成为Agent框架的标配功能。掌握这些技术,将帮助你构建更智能、更高效的AI Agent系统。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包:
- ✅ 从零到一的 AI 学习路径图
- ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
- ✅ 百度/阿里专家闭门录播课
- ✅ 大模型当下最新行业报告
- ✅ 真实大厂面试真题
- ✅ 2026 最新岗位需求图谱
所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》,下方扫码获取~
① 全套AI大模型应用开发视频教程
(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
② 大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
③ 大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
④ AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
⑤ 大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
⑥ 大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

以上资料如何领取?

为什么大家都在学大模型?
最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

不出1年,“有AI项目经验”将成为投递简历的门槛。
风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!

这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

以上全套大模型资料如何领取?

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)