2025年06月24日,Robyn 的作者在发布Robyn v0.7时同时附上了一篇热情洋溢的博文。在文中他宣布了Robyn v0.7开始对AI大模型和MCP的原生支持,这确实是Web框架中的先驱者,CRUD不是Web框架的全部,它在AI时代应该有新的定位!让我们满怀信心期待Robyn v1.0的早日到来!
以下为原文的中文翻译:
四年前,我着手构建一个快速的 Flask 框架,一个真正Fast的 Flask,取名为 Robyn。它拥有大家喜爱的、基于装饰器的简洁 API,但底层引擎使用 Rust 编写,性能超越 Python 生态中的任何框架。我一直执着于性能、异步正确性以及保持核心轻量。如今,Robyn 已从一个玩具项目发展成为数千人使用的工具。
但在前进的每一步,总有一个想法萦绕在我心头:如果我们不止追求速度呢?
Robyn 是首个内置 Web 服务器的现代 Python 框架,随后又增加了认证功能和脚手架功能。它采用 “开箱即用” 的方式,但实现得恰到好处:简洁、可组合,而且真正有趣。
然而,世界并非静止不变!AI 颠覆了 Web 技术栈,我们都在努力应对。
在过去两年里,AI 已从 “可选” 变为基础。API 不再仅仅用于 CRUD 操作,它们还能进行对话、规划、推理和记忆。但相关工具却未能跟上步伐。
我们只能用 LangChain 勉强搭配 Flask,给 FastAPI 套上 RAG 的 hacks,在笔记本中运行代理循环。这一切都显得杂乱、痛苦,而且极难扩展。在这个新时代,没有真正能接替 Django 的框架。于是,我们只能应付、拼凑、打补丁。
但或许…… 我们不再需要这样了。如果 Robyn 能成为 Flask 和 Django 的精神继承者呢?它依然快速,依然原生支持异步。但现在,它为 AI 原生工作流提供了 “开箱即用” 的功能。
试想一个能理解现代应用语言的框架:记忆、上下文、代理和工具,而不仅仅是视图和模型。
-
以记忆为核心(由 Mem0 或任何后端提供支持)
-
原生支持代理原语(LangGraph、Autogen 或其他运行器)
-
具有实时验证和追踪功能的类型安全 API
-
统一的管理界面 —— 同时为人类和代理提供权限控制
-
AI 感知的认证机制
-
类似 FastAPI 的参数和 Pydantic 的验证
-
兼容 RSGI/ASGI,可使用现有中间件
-
同一个框架中同时支持 MCP 和 Web 路由
简而言之:开箱即用,但又有自己的设计理念且易于扩展。就像 Django 和 Flask 的结晶,但专为有 “思考” 能力的应用而设计。
为什么AI Agent应该成为 Web 技术栈的一部分?
如今,Agent只是事后考虑的东西。你启动一个 LangChain 运行器,接入一个Memory后端,祈祷一切顺利,然后发布拼凑的代码。Robyn 旨在改变这一现状。代理应该成为新的原语,就像路由、认证或表单一样。只需定义一次,为其提供记忆功能,然后将其暴露为简单的端点,就这么简单。
from robyn.ai import agent, memory
mem = memory(provider="mem0", user_id="guest")
chat = agent(runner="simple", memory=mem)
@app.get("/chat")
async def ask(request):
q = request.query_params.get("q", [""])[0]
return await chat.run(q)
无需管理各种微服务,只需像管理 HTTP 路由一样管理你的代理。我希望它们是可插拔的 —— 可以使用我们内置的运行器,也可以替换为 LangGraph、CrewAI 或你自己的运行器。就像ORM,但具有异步、可组合和 Python 风格的特点。
如果 MCP 只是路由呢?
目前,模型上下文协议(MCP)感觉像是学术实验,实现分散,框架也各不相同。但如果它们只是路由呢?如果可以像 API 一样,以原生和可组合的方式暴露代理呢?在 Robyn 中,你完全可以做到:
from robyn import Robyn, auth
from robyn.ai import agent, memory
from typing import Optional, Dict, Any
app = Robyn(__file__)
@app.before_request()
@auth(required=True)
async def check_user(request):
return request.user
@app.mcp.tool()
def simple_chat(message: str) -> str:
return f"Processed: {message}"
@app.mcp.resource("notes://{note_id}")
"""Get a note by ID"""
return f"Note {note_id}: This is a sample note"
无需额外的服务器,无需额外的辅助组件。
Robyn 应用会是什么样的?
@app.get("/agent")
async def agent_endpoint(request):
q = request.query_params.get("q", [""])[0]
user_id = request.query_params.get("user_id", ["guest"])[0]
# 为该用户初始化带记忆的代理
mem = memory(provider="mem0", user_id=user_id)
agent = chat_agent(runner="openai", memory=mem)
return await agent.run(q)
@app.get("/memory")
async def memory_endpoint(request):
user_id = request.query_params.get("user_id", ["guest"])[0]
action = request.query_params.get("action", ["get"])[0]
mem = memory(provider="mem0", user_id=user_id)
if action == "get":
return {"memories": await mem.get_all()}
elif action == "clear":
await mem.clear()
return {"message": "Memory cleared"}
@app.post("/users")
async def create_user(request):
data = request.json()
# 类似ORM的数据库操作
user = User.create(
name=data.get("name"),
email=data.get("email"),
preferences=data.get("preferences", {})
)
return {"user_id": user.id, "created": True}
从小处着手,无需任何样板代码即可快速扩展。性能仍然是核心 Python 应该让人感觉快,而不是打补丁后的快。Robyn 在关键之处保留了 Rust 运行时:底层异步 I/O、并发和路由。其余部分则保持 Python 风格。我们正在与 Granian 合作,以获得原生 RSGI/ASGI 支持 —— 将服务器内部工作交给经过验证的、生产级的实现。
为什么这一切都很重要?
现在,你正在用代理、记忆和 LLM 构建应用,但你的框架对这些概念一无所知。Robyn 将会理解。因为它不仅仅是增加 AI “支持”,而是围绕 AI 应用实际需要的工作流重新设计。
接下来会发生什么?(非 AI 原生功能)
Robyn 现在已经很快了,但接下来还会有:
- 更强的类型和验证
- 更 Python 风格、更简洁的 API
- 完整的 RSGI/ASGI 集成(通过 Granian)
- 一流的表单支持
- 即插即用的类型化查询参数
- 更好的文档和更多内容等等……
最重要的是:Robyn v1.0—— 用于认知软件的全栈框架的稳定发布。
我们的方向
Robyn 一开始就拥有你期望从微框架中获得的简洁魅力,只需一个路由和一个 return。但在那个简单的装饰器背后呢?是一个完整的栈,等待被解锁。如果你需要,就有 ORM。当你需要时,就有记忆、代理、类型、认证、管理界面、上下文…… 第一天使用时界面简洁,第三十天就有丰富的功能。这才是现代框架应有的样子。
感谢你一直以来参与 Robyn 的发展历程。是你们将它从一个副业项目变成了一个严肃的平台。接下来的步骤是构建 Robyn v1.0。这是一个雄心勃勃的项目,但我相信它值得一试。我想这需要几个月的时间。请参与进来,我期待听到你的反馈、质疑,当然还有你的支持。请传播这个消息!了解 Robyn 的人越多,我们就能一起构建更多东西。