Skip to content

Antigravity/黄伟栋#38

Open
victorHuang818 wants to merge 1 commit into
lights-think:masterfrom
victorHuang818:master
Open

Antigravity/黄伟栋#38
victorHuang818 wants to merge 1 commit into
lights-think:masterfrom
victorHuang818:master

Conversation

@victorHuang818
Copy link
Copy Markdown

@victorHuang818 victorHuang818 commented Jun 5, 2026

完成能力点

  • 后端工程能力
  • Agent 项目经验
  • RAG / 知识库能力
  • 业务系统集成
  • 安全与权限意识
  • 管理后台 / 产品意识

设计说明

核心架构

本项目采用 FastAPI 作为 Web 层,结合内置的 BackgroundTasks 提供了轻量级的异步任务处理。任务与数据持久化使用 SQLite 数据库,保持了单机环境的简单和确定性,避免引入复杂的外部数据库或消息队列。

[HTTP API Entry] ——(Authentication & Injection Guard)——> [SQLite DB]
       |
(Async Dispatch)
       ▼
[execute_run] ——> [Planner] ——> [Executor] ——> [ToolRegistry]

工具调用边界

  • 输入输出渲染: Executor 使用 resolve_template 引擎递归地对步骤入参进行求值,支持将前序步骤的字典返回值(如 $get_inventory.supplier_id)或复杂嵌套对象(如 RAG 引用 $search_rules.citations)按需注入后续工具的入参中。
  • 脱敏安全面: 所有集成工具的返回值必须统一经过 redact_sensitive_data。敏感键如 vendor_secretunit_cost_usd 均被剔除,包含的供应商价格特惠信息如 ACME-TIER-2-REBATE 会被自动脱敏为 [REDACTED]
  • 重试与容错: 工具类 ToolRegistry.call 对具有 TransientIntegrationError 特征的异常进行单步最多 3 次的主动重试,确保网络或接口瞬间抖动时,任务能自我恢复。

RAG 策略

  • 权限感知: 每一条被检索文档都有其 frontmatter 中的 permission 字段。检索接口接收用户当前的 permissions 列表,如果文档所声明的权限不在用户列表中,该文档将被过滤并加入 filtered_doc_ids,绝不在检索中暴露其标题或正文。
  • 分词重排: 采用自定义分词器 tokenize 和基于词频的余弦相似度函数 cosine_score 对可见分块进行多角度相似度打分并降序排列,取相关性最高且打分大于 0.0 的 top k 个 Chunks 产生 RAG 引用(Citations)。
  • 答案生成安全: 利用 FakeLLM 对生成的提示词(Citations & Query)产生确定性 Hash 答复。因为答复来源于 Hash,且响应字段排除了 debugcandidate_note,确保不回传用户恶意 prompt 中所含的指令,防止命令注入与越权。

权限设计

本系统秉持最小特权原则,在两层防御路径上严格把关:

  1. 网关前置鉴权: 校验用户操作,如果 Mallory 缺权限创建任务,网关将阻断并产生 decision="deny"task.create 审计日志,随后返回 403 Forbidden
  2. 运行前/执行中双层校验: 在任务触发阶段,根据 Planner 的计划步骤评估所有将运行工具的对应权限(如 oa:approval:write)。若缺失直接在 HTTP 阶段拦截并生成 run.create decision="deny" 审计日志。在 Executor 真实运行 OA 写草稿等敏感工具前,进行动态二次校验拦截。一旦缺失即触发 decision="deny"approval.draft.create 审计日志,并以 tool.skipped 事件类型在运行轨迹中体现,确保敏感操作物理阻断。
  3. 敏感读取鉴权: /api/runs/{run_id}events 接口仅限请求人、任务创建人或管理员(admin:read)读取,他人读取会记录 deny 审计,保障多租户可见性物理隔离。

本地验证

pytest 执行结果

py -m pytest -v

self_check (Makefile 关联 score.py 的自检) 运行结果

py scripts/self_check.py

已知风险或未完成项

  1. 大并发下的内存状态一致性风险: 当前InMemoryRunStateStore使用进程内字典实现。若未来将 BackgroundTasks 迁移到独立的分布式 Celery Worker 进程中,则需要在 SQLite 或 Redis 中实现 RunStateStore 的持久化版本以保持数据同步。。

  2. LLM 规划偏离边界: 依靠re.search正则提取 SKU 虽能满足当前及变种 SKU 输入,但在面对非结构化或高度含糊的 Prompt 时,依然可能产生意图规划偏离。在真实生产环境需要引入真正的 Few-shot LLM 规划与参数解析组件,来提升 Planner 的意图对齐与召回率。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant