权限与运行控制
一轮文献研究可能连续检索、读原文,再组织回答。模型负责判断下一步需要什么;系统负责限制它能访问的材料、允许占用的资源,以及何时结束执行。两者共同决定任务能否按用户选择的范围完成。
一、后端如何限制资料与工具访问
后端根据用户身份、项目范围及当前附件确定可访问的资料。模型负责提出查询,实际候选先经过权限和范围过滤,再参与排序。项目与附件条件同时存在时,可以合并为检索范围。
权限落实在几个不同的位置:
| 位置 | 当前做法 | 对使用体验的影响 |
|---|---|---|
| 资料检索 | 数据库检索条件包含 ACL、项目与附件等过滤项 | 候选证据先经过范围限制,再参与排序和筛选 |
| 工具配置 | 根据工具配置、凭据和本次请求构造可用工具 | 模型只能选择本轮提供的工具 |
| 运行记录 | 列表、导出、停止和恢复均按会话归属校验 | 知道一个 run_id 不足以读取或操作对应任务 |
项目文献范围限制检索资料,网页读取另由可用工具决定。当前启用 open_url 时仍可读取外部地址,因此项目范围与联网能力需要分别配置。
研究记录按会话归属校验,管理员身份也不自动开放其他用户的记录。过程追踪的内容见 Observability 与 Evaluation。
二、沙箱如何隔离工具执行
工具需要运行脚本或处理文件时,可以在沙箱中执行。沙箱限制这次执行能接触的文件、网络和系统资源;具体范围由工具权限、文件挂载和运行环境配置决定。
Skill 提供任务方法,沙箱提供执行环境。读取 Skill 的方法说明可以通过文件读取工具完成;执行其中的脚本时,再由相应工具安排运行环境。
Lito 代码中保留了 Craft 沙箱相关实现,当前普通研究流程未启用这套环境。现有文献读取和检索通过已提供的工具及后端权限控制完成。
三、系统如何控制研究任务的资源占用
长任务需要一个明确的资源边界。Lito 为一次运行保存独立的 RunLimits,在调用模型和工具前检查额度,同时用监视线程检查时间和停止信号。
| 控制项 | 当前默认值 | 计算口径 |
|---|---|---|
| 同时运行 | 2 个 | 后续请求排队,按提交顺序进入 |
| 持续时间 | 600 秒 | 从创建运行开始计时,包含排队 |
| 模型与向量编码调用 | 64 次 | 按受控调用入口累计,与外层循环轮数分别限制 |
| 工具调用 | 30 次 | 按实际进入工具执行的次数累计 |
| Token 预算 | 2,000,000 | 使用 UTF-8 字节量保守估算输入输出,提供商实际 token 另行记录 |
| 重复结果 | 3 次 | 工具名、参数和完整结果相同的指纹累计出现三次后结束 |
| 已知费用 | 100 美分 | 依据已返回用量和已配置价格估算 |
请求中的 run_budget 可以收紧这些上限。费用未知时记录为 unknown,时间和调用额度仍然有效;费用检查依据已返回用量,在后续调用前执行,可能晚于当前调用产生费用的时刻。
例如两项研究正在运行时,第三项会进入排队状态;一项任务释放名额后,排队任务才能开始。这个设计控制本机同时承担的模型、检索和数据库工作量,也让“等待执行”和“已经开始研究”可以分别追踪。
四、用户停止任务后,系统如何结束执行
用户点击停止后,系统会传播取消信号,中断当前模型请求、向量编码任务和数据库查询,再保存结束原因并释放运行名额。
在一次运行中,用户主动停止会记录为 cancelled,时间预算耗尽会记录为 time_budget_exhausted。系统保留已取得的证据,并通过结束原因区分主动中断、额度耗尽和执行错误。
浏览器断连与主动停止分别处理:页面连接中断后,后台任务可以继续运行,用户重新打开页面后读取结果。停止请求会尽力中断正在进行的计算,外部服务已完成的计算仍可能计费。