第 11 章 · CLI 产品化与毕业

02 · 配置与会话

通过环境变量配置模型、权限和 MCP。会话在交互模式下持续,退出时清理。

配置方式

mca 使用环境变量做配置,不用配置文件。这保持了教学项目的简单性。

环境变量作用示例
OPENAI_API_KEYAPI 密钥(必需)sk-...
OPENAI_BASE_URLAPI 基础 URL(可选)https://api.deepseek.com/v1
MODEL_NAME模型名称(可选)deepseek-chat
MCP_SERVERSMCP server 配置(可选)JSON 数组

可以通过 .env 文件或直接设置环境变量:

# .env 文件
OPENAI_API_KEY=sk-...
OPENAI_BASE_URL=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat

权限模式

三种权限行为:

交互模式(默认): 需要用户确认修改和命令执行。通过 readline 的 rl.question("允许? (y/n)") 实现。

--no-confirm 跳过所有确认。所有工具调用自动放行。适合 CI 环境或用户信任 agent 的场景。

非交互模式(ask/plan): 自动放行。因为没有用户可以交互,权限检查全部返回 true。

会话生命周期

交互模式: ContextManager 和对话历史在整个会话期间持续存在。用户反复输入问题,agent 记住之前的操作。

单次模式(ask/plan): 每次调用创建新的 ContextManager 和对话历史。执行完毕后释放。

MCP 连接: 所有模式都在启动时建立 MCP 连接,退出时关闭子进程。

// 清理
rl.on("close", () => {
  for (const client of mcpClients) client.disconnect();
  process.exit(0);
});

会话持久化的局限

当前实现中,会话结束后所有状态都丢失——对话历史、上下文记忆、MCP 连接。下次启动是从零开始。

真正的产品(如 Claude Code)会把会话持久化到文件,支持 resume 命令恢复之前的对话。这属于进阶功能,教学项目不实现。

登录以继续阅读

解锁完整文档、代码示例及更多高级功能。

立即登录

On this page