---
title: "配置总览"
description: "了解配置文件的组成、位置与各个开关的作用。"
---

Bi 的配置不是一张大表，而是按职责拆成几个小文件，都放在启动目录的 `.bi/` 下。下面是它们的对照：

| 文件 | 管什么 |
| --- | --- |
| `config.json` | 运行参数：端口、工作区、模型缺省、循环上限、各类阈值 |
| `llm.json` | 多服务商 / 多模型配置，以及每个提供商的密钥 |
| `permissions.json` | 工具权限规则与自动放行规则 |
| `intercept_rules.json` | 拦截规则（命中即拒绝） |
| `bi.db` | SQLite 会话数据库（消息、工具调用、用量统计） |
| `history.json` | 跨会话的明文对话历史日志 |
| `checkpoints/` | 「退回到这一步」用的工作区影子 Git 仓库 |
| `skills/`、`plugins/` | 技能与插件目录 |
| `logs/` | 运行日志与网络活动记录 |

## config.json 的关键字段

| 字段 | 默认 | 含义 |
| --- | --- | --- |
| `base_url` | `https://api.deepseek.com/v1` | 模型端点 |
| `model` | `deepseek-chat` | 缺省模型 |
| `port` | `8080` | 本地服务端口 |
| `workspace` | 启动目录 | 智能体的工作区根 |
| `max_loops` | `200` | 单轮对话最大工具循环次数 |
| `max_sub_agents` / `max_sub_depth` | `5` / `2` | 子智能体数量与深度上限 |
| `turn_timeout` | `30`（分钟） | 单轮对话总时长上限 |
| `recent_turns_full` | `6` | 上下文打包时完整注入的最近轮数 |
| `tool_result_keep` | `4` | 工具循环内保留全文的工具结果条数 |
| `read_cache_enabled` | `true` | 读文件结果缓存（mtime+size 校验） |
| `network_log_enabled` | `false` | 网络活动记录（默认关，隐私优先） |
| `auto_search` | `true` | 新对话默认开启智能搜索 |
| `disabled_tools` | — | 关掉的工具 id 列表 |

两个需要留意的字段：

- **`network_log_enabled`** 默认关闭。开启后每轮 LLM 调用与 `exec` 命令全文会以 JSONL 追加到 `.bi/logs/network/`，属于敏感数据，明确需要时才开。
- **`link_schemes`** 是 Markdown 渲染时允许变成可点链接的协议白名单，默认只有 `http`、`https`、`mailto`。`javascript:` 这类可执行协议永不渲染成链接。

## 字段缺席的规则

`config.json` 里缺席的字段会回落到上表的默认值；显式写 `0` / `false` 通常表示「关闭」并被尊重（少数字段如 `recent_turns_full` 的 0 没有意义，也会兜回默认）。编辑时拿不准就整字段删掉，让它回到默认，别猜。

## 版本与发布

模型服务商与密钥的配置独立成 `llm.json`，迁移自旧版 `config.json` 时会自动搬一次。密钥只发往你配置的端点，Bi 没有自己的服务器。详见[模型提供商](/zh/docs/configuration/providers)。

## 界面 vs 文件

设置界面改的就是上面这些文件，两者实时一致。想批量编辑或版本化配置时直接改文件即可，改完保存即可生效，无需重启。
