全部產品
Search
文件中心

AgentCore:AgentCore Node.js SDK 使用指南

更新時間:Sep 18, 2026

本文介紹使用 JavaScript 或 TypeScript 調用 AgentCore 模型、MCP、Skill、記憶和憑證,以及通過架構構建 Agent 服務的方法。雲端資源樣本在 AgentCore 託管環境中運行,自訂資源樣本由應用提供串連配置。

前提條件

  1. 已開通 AgentCore,並建立 Workspace。具體操作,請參見管理 Workspace。

  2. 已根據需要在 Agent 所屬的 Workspace 中準備資源,並確認 Agent 具有相應存取權限。

  3. 使用雲端資源的樣本在 AgentCore 託管的應用運行環境中執行。SDK 從運行環境擷取訪問配置,無需在業務代碼中填寫平台存取金鑰。

本文使用以下樣本資源名稱。請替換為您實際建立的資源名稱。

資源

樣本值

使用情境

模型串連

my-model-connection

調用模型。請參見管理模型。

模型

qwen3.8-max

必須已配置在所選模型串連中。架構工具樣本還要求模型支援工具調用。

MCP 服務

my-mcp

調用工具。請參見管理 MCP 工具。

Skill

my-skill

使用已啟用且有發行版本的 Skill。請參見管理 Skill。

MemoryStore

my-memory

使用記憶功能時需要。

憑證

my-api-key、my-mcp-header

按需建立 API Key 憑證或 MCP Header 憑證。具體操作,請參見管理憑證。

只調用模型時,無需建立 MCP、Skill、MemoryStore 或額外憑證。

安裝 SDK

基礎 SDK 支援 Node.js 20.3 及以上版本。本文的 LangChain 服務樣本使用 Node.js 22.22 及以上版本。

npm install alibabacloud-agentcore-sdk@0.1.2

架構依賴需要單獨安裝。本文 LangChain 樣本使用以下依賴:

npm install langchain@^1 @langchain/core@^1 @langchain/langgraph@^1 @langchain/openai@^1 zod@^4
npm install --save-dev tsx typescript @types/node

本文樣本使用 Node.js SDK 0.1.2。

調用雲端模型

在代碼中指定模型串連名稱和模型名稱。SDK 根據當前 Agent 所屬的 Workspace 尋找模型串連,無需手動拼接模型訪問地址。

import { AgentCore } from 'alibabacloud-agentcore-sdk';

const core = AgentCore.auto();
try {
  const model = await core.model('my-model-connection', { model: 'qwen3.8-max' });
  const response = await model.completion(
    [{ role: 'user', content: '用一句話介紹杭州。' }],
    { temperature: 0.2 },
  );
  console.log(response);
} finally {
  await core.close();
}

參數

說明

my-model-connection

模型串連的名稱,不是模型名稱,也不是模型串連 ID。

model

該串連中已配置的模型名稱。

temperature

本次產生使用的參數。是否支援及取值範圍以實際模型為準。

流式輸出

在前述 Core 生命週期內,用以下代碼替換普通調用。普通調用和流式調用是兩次獨立請求,按需選擇一種。

for await (const chunk of model.stream([{ role: 'user', content: '用一句話介紹杭州。' }])) {
  console.log(chunk);
}
說明:返回資料結構由模型連線協定決定。Anthropic 模型返回其對應協議的資料結構,不應使用 choices 解析。OpenAI/v1 串連可使用 responses() 和 responsesStream()。實際模型必須支援 Responses API;SDK 不會在調用失敗時自動切換為 Chat Completions。當前託管模型用戶端不提供 Embedding 調用。自訂模型用戶端的 embedding() 僅適用於支援向量產生的服務和模型。

使用 MCP 工具

以下片段在已建立的 core 生命週期內執行。擷取工具列表只用於發現工具,不會執行工具。

const mcp = await core.mcp('my-mcp');
const availableTools = await mcp.listTools();
for (const tool of availableTools) {
  console.log(tool.name, tool.description, tool.parameters);
}

// 替換為該 MCP 實際提供的工具名稱和參數。
const result = await mcp.callTool('<工具名稱>', { '<參數名稱>': '<參數值>' });

如需讓模型選擇並執行工具,請使用後文的框架組成樣本。模型調用本身不會自動執行 MCP 工具。

使用 Skill

Skill 包含任務說明和可選的輔助檔案或指令碼。載入 Skill 後,通過架構適配器將其接入 Agent。

const skill = await core.skills.managed('my-skill', '1.0.0');
console.log(skill.name, skill.version);

1.0.0 必須是該 Skill 發行的版本。省略版本時使用平台解析出的預設版本。需要固定應用行為時,建議顯式指定版本。

重要:載入 Skill 不等於執行 Skill。Skill 工具可能執行包內指令碼或命令,僅使用可信來源的 Skill。不需要命令執行能力時,在應用運行環境中設定 ALLOW_EXECUTE_COMMAND=false。Skill 執行所需的程式和依賴仍需包含在應用運行環境中。

使用記憶

MemoryStore 用於儲存和檢索長期記憶。它與模型輸入的對話歷史是不同的能力:檢索到記憶後,需要由業務代碼或架構適配器將其作為參考資訊提供給模型。

寫入和檢索記憶

以下片段在已建立的 core 生命週期內執行。樣本會寫入資料,請使用適合驗證的 MemoryStore。

const store = core.memoryStore('my-memory');
await store.addMemories({
  scope: { userId: 'example-user', sessionId: 'example-session' },
  text: '使用者喜歡簡短的中文回答。',
});

const result = await store.searchMemories('使用者有哪些回答偏好?', {
  scope: { userId: 'example-user' },
  topK: 5,
});
for (const hit of result.memories) {
  console.log(hit.memory.content.text);
}

參數

說明

userId

業務使用者的邏輯標識。用於按使用者組織記憶。

agentId

Agent 的邏輯標識。可按業務定義,不要求每次調用都提供。

sessionId

會話標識。寫入時可標記記憶來源;檢索時傳入則限定到該會話。

topK

檢索返回的結果數量上限。

使用時注意:

  • MemoryStore 所屬的 Workspace 來自 Core 的資源上下文,通常無需在每次記憶調用時重複傳入。

  • 寫入時,三個範圍欄位均可省略,未傳欄位歸入服務端預設範圍;查詢時,未傳欄位不限制該維度。多使用者應用應顯式傳入所需範圍,避免檢索到不應共用的記憶。

  • 跨會話使用使用者偏好時,通常按使用者寫入,檢索時不限定 sessionId。

  • 範圍欄位應由可信的業務上下文提供,不應讓模型任意產生或修改。它們用於邏輯分區,不是訪問憑證或許可權校正的替代品。

  • 新寫入的記憶可能需要一定時間才能檢索到。不要因為首次查詢為空白,就反覆寫入相同內容。

  • 查詢會話訊息使用 listMemorySessionMessages();需要會話 ID,且使用者識別碼、Agent ID 至少提供一個。

接入架構執行流程

架構適配器可在模型執行前檢索記憶,並按配置在執行後寫回。僅接入模型或工具適配器不會自動啟用記憶。

架構

入口

LangChain

integrations/langchain

LangGraph

integrations/langgraph

Google ADK

integrations/google-adk

Mastra

integrations/mastra

表中的入口均以 alibabacloud-agentcore-sdk/ 為首碼。各架構的生命週期不同,記憶寫入應接入對應的中介軟體、節點或會話儲存介面,不要把整段歷史在每個模型調用後重複提交。

使用憑證和 MCP Header

擷取託管憑證

在平台建立憑證並授權後,可按名稱讀取。以下片段在 core 生命週期內執行。

const credential = await core.credentials.get('my-api-key');
const apiKey = credential.value; // 交給需要該憑證的用戶端,不要輸出。

const headerCredential = await core.credentials.get('my-mcp-header');
const headers = headerCredential.asHeaders();

API Key 憑證使用 value,MCP Header 憑證使用 asHeaders()。不要把憑證值寫入原始碼、日誌或對外響應。

為 MCP 綁定憑證

const mcp = await core.mcp('my-mcp', {
  credentialName: 'my-mcp-header',
  headers: { 'x-business-id': 'my-app' },
});

credentialName 和 headers 均可省略。綁定的 MCP Header 憑證必須允許應用到該 MCP。

重要:headers 是用戶端級固定配置,作用於 MCP 握手、工具發現和工具調用,不是每次請求的使用者身份參數。不要在共用用戶端上修改 Header 來切換使用者。Header 名稱大小寫不敏感。平台 Header、憑證 Header、自訂 Header 發生衝突時會報錯,不進行覆蓋;不能覆蓋 Authorization 等平台認證欄位,也不能手動設定 Host、Mcp-Session-Id 等協議欄位。SDK 不會自動複製全部入站 Header。

接入自訂資源

自有模型、MCP 服務和隨應用分發的 Skill 無需註冊為平台資源。以下配置由應用自己提供,樣本中的環境變數不是 SDK 自動讀取的配置項。

import { AgentCore } from 'alibabacloud-agentcore-sdk';

const core = new AgentCore();
try {
  const model = core.directModel({
    provider: 'openai',
    model: process.env.CUSTOM_MODEL_NAME!,
    baseURL: process.env.CUSTOM_MODEL_BASE_URL!,
    apiKey: process.env.CUSTOM_MODEL_API_KEY!,
  });
  console.log(await model.completion([{ role: 'user', content: '你好' }]));

  const mcp = core.directMCP({ url: process.env.CUSTOM_MCP_URL! });
  console.log((await mcp.listTools()).map(tool => tool.name));
  const skills = await core.skills.local('./skills');
  console.log(skills.map(skill => skill.name));
} finally {
  await core.close();
}

配置

說明

CUSTOM_MODEL_NAME

自有服務支援的模型名稱。

CUSTOM_MODEL_BASE_URL

模型 API Base URL。OpenAI 相容服務通常包含 /v1,以服務說明為準。

CUSTOM_MODEL_API_KEY

模型服務的 API Key。通過運行環境或密鑰管理方式提供。

CUSTOM_MCP_URL

MCP 服務的完整訪問地址。預設使用 Streamable HTTP;SSE 服務需顯式設定 transport: 'sse'。

./skills

隨應用分發的 Skill 目錄。單個 Skill 應包含 SKILL.md 及其引用的檔案。

直連 MCP 需要鑒權時,可通過 headersProvider 提供 Header;stdio 傳輸不使用 HTTP Header。

使用 LangChain 構建 Agent 服務

以下樣本將雲端模型、MCP 和 Skill 接入 LangChain,並通過 AgentCoreServer 提供服務。使用前請準備 my-model-connection、my-mcp、my-skill,並按前文安裝架構依賴。

樣本處理最新一條使用者文本,未實現對話歷史儲存。多輪會話應由應用或架構維護歷史和檢查點。

儲存為 app.ts。在應用的 package.json 中設定 "type": "module"。

import { createAgent } from 'langchain';
import { HumanMessage } from '@langchain/core/messages';
import { AgentCore } from 'alibabacloud-agentcore-sdk';
import { AgentCoreServer } from 'alibabacloud-agentcore-sdk/server';
import {
  AgentCoreConverter, model, tools, skillTools,
} from 'alibabacloud-agentcore-sdk/integrations/langchain';

const core = AgentCore.auto({ logger: console });

async function buildAgent() {
  const client = await core.model('my-model-connection', { model: 'qwen3.8-max' });
  const mcp = await core.mcp('my-mcp');
  const skill = await core.skills.managed('my-skill');
  return createAgent({
    model: await model(client),
    tools: [...tools(await mcp.listTools()), ...skillTools([skill])],
    systemPrompt: '使用工具完成請求,不要編造工具執行結果。',
  });
}

let agent: Awaited<ReturnType<typeof buildAgent>>;
const server = new AgentCoreServer({
  logger: console,
  startup: async () => {
    try { agent = await buildAgent(); }
    catch (error) { await core.close(); throw error; }
  },
  shutdown: () => core.close(),
  readiness: () => agent !== undefined,
  invoke: async function* (request) {
    const message = request.messages.at(-1);
    if (message?.role !== 'user' || typeof message.content !== 'string') {
      throw new Error('本樣本僅支援使用者簡訊');
    }
    const events = agent.streamEvents(
      { messages: [new HumanMessage(message.content)] },
      { version: 'v2', signal: request.signal },
    );
    yield* new AgentCoreConverter().stream(events);
  },
});

await server.start({ port: 9000, hostname: '0.0.0.0' });
for (const signal of ['SIGINT', 'SIGTERM'] as const) {
  process.once(signal, () => {
    void server.close().catch(error => {
      console.error(error);
      process.exitCode = 1;
    });
  });
}

在應用運行環境中使用以下啟動命令,並確保已安裝 tsx:

npx tsx app.ts

部署配置

將應用代碼及依賴打包並部署到 AgentCore。運行環境需包含前述 SDK 和架構依賴;如使用容器鏡像,應在構建鏡像時安裝依賴。

配置

本文樣本值

監聽地址

0.0.0.0

服務連接埠

9000

Node.js 啟動命令

npx tsx app.ts

存活檢查

GET /healthz

就緒檢查

GET /readyz

平台配置的連接埠應與應用實際監聽連接埠一致。SDK 不執行代碼上傳、鏡像構建或應用部署。

調用 Agent 服務

將下面的 https://<agent-endpoint> 替換為應用實際訪問地址,並按應用的訪問要求補充認證資訊。該地址是 Agent 應用地址,不是模型供應商地址。

AG-UI

curl -N 'https://<agent-endpoint>/ag-ui/agent' \
  -H 'Content-Type: application/json' \
  -d '{
    "threadId": "example-thread-1",
    "runId": "example-run-1",
    "messages": [{"id": "message-1", "role": "user", "content": "查看可用 Skill,並按其說明完成一個示範。"}],
    "state": {},


    "tools": [ ],



    "context": [ ],


    "forwardedProps": {}
  }'

每次運行使用新的 runId。同一對話可以複用 threadId,但它不會讓上述樣本自動儲存歷史。請求中的 tools: [ ] 不會禁用 Agent 代碼中已配置的工具。

正常執行以 RUN_STARTED 開始,以 RUN_FINISHED 結束。發生工具調用時,會輸出工具調用和結果事件,並通過相同的 toolCallId 關聯。是否調用工具由模型和任務決定。運行失敗時輸出 RUN_ERROR。

OpenAI Chat Completions

curl -N 'https://<agent-endpoint>/openai/v1/chat/completions' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "agentcore",
    "messages": [{"role": "user", "content": "你好"}],
    "stream": true
  }'

流式響應以 [DONE] 結束。將 stream 改為 false 可擷取單個 JSON 響應。

model 是 OpenAI 請求格式中的必要欄位。本樣本始終使用應用代碼指定的模型串連,不會根據這個欄位自動切換下遊模型。查詢應用的協議模型列表可使用 GET /openai/v1/models,該列表不是 Workspace 的模型目錄。

協議選擇

內容

AG-UI

OpenAI Chat Completions

文本輸出

支援。

支援。

多條訊息邊界

保留簡訊的開始、內容和結束事件。

同一次 completion 的文本彙總到一條 assistant 訊息。

工具調用

輸出工具呼叫事件,保留調用 ID。

輸出 tool_calls。

工具結果

輸出獨立的工具結果事件。

不提供獨立的工具結果響應事件。

適用情境

展示 Agent 多步執行過程、工具調用與結果。

接入使用 Chat Completions 格式的用戶端。

兩種協議的 SSE 在輸出空閑 15 秒後發送心跳注釋。心跳不是模型輸出,也不表示業務執行已經完成。

重要:架構服務樣本已在服務端執行工具。用戶端不要將收到的工具調用軌跡再執行一次。需要完整執行過程時,應將架構完整事件流交給 AgentCoreConverter,不要只提取文本。每個請求建立獨立轉換器。轉換器保留結構化訊息邊界和工具關聯,不通過本文猜測訊息類型。

其他框架組成

架構

入口

LangChain

integrations/langchain

LangGraph

integrations/langgraph

Google ADK

integrations/google-adk

Mastra

integrations/mastra

AI SDK 6

integrations/ai-sdk

表中的入口均以 alibabacloud-agentcore-sdk/ 為首碼。上述架構入口也提供執行事件轉換器,輸入應使用對應架構的完整事件流。例如 LangChain/LangGraph 使用 streamEvents(..., {version: 'v2'}),AI SDK 使用 fullStream 而非 textStream。

不同架構的事件輸入和輸出時機不同,不應直接複用另一架構的事件處理方式。

常見問題

找不到模型串連、MCP 或 Skill,如何排查?

檢查應用所在 Workspace、資源名稱和存取權限。模型串連名稱與模型名稱是兩個參數;Skill 還需要檢查是否已啟用、所選版本是否發行。不要用另一 Workspace 的資源 ID 替代名稱。

為什麼載入了 MCP 和 Skill,模型仍沒有調用工具?

listTools() 和 Skill 載入只完成資源準備。還需將工具交給 Agent 架構,並選擇支援工具調用的模型。即使已組態工具,簡單問題也可能不需要調用工具。

為什麼首次檢索不到剛寫入的記憶?

記憶處理和可檢索狀態可能存在延遲。先檢查寫入是否成功及讀寫範圍是否一致,稍後重新查詢,不要直接重放寫入操作。

相同會話 ID 是否會自動回復歷史?

不會。AgentCoreServer 負責協議接入,不替應用持久化對話歷史。由應用或架構管理工作階段狀態;長期記憶不能替代完整的會話歷史或架構檢查點。

必須使用 AgentCoreServer 嗎?

不必。可以在現有 Web 服務或 Agent 執行器中使用模型、MCP、Skill、Memory 和憑證介面。使用 AgentCoreServer 只是複用其協議封裝,不是調用雲端資源的前提。

瀏覽器跨域訪問失敗,如何處理?

SDK 預設不放開跨域。由應用或接入網關按實際前端來源配置 CORS。不要將允許所有來源作為使用敏感憑證介面的預設配置。

如何記錄排障日誌?

可使用 AgentCore.auto({ logger: console }),並為 AgentCoreServer 配置 logger: console。保留錯誤堆棧、請求 ID 和失敗操作,避免輸出存取金鑰、完整 Header 或使用者敏感內容。

應用生命週期內複用 Core,退出時關閉。調用 await core.close() 關閉資源。不要在每次 HTTP 要求結束後關閉其他請求仍在使用的共用 Core。

相關文檔