面对普通程序员, 构建一个如何使用 AIGC 工具来完成任务的工具包;

tracing

从 ChatGPT 问世, 一路各种有助编程的 AGI 都尝试用过, 不是要收费, 就是不一定管用;

比如, VSCode 中大力宣传的: GitHub Copilot 第一时间安装, 可惜在学习使用 Rust 过程中, 提供的代码建议, 多数不可用, 还不如官方的 rust-analyzer ;

反而很多具体技术问题, 还是 stackoverflow 能搜索出对应回答来;

所以, 从这两年 AIGC 和编程活动的结合经验来看, 最可用的还是对原有搜索的加强方向, AIGC 越来越像一位有无限耐心以及知识的老程序猿, 可以认真回答我们任何问题, 从而提高具体编程侨务过程中专注解决业务问题, 而不是技术问题的效能;

特此尝试以一个具体编程任务为线索, 以单一 AIGC 产品为背景, 来演示如何在 AI 辅助下完成任务;

目标:

可以随时询问到指定城市天气的工具...

以基本工程经验, 可以分解为以下关键任务阶段:

  • 先有可自动查询指定城市天气的能力
  • 本地运行检验通过后
  • 想办法可以通过网络随时获取结果
    • ... 都可以..
    • AI: https://devv.ai/ 目前可以免费使用的, 最敏捷以及最精确的 AIGC 问答引擎

      不过首先要解决产品的技术选型

      Q: 我想开发一个随时可以查询指定城市天气情况的工具, 请问:

    • 一般有哪些现实方案?
    • 其中最简洁的方案是什么?
    • 请说明关键构建过程和示例代码并解释关键行为,
    • A: 对于开发一个随时可以查询指定城市天气情况的工具,有几种现实方案,其中最简洁的方案之一是使用OpenWeatherMap API。下面是关键构建过程和示例代码以及解释关键行为的详细说明:

      步骤1:注册OpenWeatherMap API

      首先,您需要注册OpenWeatherMap API账户,以便获取API密钥。您可以在https://home.openweathermap.org/users/sign_up 注册并创建免费账户。然后在您的仪表板上生成API密钥。

      步骤2:安装Requests模块

      Requests模块将用于向OpenWeatherMap API发出HTTP请求,因此在继续之前,您需要安装它。您可以在终端中运行以下命令来安装Requests模块:

      pip install requests
      

      步骤3:导入Requests模块和API密钥

      安装了Requests模块并生成了API密钥后,您可以开始编写代码。在您喜欢的代码编辑器中打开一个新的Python文件,并导入Requests模块:

      import requests
      

      接下来,创建一个变量来存储您的API密钥:

      api_key = 'YOUR_API_KEY'
      

      YOUR_API_KEY替换为您的实际API密钥。

      步骤4:构建天气查询工具

      现在,我们已经导入了Requests模块并存储了API密钥,可以开始构建我们的天气查询工具。该工具将提示用户输入城市名称,并使用Requests模块来获取该城市的天气数据。以下是代码示例:

      import requests
      api_key = 'YOUR_API_KEY'
      city = input('Enter city name: ')
      url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'
      response = requests.get(url)
      if response.status_code == 200:
          data = response.json()
          temp = data['main']['temp']
          desc = data['weather'][0]['description']
          print(f'Temperature: {temp} K')
          print(f'Description: {desc}')
      else:
          print('Error fetching weather data')
      

      就拿 AI 当成一个真实的人来提问, 一样要尽可能提供足够多的背景信息, 以及具体的期望, 并保持礼貌; 在编程领域, 关键提示词是: 详细示例代码, 说明关键行为, 具体检验办法... 这几个要求, 都是能令 AIGC 提供我们立即可以开展尝试和对比决策的主要技巧;

      Q:类似 OpenWeatherMap 提供 API 的天气数据服务网站还有哪些? 其中 API 对 Python 最友好的的服务是哪个? 请给出示例代码对比说明关键行为, 以及如何检验;

      A: 除了OpenWeatherMap,还有一些其他提供API的天气数据服务网站,其中对Python最友好的服务之一是Meteomatics。Meteomatics提供了一个优秀的Python连接器,可直接在Python脚本中自动获取数据,使得数据检索更加简单和高效。

      下面将给出示例代码对比说明关键行为,并展示如何检验OpenWeatherMap和Meteomatics的API。

      OpenWeatherMap示例代码:

      import requests
      api_key = 'YOUR_API_KEY'
      city = input('Enter city name: ')
      url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'
      response = requests.get(url)
      if response.status_code == 200:
          data = response.json()
          temp = data['main']['temp']
          desc = data['weather'][0]['description']
          print(f'Temperature: {temp} K')
          print(f'Description: {desc}')
      else:
          print('Error fetching weather data')
      

      Meteomatics示例代码:

      from meteomatics import ApiConnection
      username = 'YOUR_USERNAME'
      password = 'YOUR_PASSWORD'
      connection = ApiConnection(username, password)
      city = input('Enter city name: ')
      start_date = '2023-09-01T00:00:00Z'
      end_date = '2023-09-01T01:00:00Z'
      parameters = ['temperature_2m:C', 'weathercode']
      response = connection.query_multi_point_time_series(city, start_date, end_date, parameters)
      if response.status_code == 200:
          data = response.json()
          temp = data['temperature_2m']['data'][0]
          desc = data['weathercode']['data'][0]
          print(f'Temperature: {temp} °C')
          print(f'Description: {desc}')
      else:
          print('Error fetching weather data')
      

      代码对比说明关键行为:

    • OpenWeatherMap 示例代码使用了Requests库向OpenWeatherMap API发出HTTP GET请求,然后从响应中提取温度和天气描述。
    • Meteomatics示例代码使用了Meteomatics的Python连接器,创建了一个ApiConnection对象,并使用该对象查询多点时间序列数据,然后从响应中提取温度和天气描述。
    • 如何检验:

      您可以分别运行这两段代码,并输入相同的城市名称来检验它们。您应该能够看到来自OpenWeatherMap和Meteomatics的相应天气数据,包括温度和天气描述。

      通过这些示例代码对比和说明,您可以了解如何使用Python与OpenWeatherMap和Meteomatics的API进行天气数据查询,并对比它们的关键行为。

      代码解释:

    • 首先,使用input()函数提示用户输入城市名称,并将输入的值存储在city变量中。
    • 接下来,使用f-string构造一个URL,以访问输入城市的天气数据。URL包括OpenWeatherMap API端点、city变量和API密钥。
    • 使用Requests模块向构造的URL发送HTTP GET请求,并将响应存储在response变量中。
    • 检查响应的状态码以确保请求成功(状态码为200)。
    • 如果请求成功,将响应数据转换为Python字典,并从中提取温度和天气描述,然后打印到控制台。
    • 如果请求失败,打印错误消息到控制台。
    • 步骤5:保存和测试应用

      将Python文件保存为“weather_app.py”。现在,您可以测试应用程序。在终端中运行以下命令:

      python weather_app.py
      

      在提示时输入城市名称并按Enter键。应用程序应该会获取给定城市的天气数据,并将温度和描述打印到控制台。

      通过按照这些步骤,您可以使用Python和OpenWeatherMap API构建一个简单的天气查询工具。

      在给出进一步提示后, 对应网站还是要去看一下, meteomatics 感觉是个商业服务公司, 从首页上并不能看出具体天气数据查询入口, 这意味着并不是可以公开免费查询的...所以, 回到最初的推荐使用 OpenWeatherMap

      Q: 我是 macOS 环境, 已经安装好miniconda, 如何为新工程安装一个 最新 Python 版本的虚拟环境? 请说明详细过程, 以及关键行为, 和如何检验正确执行的办法,

      A: 为在macOS环境下使用Miniconda为新工程安装最新版本的Python虚拟环境,您可以按照以下详细步骤进行操作:

      步骤1:安装Miniconda

      如果您已经安装好了Miniconda,可以跳过这一步。否则,您可以在终端中运行以下命令来安装Miniconda:

      bash Miniconda3-latest-MacOSX-x86_64.sh
      

      按照安装提示进行操作,完成Miniconda的安装。

      步骤2:创建新的Python虚拟环境

      在终端中,使用以下命令创建一个新的Python虚拟环境,并指定要安装的Python版本(假设您要安装最新的Python 3.9版本):

      conda create -n myenv python=3.9
      

      这将创建一个名为myenv的虚拟环境,并在其中安装Python 3.9版本。

      步骤3:激活虚拟环境

      激活刚刚创建的虚拟环境,以便在其中进行工作。在终端中运行以下命令:

      conda activate myenv
      

      步骤4:验证Python版本

      在激活的虚拟环境中,运行以下命令来验证Python版本是否正确安装:

      python --version
      

      您应该会看到输出显示安装的Python版本为3.9.x。

      步骤5:安装额外的包(可选)

      如果需要,您可以在激活的虚拟环境中使用conda installpip install命令安装其他Python包。

      如何检验正确执行:

    • 运行conda env list命令,您应该能够看到列出了您创建的myenv虚拟环境。
    • 运行conda activate myenv命令激活虚拟环境,并使用python --version命令验证Python版本是否为3.9.x。
    • 通过按照这些步骤,您应该能够在macOS环境下使用Miniconda为新工程安装一个最新版本的Python虚拟环境,并且能够验证其正确执行。

      开始具体技术问题时, 可以注意到 devv.ai 具体是先找到关键参考的多篇文档, 或是文章, 然后, 再根据其内容生成回答, 也就是说, 如果感觉回答不准确, 可以直接到对应官方文档中进行对比...

      进入真实编程阶段, 要持续解决技术的具体问题

    • Q: 使用之前代码成功获得了 api.openweathermap.org 的数据: Temperature: 281.77 K 但是, 单位是 K 不是摄氏度, 请问, 如何申请摄氏度的数据, 又或是如何将 K 转换为 C ? 请用具体示例代码说明, 并解释关键行为, 以及检验办法,
    • A: 您可以通过在API请求中添加units=metric参数来获取摄氏度的数据。另外,您也可以将开尔文(K)转换为摄氏度(C)。以下是具体示例代码以及解释关键行为的步骤:
    • 申请摄氏度的数据

      您可以在API请求URL中添加units=metric参数来获取摄氏度的数据。下面是示例代码:

      import requests
      api_key = 'YOUR_API_KEY'
      city = input('Enter city name: ')
      url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric'
      response = requests.get(url)
      if response.status_code == 200:
          data = response.json()
          temp_celsius = data['main']['temp']
          print(f'Temperature: {temp_celsius} °C')
      else:
          print('Error fetching weather data')
      

      转换开尔文到摄氏度

      如果您已经获得了开尔文的温度数据,您可以使用以下公式将其转换为摄氏度:

      def kelvin_to_celsius(kelvin_temp):
          celsius_temp = kelvin_temp - 273.15
          return celsius_temp
      

      示例代码说明和检验

    • 示例代码中,我们向OpenWeatherMap API添加了units=metric参数,以获取摄氏度的数据。
    • 如果API请求成功,我们从响应中提取温度数据,并将其打印为摄氏度。
    • 如果您已经获得了开尔文的温度数据,您可以使用kelvin_to_celsius函数将其转换为摄氏度。
    • 您可以通过运行示例代码并输入城市名称来检验是否成功获取了摄氏度的数据,并且转换函数是否正确将开尔文转换为摄氏度。
    • 通过这些步骤,您应该能够成功申请摄氏度的数据,并且了解如何将开尔文转换为摄氏度。

      当然, AIGC 的回答是根据我们的提示词生成的, 有时有些重复的要求, 其实也是为了检验生成的答案是否前后一致, 关键是我们自己要明确自己的目标, 并能清楚选择什么样的方案, 可以高速达成; 所以, 这里选择了追加参数让服务返回对应数据, 而不是自己在本地转换;

      A: 常见的 Python web API 开发框架有 Flask, Django, FastAPI, Pyramid 和 Web2py。这些框架各有特点,下面将逐一介绍它们的特点和优缺点。

      Flask:

    • 特点:轻量级,易于学习和使用,适合小型项目和快速原型开发。
    • 优点:文档完善,易于扩展,灵活性高。
    • 缺点:在处理大型和复杂项目时,可能需要更多的自定义和配置。

      Django:

    • 特点:全功能的框架,内置了许多功能,适合构建大型和复杂的应用程序。
    • 优点:拥有完善的文档和社区支持,适用于需要快速开发的项目。
    • 缺点:学习曲线较陡峭,对于小型项目可能显得过于庞大。

      FastAPI:

    • 特点:基于 Python 3.6 异步特性,具有高性能和快速开发的特点。
    • 优点:快速编码,性能优越,易于创建插件。
    • 缺点:有些复杂的请求验证需要编写自定义验证器。

      Pyramid:

    • 特点:全栈 Python web 框架,可以根据需求进行灵活扩展。
    • 优点:支持 Ajax 请求,易于配置,适用于 SQL 项目。
    • 缺点:配置模板相对不够灵活,文档相对不足。

      Web2py:

    • 特点:用于数据库驱动的 web 应用程序的 Python 框架。
    • 优点:文档丰富,适应团队需求,适用于大型项目。
    • 缺点:不支持 Python 3,插件系统不够灵活。
    • 总的来说,Flask 是最简洁的框架,适合快速原型开发和小型项目。Django 是功能最全面的框架,适合大型和复杂的应用程序。FastAPI 具有高性能和快速开发的特点,适合需要高性能的项目。Pyramid 和 Web2py 则分别适用于 SQL 项目和大型数据库驱动的 web 应用程序。选择框架时,应根据项目需求和团队实际情况进行权衡和选择。

      立即返回的答案就有了很大的改进,并真正有指导意义了

    • Q: 假设使用 FastAPI 开发一个简单的接口, 请给出详细过程, 以及示例代码, 并说明关键行为, 谢谢;
    • A: 使用 FastAPI 开发一个简单的接口可以分为以下步骤:

      安装 FastAPI 和 Uvicorn

    • 创建 FastAPI 应用程序
    • 定义路由和处理函数
    • 运行应用程序并访问接口
    • 查看交互式 API 文档
    • 下面是详细的步骤和示例代码:

      步骤 1:安装 FastAPI 和 Uvicorn

      pip install fastapi uvicorn
      

      步骤 2:创建 FastAPI 应用程序

      创建一个名为 main.py 的文件,并添加以下代码:

      from fastapi import FastAPI
      app = FastAPI()
      

      步骤 3:定义路由和处理函数

      main.py 文件中添加以下代码来定义路由和处理函数:

      from fastapi import FastAPI
      app = FastAPI()
      @app.get("/")
      async def read_root():
          return {"message": "Hello, World"}
      

      步骤 4:运行应用程序并访问接口

      在终端中运行以下命令启动应用程序:

      uvicorn main:app --reload
      

      这将启动 Uvicorn 服务器,并在本地地址 http://127.0.0.1:8000 上提供 FastAPI 应用程序。

      步骤 5:查看交互式 API 文档

      在浏览器中访问 http://127.0.0.1:8000/docs,您将看到自动生成的交互式 API 文档,其中包含您定义的路由和处理函数。

      关键行为说明

    • @app.get("/"):这是一个装饰器,用于定义处理 HTTP GET 请求的路由。
    • async def read_root()::这是一个异步函数,处理来自根路径的请求。
    • return {"message": "Hello, World"}:这是处理函数的返回值,将作为 JSON 响应发送给客户端。
    • 通过上述步骤,您已经成功创建了一个简单的 FastAPI 接口,并且可以通过浏览器或 API 客户端访问它。

      根据当前本地安装的 Python 3.12 运行时, 想使用专注异步高效的 FastAPI, 这样开始尝试安装, 就触发了另外的具体问题:

    • Q:安装 fasrAPI 过程中报错: ERROR: Failed building wheel for pydantic-core
    • 为什么, 应该如何解决?

    • A: 根据您提供的信息,安装 FastAPI 时出现了构建 pydantic-core 轮子的错误。这可能是由于缺少构建所需的依赖项或环境配置问题导致的。
    • 为了解决这个问题,您可以尝试以下几种方法:

      确保您的 Python 版本和 pip 版本是最新的,可以通过以下命令升级 pip: pip install --upgrade pip

      确保您的操作系统环境中已经安装了构建所需的编译器和开发工具。在 Windows 上,您可能需要安装 Visual C++ Build Tools。在 macOS 上,您可能需要安装 Xcode Command Line Tools。

      尝试使用 --no-binary 标志重新安装 pydantic-core,以便强制从源代码构建: pip install --no-binary :all: pydantic-core

      如果您使用的是虚拟环境,请确保您的虚拟环境已经激活,并且尝试在激活的虚拟环境中重新安装 FastAPI。

      如果上述方法都无法解决问题,您可以尝试在 FastAPI 安装时忽略构建 pydantic-core,然后手动安装 pydantic-core: pip install fastapi --no-build-isolation pip install pydantic-core

      通过尝试上述方法,您应该能够解决安装 FastAPI 时出现的 pydantic-core 构建错误。如果问题仍然存在,您可能需要进一步调查您的环境和依赖项配置。

    • Q: error:
    • cargo build --manifest-path Cargo.toml --message-format=json-render-diagnostics --target x86_64-apple-darwin --release -v --no-default-features --locked` failed with code 101
                  [end of output]
              note: This error originates from a subprocess, and is likely not a problem with pip.
              ERROR: Failed building wheel for maturin
            Failed to build maturin
            ERROR: Could not build wheels for maturin, which is required to install pyproject.toml-based projects
            [end of output]
        note: This error originates from a subprocess, and is likely not a problem with pip.
      error: subprocess-exited-with-error
      × pip subprocess to install build dependencies did not run successfully.
      │ exit code: 1
      ╰─> See above for output.
      note: This error originates from a subprocess, and is likely not a problem with pip.
      
    • A:根据您提供的错误信息,安装 FastAPI 时似乎出现了与构建 maturin 轮子相关的问题。这可能是由于缺少构建所需的依赖项或环境配置问题导致的。
    • 为了解决这个问题,您可以尝试以下几种方法:

      确保您的 Python 版本和 pip 版本是最新的,可以通过以下命令升级 pip: pip install --upgrade pip

      确保您的操作系统环境中已经安装了构建所需的编译器和开发工具。在 macOS 上,您可能需要安装 Xcode Command Line Tools。

      尝试在安装 FastAPI 时忽略构建 maturin,然后手动安装 maturin: pip install fastapi --no-build-isolation pip install maturin

      关于 FastAPI 最兼容的 Python 版本,FastAPI 最兼容的 Python 版本是 Python 3.6 及以上版本。建议您使用 Python 3.6 或更高版本来开发和运行 FastAPI 应用程序。

      通过尝试上述方法,您应该能够解决安装 FastAPI 时出现的构建错误。如果问题仍然存在,您可能需要进一步调查您的环境和依赖项配置。

    • Q: 我将 conda 虚拟环境降到 3.10 时, 还是安装出错:
    • error[E0463]: can't find crate for `core`
              --> /Users/zoomq/.cargo/registry/src/index.crates.io-6f17d22bba15001f/static_assertions-1.1.0/src/lib.rs:87:1
            87 | pub extern crate core as _core;
               | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate
               = note: the `x86_64-apple-darwin` target may not be installed
               = help: consider downloading the target with `rustup target add x86_64-apple-darwin`
      

      看起来是 cargo, rust 的编译环境中, 没有 x86_64-apple-darwin 相关配置, 但是, 我这是 platform : osx-arm64, 如何正确令 pydantic-core 在构建过程中使用 arm 参数?

      这时发现, 在 M1 macOS 本地系统环境中, FastAPI 依赖的模块, 其实是用 Rust 编译的, 这导致一系列意料外的错误, 尝试解决, 并直接进行搜索时, 发现都没有很好的解决方法, 于是决定快速切换到 Flask 纯粹 Python 方案中...

      步骤二:编写 Flask 应用程序

      创建一个名为 app.py 的 Python 文件,并在其中编写 Flask 应用程序的代码。

      from flask import Flask, jsonify
      app = Flask(__name__)
      # 创建一个简单的 GET 请求处理器
      @app.route('/')
      def hello_world():
          return 'Hello, World!'
      # 创建一个返回 JSON 数据的接口
      @app.route('/api/data', methods=['GET'])
      def get_data():
          data = {'name': 'John', 'age': 30, 'city': 'New York'}
          return jsonify(data)
      if __name__ == '__main__':
          app.run(debug=True)
      

      步骤三:运行 Flask 应用程序

      在终端中,进入包含 app.py 文件的目录,并运行 Flask 应用程序:

      python app.py
      

      步骤四:验证接口

      在浏览器中访问 http://127.0.0.1:5000/,您应该能够看到 "Hello, World!" 的消息。然后访问 http://127.0.0.1:5000/api/data,您应该能够看到返回的 JSON 数据。

      关键行为解释

    • from flask import Flask, jsonify:导入 Flask 框架和 jsonify 函数。
    • @app.route('/'):使用装饰器定义路由,指定 URL 路径。
    • def hello_world()::定义处理该路由的函数,返回 "Hello, World!"。
    • @app.route('/api/data', methods=['GET']):定义另一个路由,指定请求方法为 GET。
    • def get_data()::定义处理该路由的函数,返回 JSON 数据。
    • if __name__ == '__main__'::确保应用程序仅在直接运行时才运行,而不是被导入到其他模块中。
    • 检验办法

      通过访问定义的路由,可以在浏览器中或使用工具如 Postman 发送请求来验证接口的功能和返回结果。

      希望这些步骤和示例代码能够帮助您开始使用 Flask 来开发简单的接口。如果您有任何疑问,欢迎随时提问。

      本地安装很顺利:

      𝄢 pip install Flask
      Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
      Collecting Flask
        Downloading https://pypi.tuna.tsinghua.edu.cn/packages/bd/0e/63738e88e
        Installing collected packages: MarkupSafe, itsdangerous, click, blinker, Werkzeug, Jinja2, Flask
      Successfully installed Flask-3.0.1 Jinja2-3.1.3 MarkupSafe-2.1.4 Werkzeug-3.0.1 blinker-1.7.0 click-8.1.7 itsdangerous-2.1.2
      

      Q: 那么,我想发布一个天气查询的接口: http://127.0.0.1:5000/api/w/zhuhai 这时就可以从 http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric 获得数据并返回相同的 JSON 数据, 应该如何构建, 请说明关键行为, 并给出详细代码和检验办法,

      A: 为了构建一个天气查询的接口,您可以使用 Flask 来实现。以下是详细的步骤、代码和检验办法:

      步骤一:安装 Flask 和 requests

      首先,确保您已经安装了 Flask 和 requests:

      pip install Flask requests
      

      步骤二:编写 Flask 应用程序

      创建一个名为 app.py 的 Python 文件,并在其中编写天气查询接口的代码。

      from flask import Flask, jsonify
      import requests
      app = Flask(__name__)
      # 创建天气查询接口
      @app.route('/api/w/<city>', methods=['GET'])
      def get_weather(city):
          api_key = 'your_api_key'  # 请将 your_api_key 替换为您在 OpenWeatherMap 上获取的 API 密钥
          url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric'
          response = requests.get(url)
          if response.status_code == 200:
              weather_data = response.json()
              return jsonify(weather_data)
          else:
              return jsonify({'error': 'Failed to retrieve weather data'})
      if __name__ == '__main__':
          app.run(debug=True)
      

      步骤三:运行 Flask 应用程序

      在终端中,进入包含 app.py 文件的目录,并运行 Flask 应用程序:

      python app.py
      

      步骤四:验证接口

      在浏览器中或使用工具如 Postman,访问 http://127.0.0.1:5000/api/w/zhuhai,您应该能够看到返回的 JSON 天气数据。

      关键行为解释

    • @app.route('/api/w/<city>', methods=['GET']):定义一个带有参数的路由,<city> 是一个动态参数,用于指定城市名称。
    • def get_weather(city)::定义处理该路由的函数,根据传入的城市名称构建 OpenWeatherMap API 的 URL,并使用 requests 库发送 GET 请求获取天气数据。
    • api_key = 'your_api_key':将 your_api_key 替换为您在 OpenWeatherMap 上获取的 API 密钥。
    • return jsonify(weather_data):返回获取的天气数据。
    • 检验办法

      通过访问定义的路由,可以在浏览器中或使用工具如 Postman 发送请求来验证接口的功能和返回结果。确保您能够成功获取指定城市的天气数据。

      希望这些步骤和示例代码能够帮助您构建天气查询接口。如果您有任何疑问,欢迎随时提问。

      最后解决产品的使用问题

      Q: 那么, 如何将这个本地接口, 发布到互联网中? 可以用手机浏览器来查询指定城市的天气情况? 请说明有哪些常用方案, 哪一个最简单? 给出具体过程, 以及检验办法,

      A: 要将本地的 Flask 应用程序发布到互联网中,以便可以用手机浏览器查询指定城市的天气情况,您可以考虑以下常用方案之一:使用 ngrok。

      使用 ngrok 发布本地接口到互联网

      步骤一:安装 ngrok

      首先,您需要在本地安装 ngrok。您可以从 ngrok 的官方网站 https://ngrok.com/ 下载适用于您操作系统的 ngrok 客户端,并按照说明进行安装。

      步骤二:启动 ngrok

      在终端中,导航到 ngrok 安装目录,并运行以下命令启动 ngrok:

      ./ngrok http 5000
      

      假设您的 Flask 应用程序在本地运行在端口 5000 上。

      步骤三:获取公共 URL

      启动 ngrok 后,您将会看到生成的公共 URL,类似于 http://a1b2c3d4.ngrok.io。这个 URL 就是您的本地应用程序在互联网上的访问地址。

      步骤四:验证接口

      在手机浏览器中,输入生成的公共 URL,加上您的天气查询接口的路径,例如 http://a1b2c3d4.ngrok.io/api/w/zhuhai,然后您应该能够看到返回的 JSON 天气数据。

      检验办法

      通过在手机浏览器中访问生成的公共 URL,加上您的天气查询接口的路径,来验证接口的功能和返回结果。确保您能够成功获取指定城市的天气数据。

      其他方案

      除了 ngrok,还有一些其他方案可以将本地接口发布到互联网中,例如使用反向代理工具、部署到云服务器等。但就简单性而言,ngrok 是一个非常方便且简单易用的工具,适合快速将本地接口发布到互联网上。

      希望这些步骤和说明能够帮助您将本地接口发布到互联网中,并成功在手机浏览器中查询指定城市的天气情况。如果您有任何疑问,欢迎随时提问。

      进入任何一个新环节时, 都值得请 AIGC 给出多种方案来对比理解, 拓展常识,决策方向...

      A: 这个问题通常是由于 ngrok 的免费版本限制导致的。ngrok 的免费版本在使用时会分配一个随机的子域名,但是这些子域名可能会被其他人使用过或者被滥用,因此有些网络会将其标记为不安全或受限制的网站,导致出现 "403 Forbidden" 的错误。

      为了解决这个问题,您可以考虑以下几种方法:

      购买 ngrok 的付费版本:ngrok 提供了付费版本,付费版本可以获得稳定的域名和更多的功能。购买付费版本后,您将获得一个独特的域名,避免了被其他人滥用的风险。

      使用其他类似的工具:除了 ngrok,还有一些类似的工具可以将本地服务发布到互联网上,例如 localtunnel、serveo 等。您可以尝试使用其他工具来看是否能够解决这个问题。

      部署到云服务器:考虑将您的应用程序部署到云服务器上,例如使用 AWS、Azure、Google Cloud 等云服务商的免费套餐。这样可以获得一个稳定的公网 IP 地址,避免了被标记为不安全的问题。

      希望这些方法能够帮助您解决通过 ngrok 发布本地接口时出现的 "403 Forbidden" 错误。如果您有任何疑问,欢迎随时提问。

      当前, 要快速检验对应方案是否可行, 并随时根据反馈组织新的问题...

      Q : 类似 ngrok 的工具, 比如 localtunnel、serveo 等 都有哪一些? 其中可以安装应用到 M1 芯片的 macOS 环境中的有哪一些? 推荐使用哪一种? 为什么?

      A: 类似 ngrok 的工具有很多,其中一些比较常见的包括 localtunnel、serveo、Pagekite、ngrok2、yaler、frp 等。

      针对 M1 芯片的 macOS 环境,可以安装并使用以下工具:

      localtunnel:localtunnel 是一个简单的工具,可以将本地的 HTTP 服务暴露到公共的互联网上。它是基于 Node.js 编写的,因此可以在 M1 芯片的 macOS 环境中运行。

      serveo:serveo 是另一个类似的工具,它提供了简单易用的方式将本地服务暴露到公网。serveo 也可以在 M1 芯片的 macOS 环境中运行。

      ngrok2:ngrok 的旧版本 ngrok2 也可以在 M1 芯片的 macOS 环境中运行,但需要确保安装了适用于 M1 芯片的版本。

      推荐使用 localtunnel 或 serveo,因为它们都是轻量级的工具,易于安装和使用。同时,它们在 M1 芯片的 macOS 环境中都能够正常运行,并且提供了稳定的服务。另外,这两个工具都有良好的社区支持和文档,方便用户进行学习和使用。

      希望这些信息能够帮助您选择合适的工具。如果您有任何其他问题,欢迎随时提问。

    • Q:看起来 serveo 更加简单, 那么, 如何用 serveo 将 flask 的 localhost:5000 接口反向代理到互联网中, 以便手机也可以访问?
    • A: 您可以按照以下步骤使用 Serveo 将 Flask 应用程序从本地代理到互联网上,以便手机也可以访问:
    • 步骤一:安装 OpenSSH

      确保您的计算机上安装了 OpenSSH。大多数 macOS 和 Linux 系统都会默认安装 OpenSSH。如果您使用的是 Windows 系统,您可以通过 Windows Subsystem for Linux (WSL) 安装 OpenSSH。

      步骤二:启动 Flask 应用程序

      在终端中,导航到包含 Flask 应用程序的目录,并运行您的 Flask 应用程序:

      python app.py
      

      步骤三:使用 Serveo

      在终端中,运行以下命令将本地的 Flask 应用程序代理到互联网上:

      ssh -R 80:localhost:5000 serveo.net
      

      这将创建一个公共 URL,将来自互联网的流量转发到您本地的 Flask 应用程序。

      步骤四:验证接口

      在终端中,您将看到生成的公共 URL,类似于 http://your_url.serveo.net。在手机浏览器中输入这个 URL,加上您的天气查询接口的路径,例如 http://your_url.serveo.net/api/w/zhuhai,然后您应该能够看到返回的 JSON 天气数据。

      检验办法

      通过在手机浏览器中访问生成的公共 URL,加上您的天气查询接口的路径,来验证接口的功能和返回结果。确保您能够成功获取指定城市的天气数据。

      希望这些步骤能够帮助您使用 Serveo 将 Flask 应用程序代理到互联网上,以便手机也可以访问。如果您有任何疑问,欢迎随时提问。

    • Q: 无法访问: 浏览器返回: 访问 3e3a3053f4d26c87df428f3b05fb393b.serveo.net 的请求遭到拒绝您未获授权,无法查看此网页。 HTTP ERROR 403
    • 在终端中, 可以看到:

      HTTP request from 101.32.192.28 to https://3e3a3053f4d26c87df428f3b05fb393b.serveo.net/

      有请求收到, 但是, 没有转发给 falsk 的服务, 这是为什么, 如何解决?

    • A: 这个问题可能是由于 Serveo 无法正确将流量转发到您的本地 Flask 服务导致的。这可能是由于网络配置或防火墙问题引起的。
    • 为了解决这个问题,您可以尝试以下方法:

      检查防火墙设置:确保您的本地计算机和网络防火墙允许来自 Serveo 的流量。有时防火墙会阻止外部流量进入本地计算机,导致无法访问您的服务。

      检查网络配置:如果您在公司或学校的网络环境中,可能存在网络配置限制,导致无法从外部访问本地服务。您可以尝试在家庭网络或其他网络环境中进行测试,看是否能够解决问题。

      尝试其他工具:如果问题仍然存在,您可以尝试使用其他类似的工具,例如 localtunnel 或 ngrok,看是否能够成功将本地服务代理到互联网上。

      联系 Serveo 支持:如果以上方法都无法解决问题,您可以联系 Serveo 的支持团队,寻求他们的帮助和支持。

      希望这些方法能够帮助您解决问题,成功将您的本地 Flask 服务代理到互联网上。如果您有任何其他问题,欢迎随时提问。

      至此, 其实一个随时查询指定城市天气的 MVP 工具已经开发完成, 只是要允许外网可以访问, 这已经不是开发问题, 而是发布和运维问题了...在直播视频中进行了另外的尝试, 已经超出 AIGC 辅助开发的话题, 就此打住

      直播视频中, 是跳到了 HK 的主机中, 重新运行工程, 就可以访问对应服务了...

      summary

      最小最实用 🎃程序员AIGC工具包

    • 一个稳定流畅的网络
    • 一个友好精确的类 ChatGPT 引擎, 推荐 devv.ai
    • 一个友好灵活的编辑环境, 推荐 VSCode
    • 一个清晰具体的目标, 是的目标不明确时, 是无法提出有效问题的, 没有可靠的问题/提示词, 当然也就不可能生成可靠的回答
    • 一组层次良好,前后递进的问题, 值得包含的关键词:
  •