news 2026/8/11 3:59:03

从Tool到Agent:AI应用架构四层模型与MCP协议实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从Tool到Agent:AI应用架构四层模型与MCP协议实战解析

1. 从“工具”到“智能体”:AI应用架构的演进脉络

最近和不少同行交流,发现大家虽然都在热火朝天地搞AI应用开发,但一聊到“Agent”、“Skill”、“MCP”、“Tool”这些词,理解上就出现了不少分歧。有人觉得Agent就是个能自动调用API的脚本,有人把Skill和Tool混为一谈,更别提MCP这个听起来有点玄乎的概念了。这其实挺正常的,AI应用开发这个领域发展得太快,新概念层出不穷,官方文档又往往偏向理论,缺少一线开发的实战视角。

我自己在构建和部署多个AI驱动的自动化系统时,也经历了从“堆砌工具”到“设计智能体”的思维转变。今天,我就想结合自己的踩坑经验,把这些概念掰开揉碎了讲清楚。我们不讲空泛的理论,就从一个最简单的需求出发:“让AI帮我查一下天气,然后根据天气情况推荐今天的穿搭。”看看为了实现这个需求,我们会用到什么,以及它们之间到底是个什么关系。理解了这些,你才能从“写Prompt的”变成“设计智能系统的”。

2. 核心概念四层解构:从执行单元到协作生态

要理清这些概念,我们不能孤立地看,必须把它们放在一个协同工作的系统架构里。你可以把它们想象成一支特种部队:Tool(工具)是士兵手里的枪、匕首、通讯器这些单兵装备;Skill(技能)是士兵经过训练掌握的“战术动作”,比如如何用那把枪进行精准射击;Agent(智能体)就是那个有独立思考能力、能指挥自己(或队友)运用技能和装备去完成复杂任务的指挥官;而MCP(模型上下文协议),则是这支特种部队内部以及与其他部队之间的一套标准化、高效的通信与指挥协议。

2.1 Tool(工具):AI的“手和脚”

Tool,顾名思义,就是工具。它是AI智能体与外部世界交互的最基本接口。AI模型本身是一个“大脑”,它擅长思考和生成文本,但它没有“手”去点击网页按钮,也没有“脚”去数据库里查询数据。Tool就是为它延伸出的手和脚。

核心特征与实现:一个Tool本质上是一个函数API调用。它必须有明确的:

  1. 输入(Input):描述这个工具需要什么参数。例如,一个“查询天气”的工具,输入可能是{“city”: “string”}
  2. 输出(Output):描述这个工具会返回什么数据。例如,返回{“city”: “Beijing”, “temperature”: 22, “condition”: “sunny”}
  3. 执行逻辑:一段实实在在的代码,用于完成具体操作。这可以是调用一个第三方API(如OpenWeatherMap),执行一个数据库查询,操作一个本地文件,甚至控制一个硬件设备。

一个典型的Tool定义(以OpenAI的Function Calling格式为例):

tools = [ { “type”: “function”, “function”: { “name”: “get_current_weather”, “description”: “获取指定城市的当前天气情况”, # 给AI看的描述,至关重要! “parameters”: { “type”: “object”, “properties”: { “city”: { “type”: “string”, “description”: “城市名称,例如‘北京’、‘Shanghai’。” } }, “required”: [“city”] } } } ]

实操心得:Tool描述是灵魂上面代码中的description字段极其重要。AI模型(大脑)正是通过阅读这段描述来决定“我是否需要调用这个工具”以及“我应该传什么参数给它”。描述必须清晰、无歧义。我曾因为把“location”描述得过于模糊,导致AI经常混淆城市名和邮政编码。后来改成“城市的中文或英文名称”,问题就解决了。

常见Tool类型:

  • 搜索工具:调用Google Search、Tavily、Brave Search的API。
  • 数据查询工具:连接数据库(如SQLite、MySQL)、知识图谱。
  • 计算工具:执行数学运算、单位换算。
  • 软件操作工具:通过RPA控制浏览器、桌面应用(常借助Playwright、Selenium)。
  • 硬件交互工具:通过串口、GPIO控制传感器或执行器。

注意:Tool本身是“被动”的。它只是一段等待被调用的代码。AI知道有这些工具可用,但何时用、按什么顺序用,AI自己决定。这就引出了下一个概念——Skill。

2.2 Skill(技能):封装好的“战术动作包”

如果说Tool是单一的武器,那么Skill就是一套组合拳,或者说是一个标准的“战术动作”。它封装了一个或多个Tool的调用逻辑,并可能包含一些前置的判断、后置的处理,形成一个更高阶、更面向业务的可复用单元。

Skill与Tool的关键区别:

  1. 复杂性:Skill比单一Tool更复杂。一个“订机票”的Skill,内部可能需要依次调用“查询航班”、“验证用户信息”、“创建订单”、“支付”等多个Tool。
  2. 上下文管理:Skill内部可以维护一些简单的状态或逻辑。例如,一个“多轮对话信息收集”Skill,可以记住用户之前提供的部分信息,并引导用户补全剩余必要信息。
  3. 目标导向:Skill通常对应一个明确的用户目标或任务节点,比如“生成周报”、“调试代码”、“设计海报初稿”。

举例说明:还是看“天气穿搭推荐”的需求。我们可以设计两个Skill:

  • Skill A:获取天气上下文
    • 内部操作:调用get_current_weatherTool,获取天气数据;然后可能再调用一个get_location_from_ipTool(如果用户没提供城市)来推断城市。
    • 输出:结构化的天气信息对象。
  • Skill B:生成穿搭建议
    • 内部操作:接收Skill A的输出作为输入;结合一个内置的“穿搭规则知识库”(可能是一个本地JSON文件或一次向量检索);格式化生成一段友好的文本建议。
    • 输出:给用户的自然语言建议。

Skill的形态:Skill的实现方式很灵活:

  • 一组预设的Prompt + Tool调用序列:在LangChain、LlamaIndex等框架中,常通过Chain或Workflow来定义。
  • 一个微调的小模型:针对特定任务(如代码评审)微调一个模型,使其擅长处理该类问题。
  • 一个脚本或插件:像Cursor IDE中的“Code Skill”,本质上就是一个能接收代码上下文并执行特定操作(如解释、重构)的插件。

踩坑记录:Skill的边界要清晰早期我做项目时,曾把一个“数据查询与分析”做成了一个巨无霸Skill,结果它既难维护,复用性也差。后来拆分成“数据提取”、“数据清洗”、“基础分析”、“可视化”四个独立的Skill,不仅每个Skill可以在其他场景单独使用,而且组合起来更加灵活。一个设计良好的Skill应该遵循“单一职责原则”

2.3 Agent(智能体):拥有自主权的“任务指挥官”

Agent是当前AI应用开发的焦点和高级形态。你可以把它理解为一个具备自主规划、决策、执行和反思能力的AI实体。它不仅仅能调用Tool或Skill,更重要的是,它能根据目标当前环境(上下文),自主决定下一步做什么。

Agent的核心能力:

  1. 规划:将模糊的用户指令(“帮我策划一个周末旅行”)分解成具体的子任务序列(查目的地、看天气、订酒店、排行程)。
  2. 决策:在多个可用的Tool/Skill中选择最合适的一个。比如,用户问“苹果股价”,是调用财经API还是进行网页搜索?Agent需要判断。
  3. 执行:按照规划,按顺序调用相应的Tool或Skill。
  4. 反思:检查执行结果是否合理,是否完成了目标。如果失败或结果不佳,能够调整计划或重试。比如,调用天气API失败了,Agent可以决定重试或换一个备用API。

Agent的典型工作流(ReAct模式为例):

Thought(思考): 用户需要天气穿搭推荐。我需要先知道用户在哪里。 Action(行动): 调用 `get_user_location` Skill。 Observation(观察): 用户位于北京。 Thought(思考): 现在我需要获取北京的天气。 Action(行动): 调用 `get_current_weather` Tool,参数 {city: “北京”}。 Observation(观察): 北京天气晴,气温25度。 Thought(思考): 天气很好,气温适中。我需要根据这些信息生成穿搭建议。 Action(行动): 调用 `generate_dressing_suggestion` Skill,输入 {weather: “晴”, temperature: 25}。 Observation(观察): 建议穿短袖T恤和薄长裤。 Thought(思考): 我已经获得了所有必要信息,可以组织最终答案了。 Final Answer: 北京今天天气晴朗,气温25度左右,非常舒适。建议您可以穿一件短袖T恤,搭配薄款长裤或牛仔裤出行。

Agent框架的选择:现在社区里Agent框架很多,各有侧重:

  • AutoGen:微软出品,擅长多智能体协作。适合需要多个AI角色(如程序员、测试员、产品经理)共同完成复杂任务的场景。
  • LangGraph:基于LangChain,用图(Graph)来定义智能体的状态和流程,非常适合有复杂循环、分支判断的任务。
  • CrewAI:专注于角色扮演和团队协作,概念上更贴近企业工作流。
  • Hermes Agent:你提到的热词之一,通常指基于特定模型(如Hermes)优化的智能体框架,可能在提示工程或工具集成上有独到之处。

重要提示:不要被框架绑架。框架是帮你管理复杂性的,但核心的规划、决策逻辑(往往通过System Prompt和Few-shot示例来塑造)才是Agent的灵魂。我最初过度依赖框架的默认设置,结果Agent行为很僵化。后来花更多时间精心设计提示词和反思逻辑,效果提升立竿见影。

2.4 MCP(模型上下文协议):智能体间的“通用指挥链路”

MCP全称是Model Context Protocol。这是最晚出现但可能最具深远影响的一个概念。它由Anthropic公司提出,旨在标准化AI模型(尤其是大语言模型)与外部工具、数据源之间的通信方式

为什么需要MCP?痛点是什么?在没有MCP之前,每个AI应用开发者都要做一堆重复且繁琐的工作:

  1. 为每个Tool写一套适配LLM调用的封装(函数描述、参数解析、错误处理)。
  2. 自己管理Tool的注册、发现和调用路由。
  3. 当Tool数量众多时,如何高效地把它们的描述(可能很长)塞进模型的有限上下文窗口,是个大难题。

MCP的目标就是解决这些,它定义了一套服务器-客户端协议

  • MCP Server:相当于一个工具资源管理器。它管理着一组Tools(或数据源),并以标准格式向外界宣告“我这里有什么工具,每个工具怎么用”。一个MCP Server可以管理本地文件系统、数据库、第三方API集合等等。比如,你可以有一个“公司内部数据MCP Server”,专门提供查询销售数据、客户信息的Tools。
  • MCP Client:通常是AI应用或AI Agent框架。它连接到MCP Server,动态地发现并获取可用的Tools列表及其描述。当模型需要时,Client就按照MCP协议向Server发出工具调用请求。

MCP带来的核心好处:

  1. 解耦与标准化:Tool的提供者(Server)和使用者(Client/Agent)完全分离。开发者可以编写一次MCP Server,然后任何支持MCP的AI应用(如Claude Desktop、Cursor、自己写的Agent)都能立即使用这些Tools,无需重复集成。
  2. 动态上下文管理:MCP支持“资源”(Resource)和“提示模板”(Prompt Template)的概念。Client可以按需从Server获取特定Tool的描述,而不是一次性加载所有。这极大地缓解了上下文窗口的压力。例如,只有当用户开始讨论数据分析时,Agent才去获取“图表生成”Tool的描述。
  3. 生态互联:这是最大的想象空间。未来可能会出现公共的MCP Server“市场”,提供各种专业工具(如法律检索、学术绘图、金融分析)。你的AI Agent可以像手机安装App一样,轻松“连接”到这些专业能力上。你搜索的“搜索类MCP服务器(如tavily-mcp、brave-search-mcp)”就是这类实践。

一个简单的MCP连接想象:你想在Cursor IDE里让AI帮你写代码,同时能查询文档、搜索网络。

  1. Cursor(作为MCP Client)启动。
  2. 它连接到一个本地的“开发者工具MCP Server”,这个Server提供了search_stackoverflowquery_official_docs等Tools。
  3. 它还连接到一个云端的“网络搜索MCP Server”(如tavily-mcp),提供通用搜索Tool。
  4. 当你在Cursor里提问时,背后的AI模型可以看到来自这两个Server的动态Tool列表,并自主选择调用,无缝增强其编码能力。

实操配置概念:虽然MCP具体配置依赖客户端,但概念是通用的。比如,为Codex配置一个MCP Server,通常需要在其配置文件(如mcp_config.json)中添加Server的地址和初始化参数。这标志着AI应用开发从“单体集成”走向了“协议化互联”的新阶段。

3. 四者关系与实战工作流剖析

现在我们把四个概念串起来,看一个从零开始构建“天气穿搭推荐Agent”的实战工作流,这能彻底厘清它们的层次关系。

3.1 层次化依赖关系图

它们的关系是典型的层层递进、逐步抽象的:

[ 外部世界 / 数据源 ] ↑ (通过API/代码) | [ Tool层 ] - 原子操作,如 `get_weather(city)`, `search_web(query)` ↑ (被封装/组合) | [ Skill层 ] - 复合任务单元,如 `fetch_weather_context()`, `recommend_outfit(weather_data)` ↑ (被规划/调用) | [ Agent层 ] - 自主决策实体,如 `PersonalAssistantAgent` ↑ (通过协议发现/调用) | [ MCP协议 ] - 通信标准,连接Agent与多个Tool/Skill资源池 ↑ (管理/暴露) | [ MCP Server ] - 资源池,如 `WeatherToolsServer`, `LifeServiceToolsServer`

一句话总结MCP定义了Agent如何动态发现和调用分布在各个MCP Server上的SkillTool

3.2 实战构建流程分解

假设我们使用一个支持MCP的Agent框架(例如,一个集成了MCP Client的LangGraph应用)来构建。

步骤一:创建或集成Tool(最底层)这是基础工作。你需要编写具体的函数。

  1. get_weather_by_city(city_name): 调用天气API。
  2. get_user_location_from_profile(): 从用户配置中读取位置。
  3. query_clothing_knowledge_base(weather_condition, temperature): 查询本地穿搭知识库(可能是个CSV或向量数据库)。

步骤二:将Tool封装成Skill(可选但推荐)为了让逻辑更清晰,我们封装Skill。

  1. Skill:DetermineLocationSkill:
    • 逻辑:尝试从用户输入中提取城市;如果失败,则调用get_user_location_from_profileTool。
    • 输出:确定的城市名。
  2. Skill:FetchWeatherSkill:
    • 逻辑:调用get_weather_by_cityTool。
    • 输出:结构化的天气数据。
  3. Skill:RecommendSkill:
    • 逻辑:调用query_clothing_knowledge_baseTool,并结合一些文本生成逻辑,产出建议。
    • 输出:自然语言建议。

步骤三:将Skill部署为MCP Server(引入协议)我们不直接把Skill硬编码到Agent里,而是将其放到MCP Server上,让Agent通过协议来调用。

  1. 创建一个LifeAssistantMCPServer项目。
  2. 将上述三个Skill作为Tools注册到这个MCP Server中(在MCP语境下,Skill和Tool常被统称为“Tools”暴露出去)。
  3. 启动这个MCP Server,它会在一个本地端口(如8080)提供服务,并按照MCP协议告知外界它提供了哪些Tools。

步骤四:构建主Agent(大脑与指挥官)

  1. 选择或编写一个Agent核心。这个核心是一个大语言模型(LLM),并具备规划、决策能力(通过精心设计的提示词实现)。
  2. 在Agent配置中,将其设置为一个MCP Client,并让它连接到我们刚启动的LifeAssistantMCPServer(地址http://localhost:8080)。
  3. Agent启动时,会自动从Server拉取可用的Tools列表(即我们的三个Skill)。

步骤五:任务执行与交互用户提问:“今天该怎么穿?”

  1. Agent规划:模型根据提示词思考:“这是一个穿搭推荐问题,我需要先知道位置和天气。”
  2. Agent决策与调用:模型查看从MCP Server获取的Tool列表,发现DetermineLocationSkillFetchWeatherSkill。它决定先调用DetermineLocationSkill注意:此时Agent不是直接执行代码,而是按照MCP协议,向Server发送一个格式化的请求,请求执行DetermineLocationSkill
  3. MCP Server执行LifeAssistantMCPServer收到请求,在其内部执行对应的Skill逻辑(即先尝试从用户输入提取,不行就调Tool查配置),然后将执行结果按照MCP协议格式返回给Agent。
  4. Agent继续决策:Agent收到位置信息(如“北京”),接着决定调用FetchWeatherSkill,并传入参数city=北京。再次通过MCP协议发出请求。
  5. Server再次执行:Server调用天气API,返回天气数据。
  6. Agent生成最终动作:Agent获得天气数据后,意识到信息已齐全,于是调用RecommendSkill。最后,它将RecommendSkill返回的建议稍作整理,生成最终答案给用户。

这个流程的关键提升:

  • 灵活性:如果明天我要增加一个“交通状况查询”功能,我只需要在LifeAssistantMCPServer上注册一个新的Skill,然后重启Agent(或热重载配置),Agent就能自动获得这个新能力,无需修改Agent的核心代码。
  • 复用性:这个LifeAssistantMCPServer可以被其他任何支持MCP的AI应用使用,比如另一个“旅行规划Agent”。
  • 维护性:Tool/Skill的升级、BUG修复都在Server端进行,所有连接的Client自动受益。

4. 常见误区、问题排查与选型建议

在实际开发和社区交流中,我遇到了很多关于这些概念的困惑和实际问题。

4.1 概念辨析与常见误区

误区一:Agent就是一个自动化的Tool调用链。

  • 辨析:这是最常见的误解。一个简单的、按固定顺序调用Tool的脚本(Workflow或Chain)不是真正的Agent。真正的Agent必须具备在未知情况下的决策能力。比如,用户说“我有点感冒”,一个真正的Agent应该能自主判断“感冒了可能需要关注天气,并且建议穿暖和点”,从而主动去调用天气查询和穿搭建议工具。而固定流程的脚本,如果没设计这个分支,就无法处理。

误区二:Skill和Tool可以混用,没区别。

  • 辨析:在简单场景或某些框架里,它们可能被等同对待。但从设计哲学上看,Tool是技术实现,Skill是业务抽象。当你思考“我需要让AI能做什么”时,你是在定义Skill(如“翻译文档”)。当你思考“我如何实现这个功能”时,你是在寻找或开发Tool(如“调用DeepL API”)。一个复杂的Skill可能由多个Tool和逻辑判断组成。

误区三:用了MCP,就不需要关心Agent的规划能力了。

  • 辨析:大错特错。MCP只是解决了“工具怎么被发现和调用”的管道问题。而“在什么时机、因为什么原因、选择调用哪个工具”这个核心的决策问题,依然依赖于Agent本身(即其背后的LLM)的规划与推理能力。MCP让你有了更强大的武器库,但如何指挥打仗,还是靠Agent这个“大脑”。提示词工程、思维链(CoT)、ReAct模式等,依然是提升Agent性能的关键。

误区四:我必须为每个小功能都写一个MCP Server。

  • 辨析:不必过度设计。MCP Server旨在管理一组相关的、可复用的资源。你可以有一个“通用工具MCP Server”,里面包含搜索、计算、时间、天气等常用工具。也可以有专门的“数据分析MCP Server”、“创意设计MCP Server”。根据项目复杂度和团队分工来决定。对于个人小项目,一个Server包含所有Tools也是完全可行的。

4.2 典型问题排查实录

在开发基于这些概念的AI应用时,你肯定会遇到下面这些问题:

问题1:Agent拒绝调用Tool,总是说“作为AI,我无法...”

  • 根因:99%是System Prompt(系统提示词)没写好,或者Tool的描述(description)不够清晰。
  • 排查步骤
    1. 检查System Prompt:你是否明确授权并鼓励模型使用工具?提示词中应有类似“你是一个助手,可以调用以下工具来帮助用户。当你需要信息或执行操作时,应优先考虑调用工具。”的指令。
    2. 检查Tool描述description是否用模型能理解的语言准确描述了工具的功能和适用场景?用“获取天气”而不是“调用天气接口”。说明输入参数的意义,如“city参数需要城市的中文名或拼音”。
    3. 简化测试:先只给Agent一个最简单、最明确的Tool(如“两数相加计算器”),看它是否会调用。逐步增加复杂度。

问题2:Agent陷入循环,反复调用同一个Tool

  • 根因:Agent的“反思”环节薄弱,或者Tool的返回结果未能提供足够信息让Agent推进到下一步。
  • 解决方案
    1. 增强反思提示:在System Prompt中加入“在每次行动后,评估结果是否解决了问题。如果已经解决,请给出最终答案;如果未解决,请分析原因并尝试其他方法。”
    2. 优化Tool输出:确保Tool的返回结果结构化、信息丰富。例如,天气Tool不要只返回“晴”,而是返回{“condition”: “晴”, “temperature”: 25, “suggestion”: “适宜户外活动”}。更多的信息能帮助模型做出更准确的下一步决策。
    3. 设置调用限制:在Agent框架中,通常可以设置最大Tool调用次数,防止死循环。

问题3:MCP Client连接Server失败,或找不到Tools

  • 根因:网络、配置或协议版本问题。
  • 排查清单
    1. Server是否在运行curl http://localhost:端口看是否有响应。
    2. Client配置是否正确:检查Client配置文件中MCP Server的地址、端口、传输方式(stdio/SSE)是否正确。
    3. 协议兼容性:确认Client和Server使用的MCP协议版本是否兼容。这是一个较新的协议,版本迭代可能带来不兼容。
    4. 查看日志:同时查看Server和Client的日志,通常会有详细的错误信息。

问题4:上下文窗口爆炸,特别是Tool描述太多时

  • 根因:将所有Tool的详细描述一次性全部塞入系统提示词,导致有效对话长度被严重压缩。
  • MCP的解决方案:这正是MCP要解决的核心问题之一。利用MCP的“资源”概念,Client可以只获取当前可能需要的Tool的描述,或者只获取Tool的“索引”(名称和简要说明),待需要时再获取详细描述。
  • 非MCP的折中方案:对Tool进行分组和摘要。提供一个精简的Tool菜单,只包含工具名和一句话功能。在模型表示要使用某个工具时,再动态地将该工具的详细描述插入上下文。

4.3 技术选型与学习路径建议

面对众多的框架(LangChain, LlamaIndex, AutoGen, LangGraph, CrewAI…)和概念,新手容易眼花缭乱。

我的建议是分三步走:

第一步:夯实基础,理解本质(1-2周)

  • 目标:抛开所有框架,用手写代码理解核心流程。
  • 实践:用OpenAI API或开源LLM(如Qwen、DeepSeek),手动定义几个Tool的函数和描述,写一个简单的循环,让模型根据用户问题决定调用哪个Tool,并解析结果。你会深刻理解Function Calling、提示词工程和ReAct模式。
  • 关键收获:明白Agent的核心是LLM的规划决策能力,框架只是辅助。

第二步:选用一个主流框架深化(2-3周)

  • 推荐LangChainLlamaIndex。它们生态最成熟,资料最多,社区最活跃。
  • 实践:用LangChain的ToolAgentChain模块重构你第一步的项目。学习它如何管理工具、组织提示模板、处理记忆。
  • 关键收获:掌握如何用框架高效地组织代码,管理复杂的工作流。

第三步:探索高级模式与协议(持续)

  • 深入Agent:在熟悉基础框架后,探索LangGraph来构建有状态、带循环的复杂Agent,或尝试AutoGen来设计多智能体对话场景。
  • 拥抱MCP:当你的工具集变得庞大,或者需要跨项目复用时,开始学习MCP。从为你的项目创建一个简单的MCP Server开始,尝试让Claude Desktop或Cursor连接它。这是面向未来的技能。
  • 关注新兴框架:像CrewAIHermes Agent等,了解它们解决的问题域(如角色扮演、特定模型优化),拓宽视野。

选型心法:没有最好的,只有最合适的

  • 如果你的项目是简单的文档问答,LlamaIndex的检索能力是强项。
  • 如果你的项目是定义清晰的自动化流程,LangChain的Chain和LangGraph是不错的选择。
  • 如果你的项目模拟一个团队(销售、客服、工程师)协作,CrewAI的概念更贴切。
  • 如果你追求极致的轻量和控制,或者框架都不满足需求,回归本质,基于好的提示词和MCP协议自研核心调度器,可能是更优解。

最后,记住一点:所有这些概念和技术都在快速演进。今天的“最佳实践”明天可能就过时了。因此,理解底层原理(LLM如何决策、工具如何调用、上下文如何管理)比熟练使用某个特定框架更重要。保持动手实践,多读优质开源项目的代码,你就能在这个浪潮中站稳脚跟。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/11 3:58:35

SAP混合架构下Fiori Launchpad内容整合技术解析

1. 项目概述:混合架构下的内容整合挑战在数字化转型浪潮中,企业系统架构往往呈现混合形态——既有本地部署的SAP ERP系统,又有基于SAP Business Technology Platform (BTP)的云端应用。这种架构虽然灵活,却带来了用户体验碎片化的…

作者头像 李华
网站建设 2026/8/11 3:56:44

从零自制全能游戏U盘:基于Batocera打造便携复古游戏系统

最近在拼多多上花98元入手了一个号称“迷你USB游戏U盘”的小玩意儿,到手后发现它远不止一个简单的游戏ROM合集。它本质上是一个预装了多平台模拟器和海量游戏的便携系统,插上电视或电脑就能玩,从经典的街机到PSP上的《实况足球2023》都能流畅…

作者头像 李华
网站建设 2026/8/11 3:56:24

# 如何将包含 Document 对象的字符串转换为 List[Document]?

如何将包含 Document 对象的字符串转换为 List[Document]? 问题背景 在 LangChain 开发中,我们经常需要处理 Document 对象。但有时候你会拿到一个"看起来像列表、实际上是字符串"的东西——比如从数据库读取、从 API 返回、或从日志中提取的…

作者头像 李华
网站建设 2026/8/11 3:56:12

每一步都合理,但结果是错的——企业AI落地的真实困境

我见过一次很典型的失败。一个团队做了一个采购助手,让采购员用自然语言提交补货需求。背后接了公司的库存系统,用Function Calling让模型决定调哪个接口。测试阶段跑了几十个case,结果看起来都对,上线了。上线三天之后&#xff0…

作者头像 李华
网站建设 2026/8/11 3:52:45

知网维普AIGC检测新标准怎么过?2026论文降AI合规改写指南

一、前言:新版AIGC检测下,所有学生都面临的写作困境随着高校学术规范管控升级,知网AIGC 4.0检测系统、维普全新重构版AI检测算法已全面落地应用。和旧版只检测文字重复率不同,新算法主打深层语义识别、行文风格研判、逻辑结构筛查…

作者头像 李华