第 11 章 · CLI 产品化与毕业
02 · 配置与会话
通过环境变量配置模型、权限和 MCP。会话在交互模式下持续,退出时清理。
配置方式
mca 使用环境变量做配置,不用配置文件。这保持了教学项目的简单性。
| 环境变量 | 作用 | 示例 |
|---|---|---|
| OPENAI_API_KEY | API 密钥(必需) | sk-... |
| OPENAI_BASE_URL | API 基础 URL(可选) | https://api.deepseek.com/v1 |
| MODEL_NAME | 模型名称(可选) | deepseek-chat |
| MCP_SERVERS | MCP 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 命令恢复之前的对话。这属于进阶功能,教学项目不实现。
登录以继续阅读
解锁完整文档、代码示例及更多高级功能。