跳转到主要内容
本项目的所有重要更新都记录在此。 格式遵循 Keep a Changelog。版本对应于 Roadmap 里程碑。

[未发布]

安全性

  • 修复了双因素认证绕过漏洞。 API 和聊天/SSE 认证现在需要真正的访问令牌(SSE 流式传输也接受其短期票证);2FA 临时令牌、刷新令牌和绑定/SSE 票证——所有这些都用同一密钥签名——不再能被重放用于认证,因此仅盗取密码无法跳过第二因素。
  • OAuth 登录不再在未验证的电子邮件上自动链接到现有账户。 第三方账户仅当提供商标记该电子邮件已验证时才会通过电子邮件与本地账户匹配,防止通过攻击者控制的未验证地址进行接管。

新增

  • file_ops.apply_patch — 应用V4A格式的diff补丁到文件。 让智能体通过基于行的分块和模糊空白匹配进行多行编辑,补充现有的find_replace功能,适用于精确子字符串匹配不稳定的情况。
  • 输入和输出验证的内容护栏。 新的core/agent/guardrail层与现有的工具权限闸门和安全检查并行运行(而非替代)。输入护栏(默认:越狱短语检测器)在任何LLM调用前运行,如果触发则中止该轮次,节省token并在聊天中显示清晰的”已阻止”提示。输出护栏在最终答案后运行。可通过FIM_GUARDRAILS_INPUT / FIM_GUARDRAILS_OUTPUT环境变量配置;每个智能体的UI配置将在未来版本推出。

已更改

  • /settings?tab=billing 现在以全宽渲染,与其他设置标签页在视觉上保持一致。 移除了 max-w-4xl 宽度限制和冗余的外层滚动容器;删除了页面标题图标;将套餐/使用情况/订阅/套餐对比卡片重写为使用与”使用情况”标签页相同的精简边框div模式(紧凑标签 + tabular-nums 数字)。旧布局看起来像一个独立页面被意外楔入设置框架中。

已修复

  • 代币配额现在在您的账单日期重置,而不是每月1日。 使用情况始终按日历月计算,无论您何时订阅,因此付费用户可能在20日被收费,却要等到1日才能获得新配额——在月底开始的订阅实际上会在几天后获得第二个完整配额。配额现在在每个订阅的月度周年日期重置(免费用户仍按日历月重置)。按年计费的套餐现在每月正确补充,而不是每年一次。“套餐与账单”选项卡、“使用情况”卡片和超配额对话框现在都在同一时间窗口内测量使用情况并显示重置日期,因此显示的”本期使用情况”与聊天实际停止您的时间点相匹配。
  • 订阅续订现在推进账单周期。 在自动续订时,显示的周期结束日期在之前的周期保持冻结,即使Stripe已收费并将订阅向前推进——续订处理程序仅从发票有效负载中读取新周期,其中该信息不可靠。现在它从Stripe检索权威的周期边界,因此周期结束日期(和配额重置)在每次续订时向前移动。这也消除了一个潜在风险,即取消此类订阅可能会立即降级账户,而不是在真正的周期结束时降级。
  • 原始工具调用协议不再泄露到智能体答案中。 当模型即兴创作工具调用作为纯文本时(例如发出 <tool_call>/<tool_response> 块——当它尝试使用不可用的工具时很常见),该文本——包括其中的任何base64/文件转储——可能会逐字出现在回复中。所有答案路径现在都会删除此伪协议,解析器还会将 {"name","arguments"} 方言识别为真正的工具调用,而不是泄露它。
  • 智能体轮次期间间歇性的 APIConnectionError: Connection error 突发。 共享HTTP连接池为空闲的keep-alive连接保留最多30秒;当上游中继或NAT静默回收空闲连接时,下一个请求重用了半死的套接字并失败。Keep-alive过期现在默认为短5秒(轮次内的热连接仍被重用),池可通过 LLM_HTTP_MAX_CONNECTIONS / LLM_HTTP_MAX_KEEPALIVE / LLM_HTTP_KEEPALIVE_EXPIRY 调整——设置 LLM_HTTP_MAX_KEEPALIVE=0 可在不可靠的上游后面完全禁用连接重用。
  • API密钥使用统计(total_requestslast_used_at)现在在每个请求时持久化。 以前增量是在请求的数据库会话中写入的,该会话仅由执行自己写入的端点提交——因此只读API密钥调用(仪表板、文件、模型、导出等)会静默回滚计数器。使用情况现在记录在独立的自提交会话上,与请求成功解耦。

[v0.8.6] - 2026-05-08

新增

  • Stripe 计费——Pro 计划订阅。 /settings?tab=billing 下新增 Plan & Billing 标签页,显示当前计划、月度令牌使用量、周期重置时间,以及 Upgrade to Pro(Stripe Checkout)或 Manage subscription(Customer Portal)。成功结账后打开一个庆祝模态框,显示购买的计划;重定向参数仅在关闭后才被清除,因此刷新不会重新触发。配额强制执行遵循每个用户的计划;已取消的订阅在付费期结束前保持 Pro 状态;流式传输中的 402 配额对话框现在会跳转到计费标签页。管理员可在 Admin Panel → Billing 下管理计划和浏览订阅。Pro 目前使用 Stripe 测试模式价格;生产环境切换时替换价格 ID。
  • 管理员控制的计费功能开关。 Admin → System Settings 中的 Enable Stripe Billing 开关控制整个 Stripe 管道——用户端 /api/billing/*、Stripe webhook、管理员计划/订阅 CRUD,以及前端计费标签页和管理员导航在关闭时都会隐藏或返回 503。首次激活时会创建 Free + Pro,设置 default_plan_id 指针,并回填 users.plan_id;后续的关闭/打开仅是纯标志位切换。没有 Stripe 凭证的私有部署保持干净。当计费关闭时,配额链会回退到管理员设置的 Default Monthly Token Quota
  • 按用户无限配额 + Registered 列。 空配额字段继承全局限制;0 授予无限配额。之前两者会折叠为同一状态。用户表还新增了 Registered 列。
  • 非英文文档(zh / ja / ko / de / fr)现在显示完整的 API Reference 和 Channels Configuration 部分——Endpoints 组和 Configuration > Channels 子组之前仅提供英文版本。

已更改

  • Plan & Billing现在是Settings标签页,而非独立页面。/settings/billing折叠回/settings?tab=billing,以便用户切换套餐时左侧导航保持可见(与GitHub / Linear / Notion一致)。独立路由会重定向,因此旧书签和早期部署的Stripe Checkout返回URL继续有效。Subscriptions标签页已重命名为Marketplace以区分套餐订阅。
  • 免费套餐配额在管理员Plans页面上为只读。 数据来自System Settings → Default Monthly Token Quota;在该处编辑会自动传播。后端对免费套餐的PATCH请求会静默忽略monthly_token_quota
  • Token配额在计费页面、套餐卡片和管理员Plans表格中显示为5M / 100K 而非5,000,000。管理员INPUT字段仍接受原始数字。
  • 翻译权限从各语言环境文件转移到单一词汇表。 规则位于scripts/translation-glossary.md,加载到每个LLM翻译调用中(JSON、MDX、README)。预提交钩子无条件拒绝对生成的语言环境文件进行手动编辑。要修复翻译错误,请编辑词汇表并使用--force重新生成。
  • 许可方和管辖法律。 FIM One Source Available License现由FIM Labs Pte. Ltd.(新加坡)授予;管辖法律从中国转移至新加坡;争议由新加坡SIAC仲裁解决(单仲裁员,英文)。新的顶级NOTICE文件记录研发归属、商标和第三方组件政策。允许使用或限制条款无变更。

已修复

  • 管理员对智能体、连接器、知识库和MCP服务器的批准/拒绝操作在PostgreSQL上不再失败。 publish-review reviewed_at 列现已支持时区感知,因此在PG上的批准写入操作可以成功(该bug在SQLite开发数据库上不可见)。
  • OAuth用户可以再次刷新其会话。 OAuth颁发的刷新令牌以刷新端点无法匹配的形式存储,导致访问令牌过期后必须重新登录;现在它以摘要形式存储,与其他所有路径一致。
  • 浏览器标签页标题现在反映/settings/admin中的活动子标签页(例如Settings · Billing — FIM One),因此多个固定标签页可以区分。
  • 使用情况页面在管理员设置了默认令牌配额时不再报告”无限制” ——现在通过统一的配额链解析(按用户覆盖→套餐层级→系统默认值)。
  • 智能体设置:绑定资源在进入时不再闪烁显示”(已删除)”。 孤立徽章在库存获取完成后再渲染。
  • Toast通知现在遵循浅色/深色主题,而不是硬编码为深色。
  • 按智能体的使用情况分解不再为与已删除智能体关联的对话重复显示”直接聊天”行。
  • 自托管./deploy.sh不再因container name already in use而失败 ——在docker compose up前清理哈希前缀的僵尸容器和DooD沙箱子进程。
  • 推送后不再产生冗余的chore(i18n): sync translations提交 ——预提交翻译钩子现在将.translation-cache.json与翻译文件一起暂存。
  • 当确认必需的工具在未绑定智能体的会话中运行时,智能体聊天不再崩溃 ——当没有智能体可路由时,闸门优雅地退出。
  • 在历史记录包含来自已停止轮次的孤立用户消息的严格交替提供商(Claude)上,重试不再失败 ——相同角色的连续消息在分派前折叠为单个轮次。
  • 演练场重试在流前窗口期间不再短暂显示两次查询。
  • ReAct智能体现在在操作员拒绝批准请求后确认并停止,而不是重试改述的工具调用。
  • 演练场”建议的后续问题”返回并现在按智能体选择加入(默认关闭;智能体设置中新增Follow-up Suggestions切换)。

[v0.8.5] - 2026-04-23

Added

  • 贡献者友好的国际化工作流:贡献者不再需要配置 LLM_API_KEY 来提交涉及英文源文件的PR。如果跳过本地预提交翻译步骤(无密钥),新的 .github/workflows/i18n-sync.yml 工作流会在PR合并后在 master 上将EN翻译为ZH/JA/KO/DE/FR,并自动提交结果。预提交钩子现在还会拒绝对生成的语言环境文件的手动编辑(可用 ALLOW_LOCALE_EDIT=1 覆盖以进行合法的翻译修复),防止EN源和翻译输出之间的无声漂移。
  • 国际化CI回退端到端验证:烟雾测试推送(仅EN,本地翻译钩子跳过)确认GitHub Actions工作流检测到更改的源,翻译为所有五种语言环境,并使用 [skip ci] 自动提交到master以防止递归。
  • Exa集成文档页面:侧边栏中的专用集成部分,包含一流的Exa页面,涵盖完整的Exa搜索表面(neural / fast / deep-reasoning / instant)、过滤、内容检索和三个针对新闻监测、研究论文检索和深度推理智能体的调优预设。作为Exa集成目录的合作伙伴面向的登陆页面。
  • 信创数据库支持:数据库连接器现在列出KingbaseES(人大金仓)、HighGo(瀚高)和DM8(达梦)以及PostgreSQL/MySQL。KingbaseES和HighGo与PG兼容,使用 asyncpg 无需额外依赖;DM8使用官方 dmPython 供应商wheel。独立的 scripts/test_xinchuang_dbs.py 让运维人员从CLI验证实时连接。
  • 飞书通道+确认闸门(通过IM):新的 Channel 资源类型(组织范围,凭证静态加密)让组织连接飞书应用进行出站消息传递。标记为 requires_confirmation=True 的工具现在向配置的飞书群发送Approve/Reject交互卡片,而不仅仅在门户中显示确认对话——群内任何授权成员都可以直接从飞书批准或拒绝。涵盖设置→通道管理UI(列表、创建/编辑含脏状态保护、详情含可复制回调URL、测试发送)、CRUD API(/api/channels)和飞书事件回调端点(/api/channels/{id}/callback)含签名验证和URL质询支持。v0.9 IM通道集成路线图项的第一步,提前于2026-04-24路演发布。
  • 智能体钩子系统(骨架)src/fim_one/core/hooks/ 中新的 PreToolUseHook / PostToolUseHook 抽象让确定性逻辑在LLM循环外运行——FeishuGateHook是第一个具体实现,附加到确认闸门流。完整的钩子生命周期+用户定义的YAML钩子仍在v0.9范围内。
  • 钩子系统现已在ReAct和DAG运行时上线:在其 model_config_json 中声明 hooks.class_hooks 的智能体会在每个聊天会话上实例化和注册这些钩子。第一个消费者——FeishuGateHook——在智能体调用其连接器操作标记为 requires_confirmation=True 的工具时自动触发,向组织的飞书群发送Approve/Reject卡片,阻止工具,并根据判决恢复或中止。之前钩子抽象已就位,但网络层中没有任何东西将其连接到实时聊天。
  • 通道和钩子系统架构已文档化:新的 docs/architecture/hook-system.mdx 解释了三个钩子点、为什么钩子在LLM循环外运行,并端到端演示FeishuGateHook。现有架构页面(system-overview、organization、react-engine、philosophy)交叉链接到它。README现在将消息通道列为v0.8的一流功能,应用层图表在门户/API/iframe旁边包含IM目标。
  • 钩子审批演练场:通道详情表现在有”测试审批流程”操作,模拟敏感工具调用,向关联的飞书群推送真实确认卡片,并实时轮询审阅者的决定。与现有预览按钮不同,这执行完整的生产路径(真实 ConfirmationRequest 行、真实飞书回调、状态转换),因此演示和预发布排练使用生产钩子会使用的相同代码路径。
  • 按智能体任务完成通知:智能体现在可以在长时间运行的ReAct或DAG任务完成时向组织的通道(当前为飞书)推送摘要卡片。可在设置→智能体→通知中按智能体配置。通用出站通知模式的第一个消费者。
  • 可配置的确认闸门——内联通道:每个智能体现在在设置中有”审批”部分,包含三种路由模式(自动/仅内联/仅通道)、审批人范围选择器(发起人/智能体所有者/组织内任何人)、“要求每个工具调用的确认”覆盖和显式审批通道选择器。自动模式使用链接的通道(如果存在)并优雅地回退到聊天流中的内联审批卡片——因此没有任何通道的智能体仍然获得真实的审批UX而不是无声失败。新的 POST /api/confirmations/{id}/respond 端点与飞书webhook共享单一决策记录路径,因此每个审批——无论是在聊天中点击还是在飞书群中点击——都会标记相同的 approver_user_iddecided_at 审计字段。

已更改

  • 演练场加载指示器现在使用微妙的文本闪烁效果,而不是在8秒后冻结在伪满宽度的不逼真进度条。将两个现有的闪烁实现(.shiny-text.text-shimmer)统一为单个主题感知的原始组件,并提供可选的暖色预设。
  • 连接器卡片现在在连接器禁用allow_fallback时显示”Private default”徽章(带工具提示),以便所有者一目了然地识别哪些连接器要求每个用户提供自己的凭证。连接器设置表单中”Allow-Fallback”切换下的帮助文本也澄清了该标志仅限制与其他用户的共享——所有者始终可以使用自己的默认凭证,无论如何。

已修复

  • 连接器所有者使用allow_fallback=false且仅有默认凭证(无按用户凭证)发起的连接器调用不再返回401”Requires authentication”错误。所有者现已豁免于回退闸门——该标志仅控制其他用户是否可以借用所有者的默认凭证。之前所有者自己的智能体在无声地发送未认证请求,同样的问题也影响了工作流connector_action节点。
  • 对话导出现在为自动路由的DAG对话显示正确的模式标签(“Planner”/“规划”),而不是始终显示”Standard”。
  • 导出时间戳现在遵循用户配置的时区,而不是显示原始UTC时间。
  • 上传的文件内容不再泄露到导出的对话中;仅包含用户的消息文本。
  • 当提供商为每个流式工具调用增量重复使用index=0时,并行工具调用不再发生碰撞;聚合器现在通过id或名称变化检测边界,并将后续增量重新映射到正确的槽位。
  • 设置→通道现在反映当前用户的组织角色:成员(非管理员/所有者)看到禁用的”新建通道”按钮、隐藏的编辑/启用-禁用/删除操作、只读横幅和权限感知的空状态——而不是在提交时失败并显示”需要组织管理员访问权限”的启用CTA。
  • 会话过期重定向现在保留查询字符串,因此用户在重新认证后会返回到他们正在查看的确切选项卡/筛选器,而不是裸路径。
  • Feishu通道表单在与分层在对话框上方的聊天选择器交互时不再显示虚假的”放弃未保存的更改”提示。
  • Feishu通道设置提示在UI本身已是中文时不再重复中文标签(例如之前渲染为”事件与回调(事件与回调)”)。
  • 架构管理器中的”全部标注”不再返回500内部服务器错误——全标注后端路径存在未绑定变量的bug,阻止了每次调用。
  • 编辑数据库连接器现在在密码字段中显示********占位符,而不是三点掩码文本,使得显而易见保留字段空白会保留存储的密码。
  • 更新连接器操作不再折叠详情面板——编辑后的操作保持选中状态,以便用户可以继续迭代。
  • AI连接器编辑器现在区分成功、部分失败和完全失败,而不是对所有三种情况显示相同的”已完成”消息。失败原因内联显示,以便用户可以看到实际出了什么问题。
  • AI连接器编辑器不再能一次性无声地清除多个操作。批量删除(>2个操作)现在需要用户指令中的显式破坏性关键字(“rebuild”、“全部重建”、“wipe”等);否则操作被拒绝并显示清晰的错误,保护requires_confirmation/JMESPath设置免受意外丢失。
  • 门户聊天中的确认卡现在显示请求是否被路由到通道(例如Feishu)或内联处理,以及关于谁被允许审批的人类可读提示(发起者、智能体所有者或任何组织成员)。通道路由的请求也会生成内联待处理卡,以便用户不会想知道通知是否真的被发送了。
  • Feishu审批卡在第一次决定后变为只读:/callback webhook返回一个替换卡,其中删除了审批/拒绝按钮,标题着色为绿色(已批准)或红色(已拒绝),防止重复点击。来自过时Feishu客户端的仍然到达的重复点击会收到”此请求已被批准/拒绝。“提示和一份已决定卡的新副本,以便过时的视图赶上。
  • 恢复了通道行和详情表上的普通”发送测试消息”操作。审批演练场执行完整的钩子往返,但仅通知通道(未连接审批钩子)仍需要快速凭证/连接性健全性检查,普通测试发送覆盖了这一点。
  • 对同一Feishu审批卡的并发点击不再都能成功。/callback处理器现在通过条件UPDATE ... WHERE status='pending'翻转ConfirmationRequest状态,并使用受影响的行数来决定哪个调用者”赢了”;之前两个并行请求都可能读取pending并竞争写入,可能导致同一行上批准后拒绝。
  • 待处理的审批请求现在通过后台清理器在CHANNEL_CONFIRMATION_TTL_MINUTES(默认24小时)后自动过期。防止数天后的过时点击翻转已被拆除的智能体状态;过期卡上的下一次点击会收到灰色”已过期”已决定卡和”不再活跃”提示。
  • 发送测试消息现在传递纯文本通知(无审批/拒绝按钮),仅存在于通道详情表中——不在行下拉菜单中。不打算使用审批钩子的用户不会被”测试”消息上的交互按钮混淆。审批往返测试仍可通过审批演练场按钮获得。
  • 通道详情表紧凑:现在”如何完成设置”是默认折叠的可折叠部分(因此对于已配置的通道不会主导表),外部填充被减少,以便内容更靠近表边缘。
  • Builder AI不再将掩码(****)凭证报告为缺失——它现在识别它们为已配置并跳过虚假的”凭证缺失”指导。
  • 演练场智能体列表现在显示所有可访问的智能体,而不仅仅是已发布的,因此草稿智能体可以在不发布的情况下进行测试。
  • 聊天图像上传不再在格式错误的data: URL上崩溃流——MIME提取器现在安全地回退到application/octet-stream,而不是在生成中途引发IndexError。
  • 演练场图像缩略图现在通过AbortController在卸载时取消飞行中的获取,避免过时的blob-URL分配和快速导航期间的浪费带宽。

[v0.8.4] - 2026-04-17

新增

  • 对话恢复:合成的 tool_result 行现在在中断的轮次后持久化;客户端可以通过 POST /chat/resume 使用最后看到的游标恢复断开的 SSE 流。
  • 演练场现在使用 /chat/resume 端点自动重新连接断开的 SSE 流,采用指数退避策略(最多 3 次尝试);在恢复期间显示”正在重新连接…”指示器。
  • 提示词缓存可观测性:cache_read_input_tokenscache_creation_input_tokens 从 LLM 响应中捕获,按轮次在 TurnProfiler 中聚合,记录为 turn_cache 摘要行(读取/创建令牌 + 估计节省),并在聊天 done_payload 中的新 cache 字段下呈现。支持验证 Anthropic 提示词缓存是否真正命中,并可作为检测 API 中继站是否遵守缓存折扣的检测器。

已更改

  • 系统提示词现在使用带有Anthropic提示词缓存断点的记忆化分段注册表,在稳定前缀上缓存——对于Claude模型,每轮缓存前缀的令牌成本降低约60-80%。ReAct JSON模式、原生函数调用模式和合成都为支持缓存的提供商(Claude、Bedrock Anthropic、Vertex Claude)发出两条系统消息,并为所有其他提供商回退到单个连接消息。

已修复

  • 思维/推理令牌现在在多轮对话中持久化——Anthropic signature 字段根据API要求被捕获并在每个回合中重放。
  • 提供商感知的推理重放策略:reasoning_content(来自DeepSeek-R1、Qwen QwQ、Gemini thinking、OpenAI o-series)不再在后续回合中重放给非Anthropic提供商。之前该字段在 ChatMessage.to_openai_dict() 中被无条件序列化,这违反了提供商文档(DeepSeek和Qwen都明确记录”不要在消息历史中发送 reasoning_content 回来”),并在每次多轮交换中无声地使其自动前缀/KV缓存失效。策略集中在 core/prompt/reasoning.py 中——Claude系列(包括Bedrock和Vertex代理)仍按要求使用签名重放思维块。

[v0.8.3] - 2026-04-16

新增

  • convert_to_markdown 内置工具 — 新的通用智能体工具,可将任何文件、URL、YouTube 链接或数据 URI 转换为使用 Microsoft MarkItDown 的干净 Markdown。支持 PDF、Word (.docx)、Excel (.xlsx/.xls)、PowerPoint (.pptx)、HTML、JSON、CSV、XML、ZIP、EPUB、Outlook .msg、图像、音频(语音转文本)和 YouTube 转录。默认对所有智能体可用——与 web_fetch 同级。配置了支持视觉的 LLM 时,嵌入的图像和扫描的 PDF 页面会通过官方 markitdown-ocr 插件自动进行 OCR。此前该功能隐藏在后台 RAG 摄取管道中;现在智能体可在交互式对话路径上使用它。
  • 通过 markitdown-ocr 进行文档 OCR — DOCX / XLSX / PPTX 中的嵌入图像和扫描的 PDF 页面现在使用与 FIM One 其余部分路由的支持视觉的 LLM 进行 OCR。适用于内置 convert_to_markdown 工具和 RAG 摄取管道,因此聊天时转换和知识库摄取为相同输入生成字节相同的 Markdown。
  • 文档 OCR 的通用视觉提供商支持 — 新的 LiteLLMOpenAIShim 鸭子类型将任何 FIM One OpenAICompatibleLLM 包装在 openai SDK 的 .chat.completions.create(...) API 形状中,然后通过 litellm.completion() 分发。MarkItDown(硬编码 openai SDK 表面)现在可以使用 Anthropic Claude、Google Gemini、Azure、Bedrock 和 LiteLLM 支持的任何其他提供商——FIM One 中无需按提供商适配器代码。
  • 视觉感知 RAG 摄取 — Office 文档和扫描 PDF 的知识库上传现在解析工作区的默认视觉 LLM(数据库优先,ENV 回退)并将其传递给 MarkItDown 以在摄取期间进行 OCR。零回归:当没有支持视觉的模型可用时,摄取会静默回退到仅文本模式——完全是功能前的行为。
  • 扩展的 MarkItDown 格式覆盖 — RAG 现在通过 MarkItDown 的音频转录和 outlook 扩展原生摄取 .pdf.msg(Outlook)、.epub.mp3.wav.m4a。YouTube URL 通过 convert_to_markdown 流经 markitdown[youtube-transcription]
  • LLM_SUPPORTS_VISION 环境变量 — ENV 模式文档 OCR 回退的可选退出(=false)。默认行为是乐观的(true),涵盖常见的 ENV 设置(gpt-4oclaude-3-5-sonnetgemini-1.5-pro/flash)。仅当 ENV 配置的 LLM_MODEL 不支持视觉(例如 deepseek-v3qwen-chatllama-3.1gpt-3.5-turboo1-mini)时才设置为 false,以跳过每次文档上传时的失败视觉调用。当管理员策划的 ModelGroup 处于活动状态时完全忽略——可用时 DB 模式始终是真实来源。
  • 转轮级分析器 — 每个 ReAct 转轮现在在单个结构化日志行中记录阶段级时序(memory_loadcompacttool_schema_buildllm_first_tokenllm_totaltool_exec)。可通过 REACT_TURN_PROFILE_ENABLED 切换(默认:开启;设置为 false 以实现零开销无操作)。
  • 结构化压缩工作卡 — 对话压缩现在将其自己的 9 部分 markdown 输出解析为类型化的 WorkCard 并将新压缩合并到前一个中,因此来自长会话早期的错误和待处理任务在多个压缩轮次中存活,而不是从头开始重新汇总。

已更改

  • 按用户速率限制 — LLM层速率限制器现在为每个用户维护单独的桶,而不是单个进程全局桶。防止一个噪声用户对同一工作进程上的所有其他用户进行限流。可通过 LLM_RATE_LIMIT_PER_USER 切换(默认:开启)。

已修复

  • 悬挂工具调用恢复 — 在工具执行中断的对话(用户停止、SSE断开连接、崩溃)之前会留下一个包含tool_use块但没有匹配tool_result的助手消息,导致下一轮与LLM API的不透明HTTP 400崩溃。DbMemory.get_messages()现在在读取路径上检测并修复这些悬挂块,使用合成的[interrupted]工具结果。原始数据库日志不会被修改。
  • 包含工具调用的空内容助手消息不再被丢弃 — DbMemory加载路径过滤器之前会静默丢弃任何内容为空的助手行。仅携带tool_calls而无文本的原生函数调用中间体被清除。过滤器现在要求内容为空且没有tool_calls两个条件都满足。

[v0.8.2] - 2026-04-10

已添加

  • 智能文档处理(视觉感知) — 基于模型能力的自适应文档处理。当目标LLM支持视觉能力(GPT-4o、Claude 3/4、Gemini)时,PDF页面被渲染为图像并通过视觉内容块发送,以获得完整的视觉保真度。仅文本模型回退到pdfplumber文本提取。两种模式:视觉模式和纯文本模式。可通过DOCUMENT_PROCESSING_MODEDOCUMENT_VISION_DPIDOCUMENT_VISION_MAX_PAGES环境变量配置。在管理员面板中可按模型配置supports_vision开关。
  • 文档视觉管道 — 在聊天中上传的DOCX、PPTX和PDF文件现在会提取其嵌入的图像,当模型启用视觉功能时,这些图像会作为视觉内容发送给LLM。
  • 多轮次视觉持久化 — 来自上传的文档和图像的视觉内容在对话轮次间保持,使模型在整个对话过程中保留视觉上下文。
  • 智能PDF处理 — 文本丰富的PDF页面分别提取文本和嵌入图像(节省token)。扫描或仅含图像的页面渲染为全页PNG以获得最大保真度。
  • 预构建沙箱镜像Dockerfile.sandbox包含常见的数据科学包(pdfplumber、Pillow、pandas等),使AI代码执行在--network=none容器中开箱即用。
  • 资源Fork完成 — 所有五种资源类型现在都支持fork:智能体、连接器、工作流、MCP Server和技能。KB fork已移除(本质上是用户本地的)。

变更

  • 更快的聊天响应完成 — SSE 流在智能体完成后立即关闭;标题生成和后续建议在后台运行,而不是阻塞响应。
  • 更智能的上下文压缩 — 对话压缩使用结构化的 9 部分格式,更好地保留关键信息(原始请求、错误、待处理任务),跨越长会话。
  • 减少智能体循环 — 在智能体提示中添加了反循环指令;降低了循环检测阈值,以便更早捕获重复的相同工具调用。
  • 更快的请求启动 — LLM 配置查询和域分类现在并发运行,将每个请求的开销减少 400-1100ms。
  • 更好的空工具处理 — 不返回输出的工具现在生成描述性消息,而不是裸露的”(no output)“,防止浪费性重试。
  • 自动旧工具结果清理 — 超过最近 6 个结果的工具结果在上下文压缩前自动清除,保持对话精简。
  • 工具结果聚合预算 — 总工具结果令牌限制为每个会话 40K;当超过预算时,新结果被截断,防止来自大型 API 响应的上下文膨胀。
  • 上下文溢出自动恢复 — 当 LLM 因上下文长度溢出拒绝请求时,智能体自动压缩到 50% 并重试,而不是导致整个对话崩溃。
  • 基于关键字的工具选择 — 当查询显然按名称或描述关键字匹配特定工具时,智能体跳过基于 LLM 的工具选择调用,节省 200-500ms。
  • LLM 连接池 — 所有 LLM API 调用现在共享单个连接池,具有优化的 keepalive 设置,减少整个会话中的连接开销。
  • 更智能的完成检查 — 对于长详细答案(>200 令牌),跳过答案后验证步骤,消除不必要的 LLM 往返。
  • 提供商中断时的模型回退 — 当主模型不可用(速率限制、过载或宕机)时,智能体自动使用快速模型重试,而不是失败。

已修复

  • 智能体在不可读文件上的幻觉 — 当AI智能体无法读取文件(例如基于图像的PDF)时,它之前会读取其他无关文件并将其内容呈现为目标文件的内容。系统提示词中的文件完整性护栏现在可以防止这种情况。
  • 上传文件的File ID注入 — 上传的文件现在在消息上下文中包含其UUID file_id,因此智能体可以直接通过read_uploaded_file访问它们,无需猜测。
  • 从新模型结构读取Vision切换 — 模型配置上的supports_vision标志未能从ModelGroup/ModelProviderModel ORM结构中正确读取。已修复。
  • 改进不可读文件的错误消息 — 当文件无法读取时,工具现在返回具体的指导(文件类型、vision建议),而不是通用错误。

[v0.8.1] - 2026-03-29

新增

  • 时区感知的管理员通知 — 管理员通知邮件现在以每个收件人配置的时区显示事件时间,而不是始终显示UTC。
  • 渐进式数据库工具披露 — 单个database元工具(包含list_tables/discover/query子命令)替代了单个表工具。可通过DATABASE_TOOL_MODE环境变量配置(默认progressive,备选legacy)。
  • 按需工具加载 — 当可用工具超过12个时,request_tools元工具让智能体在对话中动态加载额外工具,而不是被限制在初始选择。
  • 渐进式MCP工具披露 — 单个mcp元工具(包含discover/call子命令)替代了单个服务器工具。可通过MCP_TOOL_MODE环境变量配置(默认progressive,备选legacy)。
  • 按轮次令牌预算断路器REACT_MAX_TURN_TOKENS环境变量为失控的智能体循环提供紧急停止。默认0(无限制)——改用按用户token_quota进行日常成本控制。
  • 按模型原生函数调用切换tool_choice_enabled设置(环境变量+管理员按模型)让拒绝强制工具选择的模型跳过第1级,直接进入JSON模式。可在设置→模型→高级中配置。
  • DAG质量全面升级 — 五项改进:非快速步骤默认升级到通用模型;规划中的技能自动发现;法律/医疗/金融领域的引用验证器;具有可配置截断倍数的结构化内容上下文保留;路由器中的领域分类和领域感知模型选择。
  • ReAct中的领域模型升级 — 专业领域(法律/医疗/金融)自动升级到推理模型,并强制进行网络搜索和引用验证。
  • 文件附件下载 — 聊天消息中的文件卡片现在可点击以下载原始文件。
  • 管理员通知主开关 — 全局开/关切换,用于管理员邮件通知,具有运行时SMTP检测。当未配置SMTP时显示警告横幅,并禁用所有通知控制。
  • SMTP Reply-To头 — 新的SMTP_REPLY_TO环境变量允许回复发送到与发件人不同的地址。
  • 资源分叉第1阶段(MCP服务器+技能)POST /api/mcp-servers/{id}/forkPOST /api/skills/{id}/fork端点创建用户拥有的深层副本,具有visibility=personalforked_from血统跟踪。MCP服务器分叉时跳过加密的环境变量/头;技能分叉时跳过发布状态。Alembic迁移为两个表添加forked_from列。41项测试。
  • 工作流连接依赖自动订阅DependencyAnalyzer._resolve_workflow现在递归解析子工作流依赖,具有循环检测(已访问集合)。智能体和子工作流节点在依赖清单中正确添加为内容依赖。缺失的资源优雅处理(记录警告,无失败)。19项测试。
  • 预构建解决方案模板(市场种子内容) — 8个垂直解决方案模板在首次用户注册时幂等引导:财务审计、合同审查、数据报告、IT帮助台、人力资源入职、销售助手、内容撰写、会议总结。每个都包含一个智能体+技能和中文操作指南。发布到市场组织(visibility=orgpublish_status=approved)以实现即时市场可用性。4项测试。
  • ReAct循环检测 — 重复相同工具调用的确定性检测。在3次连续调用具有相同参数后注入警告,防止智能体在失败工具上循环。可通过REACT_CYCLE_DETECTION_THRESHOLD配置。
  • ReAct完成清单 — 在接受最终答案前进行一次性验证提示(当使用了工具时),减少过早或不完整的响应。可按智能体实例切换。

已更改

  • 完成检查清单最小工具阈值 — 清单现在仅在智能体进行3次或以上工具调用时触发(可通过 REACT_COMPLETION_CHECK_MIN_TOOLS 配置)。简单的1-2个工具任务会跳过验证,以避免不必要的延迟。
  • 动态系统提示预算 — 从上下文预算计算中移除了固定的 SYSTEM_PROMPT_RESERVE(4K令牌)。ContextGuard现在动态考虑系统提示,为每次迭代提供约4K更多可用上下文。
  • 集中式工具截断 — 所有工具类型现在都委托截断到共享模块。默认值可通过 TOOL_OUTPUT_MAX_CHARSTOOL_OUTPUT_MAX_ITEMSTOOL_OUTPUT_MAX_BYTES 环境变量配置。
  • 域名检测解耦 — 域名分类在每个端点中独立运行,不再与自动路由捆绑。域名SOP指令已软化为指导而非强制网络搜索。
  • AUTO_ROUTING 环境变量已移除 — 自动端点始终对查询进行分类。

已修复

  • 重复消息提交 — 聊天输入现在使用同步守卫来防止在快速点击时提交相同消息多次。
  • 结构化输出降级链 — 3级回退(原生FC → JSON模式 → 纯文本)现在能正确地遍历所有级别。
  • json_mode_enabled 数据库值被忽略 — 通过管理员配置的模型现在能正确使用其按模型设置,而不是总是回退到环境变量。
  • DAG规划失败消息 — 现在显示用户友好的双语消息,而不是原始管道错误。
  • MCP服务器所有者绕过allow_fallback — 服务器所有者不再被allow_fallback=False阻止。

[v0.8] - 2026-03-20

新增

  • 市场重新设计第一阶段——解决方案+组件 — 两层市场模型(解决方案:智能体/技能/工作流;组件:连接器/MCP服务器)带作用域选择器(全球市场/组织)。知识库从市场作用域中移除。统一订阅模型。
  • 智能文件内容注入+read_uploaded_file工具 — 小文件上传(32K字符以下)自动内联到LLM上下文;大文件获取元数据+工具提示。双模式读取工具,支持分页和正则表达式搜索。GET /api/files/{file_id}/content端点。
  • 工作流蓝图系统 — 多步自动化的可视化工作流编辑器:25种节点类型(开始、结束、LLM、条件分支、问题分类器、智能体、知识检索、连接器、HTTP请求、变量赋值、模板转换、代码执行、迭代器、循环、变量聚合器、参数提取器、列表操作、转换、文档提取器、问题理解、人工干预、子工作流、环境变量等),React Flow v12编辑器,支持拖放调色板、自动布局、SSE实时执行、变量插值、条件/分类器分支、每个节点的错误策略、每个节点的超时设置、导入/导出/复制、带差异查看器的版本历史、14个内置模板、306项测试。
  • 工作流触发器 — 支持时区的Cron调度;公共API密钥(wf_前缀)用于外部执行,无需用户认证;批量执行(最多100个输入集,可配置并行度)。
  • 工作流操作 — 实时执行日志查看器、带变量快照的追踪查看器、画布上的运行重放叠加层、运行历史导出、包含每日趋势和百分位数的分析仪表板、每个节点的统计面板、收藏/固定、内联验证徽章、画布节点搜索(Cmd+F)、键盘快捷键、吸附网格。
  • 工作流管理员+模板 — 所有工作流的管理员管理选项卡、带管理员CRUD和5个种子模板的WorkflowTemplate模型、带组织级审查门控的发布流程、外部引用的导入冲突解决器。
  • 智能体技能系统 — 按需技能加载:Skill模型,支持CRUD/发布/审查、read_skill(name)工具用于渐进式披露(约80%的令牌减少)、每个智能体的compact_instructions用于自定义ContextGuard压缩。完整的技能UI,包括列表页面、编辑器和智能体技能选择器。
  • ConnectorMetaTool(渐进式披露第1-2阶段) — 单个元工具替代每个操作工具。系统提示接收轻量级存根(约30个令牌/连接器);智能体按需调用discover/execute。功能标志CONNECTOR_TOOL_MODE用于向后兼容。
  • 连接器导入/导出/分叉 — 通过JSON导出共享连接器模板,通过分叉克隆和自定义。后端在导出时清理凭证。
  • 连接器凭证加密+每用户覆盖connector_credentials表,使用Fernet加密、allow_fallback标志、GET/PUT/DELETE /my-credentials端点。
  • 发布审查UI — 组织级审查系统,支持批准/拒绝工作流、资源卡上的状态徽章、发布对话框中的审查通知、被拒绝资源的重新提交。
  • 语义模式注解 — 16个预定义的语义标签用于连接器字段,带descriptionpii标志,在LLM工具描述中显示。
  • 智能体中循环自反思 — 目标检查提示每6次迭代注入到ReAct中,以防止长链中的漂移。
  • 影子市场组织+资源订阅 — 基于拉取的资源共享:通过市场发现资源并显式订阅。市场API用于浏览/订阅/取消订阅。
  • 智能体自动发现+子智能体绑定discoverable标志+sub_agent_ids白名单+CallAgentTool用于一级委托。
  • MCP服务器凭证+每用户覆盖mcp_server_credentials表,带allow_fallback标志用于凭证回退行为。
  • 连接器/知识库切换 — 两种资源类型的暂停/恢复端点。
  • 独立知识库对话 — 对话上的kb_ids字段,用于直接知识库聊天,无需智能体绑定。
  • 审查日志审计选项卡 — 管理员审计页面,带系统日志/审查日志切换和每个组织/资源的可过滤审查追踪。
  • 综合中的智能体指令agent_directive参数确保最终答案遵守智能体的核心目的。

Changed

  • 基于订阅的可见性模型 — 从3层简化为2层(own → subscribed)。自动迁移保留现有访问权限。
  • 工具缓存白名单 — 用显式的 cacheable 属性替换黑名单。11个只读工具标记为可缓存。
  • DAG执行器级联失败 — 失败的步骤现在级联阻止依赖项,具有传递传播。
  • DAG规划器改进 — 规划器中的工具描述、所有轮次的完整重新规划历史、14个引擎常数参数化为环境变量。
  • stream_answer观察截断 — 从2000增加到8000字符(可通过 REACT_TOOL_OBS_TRUNCATION 配置)。
  • 证据置信度UI — 琥珀色警告卡片、带悬停弹出框的 [N] 引用徽章、带并排比较的冲突警告横幅。
  • 工作流版本变更摘要 — 从蓝图差异自动生成人类可读的摘要(在版本保存时)。
  • 工作流运行保留清理 — 后台清理任务,具有可配置的年龄/数量限制。环境变量:WORKFLOW_RUN_MAX_AGE_DAYSWORKFLOW_RUN_MAX_PER_WORKFLOW
  • 连接器断路器 — 三态机(closed/open/half-open),具有按连接器故障跟踪和监控端点。
  • 用轻量级BFS自动布局替换elkjs/workflows/[id] 包大小从473 kB减少到43 kB。

已修复

  • 工作流评估命名空间扁平化 — 修复了ConditionBranch和VariableAssign中的短变量名解析。
  • 切换is_active时无需重新审查 — 切换is_active不再将publish_statusapproved还原为pending_review
  • 条件分支级联跳过 — 跳过的节点正确停用传出边。
  • 依赖分析器 — 修复了skill_ids解析,不区分大小写的节点类型匹配。

已移除

  • 移除了 is_global 字段和所有全局可见性概念——由市场组织和订阅替代。
  • 移除了全局智能体/MCP 服务器管理员端点。

[v0.7.5] - 2026-03-12

新增

  • 自由模式切换 — 在对话中切换Auto/React/DAG模式。通过metadata.mode进行逐轮模式跟踪。
  • 三种模型角色 — General、Fast和Reasoning层级的独立环境配置。Fast模型不再继承主模型设置。
  • DAG引擎改进StepOutput结构化数据、带异步锁防止缓存击穿的工具缓存、带重试的逐步LLM验证(DAG_STEP_VERIFICATION)、通过快速LLM分类的自动路由(AUTO_ROUTING)。
  • 连接器凭证加密 — 身份验证令牌提取至connector_credentials表,通过CREDENTIAL_ENCRYPTION_KEY使用Fernet加密。按用户凭证覆盖端点。allow_fallback标志。
  • ModelConfig API密钥静态加密 — 透明的写入时加密/读取时解密,具有向后兼容的明文检测。

已更改

  • 骨架屏 — 所有列表/网格页面在加载时显示布局感知的骨架屏,而不是加载旋转器。

已修复

  • 快速模型不再继承主模型的设置。
  • SSE 路由事件字段名称与后端对齐。

[v0.7.4] - 2026-03-12

新增功能

  • 评估中心 — 测试数据集管理、并行评估运行(支持LLM评分)、按案例查看通过/失败/延迟/Token结果的查看器,带自动轮询功能。
  • 管理员:json_mode_enabled 按模型标志 — 显式切换,防止AWS Bedrock预填充问题。ENV模型由LLM_JSON_MODE_ENABLED控制。
  • SSE协议v2 — 实时流式传输,支持delta_reasoningusage字段,分离done/suggestions/title/end事件。
  • AI Builder扩展 — 7个新的builder工具、is_builder标志、builder提示词自动刷新、SSRF防护。连接器管理的完整ReAct智能体对话。
  • 双数据库支持 — SQLite(零配置)+ PostgreSQL(生产环境)。Docker Compose自动配置PG并进行健康检查。
  • 扩展思考/推理LLM_REASONING_EFFORTLLM_REASONING_BUDGET_TOKENS支持OpenAI o系列、Gemini 2.5+、Claude。
  • 管理员:工具禁用 — 按工具启用/禁用切换;禁用的工具在运行时从聊天中过滤。
  • 设置:组织选项卡 — 直接从设置中创建、加入、管理组织及成员角色。
  • Docker Compose部署 — 单一镜像、命名卷、独立Next.js输出。
  • 导出:PDF格式 — 对话可导出为PDF文档。
  • 多工作进程支持WORKERS=N环境变量;Redis中断代理用于跨工作进程中继。

Changed

  • LLM layer: LiteLLM — 用 LiteLLM 替代直接的 AsyncOpenAI 客户端,以支持通用提供商。
  • 结构化输出降级 — 统一 structured_llm_call() 的 3 级提取机制(Native FC → JSON Mode → 纯文本 + 正则表达式)。
  • 智能中继路由 — 从 URL 路径模式自动检测第三方中继平台的 API 协议。

已修复

  • Docker 沙箱(DooD)卷挂载路径转换。
  • 安全性:沙箱 AST dunder 验证、MCP stdio 默认值、SSRF DNS 重绑定、shell 元字符逃逸、连接器模板注入。
  • 管理员仪表板统计在 PostgreSQL 上崩溃。
  • Docker:i18n 文件发现、启动竞态条件、自定义端口的 OAuth 自动检测。
  • 导出:CJK 的 RFC 5987 文件名。

[v0.7.3] - 2026-03-06

已添加

  • 全局MCP服务器 — 由管理员配置,在所有聊天会话中加载。
  • 结构化审计日志write_audit() 辅助函数,具有结构化列。

已修复

  • 邀请码向后兼容旧版 registration_enabled 字段。

[v0.7.2] - 2026-03-06

新增

  • 邀请制注册 — 三种模式(开放/邀请/禁用),支持邀请码增删改查。
  • 存储管理 — 按用户磁盘使用量统计、清空、孤立文件清理。
  • 按用户强制登出 — 管理员令牌撤销。
  • 对话审核 — 管理员可列表/删除所有对话。

[v0.7.1] - 2026-03-06

新增

  • API 健康仪表板 — 系统统计、连接器指标、令牌使用图表。
  • JWT 认证 — 基于令牌的 SSE 认证、对话所有权。
  • 管理员 API — 智能体管理、按用户令牌配额(429 强制执行)。

[v0.7] - 2026-03-06

新增

  • 管理平台 — 用户管理、角色切换、密码重置、账户启用/禁用。
  • 首次运行设置向导 — 引导式管理员账户创建。
  • 个人中心 — 按用户全局指令、语言偏好设置。

[v0.6.5] - 2026-03-05

新增

  • 实用工具email_sendjson_transformtemplate_rendertext_utils
  • 连接器响应过滤CONNECTOR_RESPONSE_MAX_CHARSCONNECTOR_RESPONSE_MAX_ITEMS
  • 嵌入模型选项 — Jina、OpenAI 和自定义提供商。

[v0.6] - 2026-03-01

已添加

  • 连接器平台 — 完整的CRUD、ConnectorToolAdapter、按用户凭证加密、确认闸门、断路器、审计日志。
  • MCP集成 — 通过协议的工具自动发现、进程隔离。

title: 版本 0.5 description: FIM One v0.5 发布说明 sidebarTitle: v0.5

[v0.5] - 2026-02-28

新增

  • 完整RAG管道 — Jina嵌入 + LanceDB + FTS + RRF + 重排序器。
  • 有根据的生成 — 证据锚定的引用、冲突检测、置信度分数。
  • 知识库文档管理 — 分块级CRUD、搜索、重试、模式迁移。
  • ContextGuard + 固定消息 — Token预算管理器。
  • DAG重新规划 — 最多3轮;LLM Compact用于内存。

[v0.4] - 2026-02-25

新增

  • 多轮对话 — DbMemory持久化、智能截断。
  • 工具步骤折叠UI — 折叠/展开工具调用。
  • HTTP请求和shell执行工具
  • 智能体管理 — 创建、配置、发布绑定的模型/工具。
  • JWT身份验证

title: 更新日志 description: FIM One 的版本历史和发布说明 sidebarTitle: 更新日志

[v0.3] - 2026-02-25

新增

  • 网络工具web_search(Jina/Tavily/Brave)、web_fetch
  • 文件操作 + MCP 客户端
  • DAG 可视化 — 交互式流程图,实时状态显示。
  • Docker 中的代码执行--network=none、内存限制、超时控制。

[v0.2] - 2026-02-24

新增

  • 重试与速率限制 — 指数退避。
  • 使用情况追踪 — 按请求的令牌/成本统计。
  • 原生函数调用 — 直接模型工具选择。
  • 多模型支持FAST_LLM_MODEL 用于 DAG 步骤。
  • 内存系统 — 窗口、摘要、数据库内存。
  • FastAPI 后端/api/execute/api/stream(SSE)。

[v0.1] - 2026-02-22

新增

  • ReActAgent — Reason → Act → Observe 循环。
  • DAGPlanner — LLM生成的依赖图、并发执行、结果验证。
  • 工具 — 计算器、Python执行。
  • 门户UI — Next.js流式传输、深色/浅色主题、KaTeX。