基于MCP协议与Pydantic-AI构建智能代理:网页抓取与联网搜索实践
1. 项目概述一个基于MCP协议的智能代理工具最近在折腾AI应用开发发现一个挺有意思的项目来自GitHub上的malminhas/mcp。这是一个基于Python的智能代理工具核心是利用了Model Context ProtocolMCP协议和pydantic-ai库。简单来说它就像一个能帮你上网查资料、读文章并总结的AI小助手。你可以把它看作是一个命令行版的“AI研究员”给它一个网址它就能爬取内容并生成摘要给它一个问题它就能调用搜索引擎去查找答案然后用你指定的AI模型比如GPT-4o、Claude等来整理和呈现结果。对于需要快速信息搜集、内容分析或者只是想自动化一些研究流程的开发者来说这个工具提供了一个非常轻量且可定制的起点。这个项目的价值在于它把几个强大的能力封装在了一起一是通过MCP协议与AI模型交互的标准化能力二是网页内容抓取三是联网搜索。你不用自己从头去写HTTP请求、解析HTML、处理API调用和结果后处理这些繁琐的步骤它已经搭好了一个基础的框架。无论是想快速了解一篇长文的核心观点还是想对比不同AI模型对同一问题的回答风格或者为自己的项目集成一个智能信息检索模块这个mcp-agent都值得你花时间研究一下。接下来我会带你从零开始把这个项目跑起来并深入聊聊它的设计思路、使用技巧以及我实际使用中遇到的那些“坑”。2. 核心设计与架构解析2.1 为什么是MCP和Pydantic-AI要理解这个项目首先得弄明白它依赖的两个核心技术MCP和Pydantic-AI。这可不是随便选的两个库背后有清晰的考量。Model Context Protocol (MCP)可以理解为AI应用领域的“USB协议”。它的目标是标准化AI模型如GPT、Claude与外部工具、数据源之间的通信方式。在没有MCP之前如果你想让你的大模型调用一个计算器或者查询数据库你得为每个模型、每个工具写一套特定的适配代码非常麻烦且难以复用。MCP定义了一套通用的“服务器-客户端”模型工具端比如一个天气查询服务作为“MCP服务器”暴露出一系列标准化的功能称为“工具”而AI模型端作为“MCP客户端”可以通过统一的协议来发现并调用这些工具。malminhas/mcp这个项目里的mcp-agent.py本质上就是一个MCP客户端它创建了与“网页抓取”和“网络搜索”这两个工具服务器通信的代理。那么谁来负责构建这个能与MCP服务器对话的AI代理呢这就是Pydantic-AI出场的时候了。pydantic-ai是一个基于Pydantic的AI应用开发框架。Pydantic本身以数据验证和序列化闻名而pydantic-ai在此基础上提供了声明式定义AI代理Agent的能力。你可以用Python类和数据模型还是Pydantic的Model来清晰地定义你的代理有哪些工具可用通过MCP集成、系统提示词System Prompt是什么、期望的输入输出格式是怎样的。这让代码变得非常清晰和类型安全。在这个项目中开发者利用pydantic-ai快速构建了一个能理解用户指令“fetch这个URL”或“search这个关键词”、并懂得调用对应MCP工具的智能体。所以整个架构的流程是这样的用户通过命令行发出指令 -mcp-agent.py脚本解析指令 - 利用pydantic-ai创建一个AI代理实例 - 该代理通过MCP协议与后台运行的特定工具服务器如mcp-server-fetch通信 - 工具服务器执行实际任务抓取网页或调用Brave搜索API- 结果返回给代理 - 代理使用指定的AI模型如GPT-4o对结果进行处理总结、格式化- 最终呈现给用户。这个设计解耦了AI逻辑、工具执行和协议通信非常优雅。2.2 功能特性深度解读项目README里列出的几个特性每一个都值得展开说说。1. 网页内容抓取与总结这不仅仅是简单的requests.get()。一个健壮的抓取工具需要处理各种网站的反爬机制简单的User-Agent轮换、请求头设置、动态加载内容虽然这个基础版本可能没处理但架构允许扩展、HTML解析与正文提取去除导航栏、广告等噪音、编码问题以及超时重试。项目通过MCP服务器来封装这些复杂性用户只需关心URL和想要的摘要。AI总结的部分是关键你可以通过--system-prompt参数来精细控制摘要的风格比如“用三点总结”、“以技术报告格式输出”、“重点提取数据图表描述”等。2. Brave搜索集成为什么选择Brave Search而不是更常见的Google Custom Search或SerpAPI我推测有几个原因一是Brave Search以隐私保护为卖点API调用可能更简洁没有复杂的验证流程二是作为较新的搜索引擎其API可能对开发者更友好配额或费率有优势三是它返回的搜索结果相对干净结构化程度高便于AI解析。--count参数让你可以控制信息广度查简单事实可能只需要前3条做深度调研可能需要10条甚至更多。3. 多模型支持支持OpenAI、Anthropic和Groq三家主流提供商覆盖了从顶尖性能GPT-4o, Claude 3.5 Sonnet到高性价比/速度GPT-3.5-Turbo, Claude Haiku, Groq的Llama的频谱。这带来了巨大的灵活性。例如你可以用便宜的gpt-4o-mini做初筛和摘要只有当内容非常复杂时再换用gpt-4o做深度分析。Groq的API以其极快的推理速度著称适合对实时性要求高的搜索总结场景。4. 系统提示词自定义这是发挥AI能力的关键“旋钮”。默认的系统提示词可能只是“你是一个有帮助的助手”。但你可以将其改为“你是一个挑剔的技术评论员请批判性地总结以下文章指出其论据的薄弱环节”或者“你是一个面向小学生的知识讲解员请把以下内容变得简单有趣”。这个参数让同一个工具能适应从学术研究到内容创作的多种场景。3. 从零开始的详细部署与配置指南3.1 环境准备与依赖安装首先你需要一个像样的Python环境。我强烈建议使用Python 3.10或更高版本因为一些较新的异步特性或依赖包可能要求这个版本以上。为了避免污染全局环境使用虚拟环境是必须的。我习惯用venv当然conda或pipenv也行。# 1. 克隆项目代码 git clone https://github.com/malminhas/mcp.git cd mcp # 2. 创建并激活虚拟环境以venv为例 python -m venv .venv # 在Windows上激活 # .venv\Scripts\activate # 在macOS/Linux上激活 source .venv/bin/activate # 3. 安装项目依赖 pip install -r requirements.txt安装过程如果顺利你会看到一堆包被安装核心包括pydantic-ai,httpx,pydantic的新版本等。这里有个注意事项requirements.txt文件里可能指定了某些依赖的具体版本。如果安装失败报错提示某个包版本冲突你可以尝试先不指定版本安装核心包pydantic-ai然后再安装剩下的。# 如果遇到版本冲突可以尝试 pip install pydantic-ai pip install -r requirements.txt --no-deps # 谨慎使用可能会缺依赖 # 或者更好的方式是检查并更新requirements.txt中的版本约束3.2 关键API密钥的获取与配置这个工具需要两个外部服务的API密钥才能工作OpenAI或其他AI模型提供商和Brave Search。没有它们工具就是“巧妇难为无米之炊”。1. OpenAI API密钥访问 platform.openai.com 注册或登录。点击右上角个人头像选择“View API keys”。点击“Create new secret key”为其命名例如“mcp-agent”然后复制生成的密钥。注意这个密钥只显示一次务必妥善保存。如果你打算使用Anthropic或Groq的模型则需要去对应平台 console.anthropic.com , console.groq.com 创建密钥过程类似。在配置时环境变量名可能需要相应调整例如ANTHROPIC_API_KEY这取决于mcp-agent.py代码中具体是如何读取的。通常这类工具会使用OPENAI_API_KEY作为通用键名但实际可以用于配置其客户端的基URL和密钥。2. Brave Search API密钥访问 brave.com/search/api 。点击“Get Started”或“Get API Key”。你需要注册一个Brave开发者账户。在仪表板中你应该可以创建一个新的API密钥。Brave Search API有免费额度对于个人和小规模使用通常足够了。复制生成的API密钥。3. 配置环境变量项目要求将密钥放在一个名为local.env的文件中。这是一个好习惯避免了将敏感信息硬编码在脚本里或通过命令行传递。# 在项目根目录mcp/文件夹内创建或编辑local.env文件 # 使用你喜欢的文本编辑器例如nano, vim, 或直接echo echo OPENAI_API_KEYsk-your-actual-openai-key-here local.env echo BRAVE_API_KEYBSA-your-actual-brave-key-here local.env重要安全提示务必确保.env或local.env文件被添加到.gitignore中防止不小心将密钥提交到公开仓库。项目自带的.gitignore应该已经包含了这一项但请再次确认。永远不要在任何公开场合分享你的local.env文件内容。3.3 首次运行验证与常见安装问题排查配置完成后让我们跑一个最简单的命令来验证一切是否正常。# 尝试获取帮助信息这通常不需要实际调用API python mcp-agent.py --help如果能看到fetch、search等子命令的说明说明基础脚本加载没问题。接下来用一个公开的、简单的URL做测试避免触发复杂的反爬。# 使用默认的gpt-4o模型会消耗少量OpenAI额度 python mcp-agent.py fetch https://httpbin.org/htmlhttpbin.org是一个测试网站返回简单的HTML。如果一切顺利你会看到脚本输出它正在启动MCP服务器、创建代理然后输出一个对那个简单网页内容的摘要。这个过程可能会花上十几秒因为需要启动本地服务器、与OpenAI API通信。可能遇到的问题及解决方案ModuleNotFoundError: No module named pydantic_ai或类似错误原因虚拟环境未激活或依赖未正确安装。解决确认命令行提示符前有(.venv)字样。重新运行pip install -r requirements.txt。检查Python版本是否符合要求。Error loading .env file或 API密钥未找到原因local.env文件不在当前执行目录或文件名不对或格式有误。解决确保在mcp/目录下执行命令。检查local.env文件是否存在且内容为KEYvalue格式每行一个没有多余的空格或引号除非值本身包含空格。OpenAI API认证错误 (401或Invalid API Key)原因API密钥错误、过期或所在区域不支持。解决登录OpenAI平台确认密钥有效且未过期。如果你所在地区无法直接访问OpenAI可能需要配置代理但注意工具本身可能不直接提供代理设置你可能需要设置系统级的HTTP代理环境变量如HTTP_PROXY,HTTPS_PROXY或者修改代码中HTTP客户端的配置。注意此处仅讨论技术上的网络配置问题不涉及任何违反规定的行为。Brave Search API 错误 (429或403)原因超出免费额度、密钥无效或请求过快。解决登录Brave开发者控制台检查配额和密钥状态。免费额度通常足够个人测试。如果是速率限制在代码中添加请求间隔time.sleep可能有必要但这需要修改工具服务器代码。uvx相关错误原因项目使用uvx来启动MCP服务器。uvx是uv包管理器的一个组件用于快速运行远程Python工具。如果未安装uv可能会失败。解决根据pydantic-ai和MCP的依赖有时需要全局安装uv。尝试运行pip install uv或在全局安装pipx install uv。如果错误持续查看脚本中创建MCP服务器的命令可能可以替换为直接使用本地Python模块的方式但这需要更深入的代码修改。4. 核心功能实操与高级用法4.1 网页抓取与摘要生成实战fetch命令是工具的核心功能之一。它的基本用法很简单但通过参数调整可以应对不同场景。基础用法python mcp-agent.py fetch https://example.com/blog/article这会使用默认模型gpt-4o和默认系统提示词抓取文章并生成一个通用摘要。进阶参数调节更换模型以平衡成本与效果如果你抓取的是一篇技术白皮书需要深度理解就用--modelgpt-4o。如果只是抓取新闻快讯看个大意--modelgpt-4o-mini或--modelgpt-3.5-turbo能省下不少钱。python mcp-agent.py fetch https://techcrunch.com/xxx --modelgpt-4o-mini定制系统提示词以改变输出风格这是发挥创造力的地方。比如你想让AI提取文章中的所有数据python mcp-agent.py fetch https://report.com/data --system-prompt你是一个数据提取专家。请仔细阅读文章找出文中提到的所有数字、统计数据、百分比、日期并以清晰的表格形式列出包含‘指标’、‘数值’、‘上下文描述’三列。忽略其他文本。或者你想让它用特定的语言风格总结python mcp-agent.py fetch https://philosophy.com/essay --system-prompt请用中文以苏格拉底对话式的诘问风格总结这篇文章的核心论点并提出两个可能的反驳观点。实操心得与注意事项目标网站兼容性不是所有网站都能完美抓取。对于严重依赖JavaScript渲染的单页应用SPA如某些现代新闻网站或技术博客基础的抓取工具可能只能拿到一个几乎空的HTML骨架。这时你需要一个能执行JavaScript的“无头浏览器”工具如Playwright、Selenium。mcp-server-fetch目前可能不具备这个能力但MCP架构的美妙之处在于你可以寻找或自己实现一个更强大的“fetch”服务器来替换它。内容长度与Token限制AI模型有上下文长度限制。如果目标网页内容极长比如一本在线书籍抓取的内容可能会被截断导致摘要不完整。你需要关注模型的Token上限例如GPT-4o是128k并意识到抓取工具本身可能也有长度限制。对于超长内容更高级的策略是分块抓取、分块总结再进行归纳这需要额外的脚本逻辑。伦理与法律边界只抓取公开可用、且robots.txt允许抓取的内容。尊重版权不要用于大规模复制有版权的内容。摘要生成也应避免生成误导性或扭曲原意的内容。4.2 联网搜索与信息整合技巧search命令让你可以直接在命令行里进行智能搜索。这比打开浏览器、输入关键词、浏览多个结果、再自己整合信息要高效得多。基础搜索python mcp-agent.py search Python asyncio最佳实践 2024默认返回5条结果并使用AI模型对这几条结果进行综合给出一个答案。你会看到它先打印出原始的搜索结果摘要来自Brave API然后是一个“ AI综合回答 ”的部分。控制搜索广度与深度使用--count参数增加结果数量获取更全面的信息。例如做竞品分析时可能需要10个结果。python mcp-agent.py search 最佳开源向量数据库对比 --count10结合--system-prompt来引导AI如何利用这些结果。例如你可以要求它对比python mcp-agent.py search Django vs FastAPI performance --system-prompt你是一个后端架构师。请基于以下搜索结果从性能、易用性、社区活跃度、适用场景四个维度以对比表格的形式分析Django和FastAPI。请注明信息来源于哪个结果链接。搜索质量优化技巧关键词构造AI搜索代理虽然智能但给搜索引擎的关键词依然是基础。使用更具体、更长的关键词往往能得到更相关的结果。例如搜索“Python logging config file example”比只搜“Python logging”要好得多。结果评估工具会返回原始的搜索结果摘要。不要完全依赖AI的综合回答尤其是对于需要高准确性的信息如医疗、法律建议。花几秒钟扫一眼这些原始摘要看看来源网站是否可靠官方文档、知名技术博客、Stack Overflow等。处理模糊或复杂查询对于非常开放或复杂的问题AI可能无法从有限的搜索结果中给出完美答案。这时可以将搜索拆分成多个子问题分步查询。例如想了解“如何用机器学习预测股票市场”可以先搜索“股票预测 机器学习 基础模型”再搜索“量化交易 特征工程”最后让AI综合。4.3 多模型切换与效果对比支持多个模型提供商是该项目的一大亮点。我们可以通过简单的--model参数来切换直观感受不同模型的特性。模型标识符解读gpt-4o: OpenAI当前的主力模型在推理、代码、多模态任务上表现均衡强大速度较快成本中等偏高。gpt-4o-mini: OpenAI的高性价比小模型响应速度极快成本很低适合简单任务。gpt-3.5-turbo: 经典的性价比之王对于不复杂的文本总结和搜索综合足够用但逻辑和指令跟随能力弱于GPT-4系列。claude-3-5-sonnet-latest: Anthropic的顶尖模型以长上下文、强大的逻辑推理和“诚实度”著称在需要深度分析、避免幻觉的场景下表现出色。claude-3-haiku-latest: Anthropic的快速、低成本模型响应速度快。groq:llama-3.3-70b-versatile: 通过Groq平台提供的Meta Llama 3.1 70B模型。Groq以其LPU语言处理单元硬件闻名推理速度极快几乎实时返回成本也很有竞争力。groq:deepseek-r1-distill-llama-70b: Groq提供的DeepSeek-R1蒸馏版模型在数学和推理任务上可能有所侧重。对比实验你可以对同一个任务用不同模型跑一遍对比输出。# 任务总结一篇关于可再生能源的短文 URLhttps://a-short-article-on-renewable-energy.example.com for MODEL in gpt-4o-mini gpt-4o claude-3-haiku-latest groq:llama-3.3-70b-versatile; do echo 使用模型: $MODEL python mcp-agent.py fetch $URL --model$MODEL 2/dev/null | tail -20 # 只看摘要部分 echo -e \n\n done通过对比你可能会发现gpt-4o和claude-3-5-sonnet的总结更细致、更有洞察力gpt-4o-mini和haiku速度飞快摘要基本准确但可能略粗糙groq的模型速度震撼答案质量也不错。根据你的任务对速度、成本和质量的权衡可以选择最合适的模型。注意使用不同模型的API密钥可能不同。你需要确保环境变量中设置了正确的API密钥。对于Groq你可能需要设置GROQ_API_KEY环境变量并在代码中指定使用Groq的客户端。这可能需要你查看mcp-agent.py的源码看它是如何根据模型名称选择客户端和API密钥的。通常的逻辑是如果模型名以groq:开头则使用Groq客户端和对应的密钥。5. 深入原理MCP服务器与代理的工作机制要真正玩转这个项目甚至基于它进行二次开发有必要了解一下MCP服务器和代理是如何协同工作的。虽然作为用户你可能不直接修改这些但理解它们能帮你更好地调试和想象扩展的可能性。5.1 MCP服务器工具的执行者当你运行python mcp-agent.py fetch ...时脚本内部会动态启动一个MCP服务器。从示例输出中可以看到一行Creating MCP server with command: uvx。uvx在这里用于快速启动一个名为mcp-server-fetch的包这个包就是一个实现了MCP协议的Python工具服务器。这个服务器的核心职责是注册工具向MCP运行时声明“我这里有这些工具可用”。对于fetch它可能注册了一个叫get_webpage_content的工具对于search可能注册了brave_web_search。实现工具逻辑当代理调用get_webpage_content(url)时服务器端的代码会执行发送HTTP请求到url处理响应解析HTML提取正文文本清理格式最后将纯文本内容返回。遵守MCP协议通过标准输入输出stdio或HTTP等传输方式以特定的JSON格式与客户端即pydantic-ai创建的代理进行通信。你可以把MCP服务器想象成一个“插件”。项目默认使用了uvx来拉取和运行社区中已经写好的通用服务器如mcp-server-fetch。但你完全可以自己编写或寻找其他MCP服务器比如一个能查询数据库的服务器。一个能调用内部API的服务器。一个能操作本地文件系统的服务器需注意安全。 然后修改mcp-agent.py让它启动你的自定义服务器你的代理就立刻拥有了新的能力。5.2 Pydantic-AI代理大脑与调度中心代理Agent是pydantic-ai框架的核心概念。在mcp-agent.py中代理被创建并配置了以下要素模型指定使用哪个AI模型如gpt-4o。系统提示词定义代理的角色和任务规范“你是一个助手负责获取网页内容并总结”。工具通过MCP客户端将远程服务器提供的工具“注入”给代理。代理在思考时就知道自己可以调用这些工具了。结果解析器定义如何处理模型返回的结果。在这个项目里可能就是简单地将模型的回复打印出来。工作流程如下用户输入fetch https://some.url脚本解析构建一个用户提示词“Please get the content of https://some.url and provide a summary.”代理收到提示词结合系统提示词进行“思考”。它意识到需要调用get_webpage_content工具。代理通过MCP协议向服务器发送工具调用请求。服务器执行抓取返回网页内容。代理收到网页内容将其作为上下文再次“思考”生成最终的摘要文本。脚本将摘要输出给用户。这个架构的强大之处在于解耦。AI模型大脑和工具手和脚是独立的。你可以轻松更换更强大的“大脑”如从GPT-3.5升级到GPT-4也可以给同一个“大脑”安装更多的“工具”通过连接更多的MCP服务器而无需重写核心的AI推理逻辑。6. 常见问题、故障排查与进阶技巧在实际使用中你肯定会遇到各种各样的问题。这里我整理了一份“避坑指南”。6.1 运行时报错与解决方案速查表错误现象可能原因解决方案ModuleNotFoundError: No module named xxx依赖包缺失或虚拟环境未激活。1. 确认已激活虚拟环境。2. 运行pip install -r requirements.txt。3. 如个别包安装失败尝试单独安装pip install xxx。Error: No such option: --model命令行参数错误或脚本版本问题。1. 检查命令拼写确保是--model而不是-model。2. 运行python mcp-agent.py --help查看支持的参数。openai.AuthenticationError或401OpenAI API密钥无效、过期或未设置。1. 检查local.env文件中的OPENAI_API_KEY。2. 登录OpenAI平台确认密钥有效。3. 确保没有多余空格或换行。RateLimitErrorAPI调用频率超限或额度不足。1. 等待一段时间再试。2. 如果是免费额度用完需升级账户或充值。3. 考虑切换到更便宜的模型如gpt-4o-mini。长时间无响应或超时目标网站访问慢、网络问题、或AI模型响应慢。1. 尝试一个更简单、访问速度快的网站测试。2. 检查本地网络。3. 对于搜索尝试减少--count。4. 使用速度更快的模型如groq:llama-3.3-70b。抓取结果为空或只有少量文本网站依赖JavaScript动态加载内容。这是当前工具的限制。需要换用支持无头浏览器的MCP服务器或考虑其他静态内容为主的网站。uvx命令执行失败uv未安装或mcp-server-fetch包不存在。1. 尝试安装uv:pip install uv或pipx install uv。2. 查看脚本中启动服务器的命令看是否可以替换为其他方式如直接导入Python模块。Brave搜索返回结果不相关搜索关键词不够精确或Brave索引问题。1. 优化搜索关键词使用更具体、更长的短语。2. 尝试用英文关键词搜索可能结果质量更高。3. 考虑在系统提示词中要求AI更严格地筛选结果。6.2 性能优化与成本控制心得按需选择模型这是平衡速度、效果和成本的最有效杠杆。日常信息抓取和简单总结gpt-4o-mini或claude-3-haiku足矣。只有处理复杂技术文档、需要深度推理时才动用gpt-4o或claude-3-5-sonnet。善用系统提示词一个清晰、具体的系统提示词能极大地减少AI的“胡思乱想”和无效输出从而减少Token消耗。例如明确要求“用不超过三句话总结”而不是让它自由发挥。控制输入长度对于fetch如果网页内容过长可以考虑是否真的需要全文总结。有时只抓取文章的主要部分通过识别HTML的article标签或特定class就能大幅减少Token数。这需要修改MCP服务器的抓取逻辑。批量处理与缓存如果你需要处理大量URL不要用循环一个个调用脚本。最好写一个Python脚本批量读取URL列表集中处理并考虑将原始抓取内容缓存到本地文件或数据库。这样即使AI总结需要重跑也无需重复抓取网页节省时间和网络开销。监控API用量定期去OpenAI、Anthropic、Groq的控制台查看使用量和费用。设置预算提醒防止意外超支。6.3 扩展思路如何定制你的专属智能代理这个项目的开源和模块化设计为定制化打开了大门。增加新的MCP工具这是最直接的扩展。比如你想让代理能查询天气。找到一个开源的天气MCP服务器或自己用Python写一个MCP有SDK。修改mcp-agent.py在创建代理时除了默认的fetch/search服务器再连接这个天气服务器。现在你的代理就能理解“北京今天天气怎么样”这样的问题并调用天气工具来回答。修改输出格式默认输出是纯文本。你可以修改代码让结果以JSON格式输出方便其他程序调用。或者集成rich库让命令行输出变得色彩斑斓、带有表格。构建交互式CLI或Web界面目前的工具是单次命令执行。你可以用typer或click库增强CLI提供交互式问答模式。更进一步可以用FastAPI或Streamlit包一层做成一个简单的Web应用通过浏览器来使用。集成到自动化工作流将mcp-agent作为你数据管道的一环。例如用爬虫定期抓取一批新闻链接然后用这个工具批量生成摘要存入Notion数据库或发送到Telegram频道。这个由malminhas创建的小项目就像一个乐高积木的基础底板。它提供了与AI模型和基础工具交互的核心能力。你能在上面搭建出什么完全取决于你的想象力和对MCP生态的探索。从自动化的个人知识库助手到团队内部的信息检索机器人可能性非常多。最关键的是它让你避开了从零开始处理API调用、协议通信这些底层细节可以直接聚焦在构建有趣的功能上。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2595022.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!