Spaces:
Running
Running
# Qurio Python 后端(FastAPI + Agno)
本后端以 Agno SDK 为核心,实现与前端 无感切换 的对话与工具能力。
关键逻辑(当前 Agno 架构)
- 模型选择
provider == gemini:使用 Agno 的Gemini模型类。- 除 Gemini 外全部走 OpenAI‑compatible:统一使用
OpenAILike(参见 Agno OpenAI‑like 文档)。 - 模型与 base_url 以请求参数为主,未传则用环境变量默认值。
- 消息与流式
- 不做角色映射(
developer会原样透传)。 - 流式输出通过
Agent.run(stream=True, stream_events=True)转成 SSE JSON 事件:text / thought / tool_call / tool_result / done / error
- 工具体系(前端可选)
- 本地自定义工具(local):
QurioLocalTools(calculator / localtime / summarize_text / extract_text / json_repair / webpage_reader / interactive_form / Tavily* 等)。 - Agno 内置工具(agno):按勾选加载 Toolkit:
- TavilyTools / DuckDuckGoTools / ArxivTools / WikipediaTools / YFinanceTools
- 用户工具(custom):HTTP/MCP 工具通过
build_user_tools_toolkit统一封装。
- 存储
- 当前 不启用 Agno DB(前端自行写入 Supabase)。
- CORS
- 由
AgentOS(cors_allowed_origins=...)与兜底中间件同时保证浏览器可访问。
主要文件用途(backend-python/src)
main.py- FastAPI 应用入口,启动 AgentOS。
config.py- 读取环境变量(HOST/PORT/CORS/DEBUG 等)。
services/agent_os_app.py- 组装 FastAPI + AgentOS,注册路由,设置 CORS 与兜底响应。
services/agent_registry.py- 核心模型/工具装配:
- 选择
Gemini或OpenAILike - 注入本地工具、Agno 工具、用户工具
- 处理工具选择策略(
tool_choice)
- 选择
- 核心模型/工具装配:
services/stream_chat.py- 流式对话主服务,将 Agno 事件转为 SSE JSON。
- 支持本地时间自动注入与工具提示。
services/tool_registry.py- 工具清单与分类:
LOCAL_TOOLS / AGNO_TOOLS / ALL_TOOLS。
- 工具清单与分类:
services/custom_tools.py- 本地工具实现(安全计算、时间、摘要、网页读取、Tavily 搜索等)。
services/user_tools.py- 用户工具封装(HTTP/MCP),支持参数模板、域名白名单、超时与大小限制。
services/tools.py- 兼容旧逻辑的本地工具执行入口(仅认 local tools)。
services/generation.py- 标题、相关问题、自动 agent 选择、research plan 等非流式生成。
routes/*.py- 具体 API 端点(stream-chat / title / related-questions / research-plan / deep-research 等)。
相关配置(backend-python/.env)
HOST/PORTFRONTEND_URLS(逗号分隔)OPENAI_BASE_URL/OPENAI_MODEL- 其他 provider 的 base_url / model(如 siliconflow、glm、minimax 等)
TAVILY_API_KEY
与前端约定
- SSE 数据格式不变(前端无感)。
- 工具列表通过
/api/tools返回,按category分组:custom= 自定义工具agno= Agno 内置工具- 其他 = 本地工具分类(math/time/text/web/search...)