互客鱼 返回主站

架构

数据模型

Postgres 架构,总结。每个保存租户数据的表都有一个 workspace_id 列(直接或通过 agent_id 传递),相应的模型使用 BelongsToWorkspaceBelongsToAgent

身份

说明
users邮箱 + 密码(bcrypt)。2FA 字段。rolecustomersuper_adminPlatformRole 枚举)。default_workspace_id 用于切换器固定。
workspaces名称 + Stripe 客户/订阅 ID + plan_idapp_settings 风格的覆盖存储在 settings JSON 列中。
workspace_users枢轴。(user_id, workspace_id, role),其中 role 是 owner/admin/member
invitations邮箱 + 角色 + 令牌 + 7 天过期。属于工作区。

智能体及其配置

说明
agentsPersona、主题、system_prompt、guardrails、starter_prompts、allowed_origins、confidence_threshold、language_default、auto_index_visited_pages、is_published、published_version_id。
agent_versions每次发布时创建的不可变快照。运行时从这些读取,而不是从 agent 行读取。
behavior_rules(agent_id, kind, conditions JSON, action JSON, enabled, priority)。
cta_rules用于可点击号召性用语的专用行为规则。
curated_answers(agent_id, triggers[], answer_md, citation_url)。
experiments行为规则的 A/B 配置。

知识

说明
sources(agent_id, type, status, config JSON, last_synced_at, error)。type:url/sitemap/feed/text/notion/google_doc/auto。
documents(source_id, url, title, content, lang)。每个爬取的页面或粘贴的文本一个。
chunks(document_id, idx, content, token_count)。嵌入的单位。
integration_connections(workspace_id, provider, encrypted_token, scope)。Notion、Google Drive、Slack。

Chunk 嵌入仅存在于向量存储中 (Vectorize / Qdrant)— Postgres chunks 表保存 文本 + 元数据,而不是向量。元数据作为标签镜像在向量点上, 以便检索可以按 agent_id 过滤。

对话和消息

说明
visitors(agent_id, anonymous_id, ip_hash, ua, first_seen_at, last_seen_at, visit_count)。anon_id 将小部件重新加载连接到同一行。
conversations(agent_id, visitor_id, page_url, started_at, lang, claimed_by_user_id, claimed_at, cleared_at, is_playground)。
messages(conversation_id, role, content, citations JSON, latency_ms, created_at)。角色:user / assistant / human-agent。
leads(agent_id, conversation_id, name, email, phone, fields JSON)。在 (agent_id, email) 上唯一以去重。
content_gaps(agent_id, sample_question, occurrence_count, sample_conversations[])。当标记低置信度时由 DetectGapJob 创建。

账单

说明
plans(name, slug, monthly_conversations, price_cents, features JSON, is_active, stripe_product_id, stripe_price_id)。
plan_subscriptionsCashier 订阅镜像。(workspace_id, stripe_subscription_id, stripe_status, ends_at)。
usage_events(workspace_id, kind, quantity, occurred_at)。按月聚合用于配额门控。
app_settings单例行。Stripe / 邮件 / 品牌覆盖 + 不在 env 中的 LLM / 向量 / 爬虫配置。每个秘密的加密转换。

操作

说明
audit_logs(actor_id, workspace_id, action, target_type, target_id, metadata, created_at)。每个特权操作。
jobs / failed_jobs标准 Laravel 队列表。failed_jobs 驱动 /admin/jobs/failed
notifications标准 Laravel 通知。

重要的索引

  • conversations(agent_id, visitor_id, started_at desc) — 访客恢复查找每次 init 都运行。
  • messages(conversation_id, created_at) — 聊天历史加载。
  • chunks(document_id) — 源删除时快速删除。
  • usage_events(workspace_id, occurred_at) — 配额门控。
  • leads(agent_id, email) — 去重约束,唯一。
  • workspace_users(user_id, workspace_id) — 唯一枢轴。

静态加密

敏感列使用 Laravel 的 encrypted 转换:集成 OAuth 令牌、app_settings 中的 Stripe 秘密、邮件 密码、自定义 LLM API 密钥。加密密钥是标准的 APP_KEY — 像备份数据库一样备份它。

软删除

大多数表在级联时硬删除。例外情况:

  • plans — 永不破坏性删除(来自工作区的 FK,来自发票的 FK)。通过 is_active 软删除。
  • invitations — 过期后由每日清理作业清除。