跳到主要内容

95 篇博文 含有标签「python」

查看所有标签

为什么大厂都用 DFA 做敏感词过滤?Python 带你手撸一个!

· 阅读需 11 分钟

敏感词过滤,这个看起来“老掉牙”的功能,其实藏着不少算法的门道。
你可能不知道,大厂评论系统、弹幕平台、甚至聊天机器人背后,都在悄悄跑着一台“小型自动机”——DFA。

今天我们就用 Python,带你从最简单的思路出发,一步步搞懂:
为什么大家都爱用 DFA 算法 来做敏感词过滤。

Python 玩转 MCP:在工具函数中获取请求 Headers 的正确姿势

· 阅读需 3 分钟

一、问题出现:工具函数里怎么拿请求信息?

假设你用 FastMCP 写了一个最简单的工具函数:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("My Server")

@mcp.tool(name="打招呼",description="简单的打招呼")
async def hello() -> str:
return "hello world"

这个函数很简单,运行也没问题。
但是一旦你想要在函数里获取请求头、用户信息、IP、Token 等信息(一般用于一些权限校验,数据打点等操作),就会发现:

函数没有直接的 Request 对象!

这时就要用到关键角色 —— ctx: Context

一行代码让你的 MCP 支持多机部署

· 阅读需 11 分钟

一、SSE 时代的“单机魔咒”

如果你用 Python 开发过 MCP 服务,大概率遇到过这样的场景:服务在本地跑得好好的,一到生产环境就各种幺蛾子。特别是当你想要多机部署时,发现负载均衡器怎么配置都不对劲。

问题根源:SSE 的“粘性会话”魔咒

传统的 SSE(Server-Sent Events)模式有个致命缺陷:需要维护长连接和会话状态。这意味着:

  1. 同一个客户端的请求必须始终路由到同一台服务器
  2. 负载均衡器必须配置复杂的“会话亲和性”规则
  3. 任何一台服务器宕机,正在处理的会话就彻底凉凉

再也不用怕 LLM 返回脏 JSON:用 json_repair 一行代码自动修复!

· 阅读需 5 分钟

为什么大模型生成的 JSON 需要修复

在使用大语言模型(LLM,例如 GPT 系列)时,我们经常要求模型返回结构化的 JSON 数据,以便程序进一步解析和处理。然而,现实中模型输出的 JSON 往往“不够干净”——可能会在前后多出说明文字、注释、甚至中途缺少引号或逗号,从而导致 json.loads() 报错。

告别繁琐解析:用 Pydantic 的 model_validate_json 优雅处理 JSON 数据

· 阅读需 6 分钟

前言

在使用 Pydantic 构建 Python 项目时,我们经常需要将 JSON 数据转换为模型实例。传统的方式通常是先用 json.loads() 将字符串解析成字典,再通过 Model(**data) 初始化对象。
而从 Pydantic v2 开始,引入了一个更高效、更简洁的新方法:model_validate_json()
本文将带你深入理解它的用法、优势、与传统方式的区别,以及如何优雅地处理异常。

使用agent-chat-ui 调试 langgraph

· 阅读需 7 分钟

在之前的文章中,使用langgraph 创建的agent,在进行调试时,都是写 python 代码来自己调用,今天介绍一种更加方便的在线调试langgraph 应用的方案,使用 agent-chat-ui 进行调试。

Agent Chat UI 是一个 Next.js 应用程序,它可以通过聊天界面使用 messages 键与任何 LangGraph 服务器进行聊天。

agent-chat-ui 项目地址 https://github.com/langchain-ai/agent-chat-ui

初始化项目,安装依赖

uv init langgraphui --python 3.11
cd langgraphui
uv sync
uv add langgraph-cli[inmem]

还在自己开发代码执行沙箱吗?试试langchain 官方的这个沙箱吧

· 阅读需 6 分钟

在大模型agent 开发过程中,经常会遇到需要代码执行的操作,以往我们会单独创建一个沙箱,对外暴露一个web 端口,接受用户的代码,将执行结果返回给调用端,这种方式是一种比较安全的方式,但是需要开发沙箱服务,且还要返回符合大模型规范的内容。

langchain 团队近期开源了一个沙箱服务,专门用于执行python 代码,且这个项目和langchain 生态相结合,可以很方便的开发出代码执行工具。

项目地址 https://github.com/langchain-ai/langchain-sandbox

让我们来看一下它的使用吧。

如何使用uv更新项目依赖

· 阅读需 4 分钟

使用uv 管理的python项目,开发了一段时间以后,有很多第三方的依赖有更新了,这时需要更新一下,本文介绍一下如何使用uv 来更新项目依赖。

先安装几个包的老版本

uv add "fastapi==0.114.2"
uv add "httpx<=0.28.0"

此时 pyproject.toml 中的配置信息为

[project]
name = "version-demo"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"fastapi==0.114.2",
"httpx<=0.28.0",
]

[[tool.uv.index]]
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"

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]

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