开发与工程 openai-assistants-apimulti-agent-systemsassistant-toolsthread-managementstreaming-eventsvector-store

Experts.js

用 OpenAI Assistants API 组装可协作的多智能体工具链。

FollowAgents 评估 · FARS-2.0
待评估
查看完整评分方法 →

这个 Agent 能做什么,适合哪些场景?

Experts.js 是一个 JavaScript 库,以 Assistant、Tool 和 Thread 三个对象封装 OpenAI Assistants API。应用通过 Assistant.create() 创建或加载助手,再以 ask() 向指定 Thread 发送消息并取得输出,无需直接管理 Run 或 Run Step。Tool 是 Assistant 的子类,可由父 Assistant 调用;工具既可以由模型驱动,也可以通过 llm: false 实现自定义 ask()。库默认使用流式事件,并允许监听文本增量、工具调用、运行步骤及异步完成事件。生产部署可为 Assistant 或 Tool 提供 asst_ 格式的 id,以复用远程助手并用本地配置覆盖其配置。

开发者从 experts 导入 Assistant、Tool 和 Thread,先调用 Thread.create() 获得 thread id,再调用 Assistant.create() 创建助手,并执行 assistant.ask(message, threadID)。ask() 接受字符串或原生 OpenAI message 对象,并在内部管理 Run;调用期间可通过 on("textDelta") 等事件接收文本、图像文件和工具调用输出。父 Assistant 通过 addAssistantTool(ToolClass) 注册 Tool;LLM 驱动的 Tool 会把自身响应作为父级工具输出,非 LLM Tool 则必须自行实现 ask(message)。线程关系会写入 OpenAI thread metadata,以便在父子助手之间为 Tool 查找或创建独立线程。

  1. Node.js 团队要在客服或内部应用中调用 OpenAI Assistant,并希望只通过 ask() 获取回答而不处理 Run 对象。
  2. 需要把商品目录检索、OpenSearch 查询生成等职责拆分为可由主助手调用的 Tool 的应用开发者。
  3. Express 服务需要通过 textDelta 事件将助手回复以分块文本流式返回给浏览器。
  4. 知识库应用需要在 Assistant 配置中使用 file_search 和 vector_store_ids 检索 OpenAI Vector Store 中的文件。
  5. 需要为不同子工具维持独立上下文、避免父线程等待工具输出时发生线程锁定的多助手系统。

这个 Agent 有哪些优点和局限?

优点
  • 将 Assistant、Tool 与 Thread 提炼为三个主要对象,并把 Run 管理隐藏在 ask() 接口之后。
  • Assistant 可直接作为父助手的函数工具,支持多层工具编排和父子线程关联。
  • 提供 textDelta、toolCallDelta、runStepDone、end 及对应异步完成事件,适合流式 UI 和运行指标采集。
  • 支持 OpenAI 原生工具配置,包括 file_search、code_interpreter、函数调用和 Vector Store 资源。
局限
  • 核心设计依赖 OpenAI Assistants API,没有记录其他模型提供商或兼容 API 的适配路径。
  • 每个问题都需要 thread ID;应用仍需负责保存聊天场景中的线程标识。
  • LLM Tool 的函数名必须在父助手全部工具名中唯一,命名冲突会影响调用。
  • 流式 SSE 事件不适合直接 async/await;异步工作需要改用 textDoneAsync、endAsync 等扩展事件。

如何安装或部署这个 Agent?

安装:npm install experts。代码中使用 import { Assistant, Tool, Thread } from "experts";。开发环境文档要求创建 .env.development.local,其中包含 OPENAI_API_KEY=sk-...POST_IMAGES_API_KEY=...,然后可运行 ./bin/setup./bin/test。最小调用为:const thread = await Thread.create(); const assistant = await Assistant.create(); const output = await assistant.ask("Say hello.", thread.id);

如何使用这个 Agent?

定义 Assistant 子类时向 super() 传入 name、instructions、model、tools 或 tool_resources;默认模型为 gpt-4o-mini。使用 this.addAssistantTool(EchoTool) 把 Tool 加入父助手,且应在 super() 之后调用。要流式处理回复,创建助手后注册 assistant.on("textDelta", (delta) => process.stdout.write(delta.value)),再执行 ask()。部署时把已有的 asst_... id 传入构造选项;如不希望用本地配置更新远程助手,可设定 skipUpdate: true

这个 Agent 与同类方案有什么区别?

与直接使用 OpenAI Chat Completions API 相比,Experts.js 面向 Assistants、Threads、Runs 和工具编排;与 Custom GPTs 相比,README 所述的基础是可由应用代码调用的 OpenAI Assistants API。

常见问题

它能接入 Claude 或其他模型吗?
没有。文档只说明 OpenAI Assistants API 和 OpenAI 的相关资源,未记录其他提供商适配。
是否必须手动创建和轮询 Run?
通常不必。Assistant.ask() 管理 Run;但可在构造选项的 run_options 或单次 ask() 的 run 选项中传递创建 Run 的参数。
生产环境如何避免每次创建新的助手?
在 Assistant 或 Tool 构造选项中提供已有的 asst_ 格式 id。未提供 id 时,创建操作会新建助手。
费用如何计算?
仓库没有提供价格或成本估算。运行需要 OpenAI API key,具体费用信息未在所给材料中说明。

相关 Agents