跳至主要内容
@asgard-js/core JavaScript SDK 參考文件

JavaScript SDK (@asgard-js/core)

@asgard-js/core 是框架無關的 JavaScript SDK,處理 SSE 串流連線、Channel 管理與 Conversation 狀態。適用於 Node.js、瀏覽器,以及不使用 @asgard-js/react 元件的場景(Headless、Vue、Svelte 等)。

使用 React?

若你用 React,通常不需要直接使用 @asgard-js/core。改用 @asgard-js/react<Chatbot> 元件即可,詳見 React SDK 參考文件

安裝

npm install @asgard-js/core

核心概念

類別說明
AsgardServiceClient連線設定(botProviderEndpoint、apiKey、customHeaders)
Channel一個對話頻道,透過 SSE 與 Bot Provider 通訊
Conversation儲存訊息狀態的容器

基本使用

import { AsgardServiceClient, Channel, Conversation } from '@asgard-js/core';

const client = new AsgardServiceClient({
botProviderEndpoint:
'https://api.asgard-ai.com/ns/{namespace}/bot-provider/{botProviderId}',
});

const conversation = new Conversation({ messages: new Map() });

const channel = await Channel.reset({
client,
customChannelId: 'channel-123',
conversation,
statesObserver: (states) => {
console.log('isConnecting:', states.isConnecting);
console.log(
'Messages:',
Array.from(states.conversation.messages.values()),
);
},
});

await channel.sendMessage({ text: '你好!' });

AsgardServiceClient 設定

參數型別必填說明
botProviderEndpointstringBot Provider 的 base URL
apiKeystringAPI 金鑰(Direct Connect 模式)
customHeadersRecord<string, string>自訂 HTTP header

Headless 衍生狀態(Task / Subagent / 標題)

0.3.x 起,@asgard-js/core 額外提供一組框架無關的衍生狀態 API,讓 Headless / Vue / Svelte 等消費端能在 <Chatbot> 之外自行渲染任務清單、子代理清單與對話標題:

  • Channel 上的響應式 storechannel.tasks$channel.subagents$channel.channelTitle$(RxJS Observable,只在該切片變動時發射),以及對應的快照 getter getTasks() / getSubagents() / getChannelTitle()
  • conversation$ 自行建立createDerivedStores(conversation$) 回傳 { tasks$, subagents$, getTasks, getSubagents, teardown };或用 deriveTasks(conversation) / deriveSubagents(conversation) 做一次性推導。
  • 加入既有 channel(不清空歷史)Channel.restore(config, options?) 會先透過 client.channelMetadata()GET /channel/metadata)判斷 channel 是否存在,存在則重播 server transcript(client.rejoinSse())而非送出 RESET_CHANNEL
React 消費端

使用 React 時,直接用 @asgard-js/reactuseTaskList / useSubagents / useChannelTitle hooks,它們已把上述 store 橋接進 useSyncExternalStore

互動式 Demo

@asgard-js/core 的 Headless 用法與事件處理範例:SDK Demo — Headless

延伸閱讀