跳到主要内容

pip install fastapi[standard] 中的 "[standard] " 是什么东西?

· 阅读需 3 分钟

我们在python 中安装第三方包的时候经常使用 pip 安装 常见的命令有

pip install requests
pip install httpx

但是你应该也见过下面这样的命令

image.png

这个是fastapi 官方文档首页提示的安装命令,你是否会好奇,这里为什么会有个 [standard]? 它和直接安装 pip install fastapi 有什么区别?

类似的还有

pip insall mcp[cli]
pip install crewai_tool[mcp]

使用 uv 也可以这样

uv add mcp[cli]
uv add crewai_tool[mcp]

接下来让我们一起看一下这个中括号是什么东西。

为你的mcp server 添加认证功能

· 阅读需 4 分钟

使用 python 开发mcp server 非常简单,但是官方文档对于在sse 或者 streamable 服务里如何添加认证写的很不清晰,我们可以非常快速的开发一个mcp server

from mcp.server.fastmcp import FastMCP
import datetime

mcp = FastMCP("simple-mcp-server")

@mcp.tool(name="获取当前时间", description="获取当前时间")
async def get_current_time() -> str:
return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")


def run():
mcp.run(transport="sse")

if __name__ == "__main__":
run()

以上是一个获取当前时间的mcp server ,很简单,只作为演示,但是如果我们不想让所有人都可以访问,需要添加一些认证信息,目前来讲,由于FastMCP 封装的太高级了,不太好添加,官方有提供基于 OAuth 的认证方式,但是有点复杂,我还没有测试成功过,本文介绍一种简单的在header 中添加认证信息。

这里分别演示 SSE 和 streamable 两种类型如何改造,原理差不太多, 通过创建一个自定义的中间件,在请求处理之前获取一下header 中的 Authorization 参数。

从零开始使用ADK开发agent智能体(2)-多agent开发

· 阅读需 7 分钟

上一篇文章我们构建了一个天气查询的agent,这个agent 功能比较单一,只能完成天气的查询,一个功能丰富的智能体系统,应该可以做很多事情,比如一个学术研究系统,会有信息搜索,文章总结,而信息搜索可能会使用到google 搜索,学术搜索,api 调用,RAG 检索等工具,文章总结可能包含大纲生成,图片生成,文章总结等等工具,且不同的agent 可能用到不同的模型,协调器的模型需要强大的规划推理模型,画图的agnet需要文生图的模型,文本总结可能一般的模型就可以胜任,这也是处于成本的考虑,不同的agent 只关注自身能力擅长的工作,对于复杂的系统,可能会由数量非常多的拥有不同工具能力的agent组成。

本文让我们来跟着官方文档尝试构建一个多agent 系统,我们在之前的天气查询agent 基础之上添加以下功能

  1. 不同的agent 使用不同的模型
  2. 添加子agent 功能
  3. 实现代理之间的智能委派

从零开始使用ADK开发agent(1)-单agent开发

· 阅读需 14 分钟

目前市场上有很多的agent 框架,如 autogen,langgraph,crewai,agno 等等,不同的框架对于agent 的实现有些差异,有的框架侧重点在流程编排如 langGraph,有的框架提供很多内置的工具如crewai,但总体而言,这些agent 框架的基本能力包含工具调用,agent 协同。

前段时间 google 提出了A2A 协议,意在统一这些框架直接的交互方式。本系列我准备从零开始学习一下agent 的开发。

框架我选择了google 的 adk,一来这个框架使用起来比较简单,二来这个框架由google开发维护,对于A2A 协议有着很好的支持。

从零开始使用n8n-环境搭建与快速入门

· 阅读需 6 分钟

n8n 最近的热度很高,这里不想做太多的介绍,最近也在使用n8n 做些项目,所以也从基础开始记录以下学习的过程。

环境搭建

命令行运行

npx n8n

docker 运行

docker volume create n8n_data

docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

自己动手搭建 uv python 智能代理站

· 阅读需 13 分钟

之前有介绍在国内使用 uv 如何设置代理加速python 包的下载,在安装python 时,当时介绍了国内目前只有一个南京大学镜像站,https://mirror.nju.edu.cn/github-release/indygreg/python-build-standalone/, 这个下载站只镜像了 uv 最新的release 文件,所以对于之前月份的文件,如果使用南京大学下载站就会下载失败,本文介绍一种使用海外云服务搭建uv python 的下载代理站实现可以正常下载安装 uv python 的实现方案。

前言:为什么我们需要这个方案?

作为一名 Python 开发者,你一定遇到过这样的烦恼:想用超快的 uv 工具安装 Python,却发现国内访问 GitHub 慢如蜗牛,之前介绍过国内只有南京大学镜像站可用于加速下载,但该镜像站仅镜像了 uv 最新的 release 文件。别担心!今天我要分享的解决方案,能让你像使用国内镜像站一样流畅地安装任意版本的 uv Python!本文将详细介绍一种使用海外云服务搭建 uv Python 下载代理站的实现方案,让你轻松解决下载难题

别让你的SSE MCP服务卡住!一行 requests.post 引发的性能危机

· 阅读需 5 分钟

问题出现

在使用 Python 开发基于 MCP 的 SSE 服务时,如果不小心写了同步阻塞的代码,就非常容易踩进 IO 阻塞的大坑。来看下面这段示例代码:

from mcp.server.fastmcp import FastMCP
from pydantic import Field
import time
import requests

# 初始化mcp服务
mcp = FastMCP("hello-mcp-server")

@mcp.tool(name="url_get", description="访问某个url")
def get_url(url: str = Field(..., description="将要访问的url")):
r = requests.get(url)
return r.text

@mcp.tool(name="计算加法", description="计算加法")
def add(a: int = Field(..., description="第一个数"), b: int = Field(..., description="第二个数")):
return a + b

def run():
mcp.run(transport="sse")

if __name__ == "__main__":
run()

国内使用UV的代理设置指南

· 阅读需 3 分钟

在使用 UV 进行软件包管理和 Python 安装时,由于网络环境的限制,国内用户通常需要设置代理或镜像来加速下载过程。本文将详细介绍如何在不同场景下设置国内加速镜像。

一、安装第三方包时的镜像设置

在使用 uv add 命令安装第三方包时,有两种方法可以设置国内加速镜像:

uv sync 下载包版本问题

· 阅读需 4 分钟

今天我们来聊一个使用 uv 工具进行python 项目管理时会遇到的包版本的问题。

当我们从远程仓库下载以个新的项目时,有了uv 工具,可以使用 uv sync 来一键同步项目开发的python 环境和第三方库,但是我们想象一个问题,如果项目在最早开发或者首次开发时,如使用 uv add mcp 安装了当时的最新版,此时,在pyproject.toml 文件记录的包版本为 "mcp>=1.6.0" 之后过了好久,这个包在pypi 中也更新了,如更新到 "1.7.0",那么当再次使用 uv sync 时,是安装 1.6.0 版本还是 1.7.0 版本呢?