本文通过一个基于Spring AI的AI Agent应用Demo深入剖析了其架构设计和实现细节。项目集成了RAG检索增强生成、Function Calling工具调用、MCP协议、SubAgent子代理、Skill技能系统等核心能力。文章详细讲解了核心编排器AgentCore、对话记忆管理ChatMemory、可插拔的工具注册机制、完整的检索增强生成流水线、两种Markdown驱动的Prompt模板机制、拥有独立记忆的子代理SubAgent以及连接一切外部服务的MCP协议。对于想要学习大模型和AI Agent开发的小白或程序员来说这是一个极佳的实践案例通过代码实现理论让学习过程更加直观和高效。前言Linux说过一句很经典的话Talk is cheap, show me the code.最近在学习AI Agent开发的时候填鸭式地被灌输了很多新知识但是这些新知识就像是漂浮的“空中楼阁”看得见但摸不着只知道理论如此但是不知道具体实现为何物。计算机工程的事儿往往真的听再多毫无体感看一遍代码就基本一通百通由此产生一个很神奇的想法“最好的学习资料是代码既然我要学AI Agent开发那就让AI Agent本身帮我生成学习资料。”于是乎便有了这篇文章即我本文的项目代码几乎是由AI生成我在其中的角色只是指挥家与验收员。开始之前先作一些声明1、该项目本身纯作为学习用途的Demo只是用作展示“理论背后看得见的代码”。2、Agent的理解较为宽泛从整体概念层面是包含LLM的一般Agent开发往往指的是Harness开发但本文不做具体区分。3、不深入每个概念的设计哲学如Skill的渐进式披露主要关注于实现层面。4、Function CallingLLM本身不会调工具工具调用都是Harness做的实际上Function Calling是大地基很多复杂能力都是作为tool的形式包装给LLM的例如Skill与SubAgent调用。快速开始本项目是一个基于Spring AI的AI Agent应用纯Demo仅学习用途集成了 RAG 检索增强生成、Function Calling 工具调用、MCP 协议、SubAgent 子代理、Skill 技能系统等核心能力。本文将从六个核心模块出发深入剖析其架构设计和实现细节。环境要求Java 21Maven 3.9核心模块模块说明AgentCore核心编排器具备意图识别、记忆管理与大模型调用等能力。ChatMemory对话记忆管理支持三层上下文压缩摘要压缩 → Assistant 裁剪 → 滑动窗口。ToolFunction Calling可插拔的工具注册机制通过InnerTool统一接口注册LLM 自主决策调用RAG完整的检索增强生成流水线文档加载 → 文档分块 → 向量化 → 向量存储 → 多路召回语义 BM25 查询改写→ RRF 融合 → Rerank 重排 → LLM → 内容生成Command Skill两种 Markdown 驱动的 Prompt 模板机制Command 由用户主动调用Skill 本质作为Tool由 LLM 决策调用。SubAgent拥有独立记忆的子代理支持内部 SubAgent 和外部 IdeaLab Agent 两种形态MCP双向 MCP 支持作为 Client 动态连接外部 MCP 服务作为 Server 对外暴露服务配置编辑src/main/resources/application.properties配置大模型 APIspring.ai.openai.base-urlhttps://open.bigmodel.cn/api/paas/v4spring.ai.openai.api-key你的API密钥spring.ai.openai.chat.options.modelglm-4spring.ai.openai.embedding.options.modelembedding-3访问前端页面启动成功后打开浏览器访问http://localhost:8080项目内置了一个完整的 Web 聊天界面src/main/resources/static/index.html支持流式对话实时逐字输出 AI 回复SSEMarkdown 渲染自动渲染代码块、表格、列表等命令面板输入/唤起快捷命令列表会话管理支持清空对话历史API 直接调用# 非流式对话curl -X POST http://localhost:8080/api/chat / -H Content-Type: application/json / -d {message: 你好介绍一下你的能力, sessionId: test-001}# 流式对话SSEcurl -X POST http://localhost:8080/api/chat/stream / -H Content-Type: application/json /一、核心编排器AgentCoreAgentCore是整个系统的大脑负责编排对话的完整流程意图识别 → RAG 注入 → 记忆管理 → 模型调用 → 工具执行。1 对话流程用户输入 │ ▼意图识别IntentRecognizer │ 判断这是知识问答还是通用对话 ▼RAG 注入RagService │ 如果是知识问答检索知识库将参考资料拼入上下文 ▼记忆管理ChatMemory │ 自动摘要压缩 → 构建消息列表 ▼模型调用ChatClient ToolCallbacks │ LLM 决策直接回答 or 调用工具 │ 如果调用工具 → 执行工具 → 将结果返回 LLM → 继续决策ReAct 循环 ▼返回最终回复核心代码AgentCore.chat()public String chat(String sessionId, String userInput) { ChatMemory memory getOrCreateMemory(sessionId); // 1. 意图识别 Intent intent intentRecognizer.recognize(userInput); // 2. 如果是 RAG 意图先检索知识库并注入上下文 if (intent Intent.RAG ragService.isKnowledgeLoaded()) { String ragContext ragService.query(userInput); if (ragContext ! null !ragContext.isBlank()) { String enrichedInput 以下是从知识库中检索到的相关参考资料 请结合这些资料回答用户的问题/n/n ragContext /n/n用户问题 userInput; memory.addMessage(new UserMessage(enrichedInput)); } else { memory.addMessage(new UserMessage(userInput)); } } else { memory.addMessage(new UserMessage(userInput)); } // 3. 构建 Prompt 并Loop调用大模型getMessages 内部自动触发摘要压缩 ListMessage messages memory.getMessages(); Prompt prompt new Prompt(messages, buildChatOptions()); ChatClient.ChatClientRequestSpec requestSpec chatClient.prompt(prompt); if (!toolCallbacks.isEmpty()) { requestSpec.toolCallbacks(toolCallbacks.toArray(new ToolCallback[0])); } String response requestSpec.call().content(); memory.addMessage(new AssistantMessage(response ! null ? response : )); return response ! null ? response : ;}2 Agent LoopSpring AI已实现Agent Loop。具体路径为org.springframework.ai.chat.client.advisor.ToolCallAdvisor#adviseCallAgent Loop代码片段boolean isToolCall false; do { // Before Call var processedChatClientRequest ChatClientRequest.builder() .prompt(new Prompt(instructions, optionsCopy)) .context(chatClientRequest.context()) .build(); // Next Call processedChatClientRequest this.doBeforeCall(processedChatClientRequest, callAdvisorChain); chatClientResponse callAdvisorChain.copy(this).nextCall(processedChatClientRequest); chatClientResponse this.doAfterCall(chatClientResponse, callAdvisorChain); // After Call // TODO: check that this tool call detection is sufficient for all chat models // that support tool calls. (e.g. Anthropic and Bedrock are checking for // finish status as well) ChatResponse chatResponse chatClientResponse.chatResponse(); isToolCall chatResponse ! null chatResponse.hasToolCalls(); if (isToolCall) { Assert.notNull(chatResponse, redundant check that should never fail, but here to help NullAway); ToolExecutionResult toolExecutionResult this.toolCallingManager .executeToolCalls(processedChatClientRequest.prompt(), chatResponse); if (toolExecutionResult.returnDirect()) { // Return tool execution result directly to the application client. chatClientResponse chatClientResponse.mutate() .chatResponse(ChatResponse.builder() .from(chatResponse) .generations(ToolExecutionResult.buildGenerations(toolExecutionResult)) .build()) .build(); // Interrupt the tool calling loop and return the tool execution // result directly to the client application instead of returning // it to the LLM. break; } instructions this.doGetNextInstructionsForToolCall(processedChatClientRequest, chatClientResponse, toolExecutionResult); } }while (isToolCall); // loop until no tool calls are present3 意图识别IntentRecognizer通过 LLM 判断用户输入的意图目前支持两种RAG用户在问知识库相关的问题需要先检索知识库再回答GENERAL通用对话直接交给 LLM 处理意图识别前置的好处是避免每次对话都触发 RAG 检索节省不必要的向量检索和 Rerank 开销。4 对话记忆ChatMemory每个sessionId对应一个独立的ChatMemory实例天然支持多客户端并发。ChatMemory设计了三层递进的上下文压缩策略防止对话过长导致 token 溢出或成本失控第一层摘要压缩智能压缩当历史消息超过 16 条时自动将较早的消息通过 LLM 总结为一段 300 字以内的摘要注入到 system prompt 中。原消息从 history 中移除。核心代码ChatMemory.getMessages()和compressIfNeeded()public ListMessage getMessages() { // 在构建消息列表之前自动尝试摘要压缩 compressIfNeeded(); ListMessage messages new ArrayList(); // 将原始 system prompt 与摘要合并为一条 SystemMessage if (systemMessage ! null || (summaryText ! null !summaryText.isBlank())) { String systemContent systemMessage ! null ? systemMessage.getText() : ; if (summaryText ! null !summaryText.isBlank()) { systemContent /n/n【以下是之前对话的摘要请参考】/n summaryText; } messages.add(new SystemMessage(systemContent)); } // ... 添加历史消息跳过早期 Assistant 消息 return Collections.unmodifiableList(messages);}private void compressIfNeeded() { if (chatClient null || history.size() COMPRESS_THRESHOLD_MESSAGES) { return; } int compressEndIndex history.size() - PRESERVE_RECENT_MESSAGES; // 确保不会在 TOOL 消息的前面截断 while (compressEndIndex history.size() history.get(compressEndIndex).getMessageType() MessageType.TOOL) { compressEndIndex--; } if (compressEndIndex 0) return; ListMessage messagesToCompress new ArrayList(history.subList(0, compressEndIndex)); String newSummary SummaryCompressor.compress(chatClient, messagesToCompress, summaryText); if (newSummary ! null !newSummary.isBlank()) { this.summaryText newSummary; history.subList(0, compressEndIndex).clear(); }}这一层的核心设计内聚透明压缩逻辑完全封装在getMessages()内部调用方无感知。压缩器SummaryCompressor作为ChatMemory的私有静态内部类不对外暴露增量压缩如果已有历史摘要新的压缩会将旧摘要与新对话合并总结避免信息随多次压缩逐渐丢失TOOL 消息边界保护截断时自动避开 TOOL 消息确保 TOOL 消息始终紧跟在对应的 ASSISTANT 消息后面不会破坏工具调用上下文。第二层Assistant 消息裁剪精准裁剪只保留最近 3 条 Assistant 回复。因为 LLM 的回复通常很长是 token 消耗的大户裁剪早期的 Assistant 消息能显著减少上下文体积。第三层滑动窗口兜底保护当消息总数超过maxRounds × 4时直接丢弃最早的消息。这是最后一道防线确保上下文不会无限增长。三层策略协同工作摘要压缩优先触发保留信息Assistant 裁剪持续生效精准省 token滑动窗口兜底硬性保护。5 多会话隔离与运行时配置多会话ConcurrentHashMapString, ChatMemory按 sessionId 隔离支持并发运行时切换模型通过 API 动态切换模型提供商如从智谱切到通义千问无需重启运行时调参支持动态调整 temperature、maxTokens、topP 等推理参数二、Tool 机制Function CallingLLM 只能想Tool 让它能做。LLM本身是不会去调用各种服务Agent服务端只是告诉大模型“有哪些工具可以调用”LLM返回给Agent服务端的是“要去调哪些工具”真实调用实在Agent服务端。本项目基于 Spring AI 的 Function Calling 能力设计了一套可插拔的工具注册机制。1 工具注册机制所有工具实现统一的InnerTool接口public interface InnerTool { ListToolCallback loadToolCallbacks();}启动时Spring 自动扫描所有InnerToolBean调用loadToolCallbacks()收集所有工具统一注册到AgentCore。新增工具只需实现这个接口无需修改任何已有代码。ToolCallbackBuilder提供了简洁的工具构建 API将工具名、描述、参数定义JSON Schema和执行函数组装为 Spring AI 标准的ToolCallback。2 工具调用流程用户杭州今天天气怎么样 │ ▼LLM 分析意图决定调用 get_weather 工具 │ ▼Spring AI 自动执行工具get_weather({city: 杭州}) │ ▼工具返回结果杭州晴22°C │ ▼LLM 基于工具结果生成最终回复杭州今天天气晴朗气温 22°C适合出行。Spring AI 的 ChatClient 内置了 ReAct 循环LLM 可以连续调用多个工具直到认为信息充足后给出最终回复。整个过程对开发者透明。3 内置工具一览工具名功能说明knowledge_search知识库检索将 RAG 检索能力封装为工具LLM 可主动检索create_sub_agent创建子代理创建拥有独立记忆的 SubAgentchat_with_sub_agent与子代理对话在 SubAgent 的独立上下文中继续对话destroy_sub_agent销毁子代理释放 SubAgent 资源call_ideas_{name}调用 IDEAs 应用调用外部 IdeaLab 平台的 AI 应用支持多个{skill_name}执行技能由 Markdown 文件定义的技能动态注册{mcp_tool_name}MCP 工具从外部 MCP Server 发现并注册的工具get_weather天气查询示例工具get_stock_price股票价格查询示例工具三、RAG 模块检索增强生成RAGRetrieval-Augmented Generation让 Agent 能够基于私有知识库回答问题。1 RAG完整流水线2 文档分块策略分块质量直接决定检索质量。项目提供了多种分块策略分为确定规则分块和智能分块两类确定规则分块Definite策略原理适用场景TextSplitter默认递归语义分块按标题 → 段落 → 句子 → 固定字符的优先级依次尝试切分通用文档兼顾语义完整性FixedSizeSplitter按固定字符数切分结构不明确的纯文本ParagraphSplitter按段落连续换行切分段落结构清晰的文档SentenceSplitter按句子句末标点切分需要细粒度检索的场景SlidingWindowSplitter滑动窗口切分相邻块有重叠需要保留上下文连续性智能分块Intelligent策略原理适用场景SemanticChunkSplitter基于语义相似度判断切分点语义边界不明确的长文本PropositionSplitter将文本拆解为独立命题需要精确事实检索AgenticSplitter使用 LLM 判断最佳切分方式复杂混合格式文档默认使用TextSplitter递归语义分块分块大小 500 字符重叠 50 字符。3 检索流程核心代码RagService.query()封装了完整的检索流程public String query(String question) { // 1. 多路召回语义 BM25 查询改写共 9 个候选 ListDocument candidates multiRecaller.recall(question, RECALL_CANDIDATE_COUNT); // 2. Rerank 重排取最相关的 3 个 ListDocument relevantDocuments llmReranker.rerank(question, candidates, TOP_K); // 3. 拼接上下文 StringBuilder contextBuilder new StringBuilder(); for (int i 0; i relevantDocuments.size(); i) { contextBuilder.append(【参考资料 ).append(i 1).append(】/n); contextBuilder.append(relevantDocuments.get(i).getContent()).append(/n/n); } return contextBuilder.toString().trim();}4 召回策略单一召回策略总有盲区项目使用多路召回 RRF 融合的方案召回器原理擅长SemanticRetriever基于 EmbeddingModel 的向量余弦相似度检索语义相近但措辞不同的查询Bm25Retriever基于 BM25 算法的关键词匹配TF-IDF 变体精确关键词匹配QueryRewriteRetriever先用 LLM 将问题改写为 3 种不同表达再分别做向量召回扩大语义覆盖面三路召回结果通过 RRFReciprocal Rank Fusion 算法融合// MultiRecaller 核心逻辑public ListDocument retrieve(String query, int topK) { MapString, Double rrfScores new HashMap(); MapString, Document keyToDocument new LinkedHashMap(); for (Recaller retriever : retrievers) { ListDocument results retriever.retrieve(query, PER_ROUTE_CANDIDATE_COUNT); // RRF 公式score(d) Σ 1 / (k rank)k60 为平滑常数 accumulateRrfScores(results, rrfScores, keyToDocument); } return rrfScores.entrySet().stream() .sorted(Map.Entry.String, DoublecomparingByValue().reversed()) .limit(topK) .map(entry - keyToDocument.get(entry.getKey())) .toList();}RRF 只看排名不看绝对分数天然适合融合不同算法的结果。5 Rerank 重排多路召回后通常有 9 个候选文档通过专用的 Rerank 模型精排取最相关的 3 个。6 向量存储VectorStore是一个轻量级的内存向量存储实现使用 Spring AI 的EmbeddingModel生成向量通过余弦相似度检索。适合中小规模知识库生产环境可替换为 Milvus、Pinecone 等专业向量数据库。四、Command 与 Skill两种 Prompt 模板机制Command 和 Skill 都是基于 Markdown 文件定义的 Prompt 模板但它们的设计理念和使用方式截然不同。1 SkillLLM 自主调用的工具Skill 文件使用 YAML Front Matter Prompt 模板 格式---name: summarizedescription: 对用户提供的文本内容进行摘要总结---请对以下文本进行摘要总结提取核心要点{{input}}SkillManager在启动时扫描classpath:skill/*.md解析元数据后由SkillTool将每个技能转换为ToolCallback注册到 Agent。LLM 在对话中根据description自主判断是否需要调用某个技能。2 Command用户主动调用的快捷指令Command 文件是纯 Prompt 模板文件名即为命令名请对以下代码进行 Code Review从代码质量、潜在 Bug、性能、可读性等维度给出改进建议{{input}}CommandManager在启动时扫描classpath:command/*.md加载到内存。用户通过 REST APIPOST /api/command/execute主动指定命令名来执行。3 核心区别对比维度CommandSkill设计理念用户快捷指令LLM 可调用的工具文件格式纯 Prompt 模板Front Mattername description Prompt是否注册为工具❌ 不注册✅ 注册为 ToolCallback调用触发方用户主动指定命令名LLM 根据 description 自主决策执行路径用户 → Controller → AgentCore用户 → AgentCore → LLM 决策 → SkillTool适用场景用户明确知道需要什么功能需要 LLM 理解上下文后智能判断一句话总结Command 是用户告诉 Agent 做什么Skill 是Agent 自己判断该做什么。两者互补——Command 提供确定性的快捷入口Skill 提供智能化的能力扩展。五、SubAgent独立记忆的子代理1 为什么需要 SubAgent有些任务需要独立的上下文。比如用户说帮我写一篇技术文章这个任务可能需要多轮对话来完善但不应该污染主对话的记忆。SubAgent 就是为此设计的。2 记忆隔离机制SubAgent 的核心是记忆隔离每个 SubAgent 拥有独立的ChatMemory实例与主 Agent 的记忆完全隔离。public SubAgent(String id, String name, String systemPrompt, ChatClient chatClient) { this.memory ChatMemory.forSubAgent(); // 独立记忆 this.memory.setSystemPrompt(systemPrompt); // ...}SubAgent 共享主 Agent 的ChatClient即共享同一个大模型连接但对话历史完全独立。这意味着SubAgent 内部的多轮对话不会影响主对话的上下文主 Agent 可以同时管理多个 SubAgent各自互不干扰SubAgent 销毁后其记忆随之释放3 交给LLMToolSubAgent 的能力通过 3 个工具暴露给主 Agent本质上就是 Function Calling由LLM决策启用SubAgent工具参数说明create_sub_agentname、system_prompt、task创建 SubAgent 并执行首个任务chat_with_sub_agentagent_id、message与已有 SubAgent 继续对话destroy_sub_agentagent_id销毁 SubAgent释放资源主 LLM 根据对话上下文自主决定是否需要创建 SubAgent。整个生命周期创建 → 多轮对话 → 销毁都由主 LLM 通过工具调用来驱动。六、MCP连接一切外部服务MCPModel Context Protocol 是 Anthropic 提出的开放协议让 AI 应用能够标准化地连接外部工具和数据源。本项目同时实现了 MCP Server对外暴露能力和 MCP Client连接外部服务。1 MCP Server对外暴露知识库检索能力项目通过SimpleMcpServer对外提供知识库检索工具其他 AI 应用可以通过 MCP 协议来调用工具knowledge_query参数类型说明keywordString检索关键词categoryString知识分类java_basic / jvm / concurrent / spring / design_pattern / allmaxResultsint返回的最大结果条数默认 3内部调用RagService执行检索将结果格式化后返回。这意味着本项目的 RAG 能力可以被任何支持 MCP 协议的 AI 应用复用。2 MCP Client动态连接外部 MCP 服务McpClient封装了连接外部 MCP Server 的完整逻辑核心代码McpClient.connect()public ToolCallback[] connect(String serverUrl) { McpSyncClient mcpClient; McpSchema.InitializeResult initResult; // 优先尝试 Streamable HTTP失败后回退到 SSE try { mcpClient connectWithStreamableHttp(serverUrl); initResult mcpClient.initialize(); } catch (Exception streamableException) { mcpClient connectWithSse(serverUrl); initResult mcpClient.initialize(); } // 自动发现远程工具 SyncMcpToolCallbackProvider provider SyncMcpToolCallbackProvider.builder() .mcpClients(mcpClient).build(); ToolCallback[] toolCallbacks provider.getToolCallbacks(); // 持久化 URL下次启动自动恢复 store.add(serverUrl); return toolCallbacks; }关键特性传输协议自动适配优先 Streamable HTTP2025-03-26 规范失败自动回退 SSE2024-11-05 规范工具自动发现连接成功后自动获取远程工具转换为ToolCallback注册到 Agent持久化与自动恢复URL 持久化到mcp-servers.json应用重启时自动重连运行时动态管理通过 REST API 在运行时动态管理 MCP 连接接口方法说明/api/manage/mcp/connectPOST连接新的 MCP 服务工具立即可用/api/manage/mcp/disconnectPOST断开 MCP 服务移除对应工具/api/manage/mcp/listGET查看所有 MCP 服务及其工具列表结尾感言LLM就像一个问答黑箱不管内部支持多丰富的能力对使用者本质只有一个能力“你问我答”。使用者做的事情几乎是一致的调整输入给LLM的内容尽量让其输出预期内的内容。而对于“调整输入内容”这一块看似轻巧实际上正是工程化发展的源泉从Prompt Engineering到Context Engineering到Harness Engineering本质解决的就是“有限的上下文窗口中该放什么内容”。脑暴枚举目前上下文窗口可能放的内容有系统提示词、工具定义、历史对话、参考文档等。目前AI Agent正高速发展最终浪淘沙到尽头什么会是最终答案不由而知但是其中工具定义可能会走到最后。至少目前而言Function Calling是Harness的大地基实际上很多能力的实现都是基于Function Calling比如Skill本质就是一种Tool而RAG、SubAgent与外部MCP服务等能力在工程实践中也大量被做成一种Tool由LLM决策调用。最后当下AI大模型是当下实打实的优质风口岗位缺口大、发展前景广、薪资待遇突出对比内卷严重、涨薪晋升困难的传统技术岗是普通人转行逆袭的绝佳选择。但很多想要入局大模型领域的朋友都面临无系统学习路径、无实战资源、求职无方向的难题一个人硬啃最容易走弯路、浪费大量时间精力。这里我结合多年一线实战与教学经验整理出一套零基础大模型专属资料包含系统化学习路线图零基础到精通大模型学习书籍 文档电子版2026 最新行业报告项目实战 配套源码大厂面试真题需要的朋友微信扫描下方 CSDN 官方认证二维码免费领取保证 100% 免费。扫码免费领取全部内容下面简单介绍一下资料包含的内容1、大模型系统化学习路线图专属定制从零基础入门到企业级实战的全阶段学习体系划分清晰的四大学习阶段规避碎片化学习弊端适配新手2、0基础到进阶视频教程配套完整高清实操教程覆盖Prompt提示工程、RAG知识库搭建、Agent智能体开发、模型微调、部署落地等核心知识点所有课程搭配实操演示零基础也能轻松看懂、上手实操。3、大模型学习书籍 文档汇总30本行业经典AI、大模型、深度学习精选书籍涵盖理论原理、开发实战、算法基础、AI产品思维等各类内容4、AI大模型最新行业报告整理2024-2026年最新大模型行业白皮书、市场分析报告清晰展现行业发展趋势、技术迭代方向、岗位需求变化帮助学习者精准把握行业风口找准学习和就业方向5、大厂面试真题汇总了常见的AI大模型面试问题、知识点梳理和面经参考方便求职时针对性准备。6、大模型项目实战 配套源码包含GPT应用开发、RAG私有知识库、智能问答系统等多个企业级实战项目配套完整可运行源码从简易Demo到完整商业应用全覆盖帮助学习者将理论转化为落地实战能力积累项目经验。7、适合谁学传统后端 / Java / 前端开发想转型 AI 应用大学生、应届生想拿更好的 offer产品经理、运营想武装职业竞争力技术负责人想给团队落地提效学习是反人性的但回报是真金白银。技术会更新赛道会切换但只要你先动手机会就永远站在你这边。8、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。想要入局AI大模型赛道、抢占行业红利的朋友微信扫描下方CSDN官方认证二维码即可100%免费领取全套学习资料
阅读完成 · 觉得有帮助?