前言 get 请求的参数在url 后面带着,一般叫query params 查询参数 查询参数 声明不属于路径参数的其他函数参数时,它们将被自动解释为”查询字符串”参数 from fastapi import...应用于路径参数的所有相同过程也适用于查询参数: (很明显的)编辑器支持 数据”解析” 数据校验 自动生成文档 默认值 由于查询参数不是路径的固定部分,因此它们可以是可选的,并且可以有默认值。...多个路径和查询参数 你可以同时声明多个路径参数和查询参数,FastAPI 能够识别它们。 而且你不需要以任何特定的顺序来声明。...当你为非路径参数声明了默认值时(目前而言,我们所知道的仅有查询参数),则该参数不是必需的。...但当你想让一个查询参数成为必需的,不声明任何默认值就可以: from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id
以下是一些常用的 Config 类字段: title: 用于为模型提供一个标题,通常用于生成的文档或模式中。...请求的查询参数使用 model 类 @app.get("/get_model") async def get_model(items: Annotated[Item1, Query(description...= 'GET 请求参数模型定义')]): """ GET请求不支持参数的嵌套 curl -X 'GET' \ 'http://127.0.0.1:18081/get_model...通常,查询参数是扁平的键值对,而不是复杂的、嵌套的 JSON 对象。这意味着直接将一个嵌套的 Pydantic 模型用作查询参数并不直接支持。...item_id: Annotated[int, Path(description = '路径参数')]): """ POST请求与路径参数、查询参数的嵌套 curl -X 'POST
如果你需要查询天气,请调用一个名为 'get_current_weather' 的工具。这个工具需要一个 'location' (字符串,必填) 参数,表示要查询天气的城市。...它引入JSON Schema标准化工具描述,明确定义:工具名称(name)功能描述(description)参数列表(parameters),包含类型、描述、是否必填等{ "name": "get_current_weather...而转折点则是24年结构化推理的普及,基于掩码的结构化推理能力(不熟悉的朋友看这里LLM结构化输出)不仅显著提升了模型生成工具JSON Schema的准确性,同时还让Pydantic这个数据验证和解析库进入了大家的视野中...像Langchain、LlamaIndex、DSPY等开源框架都开始引入Pydantic来自动生成工具的JSON Schema。这样不仅解析部分能自动化标准化,生成工具描述的部分同样也被标准化。...MCP服务端适配器,转换请求并返回标准化响应MCP除核心连接简化外,还提供:动态上下文构建:工具列表通过标准list_tools方法动态获取,无需在Agent内部硬编码工具描述协议标准化:明确定义工具发现
技术背景:Py3.6+,Starlette,Pydantic 其实不仅仅是 FastAPI ,就连 Sanic 也是基于 Flask 快速开发的 Web API 框架。...在 url 中进行查询 http://127.0.0.1:8000/items/?skip=0&limit=10 skip:查询的起始参数 limit:查询的结束参数 ? 成功返回查询列表。...查询参数类型转换 FastAPI 非常聪明,足以辨别 路径参数 和 查询参数。...from fastapi import FastAPI from pydantic import BaseModel # 请求主体类 class Item(BaseModel): name:...成功提交并返回 200 状态码 请求主体+路径+查询参数,在请求主体的基础上加入 url 动态路径参数 和 查询参数 from fastapi import FastAPI from pydantic
FastAPI 作为近几年崛起的高性能 Python Web 框架,完美契合了这些趋势:它原生支持异步编程,能充分利用现代服务器的多核资源;内置基于 Pydantic 的数据验证和自动生成的交互式 API...异步框架在处理 IO 密集型任务(如数据库查询、网络请求)时,无需等待单个请求完成即可处理下一个请求,大幅提升并发能力。...Pydantic 优化:数据验证基于 Pydantic 实现,底层使用 Rust 重写的核心逻辑,验证速度远超传统 Python 手动校验。..."} # 带路径参数的 GET 接口 @app.get("/items/{item_id}") def read_item(item_id: int, q: str = None): """根据...item_id 查询物品,q 为可选查询参数""" return {"item_id": item_id, "q": q} # 启动命令(终端执行):uvicorn main:app --reload
深入解读 FastAPI:现代、高性能的 Python Web 框架 FastAPI 是基于 Python 的现代 Web 框架,以其高性能、易用性和自动生成的交互式 API 文档而备受关注。...FastAPI 是一个高性能的 Web 框架,基于 Python 3.7+ 构建,依赖于 Starlette(用于网络框架核心)和 Pydantic(用于数据校验)。...利用 Pydantic 模型定义请求体: from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class..."name": "Laptop", "description": "A high-end laptop", "price": 1500.99, "tax": 100.0 } 3.3 查询参数...查询参数具有自动校验和类型转换功能: @app.get("/search/") async def search_items(keyword: str, limit: int = 10): return
响应体是 API 发送给客户端的数据 注:不能使用 GET 操作(HTTP 方法)发送请求体。 要发送数据,你必须使用下列方法之一:POST(较常见)、PUT、DELETE 或 PATCH。...具体代码例如: from typing import Union from fastapi import FastAPI from pydantic import BaseModel class...为你的模型生成 JSON 模式 定义,你还可以在其他任何对你的项目有意义的地方使用它们。 这些模式将成为生成的 OpenAPI 模式的一部分,并且被自动化文档 UI 所使用。...请求体 + 路径参数 + 查询参数 同时声明请求体、路径参数和查询参数。 FastAPI 会识别它们中的每一个,并从正确的位置获取数据。...Item 是请求体 q 就是查询参数
通过不同的参数声明实现丰富功能。bug 更少。 健壮:生产可用级别的代码。还有自动生成的交互式文档。...FastAPI特性 基于开放标准 用于创建 API 的 OpenAPI 包含了路径操作,请求参数,请求体,安全性等的声明。...API 密钥,在: 请求头。 查询参数。 Cookies, 等等。 加上来自 Starlette(包括 session cookie)的所有安全特性。...兼容包括基于 Pydantic 的外部库, 例如用与数据库的 ORMs, ODMs。 这也意味着在很多情况下,你可以将从请求中获得的相同对象直接传到数据库,因为所有的验证都是自动的。...通过 FastAPI 你可以获得所有 Pydantic (FastAPI 基于 Pydantic 做了所有的数据处理): 更简单: 没有新的模式定义 micro-language 需要学习。
为你的模型生成 JSON 模式 定义,你还可以在其他任何对你的项目有意义的地方使用它们。 这些模式将成为生成的 OpenAPI 模式的一部分,并且被自动化文档 UI 所使用。...启动服务后,使用 postman 测试接口 docs 文档 你所定义模型的 JSON 模式将成为生成的 OpenAPI 模式的一部分,并且在交互式 API 文档中展示: body + path路径参数...FastAPI 将识别出与路径参数匹配的函数参数应从路径中获取,而声明为 Pydantic 模型的函数参数应从请求体中获取。...+ query查询参数 你还可以同时声明请求体、路径参数和查询参数。...如果参数属于单一类型(比如 int、float、str、bool 等)它将被解释为查询参数。 如果参数的类型被声明为一个 Pydantic 模型,它将被解释为请求体。
发送请求体的栗子 注意 请求体并不是只有 POST 请求有,只不过 POST 更常见 在 PUT、DELETE、PATCH 请求中都可以使用请求体 其实,在 GET 请求中也可以用请求体,不过仅适用于非常极端的情况下...,而且 Swagger API 并不会显示 GET 请求的请求体 不使用 Pydantic的栗子 from fastapi import FastAPI import uvicorn app = FastAPI...JSON 字符串转换为 dict 这种场景下,虽然查询参数叫 item,但请求体的字段名可以随意取,字段数量也可以任意个 错误传参的请求结果 选了 text 之后,因为不是 JSON 字符串,FastAPI...给 Pydantic 模型自动的生成 JSON Schema,这些 Schema 会成为生成 OpenAPI Schema 的一部分,并显示在接口文档上 正确传参的请求结果 正常传参,所有属性按指定的类型进行传数据...如果参数也在路径中声明,它将解释为路径参数【item_id】 如果参数是单数类型(如int、float、str、boo l等),它将被解释为查询参数【name】 如果参数被声明为 Pydantic 模型的类型
(两个 Pydantic 模型参数)。...请求体中的单一值 与使用 Query 和 Path 为查询参数和路径参数定义额外数据的方式相同,FastAPI 提供了一个同等的 Body。...如果你就按原样声明它,因为它是一个单一值,FastAPI 将假定它是一个查询参数。 但是你可以使用 Body 指示 FastAPI 将其作为请求体的另一个键进行处理。...多个请求体参数和查询参数 当然,除了请求体参数外,你还可以在任何需要的时候声明额外的查询参数。...嵌入单个请求体参数 假设你只有一个来自 Pydantic 模型 Item 的请求体参数 item。 默认情况下,FastAPI 将直接期望这样的请求体。
传统LLM仅作为“大脑”处理文本生成和推理,而Agent则通过工具充当“感官”和“四肢”,执行实际任务(如查询天气、控制设备)。今天我们将深入解析“工具/函数调用”这一基石是如何工作的?...调用工具并获取结果 else: message = user_input() # 与用户交互此循环模拟人类使用工具的过程:LLM分析输入,识别需调用的外部函数(如API),生成结构化参数...Clarify: 当请求模糊时要求用户澄清。函数Schema(JSON格式)指导LLM生成结构化调用。...对话流程示例典型交互中,Agent基于对话历史动态决策。例如:用户查询“笔记本”触发Search,后续“详细说明产品p1”调用GetProductDetails。...使用instructor库(Pydantic集成)可简化:定义行动类为Pydantic模型(如Search、GetProductDetails)。
✅ 支持嵌套结构:复杂参数也能清晰表达。 关键认知:MCP Tool 的输入输出,必须是 Pydantic BaseModel 的子类,不能是 dict 或 str!...2.2 示例:一个“安全”的订单查询工具 1from pydantic import BaseModel, Field 2from fastapi_mcp import FastApiMCP 3from...3.1 方案一:基于用户上下文的权限校验(推荐) 假设你的系统通过 JWT 传递用户身份,可在 Tool 中注入当前用户: 1from fastapi import Request 2 3def get_current_user...输入参数是什么? 执行结果是否成功? 耗时多少?...《基于 MCP 构建企业级 AI 排障 Agent 实践》
前面说过 FastApi 的一大特点是基于标准的 Python 3.6类型声明,兼具参数校验功能,这一切都要归功于 Pydantic 路径参数 路径参数即 url 路径参数,可以使用 Python 格式字符串相同语法声明路径...之后的一组键值对,以 & 字符分隔,这对爬虫朋友来说再熟悉不过了,比如下面的请求参数 data = {"test": 1, "name": "Python编程与实战"} response = requests.get...其中还有一个是路径参数:item_id, str 类型 请求体参数 要发送请求正文,必须使用一个:POST, PUT,DELETE或PATCH,需导入 Pydantic 的 BaseModel from...同时,FastApi 可以自动帮我们识别请求 body 参数, 路径参数以及查询参数,并准确的获取参数数据。...: item_id: 路径参数 q: 参数是一个的单一类型(如int,float,str,bool,等等)将被解释为一个查询参数 item: 参数声明为 Pydantic 模型的类型,则将被解释为请求
它基于 Pydantic 和 Starlette,使得代码更加简洁且易于绶护。 关键特性: 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。...通过不同的参数声明实现丰富功能。bug 更少。 健壮:生产可用级别的代码。还有自动生成的交互式文档。...WSGI和ASGI的区别 WSGI是基于HTTP协议模式的,不支持WebSocket,而ASGI的诞生则是为了解决Python常用的WSGI不支持当前Web开发中的一些新的协议标准。...PATCH: 修改单一数据 配置请求方法: @app.post() @app.put() @app.delete() @app.get() FastAPI中请求数据 url请求参数是通过...Query 是 FastAPI 提供的一个函数,用于处理查询字符串中的参数。
附录 A:高级提示工程技巧 提示工程简介 提示工程是与语言模型交互的主要接口,是指通过精心设计输入来引导模型生成期望输出的过程。这包括构建请求结构、提供相关上下文、指定输出格式以及展示预期的响应模式。...示例包括先前对话、相关文档(如在检索增强生成中)或特定操作参数。例如,在讨论日本旅行时,可请求提供东京的三个适合家庭的活动,利用现有对话上下文。...这使得它们能够理解可用工具的描述,包括其用途和参数。在接收到用户请求后,模型可以判断是否需要使用工具,识别合适的工具,并格式化调用所需的参数。...该工具名为 'get_current_weather',接受一个 'city' 参数(字符串类型)。 用户:伦敦现在的天气怎么样?...这是需要处理动态或专有信息的 Agentic 系统的关键模式。 示例: 用户查询:"Python 库'X'最新版本有哪些新功能?" 系统操作:在文档数据库中搜索"Python 库 X 最新功能"。
FastAPI是一个基于Python 3.6+的现代Web框架,它专注于高性能和易用性。FastAPI通过结合多种技术实现了出色的性能,包括异步编程、类型提示和自动文档生成。...FastAPI基于Starlette框架,并且使用Pydantic库进行数据验证和转换,从而使RESTful API的开发变得更加容易。...通常情况下,GET请求会从服务器获取数据,因此GET请求的路由通常包含查询参数(比如查询关键字或过滤条件)。...其中item_id是一个整数类型的路径参数,而q是一个字符串类型的查询参数,它可以为空(因为指定了默认值)。...在create_user函数中,我们接收一个名为user的参数,它是一个Pydantic模型类(例如上文提到的User类)的实例。我们可以从这个实例中获取用户提交的数据,并将其保存到数据库中。
LLM多智能体AutoGen教程5:函数调用之避免捏造参数》,我们使用typing对可调用函数进行注解,AutoGen据此自动生成OpenAI API函数调用时的请求参数。...本文将简要介绍Python中typing包的基础操作,顺便简单的介绍一下Pydantic,然后深入AutoGen的流程,探查AutoGen如何通过typing帮助自动生成Open AI API工具调用的参数...,在类型提示中也有用于限定输入参数的字面量可选值Literal,比如打开文件的模式选择, type Mode = Literal['r', 'rb', 'w', 'wb'] def open_helper...有时候,我们经常使用dict来传递参数,然而dict中有哪些键值是不明确的。个人觉得这并不是是一个好的工程方式,当然Python本身是支持这种动态特性的。...Pydantic 前面已经说到Pydantic是世界上最广泛使用的Python的validation库,它基于typing包进行数据验证和序列化,采用Rust编写最快的内核验证代码,可以轻易生成JSON
、查询参数、路径参数等。...类型提示与验证Pydantic模型:介绍Pydantic库在FastAPI中的应用,如何定义模型(BaseModel)进行数据验证与序列化。...调试模式:介绍如何开启FastAPI调试模式,利用其丰富的错误信息与交互式API文档辅助调试。.../{item_id}")async def read_item(item: Item = Depends(get_item)): return item忽视API文档生成:充分利用FastAPI内置的交互式...数据库操作不当:遵循ORM最佳实践,避免在视图函数中进行复杂的数据库查询。合理使用连接池,确保数据库连接的有效管理。
官方能力说明(来自 FastAPI 官方文档的核心总结) FastAPI 提供: ✔ 高性能(可媲美 Node.js / Go) 基于 Starlette(异步 Web 框架) + Pydantic(高性能数据校验...使用 Python 类型提示自动校验参数 自动请求参数校验 自动响应模型校验 自动补全(IDE 体验极佳) ✔ 原生异步 async/await 支持 适合高并发 IO 场景。...缺点 描述 生态比 Django 小 ORM / Admin 不如 Django 完整 Pydantic 学习成本 初学者需要适应 Model 模式 高度依赖类型提示 代码量相比 Flask 多 部分组件需要自行封装...Body 参数使用 Pydantic Model from pydantic import BaseModel class User(BaseModel): name: str age:...六、FastAPI 支持的 HTTP 请求方式 除了 GET、POST,还支持: 方法 用法 PUT 更新资源 DELETE 删除资源 PATCH 局部更新 OPTIONS 预检请求 HEAD 返回响应头