技术选型、设计模式、并发控制和系统可靠性的工程决策。
异步优先架构。FastAPI 提供自动 OpenAPI 文档和类型验证,SQLAlchemy 2.0 的 async 支持配合 asyncpg 驱动。
关系型数据与向量索引统一存储。无需额外的向量数据库,降低运维复杂度。支持 cosine distance 索引加速。
通过 Provider 工厂模式抽象,支持本地 vLLM 部署和云端 OpenRouter。统一的 OpenAI 兼容协议。
Neo-brutalist 设计风格。Tailwind v4 CSS-first 配置,Zustand 状态管理,SSE 流式渲染。
通过抽象基类 + 工厂注册表实现 Provider 的热插拔,新增 Provider 只需实现接口并注册。
abstract base class
generate(prompt) → str
OpenAI-compatible
extends VLLM
_PROVIDER_REGISTRY
get_llm_provider()
settings.llm.provider
"vllm" | "openrouter"
聊天后自动检查 Token 阈值,超过时 fire-and-forget 启动后台压缩任务,不阻塞用户响应。
asyncio.create_task()API 立即返回 task_id,客户端轮询 GET /tasks/{id} 获取进度。支持 processing / completed / failed 状态。
TaskManager每小时扫描不活跃会话(24h+),自动提取未处理消息的记忆。后台 while True 循环。
asyncio.sleep(3600)多个请求可能同时触发同一会话的压缩。系统使用 PostgreSQL 行级锁确保同一时刻只有一个压缩任务在执行。
SELECT ... FOR UPDATE — 获取会话行的排他锁skip_locked=True — 如果已被锁定,立即跳过而不等待async_session() 避免与请求共享连接config/settings.yaml — 所有配置的主要来源。分为 llm / embedding / memory / compaction / chunking / search 六个区块。
Settings(BaseSettings) — 嵌套 BaseModel 子配置,提供类型验证、默认值和属性访问器。
前缀 REPLICA_ 的环境变量可覆盖任何配置项。优先级:环境变量 > YAML > 默认值。
使用 Alembic 管理数据库 schema 变更,确保开发和生产环境的数据库结构一致。
alembic/versions/ChatView — 主聊天界面
AdminView — 数据库管理
SessionSidebar
ChatPanel
MemoryPanel
TokenProgress
Zustand app store
用户、会话、消息状态
选中态管理
chat / memory / sessions
users / admin / health
SSE 流式客户端
从 MemCell 中并发提取三种类型的知识,最大化利用 LLM 调用时间。每个提取器独立运行,互不依赖。
所有 LLM 提示词按功能和语言组织,支持中英文切换。通过 settings.memory.language 配置切换。