SessionConfig
通过SessionConfig 类可以进行各种设置。
按 Copilot::run(prompt: '...', config: $config) 或 Copilot::start(function (CopilotSession $session) { ... }, config: $config) 的方式使用。
当你只是想指定模型这种无需用到 SessionConfig 类的情况时,也可以用数组指定。Copilot::run(prompt: '...', config: ['model' => 'auto'])
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SystemMessageConfig;
use Revolution\Copilot\Types\InfiniteSessionConfig;
use Revolution\Copilot\Types\UserInputRequest;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverride;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverrideSupports;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverrideLimits;
use Revolution\Copilot\Enums\ReasoningEffort;
$config = new SessionConfig(
// 指定要使用的模型
model: 'auto',
// 在创建新会话时指定固定的 session ID
sessionId: 'session-123',
clientName: 'my-app',
// 推理级别。仅在支持的模型上可设置。
reasoningEffort: ReasoningEffort::HIGH,
// 覆盖模型的 capabilities。会与运行时的默认值 deep-merge。
// modelCapabilities: new ModelCapabilitiesOverride(
// supports: new ModelCapabilitiesOverrideSupports(vision: true, reasoningEffort: true),
// limits: new ModelCapabilitiesOverrideLimits(max_prompt_tokens: 200000),
// ),
// 也可以用数组指定
// modelCapabilities: ['supports' => ['vision' => true]],
// 覆盖 config 目录
configDirectory: '',
// 启用 MCP 配置和技能目录的自动发现
// 会从工作目录自动发现 .mcp.json 或 .vscode/mcp.json,
// 并与显式指定的 mcpServers 或 skillDirectories 合并(名称冲突时显式指定优先)
enableConfigDiscovery: true,
// 自定义工具
tools: [...],
// 系统消息
systemMessage: new SystemMessageConfig(
content: 'You are a helpful assistant for Laravel developers.',
),
// 系统消息:replace 模式(完全替换 system prompt)
// systemMessage: new SystemMessageConfig(
// mode: 'replace',
// content: '自定义的完整 system prompt',
// ),
// 系统消息:customize 模式(按段落覆盖)
// systemMessage: new SystemMessageConfig(
// mode: 'customize',
// sections: [
// 'tone' => new SectionOverride(action: SectionOverrideAction::REPLACE, content: 'Always respond in Japanese.'),
// 'safety' => new SectionOverride(action: SectionOverrideAction::REMOVE),
// 'custom_instructions' => new SectionOverride(action: SectionOverrideAction::APPEND, content: 'Additional instructions here.'),
// ],
// content: '与 append 模式类似的追加内容(可选)',
// ),
// 自定义提供商
provider: new ProviderConfig(),
// 每个会话独立的 GitHub token(多租户支持)
// 可以在客户端级别 github_token 之外,按会话指定 token
gitHubToken: $user->github_token,
// 远程会话的行为模式
// 'off' - 仅本地(默认)
// 'export' - 将会话事件导出到 GitHub(不带远程 steering)
// 'on' - 同时启用导出和远程 steering
remoteSession: \Revolution\Copilot\Enums\RemoteSessionMode::Export,
// 云端会话(不在本地而是在云端创建会话)
// 可以选择性地关联仓库信息
cloud: new \Revolution\Copilot\Types\CloudSessionOptions(
repository: new \Revolution\Copilot\Types\CloudSessionRepository(
owner: 'myorg',
name: 'myrepo',
branch: 'main',
),
),
onPermissionRequest: function (array $request) {
// 处理权限请求
},
onUserInputRequest: function (UserInputRequest $request) {
// 处理用户输入请求。ask_user
},
// Elicitation 请求处理器
// 设置后可以接收来自代理的基于表单的 UI 对话请求
onElicitationRequest: function (ElicitationContext $context) {
// 处理 elicitation 请求
return ['action' => 'accept', 'content' => ['field' => 'value']];
},
// Plan 模式退出请求处理器
// 设置后可以在代理退出 plan 模式时接收请求
onExitPlanModeRequest: function (ExitPlanModeRequest $request) {
// 检查 plan 内容并批准 / 拒绝
return new ExitPlanModeResult(approved: true, selectedAction: $request->recommendedAction);
},
// 自动模式切换请求处理器
// 在达到速率限制时,可以选择是否允许切换到 auto 模式
onAutoModeSwitchRequest: function (AutoModeSwitchRequest $request) {
// 返回 "yes"、"yes_always"、"no" 之一
return 'yes';
},
// 会话钩子
hooks: [],
// 工作目录
workingDirectory: '',
// 启用流式输出
streaming: true,
// 是否将子代理的流式事件包含到主流中(默认: true)
includeSubAgentStreamingEvents: true,
// 可用的内置工具
availableTools: ['read_file', 'write_file'],
// 或者要排除的工具
excludedTools: ['shell'],
// MCP 服务器配置
mcpServers: [
'github' => [
'type' => 'http',
'url' => 'https://api.githubcopilot.com/mcp/',
],
],
// 自定义代理
customAgents: [
[
'name' => 'reviewer',
'displayName' => 'Code Reviewer',
'description' => 'Reviews code for best practices',
'prompt' => 'You are an expert code reviewer.',
],
],
// 默认代理配置。当没有选择自定义代理时使用的内置代理配置。
// excludedTools: 从默认代理中排除的工具列表。
// 对自定义子代理仍然可用。
defaultAgent: ['excludedTools' => ['tool_name']],
// 指定会话启动时激活的代理。需要与 customAgents 的 name 一致。
agent: 'reviewer',
// 技能目录
skillDirectories: [],
// 已禁用的技能
disabledSkills: [],
// 无限会话配置。默认启用。
infiniteSessions: new InfiniteSessionConfig(
enabled: true,
backgroundCompactionThreshold: 0.80, // 上下文使用率达到 80% 时开始压缩
bufferExhaustionThreshold: 0.95, // 直到压缩完成前在 95% 时阻塞
),
// 禁用无限会话
// infiniteSessions: new InfiniteSessionConfig(enabled: false),
// 在会话创建 RPC 之前注册事件处理器。
// 用于避免遗漏 session.start 等早期事件。
// 与之后调用 $session->on($handler) 等价,但在生命周期更早阶段注册。
onEvent: function (SessionEvent $event) {
// 接收所有会话事件
},
);
$response = Copilot::run('...', config: $config);
ResumeSessionConfig 类。它与 SessionConfig 几乎相同,只有一点点差异。ResumeSessionConfig 只指定要变更的配置项。其他会沿用新建会话时的配置。
云端执行请参考 Cloud Sessions,Plugin Directory 请参考 Plugin Directories。
最新信息请参考 GitHub 仓库。