为什么大厂都用 DFA 做敏感词过滤?Python 带你手撸一个!
敏感词过滤,这个看起来“老掉牙”的功能,其实藏着不少算法的门道。
你可能不知道,大厂评论系统、弹幕平台、甚至聊天机器人背后,都在悄悄跑着一台“小型自动机”——DFA。
今天我们就用 Python,带你从最简单的思路出发,一步步搞懂:
为什么大家都爱用 DFA 算法 来做敏感词过滤。
敏感词过滤,这个看起来“老掉牙”的功能,其实藏着不少算法的门道。
你可能不知道,大厂评论系统、弹幕平台、甚至聊天机器人背后,都在悄悄跑着一台“小型自动机”——DFA。
今天我们就用 Python,带你从最简单的思路出发,一步步搞懂:
为什么大家都爱用 DFA 算法 来做敏感词过滤。
假设你用 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
如果你用 Python 开发过 MCP 服务,大概率遇到过这样的场景:服务在本地跑得好好的,一到生产环境就各种幺蛾子。特别是当你想要多机部署时,发现负载均衡器怎么配置都不对劲。
问题根源:SSE 的“粘性会话”魔咒
传统的 SSE(Server-Sent Events)模式有个致命缺陷:需要维护长连接和会话状态。这意味着:
在使用大语言模型(LLM,例如 GPT 系列)时,我们经常要求模型返回结构化的 JSON 数据,以便程序进一步解析和处理。然而,现实中模型输出的 JSON 往往“不够干净”——可能会在前后多出说明文字、注释、甚至中途缺少引号或逗号,从而导致 json.loads() 报错。
在使用 Pydantic 构建 Python 项目时,我们经常需要将 JSON 数据转换为模型实例。传统的方式通常是先用 json.loads() 将字符串解析成字典,再通过 Model(**data) 初始化对象。
而从 Pydantic v2 开始,引入了一个更高效、更简洁的新方法:model_validate_json()。
本文将带你深入理解它的用法、优势、与传统方式的区别,以及如何优雅地处理异常。
在之前的文章中,使用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]
在大模型agent 开发过程中,经常会遇到需要代码执行的操作,以往我们会单独创建一个沙箱,对外暴露一个web 端口,接受用户的代码,将执行结果返回给调用端,这种方式是一种比较安全的方式,但是需要开发沙箱服务,且还要返回符合大模型规范的内容。
langchain 团队近期开源了一个沙箱服务,专门用于执行python 代码,且这个项目和langchain 生态相结合,可以很方便的开发出代码执行工具。
项目地址 https://github.com/langchain-ai/langchain-sandbox
让我们来看一下它的使用吧。
使用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"
最近看各种 agent 框架有点上头,查看openai 自己的agent 框架文档时,觉得好简单,于是就想实践一下,可是真正操作起来却是困难重重。。。
下面记录一下遇到的各种问题。
我们在python 中安装第三方包的时候经常使用 pip 安装 常见的命令有
pip install requests
pip install httpx
但是你应该也见过下面这样的命令

这个是fastapi 官方文档首页提示的安装命令,你是否会好奇,这里为什么会有个 [standard]? 它和直接安装 pip install fastapi 有什么区别?
类似的还有
pip insall mcp[cli]
pip install crewai_tool[mcp]
使用 uv 也可以这样
uv add mcp[cli]
uv add crewai_tool[mcp]
接下来让我们一起看一下这个中括号是什么东西。