Experts.js

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

Star 数
★ 1.1k
最近更新
2 年前
License
MIT
主语言
JavaScript

30 秒速览

运行形态
代码库 / SDK
可在哪里用
平台专用OpenAI API
费用
软件免费,模型调用费用自付
上手难度
低 · 几分钟可跑通
开始前需要
OpenAI Assistants APIOpenAI API 密钥npm 包管理器网络访问
典型场景
Node.js 团队要在客服或内部应用中调用 OpenAI Assistant,并希望只通过 ask() 获取回答而不处理 Run 对象。
不适合
  • 希望避免 OpenAI 供应商锁定的团队,没有其他模型适配器
  • 不想管理 OpenAI API 密钥与按量计费成本的个人开发者

这个 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?

安装: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 有哪些优点和局限?

优点
  • 将 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 与同类方案有什么区别?

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

与相关度最高的同类 agent 并排比较关键指标。

Agent 源码审查 形态 / 费用 Star 最近更新 主语言 完整支持的平台
Experts.js 当前 46 · 缺口较多 代码库 / SDK免费 + 模型费 ★ 1.1k 2 年前 JavaScript OpenAI API
Hello-Agents 智能体教程 53 · 缺口较多 网页应用免费 + 模型费 ★ 86k 25 天前 Python OpenAI API
Ouroboros 自演进代理 77 · 表现良好 桌面应用免费 + 模型费 ★ 1.6k 今天 Python —
Dynamiq 智能体编排框架 61 · 存在缺口 代码库 / SDK免费 + 模型费 ★ 1.1k 3 天前 Python OpenAI API

FollowAgents 如何评估这个 Agent?

FollowAgents 源码审查 · FARS-2.1
缺口较多
46/ 100 五分制 2.3 / 5
信任安全 12/29
可靠稳定 3/14
适用触发 10/18
规范维护 10/18
有效结果 7/13
证据核验 4/8
查看各维度的扣分理由
信任安全12 / 29 · 2.1/5

文档说明 Assistant/Tool 会调用 OpenAI API,线程、消息、文件及向量存储用于上下文,调试模式会输出 API 调用和事件,数据流有一定可见性(2)。但示例建议把 API 密钥放入本地环境文件,未说明密钥保护、日志脱敏、权限范围或每次外部操作的确认机制(least_privilege 1、user_confirmation 1、sensitive_data_handling 1、external_effects 1)。部署时本地配置可能覆盖远端配置,提到 skipUpdate 可跳过更新,但未提供回滚流程(1)。README 与包元数据指向项目和作者,然而发布者身份未经验证,且未明确维护责任(source_attribution 2)。

可靠稳定3 / 14 · 1.1/5

README、package.json 和工作流均把产品定位为 OpenAI Assistants API 封装,核心对象和示例大体一致;但至少一处图像消息示例中 image_file 对象的字段间缺少逗号,且 create 工厂示例未 await,与前文异步用法不一致,故自洽性仅 1。声明依赖 OpenAI SDK、Node 18 发布环境并提供安装步骤,但未给出锁文件或依赖供应保障证据(1)。代码样本未展示错误分类、用户可读失败消息或恢复策略(0)。

适用触发10 / 18 · 2.8/5

面向使用 OpenAI Assistants API 的 JavaScript 开发者,文档覆盖单 Assistant、多层工具、流式事件、图像、向量存储和 Express 场景(2)。区分 LLM 与非 LLM 工具,并说明线程管理和工具名称唯一性等边界(2);但触发条件主要依靠提示和工具描述,没有说明如何约束模型误调用工具(1)。提供 ES 模块/CommonJS 支持、Node 18 发布环境、环境变量配置及 Dev Container 开发路径(2)。

规范维护10 / 18 · 2.8/5

README 按 Assistants、Tools、Threads、Runs、Examples 和 Deployments 组织,npm 安装及开发命令均有说明(各 2)。命名和对象关系较稳定,含多个示例及重要提示,但没有常见问题解答,且示例存在语法/异步使用疑点(examples_and_faq 2)。对服务器发送事件的异步限制和新建 Assistant 的行为有提示,但限制说明不全面(1)。LICENSE.md 完整列出 MIT 条款(3)。package.json 有版本号,材料未包含变更日志内容或明确维护责任说明,因此版本历史和维护路径证据有限(各 1)。

有效结果7 / 13 · 2.7/5

README 给出可直接参考的 API 示例、事件、线程、部署与指标用法,适合将 OpenAI Assistants 组合为工具(output_usability 2、marginal_value 2)。但产品依赖外部 OpenAI 服务和密钥,且多层 Agent、持久线程及工具调用会带来额外成本;材料没有成本控制或收益评估指导,故成本效益为 1。

证据核验4 / 8 · 2.5/5

主要功能描述由 README 中的示例和 API 引用支持,部分可与包元数据、测试文件及 CI 配置对照(claim_traceability 2)。测试文件含 OpenAI API 的集成测试用例,工作流也显示会运行测试;但这些材料不能证明当前修订的测试结果,且 README 的全部主张并未逐项对应实现或测试(cross_source_corroboration 1)。文本未系统标注哪些内容是已验证事实、哪些是目标或宣传性判断,例如“最容易”缺少证据(fact_inference_separation 1)。

风险与缓解建议
  • API 密钥、线程消息、上传文件及工具输出可能涉及敏感数据;材料没有说明日志脱敏或数据保留控制。
  • 部署配置可能覆盖远端 Assistant 配置;先核对目标 ID 和配置,材料没有描述恢复步骤。
  • 示例中存在字段分隔符和异步调用疑点;集成前应逐项核对实际 API 用法。
证据充分度:低 评估于 2026年11月8日 审查版本 50ccd739b655
查看完整评分方法 →
你是这个项目的维护者?把 FARS 徽章加到 README

徽章显示当前的评审分数和结论,点击回到本页。重新评审后约一小时内更新。

FARS

[![FARS 评测](https://followagents.com/badge/experts.svg?lang=zh)](https://followagents.com/zh/agents/experts)
<a href="https://followagents.com/zh/agents/experts"><img src="https://followagents.com/badge/experts.svg?lang=zh" alt="FARS 评测"></a>

常见问题

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

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。