process.env.ARK_BASE_URL ||
"https://ark.cn-beijing.volces.com/api/v3"
const apiKey = process.env.ARK_API_KEY;
const agentId = process.env.ARK_AGENT_ID;
const environmentId = process.env.ARK_ENVIRONMENT_ID;
if (!apiKey || !agentId || !environmentId) {
"请设置 ARK_API_KEY、ARK_AGENT_ID 和 ARK_ENVIRONMENT_ID",
async function request(path, init = {}) {
const response = await fetch(`${baseUrl}${path}`, {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
`${init.method || "GET"} ${path} 失败:${await response.text()}`,
async function createSession() {
const response = await request("/sessions", {
environment_id: environmentId,
const session = await response.json();
return session.id ?? session.session_id;
async function sendMessage(sessionId, text) {
await request(`/sessions/${sessionId}/events`, {
content: [{ type: "text", text }],
function textFromEvent(event) {
?.filter((item) => item.type === "text" && item.text)
.map((item) => item.text)
async function runTurn(sessionId, text) {
const response = await request(
`/sessions/${sessionId}/events/stream`,
{ headers: { Accept: "text/event-stream" } },
const reader = response.body.getReader();
const decoder = new TextDecoder();
let messageSent = false;
const { done, value } = await reader.read();
buffer += decoder.decode(value, { stream: !done });
const lines = buffer.split(/\r?\n/);
buffer = lines.pop() || "";
for (const line of lines) {
if (!messageSent && line === ": ready") {
await sendMessage(sessionId, text);
if (!line.startsWith("data:")) continue;
const payload = line.slice(5).trim();
event = JSON.parse(payload);
if (event.type === "agent.tool_use") {
console.log(`工具调用:${event.name || "unknown"}`);
if (event.type === "agent.message") {
finalMessage = textFromEvent(event) || finalMessage;
if (event.type === "session.status_idle") {
if (event.type === "session.status_terminated") {
throw new Error("Session 已终止");
const reason = messageSent
? "没有收到 session.status_idle"
throw new Error(`事件流已经结束,但${reason}`);
await reader.cancel().catch(() => {});
const sessionId = await createSession();
console.log(`Session:${sessionId}`);
const report = await runTurn(
`研究方舟 Managed Agents 的 Session 与 Events 机制,
形成一份包含关键发现、证据、接入建议、风险和下一步的 Markdown 报告。`,