当前位置: 首页 > news >正文

A2A + MCP:构建实用人工智能系统的超强组合

构建真正有效的连接型人工智能系统的挑战

如果你正在构建人工智能应用,这种情况可能听起来很熟悉:

你需要特定的人工智能能力来解决业务问题。你找到了完成每个单独任务的出色工具。但把所有东西连接在一起却占据了大部分开发时间,还创建了一个脆弱的系统,一旦有任何更改就会崩溃。

好消息是,有一个今天就能用的实用解决方案。

A2A + MCP:完美组合

在这里插入图片描述

这两个协议协同工作,解决了完整的集成挑战:

A2A(智能体到智能体) 就像是智能体的社交网络。它让它们可以直接相互沟通和协作。想象一下,你的日历智能体可以自动与你的旅行智能体协调,当航班延误时重新安排会议。

MCP(模型上下文协议) 更像是一个通用适配器。它为人工智能模型提供了标准化的方式以访问工具和数据源。它使得你的智能助手能够轻松地查看天气或搜索知识库。

A2A 处理智能体之间的通信,而 MCP 将智能体连接到它们的工具。

它们共同创建了一个清晰的双层架构,这将为你节省数百小时的开发时间。

示例图

展示如何结合 a2a 和 mcp 的示例

构建你的第一个 MCP 服务器

让我们从实际操作开始:创建一个暴露有用工具的 MCP 服务器。它有多简单,看看就知道了:

from python_a2a.mcp import FastMCP, text_response# 创建一个新的 MCP 服务器
calculator_mcp = FastMCP(name="Calculator MCP",version="1.0.0",description="Provides mathematical calculation functions"
)
# 使用简单的装饰器和类型提示定义工具
@calculator_mcp.tool()
def add(a: float, b: float) -> float:"""将两个数字相加。"""return a + b
@calculator_mcp.tool()
def subtract(a: float, b: float) -> float:"""从 a 中减去 b。"""return a - b
@calculator_mcp.tool()
def multiply(a: float, b: float) -> float:"""将两个数字相乘。"""return a * b
@calculator_mcp.tool()
def divide(a: float, b: float) -> float:"""将 a 除以 b。"""if b == 0:return text_response("Cannot divide by zero")return a / b
# 运行服务器
if __name__ == "__main__":calculator_mcp.run(host="0.0.0.0", port=5001)

就这样——你创建了一个暴露数学运算作为标准化工具的 MCP 服务器。注意类型提示和文档字符串是如何自动成为工具接口的一部分的,这使得它们具有自我说明性。

将 MCP 工具连接到 A2A 智能体

现在,让我们创建一个使用这些 MCP 工具的 A2A 智能体:

from python_a2a import A2AServer, Message, TextContent, MessageRole, run_server
from python_a2a.mcp import FastMCPAgentclass CalculatorAgent(A2AServer, FastMCPAgent):"""使用 MCP 工具的计算器智能体。"""def __init__(self):# 初始化父类A2AServer.__init__(self)FastMCPAgent.__init__(self,mcp_servers={"calc": "http://localhost:5001"}  # 连接到我们的 MCP 服务器)async def handle_message_async(self, message):"""处理消息并使用 MCP 工具。"""try:if message.content.type == "text":text = message.content.text.lower()# 从消息中提取数字import renumbers = [float(n) for n in re.findall(r"[-+]?\d*\.?\d+", text)]if len(numbers) >= 2:# 确定要执行的操作if "add" in text or "plus" in text or "+" in text:# 调用 MCP 工具执行计算result = await self.call_mcp_tool("calc", "add", a=numbers[0], b=numbers[1])return Message(content=TextContent(text=f"The sum of {numbers[0]} and {numbers[1]} is {result}"),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)elif "subtract" in text or "minus" in text or "-" in text:result = await self.call_mcp_tool("calc", "subtract", a=numbers[0], b=numbers[1])return Message(content=TextContent(text=f"The difference between {numbers[0]} and {numbers[1]} is {result}"),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)# 添加其他操作...# 默认响应return Message(content=TextContent(text="I'm a calculator agent. You can ask me to add, subtract, multiply, or divide numbers."),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)except Exception as e:# 处理错误return Message(content=TextContent(text=f"Error: {str(e)}"),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)
# 运行智能体
if __name__ == "__main__":agent = CalculatorAgent()run_server(agent, host="0.0.0.0", port=5000)

现在你有了一个使用 MCP 工具的 A2A 智能体。用户可以用自然语言与这个智能体互动,比如问“5 加 3 等于多少?”智能体会调用相应的 MCP 工具来计算答案。

这种做法的美妙之处在于清晰的分离:

  • MCP 服务器专注于提供计算能力
  • A2A 智能体处理自然语言理解和用户互动
  • 它们之间的连接是标准化的且无状态的

完整的实用示例:股票信息查询系统

现在让我们构建一个更有用的东西:一个帮助用户查找股票价格的股票信息查询系统,即使他们不知道股票代码也能查到。

1. 为特定工具创建 MCP 服务器

首先,我们将为两个关键能力创建 MCP 服务器:

# DuckDuckGo MCP 服务器,用于查找股票代码
duckduckgo_mcp = FastMCP(name="DuckDuckGo MCP",version="1.0.0",description="搜索功能,用于查找股票信息"
)@duckduckgo_mcp.tool()
def search_ticker(company_name: str) -> str:"""使用 DuckDuckGo 搜索查找公司的股票代码。"""# 实现细节(简化版)import requestsimport requery = f"{company_name} stock ticker symbol"url = f"https://api.duckduckgo.com/?q={query}&format=json"response = requests.get(url)data = response.json()# 从结果中提取代码# 查找类似“NYSE: AAPL”或“NASDAQ: MSFT”的模式text = data.get("Abstract", "")ticker_match = re.search(r'(?:NYSE|NASDAQ):\s*([A-Z]+)', text)if ticker_match:return ticker_match.group(1)# 为了演示目的,回退到常见代码if company_name.lower() == "apple":return "AAPL"elif company_name.lower() == "microsoft":return "MSFT"# 等等...return f"Could not find ticker for {company_name}"
# 在端口 5001 上运行此服务器
duckduckgo_mcp.run(port=5001)  # 在真实应用中,将其作为单独的进程运行# YFinance MCP 服务器,用于股票价格数据
yfinance_mcp = FastMCP(name="YFinance MCP",version="1.0.0",description="股票市场数据工具"
)@yfinance_mcp.tool()
def get_stock_price(ticker: str) -> dict:"""获取给定股票代码的当前股票价格。"""# 实现细节import yfinance as yftry:# 获取股票数据stock = yf.Ticker(ticker)data = stock.history(period="1d")if data.empty:return {"error": f"No data found for ticker {ticker}"}# 提取价格price = data['Close'].iloc[-1]return {"ticker": ticker,"price": price,"currency": "USD","timestamp": data.index[-1].strftime('%Y-%m-%d %H:%M:%S')}except Exception as e:return {"error": f"Error fetching stock data: {str(e)}"}
# 在端口 5002 上运行此服务器
yfinance_mcp.run(port=5002)  # 在真实应用中,将其作为单独的进程运行
2. 创建使用这些 MCP 工具的 A2A 智能体

现在让我们创建暴露这些能力的 A2A 智能体:

# DuckDuckGo 智能体,用于查找股票代码
class DuckDuckGoAgent(A2AServer, FastMCPAgent):"""查找股票代码的智能体。"""def __init__(self):A2AServer.__init__(self)FastMCPAgent.__init__(self,mcp_servers={"search": "http://localhost:5001"})async def handle_message_async(self, message):if message.content.type == "text":# 从消息中提取公司名称import recompany_match = re.search(r"ticker\s+(?:for|of)\s+([A-Za-z\s]+)", message.content.text, re.I)if company_match:company_name = company_match.group(1).strip()else:# 默认使用整个消息company_name = message.content.text.strip()# 调用 MCP 工具查找代码ticker = await self.call_mcp_tool("search", "search_ticker", company_name=company_name)return Message(content=TextContent(text=f"The ticker symbol for {company_name} is {ticker}."),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)# 处理其他消息类型或错误return Message(content=TextContent(text="I can help find ticker symbols for companies."),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)
# 在端口 5003 上运行此智能体
run_server(DuckDuckGoAgent(), port=5003)  # 在真实应用中,将其作为单独的进程运行
# YFinance 智能体,用于股票价格
class YFinanceAgent(A2AServer, FastMCPAgent):"""提供股票价格信息的智能体。"""def __init__(self):A2AServer.__init__(self)FastMCPAgent.__init__(self,mcp_servers={"finance": "http://localhost:5002"})async def handle_message_async(self, message):if message.content.type == "text":# 从消息中提取代码import reticker_match = re.search(r"\b([A-Z]{1,5})\b", message.content.text)if ticker_match:ticker = ticker_match.group(1)# 调用 MCP 工具获取价格price_info = await self.call_mcp_tool("finance", "get_stock_price", ticker=ticker)if "error" in price_info:return Message(content=TextContent(text=f"Error getting price for {ticker}: {price_info['error']}"),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)return Message(content=TextContent(text=f"{ticker} is currently trading at {price_info['price']:.2f} {price_info['currency']}."),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)# 处理其他消息类型或错误return Message(content=TextContent(text="I can provide stock price information for ticker symbols."),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)
# 在端口 5004 上运行此智能体
run_server(YFinanceAgent(), port=5004)  # 在真实应用中,将其作为单独的进程运行
3. 创建一个协调器来整合这些能力

最后,让我们创建一个股票助手,整合这些专业智能体,提供无缝体验:

from python_a2a import A2AClient, Message, TextContent, MessageRole, OpenAIA2AServer, run_server
import re
import osclass StockAssistant(OpenAIA2AServer):"""一个股票信息助手,协调专业智能体。"""def __init__(self, api_key, duckduckgo_endpoint, yfinance_endpoint):# 初始化 OpenAI 驱动的智能体super().__init__(api_key=api_key,model="gpt-3.5-turbo",system_prompt=("You are a helpful financial assistant that helps users get stock information. ""You extract company names from user queries to find ticker symbols and prices."))# 创建连接到专业智能体的客户端self.duckduckgo_client = A2AClient(duckduckgo_endpoint)self.yfinance_client = A2AClient(yfinance_endpoint)def handle_message(self, message):"""覆盖以拦截股票相关查询。"""if message.content.type == "text":text = message.content.text.lower()# 检查这是否是股票价格查询if ("stock" in text or "price" in text or "trading" in text) and any(company in text for company in ["apple", "microsoft", "google", "amazon", "tesla", "facebook", "meta"]):# 将其作为股票查询处理return self._get_stock_info(message)# 对于所有其他消息,委托给 OpenAIreturn super().handle_message(message)def _get_stock_info(self, message):"""通过协调专业智能体处理股票信息查询。"""try:# 首先,使用 OpenAI 提取公司名称openai_response = super().handle_message(Message(content=TextContent(text=f"Extract only the company name from this query: '{message.content.text}'. "f"Return ONLY the company name, nothing else."),role=MessageRole.USER))company_name = openai_response.content.text.strip()company_name = company_name.strip('"\'.,')# 第一步:从 DuckDuckGo 智能体获取股票代码ticker_message = Message(content=TextContent(text=f"What's the ticker for {company_name}?"),role=MessageRole.USER)ticker_response = self.duckduckgo_client.send_message(ticker_message)# 从响应中提取代码ticker_match = re.search(r'ticker\s+(?:symbol\s+)?(?:for\s+[\w\s]+\s+)?is\s+([A-Z]{1,5})',ticker_response.content.text, re.I)if not ticker_match:return Message(content=TextContent(text=f"I couldn't find the ticker symbol for {company_name}."),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)ticker = ticker_match.group(1)# 第二步:从 YFinance 智能体获取股票价格price_message = Message(content=TextContent(text=f"What's the current price of {ticker}?"),role=MessageRole.USER)price_response = self.yfinance_client.send_message(price_message)# 返回合并后的信息return Message(content=TextContent(text=f"{company_name} ({ticker}): {price_response.content.text}"),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)except Exception as e:# 处理任何错误return Message(content=TextContent(text=f"Sorry, I encountered an error: {str(e)}"),role=MessageRole.AGENT,parent_message_id=message.message_id,conversation_id=message.conversation_id)
# 运行助手
if __name__ == "__main__":api_key = os.environ.get("OPENAI_API_KEY")if not api_key:print("Error: OPENAI_API_KEY environment variable is required")exit(1)assistant = StockAssistant(api_key=api_key,duckduckgo_endpoint="http://localhost:5003/a2a",yfinance_endpoint="http://localhost:5004/a2a")run_server(assistant, port=5000)
4. 创建一个简单的客户端供用户使用

最后,让我们创建一个客户端,方便用户与我们的系统互动:

from python_a2a import A2AClient, Message, TextContent, MessageRole
import argparsedef interactive_session(client):"""与股票助手的交互式会话。"""print("\n===== Stock Price Assistant =====")print("Type 'exit' or 'quit' to end the session.")print("Example queries:")print("  - What's the stock price of Apple?")print("  - How much is Microsoft trading for?")print("  - Get the current price of Tesla stock")print("=" * 50)while True:try:user_input = input("\n> ")if user_input.lower() in ["exit", "quit"]:print("Goodbye!")break# 以文本消息发送message = Message(content=TextContent(text=user_input),role=MessageRole.USER)print("Sending to assistant...")response = client.send_message(message)# 显示响应print(f"\nAssistant: {response.content.text}")except Exception as e:print(f"Error: {e}")print("Please try again or type 'exit' to quit.")
if __name__ == "__main__":parser = argparse.ArgumentParser(description="Stock Assistant Client")parser.add_argument("--endpoint", default="http://localhost:5000/a2a",help="Stock assistant endpoint URL")args = parser.parse_args()# 创建客户端client = A2AClient(args.endpoint)# 开始交互式会话interactive_session(client)

这种架构为你创造的价值

这种 A2A + MCP 架构今天就能带来实实在在的实用价值:

  1. 大幅减少集成工作:无需为每个服务编写自定义连接器——一切都能说同一种语言。
  2. 轻松替换组件:需要更好的数据源?只需插入一个新的智能体——协调器保持不变。
  3. 清晰的错误边界:每个智能体处理自己的错误,防止系统性故障。
  4. 简单可扩展:想添加历史数据?只需创建一个新的 MCP 工具,并通过新的或现有的智能体暴露它。
  5. 跨项目复用组件:那个 DuckDuckGo 智能体可以在任何需要搜索功能的项目中使用。

今天就能运行这个系统

你可以按照以下步骤今天就运行这个完整的股票信息查询系统:

设置你的环境

# 安装必要的包pip install "python-a2a[all]" yfinance requests

启动每个组件(在单独的终端中):

# 启动 MCP 服务器
python duckduckgo_mcp_server.py
python yfinance_mcp_server.py# 启动 A2A 智能体
python duckduckgo_agent.py
python yfinance_agent.py# 启动协调器(替换为你的 API 密钥) OPENAI_API_KEY=your_key_here
python stock_assistant.py  # 运行客户端 python stock_client.py

通过客户端与系统互动

> What's the current stock price of Apple?
Assistant: Apple (AAPL): AAPL is currently trading at 173.58 USD.

你可以立即解决的三个真实业务问题

这种架构模式可以立即解决许多业务问题。以下是三个例子:

1. 客户支持自动化

问题:支持团队需要访问多个后端系统来回答客户问题。

A2A + MCP 解决方案

  • 为每个后端系统创建 MCP 工具(订单、产品、运输)
  • 构建每个领域的专业 A2A 智能体
  • 创建一个协调器,路由问题并聚合答案

创造的价值

  • 支持代理可以在一个地方获得完整的信息
  • 后端系统保持隔离但可访问
  • 添加新的数据源无需重新训练整个系统
2. 文档处理流程

问题:处理文档需要多个专业步骤(OCR、提取、分类)。

A2A + MCP 解决方案

  • 为每个处理步骤创建 MCP 工具
  • 构建专门处理不同文档类型的 A2A 智能体
  • 创建一个协调器来管理工作流

创造的价值

  • 文档处理步骤之间有清晰的分离
  • 不同文档类型的专业处理
  • 容易添加对新文档格式的支持
3.研究助理:

问题:研究人员需要查询文献、分析数据并应用领域知识。

A2A + MCP 解决方案

  • 创建用于文献搜索、数据分析和领域特定计算的 MCP 工具。
  • 构建专门处理不同研究领域的 A2A 智能体。
  • 创建一个协调器来处理复杂的查询请求。

创造的价值

  • 研究人员可以从多个来源获得全面的答案。
  • 正确应用领域特定的计算。
  • 添加新的研究方法不会破坏现有功能。

如何构建你自己的 A2A + MCP 系统

你可以立即开始实现这种架构,只需按照以下步骤操作:

确定你的能力需求

  • 你需要哪些工具或数据源?
  • 涉及哪些专业领域知识?

为每种能力创建 MCP 工具

  • 定义清晰的接口,并使用类型提示。
  • 使用适当的错误处理。
  • 让每个工具专注于一种能力。

构建使用这些工具的 A2A 智能体

  • 每个智能体应专注于一个领域。
  • 使用 MCP 来访问工具。
  • 通过 A2A 暴露能力。

创建协调各个智能体的协调器

  • 路由查询请求到适当的智能体。
  • 将结果合并成连贯的响应。
  • 管理对话流程。

构建用户友好的客户端

  • 通过 A2A 连接到协调器。
  • 清晰地向用户展示信息。
  • 优雅地处理错误。

总结

A2A + MCP 不仅仅是一个理论架构,它是一个今天就可以实现的实用解决方案,用于解决真实业务问题。通过标准化智能体通信和工具集成,你可以构建出:

  • 模块化:易于扩展和维护。
  • 可靠:清晰的错误边界和稳健的通信。
  • 灵活:组件可以独立替换或升级。
  • 可复用:工具和智能体可以在多个项目中共享。

别再浪费时间构建自定义集成,A2A + MCP 已经提供了一个经过验证的解决方案。

今天就试试看吧

Python A2A 库现在已经完全支持 MCP。你可以立即开始使用:

pip install "python-a2a[mcp]"

查看 GitHub 上的完整示例,了解 A2A + MCP 的实际运行情况,或者使用本文中的代码构建你的第一个集成人工智能系统。

相关文章:

A2A + MCP:构建实用人工智能系统的超强组合

构建真正有效的连接型人工智能系统的挑战 如果你正在构建人工智能应用,这种情况可能听起来很熟悉: 你需要特定的人工智能能力来解决业务问题。你找到了完成每个单独任务的出色工具。但把所有东西连接在一起却占据了大部分开发时间,还创建了…...

全能 Sui 技术栈,构建 Web3 的未来

本文翻译自:FourPillarsFP,文章仅代表作者观点。 2025 年,SuiNetwork正在以一套全栈区块链策略强势出击,彻底打破加密行业的传统范式。正如 Mysten Labs 联合创始人 Adeniyi Abiodun 所说:“Sui 不只是一条区块链&…...

企业微信私域运营,基于http协议实现SCRM+AI完整解决方案

1、方案介绍 基于企业微信原生功能已实现全场景的能力覆盖,并提供标准化可直接调用的API接口,可以帮助企业轻松实现上层应用的开发及落地,方案采用模拟通信技术可实现PC,手机,ipad三端的同时在线,单服务器…...

【C++】Json-Rpc框架项目介绍(1)

项目介绍 RPC(Remote Procedure Call)即远程过程调用,是一种通过网络从远程计算机程序中请求服务而不需要了解底层网络实现细节的一种 协议 。 RPC(Remote Procedure Call)可以使用多种网络协议进行通信,如…...

数据结构图论基础知识(一)

文章目录 1. 图的基本概念2. 图的一些现实的应用2.1 ABCDE各个城市之间的关系2.2 社交关系 3. 图的存储结构3.1邻接矩阵3.2 邻接矩阵的实现3.3 邻接表 1. 图的基本概念 1. (graph)图由边(edge)和顶点(Vertex&#xff…...

安宝特案例 | AR如何大幅提升IC封装厂检测效率?

前言:如何提升IC封装厂检测效率? 在现代电子产品的制造过程中,IC封装作为核心环节,涉及到复杂处理流程和严格质量检测。这是一家专注于IC封装的厂商,负责将来自IC制造商的晶圆进行保护、散热和导通处理。整个制程繁琐…...

2024年ESWA SCI1区TOP:量子计算蜣螂算法QHDBO,深度解析+性能实测

目录 1.摘要2.蜣螂优化算法DBO原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 蜣螂优化算法是一种群体智能优化算法,具有较强的优化能力和快速收敛性,但容易在优化过程后期陷入局部最优解。本文提出了一种量子计算和多策略混合的蜣螂优化算法&am…...

数据结构*链表- LinkedList

什么是链表 相较于ArrayList顺序表来说,链表是物理存储结构上非连续存储结构(也就是地址不是连续的)。链表由一系列节点构成,每个节点包含数据和指向下一个节点的引用。链表的各个节点在内存里并非连续存储,而是通过引…...

WebRTC服务器Coturn服务器用户管理和安全性

1、概述 Coturn服务器对用户管理和安全方面也做了很多的措施,以下会介绍到用户方面的设置 1.1、相关术语 1.1.1 realm 在 coturn 服务器中,域(realm)是一种逻辑上的分组概念,用于对不同的用户群体、应用或者服务进行区…...

MySQL聚簇索引和非聚簇索引

聚簇索引(Clustered Index)和非聚簇索引(Non-Clustered Index)是数据库中常用的两种索引类型,它们在数据存储和检索方式上有显著的区别。 一、聚簇索引(Clustered Index) 聚簇索引是数据表中的…...

QT加入阿里云OSS上传图片SDK,编译报错:error LNK2019: 无法解析的外部符号 EVP_MD_CTX_init

参考此链接把OSS上传图片的SDK,cmake成lib库,如下图 将lib库放入自己的项目文件夹下,并在pro文件中添加此lib库。而解决 “无法解析的外部符号 EVP_MD_CTX_init” 问题,则需要将third_party文件夹下的一些依赖库和头文件都放到自己…...

正点原子TFTLCD扩展

声明:该文章代码是在正点原子教学下写出的LCD驱动代码上进行了修改能兼容更多字号( ˘ ˘)❤️ 如有侵权,请私信联系删除 文章目录 前言代码lcd.clcd.hfont.h 前言 由于TFTLCD4.3寸屏幕太大了,正点原子的代码只能显示12/16/24字号的字符或者…...

部署Megatron - LM,快速上手使用

安装Megatron - LM 首先检查一下当前环境是否已经有 NVIDIA 驱动和 CUDA: nvidia-smi 直接在当前环境安装运行 PyTorch 和 Megatron-LM不使用 Docker 之前我们看到目前的环境有 NVIDIA V100 GPU 和 CUDA 12.1,我们可以安装对应的 GPU 版本 PyTorch。…...

赛灵思 XC7K325T-2FFG900I FPGA Xilinx Kintex‑7

XC7K325T-2FFG900I 是 Xilinx Kintex‑7 系列中一款工业级 (I) 高性能 FPGA,基于 28 nm HKMG HPL 工艺制程,核心电压标称 1.0 V,I/O 电压可在 0.97 V–1.03 V 之间灵活配置,并可在 –40 C 至 100 C 温度范围内稳定运行。该器件提供…...

20.1Linux的PWM驱动实验(知识点)_csdn

PWM 是很常用到功能,我们可以通过 PWM 来控制电机速度,也可以使用 PWM 来控制LCD 的背光亮度。本章我们就来学习一下如何在 Linux 下进行 PWM 驱动开发。 在之前学过STM32的就知道这部分内容,利用占空比来调节电机的转速。 1、PWM 驱动简析 …...

如何在 Java 中从 PDF 文件中删除页面(教程)

由于 PDF 文件格式不是 Java 原生支持的,因此要从 PDF 中删除页面,你需要使用外部库。 本教程介绍如何使用 JPedal 来实现这一功能。 开始使用 • 将 JPedal 添加到你的类路径或模块路径中(可从官网下载安装试用版 JAR 文件) •…...

2026《数据结构》考研复习笔记五(栈、队列)

栈、队列 一、栈1.卡特兰数2.不合法的出栈序列 二、队列1.循环队列2.输入输出受限队列(四个数1234) 三、算法1.栈在括号匹配中的应用2.中缀表达式求值(通过转化为后缀表达式再后缀表达式求值)3.中缀表达式转化为后缀表达式4.后缀表…...

本地部署DeepSeek大模型

本地部署 ollama 下载Ollama ollama支持的模型:Ollama Search 直接下载,发现默认是下载C盘,并且不能选择安装目录,这对我C盘的压力太大了。 查阅资料:发现可以修改 参考将Ollama安装到非C盘路径_ollama不安装在c盘…...

C++ / 引用 | 类

引用本 作用&#xff1a; 给变量起别名 语法&#xff1a; 数据类型 & 别名 原名&#xff1b; 应用代码 #include <iostream>using namespace std;int main() {int a 10;int& b a;b 100;cout << "a " << a << endl;cout <…...

在任意路径下简单开启jupyter notebook

正常的开启方式为&#xff1a; 安装anaconda, 在anaconda界面开启jupyter. 但是启动后root的路径不好改变。 可以直接通过cmd方式打开jupyter. cd D: # cd到d盘 jupyter notebook # 启动此时开启jupyter notebook, root为D盘路径。 按此方式可以在任意路径启动jupyter noteb…...

2025年阿里云云计算ACP高级工程师认证模拟试题(附答案解析)

这篇文章的内容是阿里云云计算ACP高级工程师认证考试的模拟试题。 所有模拟试题由AI自动生成&#xff0c;主要为了练习和巩固知识&#xff0c;并非所谓的 “题库”&#xff0c;考试中如果出现同样试题那真是纯属巧合。 1、设计云上架构时&#xff0c;如果能充分了解云服务的特…...

锂电池4.2V升压24V推荐哪些升压芯片?高效率国产SL4013输入耐压2.7V-25V

SL4013作为一款高性能升压型DC-DC转换芯片&#xff0c;在单节锂电池&#xff08;4.2V&#xff09;升压至24V的应用中展现出以下核心优势&#xff1a; 一、宽输入电压适应性 SL4013支持2.7V-25V的输入范围&#xff0c;尤其适合单节锂电池&#xff08;3.7V-4.2V&#xff09;的宽…...

中电金信联合阿里云推出智能陪练Agent

在金融业加速数智化转型的今天&#xff0c;提升服务效率与改善用户体验已成为行业升级的核心方向。面对这一趋势&#xff0c;智能体与智能陪练的结合应用&#xff0c;正帮助金融机构突破传统业务模式&#xff0c;开拓更具竞争力的创新机遇。 在近日召开的阿里云AI势能大会期间&…...

基于扣子(Coze.cn)与火山引擎构建高性能智能体的实践指南

1. 引言 1.1. 背景与目标 人工智能&#xff08;AI&#xff09;智能体&#xff08;Agent&#xff09;平台的兴起&#xff0c;例如扣子&#xff08;Coze&#xff09;&#xff0c;正显著改变我们构建复杂 AI 应用的方式 1。这些平台旨在降低技术门槛&#xff0c;让不同技能水平的…...

w~视觉~3D~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/13766161 #Sin3DGen 最近有点忙 可能给忘了,贴了我只是搬运工 发这些给自己看, 还有下面不是隐藏是发布出去 ~ 北京大学xxx团队联合山东大学和xxx AI Lab的研究人员&#xff0c;提出了首个基于单样例场景无需训练便可生…...

SAS宏核心知识与实战应用

1. SAS宏基础 1.1 核心概念 1.1.1 宏处理器 宏处理器在SAS程序运行前执行,用于生成动态代码,可实现代码的灵活定制。 通过宏处理器,可基于输入参数动态生成不同的SAS代码,提高代码复用性。 1.1.2 宏变量 宏变量是存储文本值的容器,用&符号引用,如&var,用于存储…...

windows使用openssl生成IIS自签证书全流程

使用 OpenSSL 生成适用于 IIS 的证书&#xff0c;通常需要经过以下步骤&#xff1a;生成私钥、生成证书签名请求&#xff08;CSR&#xff09;、生成自签名证书或通过 CA 签名&#xff0c;最后将证书转换为 IIS 所需的 PFX 格式。以下是详细步骤&#xff1a; 1. 安装 OpenSSL …...

笔记本电脑研发笔记:BIOS,Driver,Preloader详记

在笔记本电脑的研发过程中&#xff0c;Driver&#xff08;驱动程序&#xff09;、BIOS&#xff08;基本输入输出系统&#xff09;和 Preloader&#xff08;预加载程序&#xff09;之间存在着密切的相互关系和影响&#xff0c;具体如下&#xff1a; 相互关系 BIOS 与 Preload…...

鸿蒙生态:鸿蒙生态校园行心得

&#xff08;个人观点&#xff0c;仅供参考&#xff09; 兄弟们&#xff0c;今天来浅浅聊一聊这次的设立在长沙的鸿蒙生态行活动。 老样子&#xff0c;我们先来了解一下这个活动&#xff1a; &#xff28;&#xff41;&#xff52;&#xff4d;&#xff4f;&#xff4e;&#x…...

云原生周刊:KubeSphere 平滑升级

开源项目推荐 Kagent Kagent 是一个开源的 K8s 原生框架&#xff0c;旨在帮助 DevOps 和平台工程师在 K8s 环境中构建和运行 AI 代理&#xff08;Agentic AI&#xff09;。与传统的生成式 AI 工具不同&#xff0c;Kagent 强调自主推理和多步骤任务的自动化执行&#xff0c;适…...

Uniapp:swiper(滑块视图容器)

目录 一、基本概述二、属性说明三、基本使用 一、基本概述 一般用于左右滑动或上下滑动&#xff0c;比如banner轮播图 二、属性说明 属性名类型默认值说明平台差异说明indicator-dotsBooleanfalse是否显示面板指示点indicator-colorColorrgba(0, 0, 0, .3)指示点颜色indicat…...

开源的自动驾驶模拟器

以下是目前主流的 ‌开源自动驾驶模拟器‌&#xff0c;适用于算法开发、测试和研究&#xff1a; ‌1. CARLA‌ ‌官网/GitHub‌: carla.org | GitHub‌许可证‌: MIT‌特点‌: 基于虚幻引擎&#xff08;Unreal Engine&#xff09;&#xff0c;提供高保真城市场景&#xff08;支…...

Uniapp:scroll-view(区域滑动视图)

目录 一、基本概述二、属性说明三、基本使用3.1 纵向滚动3.2 横向滚动 一、基本概述 scroll-view&#xff0c;可滚动视图区域。用于区域滚动。 二、属性说明 属性名类型默认值说明平台差异说明scroll-xBooleanfalse允许横向滚动scroll-yBooleanfalse允许纵向滚动 三、基本使…...

【漏洞复现】Struts2系列

【漏洞复现】Struts2系列 1. 了解Struts21. Struts2 S2-061 RCE &#xff08;CVE-2020-17530&#xff09;1. 漏洞描述2. 影响版本3. 复现过程 1. 了解Struts2 Apache Struts2是一个基于MVC设计模式的Web应用框架&#xff0c;会对某些标签属性&#xff08;比如 id&#xff09;的…...

洗车小程序系统前端uniapp 后台thinkphp

洗车小程序系统 前端uniapp 后台thinkphp 支持多门店 分销 在线预约 套餐卡等...

【RuleUtil】适用于全业务场景的规则匹配快速开发工具

一、RuleUtil 开发背景 1.1 越来越多&#xff0c;越来越复杂的业务规则 1、规则的应用场景多 2、规则配置的参数类型多&#xff08;ID、数值、文本、日期等等&#xff09; 3、规则的参数条件多&#xff08;大于、小于、等于、包含、不包含、区间等等&#xff09; 4、规则的结…...

多表查询之嵌套查询

目录 引言 一、标量嵌套查询 二、列嵌套查询 三、行嵌套查询 四、表嵌套查询 引言 1、概念 SQL语句中嵌套 select 语句&#xff0c;称为嵌套查询&#xff0c;又称子查询。嵌套查询外部的语句可以是 insert / update / delete / select 的任何一个。 嵌套…...

js原型链prototype解释

function Person(){} var personnew Person() console.log(啊啊,Person instanceof Function);//true console.log(,Person.__proto__Function.prototype);//true console.log(,Person.prototype.__proto__ Object.prototype);//true console.log(,Function.prototype.__prot…...

RK3588 ubuntu20禁用自带的TF卡挂载,并设置udev自动挂载

禁用系统的自动挂载&#xff08;udisks2&#xff09; sudo vim /etc/udev/rules.d/80-disable-automount.rules添加 ACTION"add", KERNEL"mmcblk1p1", ENV{UDISKS_IGNORE}"1"KERNEL“mmcblk1p1”&#xff1a;匹配设备名&#xff08;TF卡通常是…...

【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现

介绍 广义上讲&#xff0c;扩散模型是一种生成式深度学习模型&#xff0c;它通过学习到的去噪过程来创建数据。扩散模型有很多变体&#xff0c;其中最流行的通常是文本条件模型&#xff0c;它可以根据提示生成特定的图像。一些扩散模型&#xff08;例如 Control-Net&#xff0…...

AR/VR衍射光波导性能提升遇阻?OAS光学软件有方法

衍射波导准直系统设计案例 简介 在现代光学显示技术中&#xff0c;衍射光波导系统因其独特的光学性能和紧凑的结构设计&#xff0c;在增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;等领域展现出巨大的应用潜力。本案例聚焦于衍射波导准直系统&…...

联易融受邀参加上海审计局金融审计处专题交流座谈

近日&#xff0c;联易融科技集团受邀出席了由上海市审计局金融审计处组织的专题交流座谈&#xff0c;凭借其在供应链金融领域的深厚积累和创新实践&#xff0c;联易融为与会人员带来了精彩的分享&#xff0c;进一步加深现场对供应链金融等金融发展前沿领域的理解。 在交流座谈…...

【中级软件设计师】程序设计语言基础成分

【中级软件设计师】程序设计语言基础成分 目录 【中级软件设计师】程序设计语言基础成分一、历年真题二、考点&#xff1a;程序设计语言基础成分1、基本成分2、数据成分3、控制成分 三、真题的答案与解析答案解析 复习技巧&#xff1a; 若已掌握【程序设计语言基础成分】相关知…...

高并发抢券系统设计与落地实现详解

&#x1f4da; 目录 一、业务背景与系统目标 二、架构设计总览 三、热点数据预热与缓存设计 四、抢券逻辑核心 —— Redis Lua 脚本 五、抢券接口实现要点 六、结果同步机制设计 七、性能优化策略 八、总结 在电商系统中&#xff0c;抢券作为一种典型的秒杀业务场景&a…...

外商在国内宣传 活动|发布会|参展 邀请媒体

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体胡老师。 外商在国内开展宣传活动、发布会或参展时&#xff0c;邀请媒体是扩大影响力、提升品牌知名度的关键环节。 一、活动筹备阶段&#xff1a;选择具有实力且更有性价比的媒体服务商&#xff08…...

物联网 (IoT) 安全简介

什么是物联网安全&#xff1f; 物联网安全是网络安全的一个分支领域&#xff0c;专注于保护、监控和修复与物联网&#xff08;IoT&#xff09;相关的威胁。物联网是指由配备传感器、软件或其他技术的互联设备组成的网络&#xff0c;这些设备能够通过互联网收集、存储和共享数据…...

大模型面经 | 春招、秋招算法面试常考八股文附答案(四)

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

从零开始学习MySQL的系统学习大纲

文章目录 前言第一阶段&#xff1a;数据库与 MySQL 基础认知数据库基础概念MySQL 简介 第二阶段&#xff1a;MySQL 安装与环境搭建安装前的准备MySQL 安装过程安装后的配置 第三阶段&#xff1a;SQL 基础语法SQL 概述数据库操作数据表操作数据操作 第四阶段&#xff1a;SQL 高级…...

ycsb性能测试的优缺点

YCSB&#xff08;Yahoo Cloud Serving Benchmark&#xff09;是一个开源的性能测试框架&#xff0c;用于评估分布式系统的读写性能。它具有以下优点和缺点&#xff1a; 优点&#xff1a; 简单易用&#xff1a;YCSB提供了简单的API和配置文件&#xff0c;使得性能测试非常容易…...

Linux:简单自定义shell

1.实现原理 考虑下⾯这个与shell典型的互动&#xff1a; [rootlocalhost epoll]# ls client.cpp readme.md server.cpp utility.h [rootlocalhost epoll]# ps PID TTY TIME CMD 3451 pts/0 00:00:00 bash 3514 pts/0 00:00:00 ps ⽤下图的时间轴来表⽰事件的发⽣次序。其中时…...