网站开发销售怎么做如何自己做解析网站
2026/4/17 0:17:42 网站建设 项目流程
网站开发销售怎么做,如何自己做解析网站,网站建设视觉效果,网站为什么没有被收录1. 从零开始#xff1a;如何用 Python 创建你的第一个 MCP#xff08;Model Context Protocol#xff09; 1.1 什么是 MCP#xff1f; Model Context Protocol (MCP) 是一个标准化协议#xff0c;允许应用程序与大语言模型#xff08;LLM#xff09;进行安全、结构化的…1. 从零开始如何用 Python 创建你的第一个 MCPModel Context Protocol1.1 什么是 MCPModel Context Protocol (MCP) 是一个标准化协议允许应用程序与大语言模型LLM进行安全、结构化的交互。通过 MCP你可以为 LLM 提供自定义工具和资源实现 LLM 和外部系统的无缝集成构建可复用的、模块化的 AI 应用1.2 核心概念1.2.1 MCP Server服务器定义工具、资源和提示词通过 stdio 或其他传输方式提供给客户端。1.2.2 MCP Client客户端连接到 MCP 服务器获取工具列表调用工具并与 LLM 集成。1.2.3 Tools工具服务器暴露给 LLM 的可调用函数LLM 可以根据用户需求调用这些工具。1.3 项目结构hello-world/ ├── server.py # MCP 服务器定义 ├── client-deepseek.py # 使用 Deepseek LLM 的客户端 ├── client.py # 基础客户端 ├── pyproject.toml # 项目配置 └── uv.lock # 依赖锁定文件2. 第一步创建 MCP 服务器2.1 安装依赖0cdhello-worldUV_INDEX_URLhttps://mirrors.aliyun.com/pypi/simple/ uvsync主要依赖mcp[cli]1.6.0- MCP 框架openai1.75.0- OpenAI 兼容的 LLM 客户端python-dotenv1.1.0- 环境变量管理2.2 编写 Server 端代码创建server.pyfrommcp.server.fastmcpimportFastMCP# 创建一个 MCP 服务器实例mcpFastMCP(Demo)# 定义一个工具两数相加mcp.tool()defadd(a:int,b:int)-int:Add two numbersreturnab# 定义一个资源个性化问候mcp.resource(greeting://{name})defget_greeting(name:str)-str:Get a personalized greetingreturnfHello,{name}!# 启动服务器if__name____main__:mcp.run(stdio)核心概念解析FastMCP- 简化的 MCP 服务器框架mcp.tool()- 装饰器定义工具函数mcp.resource()- 装饰器定义资源带 URI 模式mcp.run(“stdio”)- 通过标准输入输出运行服务器3. 第二步创建 MCP 客户端3.1 基础客户端无 LLMclient.py展示了如何直接调用工具importsysimportasynciofrommcpimportClientSessionfrommcp.client.stdioimportstdio_client,StdioServerParametersasyncdefmain():# 1. 启动 MCP 服务器进程server_scriptserver.pyparamsStdioServerParameters(commandsys.executable,args[server_script],)transportstdio_client(params)stdio,writeawaittransport.__aenter__()# 2. 建立客户端会话sessionawaitClientSession(stdio,write).__aenter__()awaitsession.initialize()# 3. 调用工具resultawaitsession.call_tool(add,{a:3,b:5})print(f3 5 {result})# 4. 关闭连接awaitsession.__aexit__(None,None,None)awaittransport.__aexit__(None,None,None)if__name____main__:asyncio.run(main())3.2 与 LLM 集成的客户端client-deepseek.py展示了如何让 LLM 自动调用工具importsysimportasyncioimportosimportjsonfrommcpimportClientSessionfrommcp.client.stdioimportstdio_client,StdioServerParametersfromopenaiimportOpenAIfromdotenvimportload_dotenv load_dotenv()asyncdefmain():# 1. 连接到 MCP 服务器print( 初始化加法 LLM 工具客户端)server_scriptserver.pyparamsStdioServerParameters(commandsys.executable,args[server_script],)transportstdio_client(params)stdio,writeawaittransport.__aenter__()sessionawaitClientSession(stdio,write).__aenter__()awaitsession.initialize()print( 连接到MCP服务器成功)# 2. 初始化 LLM 客户端使用通义千问clientOpenAI(api_keyos.getenv(QWEN_API_KEY),base_urlos.getenv(QWEN_BASE_URL))# 3. 从 MCP 服务器获取工具列表respawaitsession.list_tools()tools[{type:function,function:{name:tool.name,description:tool.description,parameters:tool.inputSchema}}fortoolinresp.tools]print(可用工具,[t[function][name]fortintools])# 4. 主交互循环whileTrue:print(\n请输入你的加法问题如5加7是多少或退出)user_inputinput( )ifuser_input.strip().lower()退出:breakprint(f\n 用户问题:{user_input})# 构造对话messages[{role:system,content:你是一个加法助手遇到加法问题请调用工具add最后用自然语言回答用户。},{role:user,content:user_input}]# 5. LLM 与工具调用循环iteration0whileTrue:iteration1print(f\n 第{iteration}次 LLM 调用...)# 调用 LLMresponseclient.chat.completions.create(modelqwen-plus,messagesmessages,toolstools,tool_choiceauto)messageresponse.choices[0].message messages.append(message)# 检查是否有工具调用ifnotmessage.tool_calls:print(f\n✅ LLM 最终回答)print(f\nAI 回答\n{message.content})break# 6. 执行工具调用fortool_callinmessage.tool_calls:argsjson.loads(tool_call.function.arguments)print(f\n 调用工具:{tool_call.function.name})print(f 工具参数:{args})resultawaitsession.call_tool(tool_call.function.name,args)print(f 工具返回结果:{result})# 将工具结果加入对话历史messages.append({role:tool,content:str(result),tool_call_id:tool_call.id})awaitsession.__aexit__(None,None,None)awaittransport.__aexit__(None,None,None)print( 客户端已关闭)if__name____main__:asyncio.run(main())4. 第三步配置环境变量创建或修改.env文件# 通义千问 API 配置使用阿里云 DashScope QWEN_API_KEYyour-api-key-here QWEN_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v15. 第四步运行程序5.1 方式一两个终端分别运行终端 1启动服务器cd01-hello-worldUV_INDEX_URLhttps://mirrors.aliyun.com/pypi/simple/ uv run python server.py终端 2运行客户端cd01-hello-worldUV_INDEX_URLhttps://mirrors.aliyun.com/pypi/simple/\QWEN_API_KEYyour-api-key\QWEN_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1\uv run python client-deepseek.py5.2 方式二非交互式测试cd01-hello-worldtimeout60bash-cecho -e 15加8等于多少?\n退出 | \ UV_INDEX_URLhttps://mirrors.aliyun.com/pypi/simple/ \ QWEN_API_KEYyour-api-key \ QWEN_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1 \ uv run python client-deepseek.py6. 执行流程示例当用户输入 “15加8等于多少” 时 用户问题: 15加8等于多少? 第 1 次 LLM 调用... 调用工具: add 工具参数: {a: 15, b: 8} 工具返回结果: metaNone content[TextContent(typetext, text23, annotationsNone)] isErrorFalse 第 2 次 LLM 调用... ✅ LLM 最终回答 AI 回答 15加8等于23。7. 关键要点7.1 异步编程MCP 使用 asyncio所有网络操作都是异步的asyncdefmain():# 异步操作awaitsession.initialize()resultawaitsession.call_tool(...)7.2 工具定义简单易用的装饰器风格mcp.tool()defmy_tool(param1:int,param2:str)-str:Tool descriptionreturnfResult:{param1}{param2}7.3 工具调用链LLM 根据需要多次调用工具直到得到最终答案用户输入 → LLM 分析 → 调用工具 → 获得结果 → LLM 再次分析 → 最终回答7.4 消息历史保持对话历史以便 LLM 理解上下文messages[{role:system,content:...},{role:user,content:...},{role:assistant,content:...},{role:tool,content:...},]8. 扩展应用8.1 添加更多工具mcp.tool()defmultiply(a:int,b:int)-int:Multiply two numbersreturna*bmcp.tool()defdivide(a:float,b:float)-float:Divide two numbersifb0:raiseValueError(Cannot divide by zero)returna/b8.2 添加资源mcp.resource(user://{user_id})defget_user_info(user_id:str)-str:Get user informationreturnfUser{user_id}information8.2.1 什么是资源Resourcemcp.resource()装饰器用于定义一个可以根据参数返回不同数据的接口。资源是不同于工具的数据取…资源 vs 工具的对比特性Resource资源Tool工具用途提供只读或结构化的数据执行操作或计算调用方式read_resource(uri://path)call_tool(name, args)参数传递URI 路径参数函数参数使用场景获取文件、查询数据库计算、修改数据8.2.2 URI 模式详解mcp.resource(greeting://{name})defget_greeting(name:str)-str:Get a personalized greetingreturnfHello,{name}!语法分解部分含义说明mcp.resource()资源装饰器定义资源的标记greeting://资源协议Schemeuser://、file://、api://{name}动态参数占位符类似路由参数接收不同值get_greeting(name: str)处理函数参数名必须与 URI 占位符一致工作流程客户端请求 greeting://Alice ↓ MCP 框架识别 URI 模式 ↓ 提取参数 name Alice ↓ 调用函数 get_greeting(Alice) ↓ 返回 Hello, Alice! 给客户端8.2.3 常见资源示例示例 1用户信息资源mcp.resource(user://{user_id})defget_user_info(user_id:str)-str:users{1:Alice,2:Bob}returnusers.get(user_id,Not found)# 客户端调用await session.read_resource(user://1)# 返回Alice示例 2文件资源多参数mcp.resource(file://{folder}/{filename})defread_file(folder:str,filename:str)-str:# 注意参数名必须与 URI 中的占位符一致pathf{folder}/{filename}try:withopen(path,r)asf:returnf.read()exceptFileNotFoundError:returnFile not found# 客户端调用await session.read_resource(file://docs/readme.txt)# 返回文件内容示例 3API 文档资源mcp.resource(docs://api/{version})defget_api_docs(version:str)-str:docs{v1:API v1: 支持基础功能,v2:API v2: 新增高级功能}returndocs.get(version,Version not found)示例 4多参数资源mcp.resource(product://{category}/{product_id})defget_product(category:str,product_id:str)-str:# 访问歩骤product://electronics/12345returnfProduct{product_id}from{category}8.2.4 客户端中使用资源# 方法 1直接读取资源resultawaitsession.read_resource(greeting://Alice)print(result)# 输出: Hello, Alice!# 方法 2列出所有资源resourcesawaitsession.list_resources()forresourceinresources.resources:print(fResource:{resource.uri}-{resource.description})8.2.5 资源 URI 命名最佳实践✅ 好的设计mcp.resource(user://{user_id})# 清晨的协议名mcp.resource(file://{path}/{filename})# 多参数路径mcp.resource(docs://api/{version})# 泊根路径❌ 避免的做法mcp.resource(res://{id})# ❌ 不清楚的协议名mcp.resource(user://{user_id})defget_user(uid:str):# ❌ 参数名不匹配pass8.3 自定义 System Promptsystem_prompt 你是一个数学助手。 当用户问到加法、减法、乘法、除法时请调用相应的工具。 最后用清晰的中文回答用户的问题。 messages[{role:system,content:system_prompt},{role:user,content:user_input}]9. 常见问题9.1 Q1: 如何调试 MCP 服务器使用日志输出importlogging logging.basicConfig(levellogging.DEBUG)loggerlogging.getLogger(__name__)mcp.tool()defmy_tool(x:int):logger.info(fTool called with x{x})returnx*29.2 Q2: 如何处理工具调用错误try:resultawaitsession.call_tool(tool_name,args)exceptExceptionase:print(fTool call failed:{e})# 错误恢复逻辑9.3 Q3: 如何支持多轮对话保持messages列表每次交互都添加新消息whileTrue:user_inputinput( )messages.append({role:user,content:user_input})# ... 处理响应添加到 messages ...10. 性能优化建议连接复用- 不要频繁创建/销毁连接超时设置- 为 LLM 调用设置合理超时错误重试- 实现指数退避重试机制日志级别- 生产环境减少日志输出11. 总结通过 MCP你可以轻松构建强大的 AI 应用让 LLM 能够访问和使用自定义工具。核心步骤是定义工具Server连接到服务器Client让 LLM 自动调用工具处理工具结果并返回给用户希望这个教程能帮助你开始 MCP 的学习之旅12. 参考资源MCP 官方文档FastMCP 框架OpenAI API 文档本项目代码

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询