创建会话
会话(Session)保存一个任务的输入、智能体输出、工具调用和交互历史。创建时引用智能体与云端环境,并固定智能体版本;发送用户事件后才开始执行。
任务与执行轮次
数据分析任务可以在同一会话中提交数据、补充统计口径和修订报告,共用历史与文件;无关任务应创建新会话。新会话以 idle 状态开始,首次输入才准备云端沙箱。
创建会话
创建会话必须提供 agent 和 environment_id。智能体是版本化资源;建议明确传入版本对象,使同一任务始终使用可追溯的智能体配置。会话使用的 runtime 继承自该智能体版本,请在定义智能体时选择 claudecode、codex 或 native,不要把 runtime 作为会话字段传入。
开始前,请完成接入准备,并保存创建智能体和云端环境时返回的 ID。以下 SDK 示例沿用SDK 客户端初始化中的 client。以下示例仅传入智能体 ID:会话固定创建时的最新版本,后续智能体更新不会改变会话配置。
cURL
session=$(curl --request POST "$AGENTAPI_BASE_URL/v1/sessions" \
--header "x-api-key: $AGENTAPI_API_KEY" \
--header "content-type: application/json" \
--data @- <<EOF
{
"agent": "$AGENT_ID",
"environment_id": "$ENVIRONMENT_ID"
}
EOF
)
SESSION_ID=$(jq -r '.id' <<< "$session")
Python
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
)
TypeScript
const session = await client.beta.sessions.create({
agent: agent.id,
environment_id: environment.id
});
C#
var session = await client.Beta.Sessions.Create(new()
{
Agent = agent.ID,
EnvironmentID = environment.ID,
});
Go
session, err := client.Beta.Sessions.New(ctx, anthropic.BetaSessionNewParams{
Agent: anthropic.BetaSessionNewParamsAgentUnion{
OfString: anthropic.String(agent.ID),
},
EnvironmentID: environment.ID,
})
if err != nil {
panic(err)
}
Java
var session = client.beta().sessions().create(SessionCreateParams.builder()
.agent(agent.id())
.environmentId(environment.id())
.build());
PHP
$session = $client->beta->sessions->create(
agent: $agent->id,
environmentID: $environment->id,
);
Ruby
session = client.beta.sessions.create(
agent: agent.id,
environment_id: environment.id
)
发送消息启动执行
会话创建后,向 POST /v1/sessions/{id}/events 提交 user.message 才会启动执行。结构化输入使用 input.parts;HTTP 与 SDK 的发送方式见提交任务输入,进度通过事件流读取。
配置会话的资源与行为
任务信息和资源
创建请求还可以包含以下信息:
title:便于在 Portal 和列表中识别任务的标题。metadata:字符串键值对,用于关联业务 ID、任务来源等信息。resources:挂载文件、GitHub 仓库或记忆存储。单个会话最多可以添加 500 个资源,其中记忆存储最多 8 个。vault_ids:为需要认证的 MCP 服务关联凭证,详见MCP 身份验证。
GitHub 仓库需要沙箱的 Git 能力。claudecode、codex 支持这类资源;native 在启用沙箱执行工具时也支持,并会在首个模型请求前异步准备沙箱,模型调用沙箱工具时等待沙箱就绪。
Portal 会话详情顶部的凭证库入口显示关联数量。点击后,您可以查看各凭证库的名称、ID 和归档状态,并进入凭证库详情;没有关联时显示“未关联凭证库”。
固定智能体版本
要将会话固定到特定的智能体版本,请传入一个对象,以控制执行版本并分阶段发布新版本。
cURL
pinned_session=$(curl --request POST "$AGENTAPI_BASE_URL/v1/sessions" \
--header "x-api-key: $AGENTAPI_API_KEY" \
--header "content-type: application/json" \
--data @- <<EOF
{
"agent": {"type": "agent", "id": "$AGENT_ID", "version": 1},
"environment_id": "$ENVIRONMENT_ID"
}
EOF
)
PINNED_SESSION_ID=$(jq -r '.id' <<< "$pinned_session")
Python
pinned_session = client.beta.sessions.create(
agent={"type": "agent", "id": agent.id, "version": 1},
environment_id=environment.id,
)
TypeScript
const pinnedSession = await client.beta.sessions.create({
agent: { type: "agent", id: agent.id, version: 1 },
environment_id: environment.id
});
C#
var pinnedSession = await client.Beta.Sessions.Create(new()
{
Agent = new BetaManagedAgentsAgentParams
{
Type = BetaManagedAgentsAgentParamsType.Agent,
ID = agent.ID,
Version = 1,
},
EnvironmentID = environment.ID,
});
Go
pinnedSession, err := client.Beta.Sessions.New(ctx, anthropic.BetaSessionNewParams{
Agent: anthropic.BetaSessionNewParamsAgentUnion{
OfBetaManagedAgentsAgents: &anthropic.BetaManagedAgentsAgentParams{
Type: anthropic.BetaManagedAgentsAgentParamsTypeAgent,
ID: agent.ID,
Version: anthropic.Int(1),
},
},
EnvironmentID: environment.ID,
})
if err != nil {
panic(err)
}
Java
var pinnedSession = client.beta().sessions().create(SessionCreateParams.builder()
.agent(BetaManagedAgentsAgentParams.builder()
.type(BetaManagedAgentsAgentParams.Type.AGENT)
.id(agent.id())
.version(1)
.build())
.environmentId(environment.id())
.build());
PHP
$pinnedSession = $client->beta->sessions->create(
agent: ['type' => 'agent', 'id' => $agent->id, 'version' => 1],
environmentID: $environment->id,
);
Ruby
pinned_session = client.beta.sessions.create(
agent: {type: :agent, id: agent.id, version: 1},
environment_id: environment.id
)
为会话覆盖智能体配置
创建会话时,可以使用 agent_with_overrides 只为当前会话覆盖智能体配置,而不修改智能体,也不会创建新的智能体版本。传入智能体的 id 和可选的 version(省略 version 时使用最新版本),并可覆盖 model、system、tools、mcp_servers、skills 中的一项或多项。
| 请求内容 | 会话使用的配置 |
|---|---|
| 省略某个覆盖字段 | 继承所固定的智能体版本。 |
| 提交字段值 | 整体替换对应字段,不与基础配置合并。 |
system: null |
清空系统提示。 |
| 列表字段为空数组 | 清空对应的工具、MCP 服务器或技能列表。 |
提交 model 对象 |
使用新模型对象;显式提供的 effort 会生效,省略时不继承基础配置的 effort。 |
例如,"model": {"id": "your-model-id", "effort": {"type": "high"}} 会为这次会话设置模型和思考强度;只提供 id 则使用该模型的默认强度。请从七牛 MaaS 模型管理页获取可用的模型 ID。
会话仍会固定一个智能体版本。runtime 和 agentapi_options 从该版本继承,会话覆盖不能改变它们;因此 thinking 和 system_prompt_mode 也保持该版本的设置。
如需调整这些配置,请更新智能体并创建新会话。用法见思考配置和系统提示词放置方式。
创建响应的 agent 是覆盖后的配置快照,id 和 version 仍指向原智能体版本。快照不回显思考开关和系统提示词放置方式;请通过 id 和 version 查询对应版本。
cURL
override_session=$(curl --request POST "$AGENTAPI_BASE_URL/v1/sessions" \
--header "x-api-key: $AGENTAPI_API_KEY" \
--header "content-type: application/json" \
--data @- <<EOF
{
"agent": {
"type": "agent_with_overrides",
"id": "$AGENT_ID",
"version": 1,
"model": {"id": "$AGENTAPI_MODEL_ID"}
},
"environment_id": "$ENVIRONMENT_ID"
}
EOF
)
OVERRIDE_SESSION_ID=$(jq -r '.id' <<< "$override_session")
Python
override_session = client.beta.sessions.create(
agent={
"type": "agent_with_overrides",
"id": agent.id,
"version": 1,
"model": {"id": "gpt-5.6-sol"},
},
environment_id=environment.id,
)
TypeScript
const overrideSession = await client.beta.sessions.create({
agent: {
type: "agent_with_overrides",
id: agent.id,
version: 1,
model: { id: "gpt-5.6-sol" }
},
environment_id: environment.id
});
C#
var overrideSession = await client.Beta.Sessions.Create(new()
{
Agent = new BetaManagedAgentsAgentWithOverridesParams
{
Type = BetaManagedAgentsAgentWithOverridesParamsType.AgentWithOverrides,
ID = agent.ID,
Version = 1,
Model = new BetaManagedAgentsModelConfigParams { ID = "gpt-5.6-sol" },
},
EnvironmentID = environment.ID,
});
Go
overrideSession, err := client.Beta.Sessions.New(ctx, anthropic.BetaSessionNewParams{
Agent: anthropic.BetaSessionNewParamsAgentUnion{
OfBetaManagedAgentsAgentWithOverridess: &anthropic.BetaManagedAgentsAgentWithOverridesParams{
Type: anthropic.BetaManagedAgentsAgentWithOverridesParamsTypeAgentWithOverrides,
ID: agent.ID,
Version: anthropic.Int(1),
Model: anthropic.BetaManagedAgentsModelConfigParams{
ID: "gpt-5.6-sol",
},
},
},
EnvironmentID: environment.ID,
})
if err != nil {
panic(err)
}
Java
var overrideSession = client.beta().sessions().create(
SessionCreateParams.builder()
.agent(BetaManagedAgentsAgentWithOverridesParams.builder()
.type(BetaManagedAgentsAgentWithOverridesParams.Type.AGENT_WITH_OVERRIDES)
.id(agent.id())
.version(1)
.model(BetaManagedAgentsModelConfigParams.builder()
.id("gpt-5.6-sol")
.build())
.build())
.environmentId(environment.id())
.build()
);
PHP
$overrideSession = $client->beta->sessions->create(
agent: BetaManagedAgentsAgentWithOverridesParams::with(
type: 'agent_with_overrides',
id: $agent->id,
version: 1,
model: ['id' => 'gpt-5.6-sol'],
),
environmentID: $environment->id,
);
Ruby
override_session = client.beta.sessions.create(
agent: Anthropic::Beta::BetaManagedAgentsAgentWithOverridesParams.new(
type: :agent_with_overrides,
id: agent.id,
version: 1,
model: {id: "gpt-5.6-sol"}
),
environment_id: environment.id
)
MCP 身份验证
创建会话时通过 vault_ids 引用凭证。一个会话最多引用 50 个 Vault,执行时最多匹配并注入 20 个凭证。Vault 创建与凭证匹配规则见凭证管理,会话接入示例见MCP 身份验证。