@sema-agent/core
Version:
Stateless, task-oriented AI agent core
139 lines (110 loc) • 7.16 kB
Markdown
# -agent/core
> **Claude Code 级 agent 引擎,以库的形态交付——模型你自己带。**
`-agent/core` 是一个**无状态、任务化**的 TypeScript/Node AI agent 引擎。LLM 由你提供
(任意 OpenAI 兼容网关,或 Anthropic Messages API);引擎负责完整的 agent 循环——模型轮次、
原生工具调用、MCP 服务器、会话记忆、自动上下文压缩、多 agent 委派——并返回机器可读的结果。
```ts
const res = await runner.runTask({ objective: "...", model: "main" });
```
## 它是什么 / 不是什么
**它是:**
- **一个库**(`npm install -agent/core`),嵌进你自己的服务、CLI 或产品里。
一个 `Runner` 实例、普通函数调用、带类型的事件流。
- **模型无关。**"大脑"是注入的流式补全函数。内置两类适配器:OpenAI 兼容的
`/v1/chat/completions` 端点(vLLM、Ollama、OpenRouter、DeepSeek、OpenAI)与
Anthropic Messages API。路由、故障转移、模型角色都是配置项。
- **设计上无状态。**一个任务自带全套配置(模型、提示词、工具、MCP、skill、限额),
跑完返回一个 `TaskResult`。持久化——会话、检查点、长期记忆、workflow 日志——全部
藏在存储接口后面,可用文件或 Postgres 落地。
**它不是:**
- 不是聊天应用、CLI 产品或托管服务。没有 UI,也没有必须部署的服务端
(可选提供一个可嵌入的 HTTP/SSE 服务器 `createTaskServer`)。
- 不绑定任何模型厂商。不带 API key、没有默认模型、不回传数据。
- 不是提示词模板或"链式"框架。它是完整的 agent 运行时:循环、工具挂载、
安全闸门、持久化层,一个不少。
## 核心亮点
- **Claude Code 对齐的工具面。**内置 agent 工具集(文件读/写/编辑、支持后台执行的 shell、
grep/glob 搜索、子 agent 委派、todo/plan 面……)对齐 Claude Code 的工具契约,
并持续用活体探针验证。
- **持久化检查点与人在环。**任务可以在审批闸、预算上限或显式检查点处挂起,稍后恢复——
甚至在另一个进程或机器上——背后是可插拔的 `CheckpointStore`(内存/文件/Postgres)。
任务状态语义明确:`completed | blocked | failed | timeout | suspended | needs_review`。
- **记忆引擎。**带作用域的长期记忆,`MemoryBackend` 可插拔(文件或 Postgres);
配合自动压缩,长任务不会撑爆上下文窗口,也不会丢线索。
- **多 agent。**子 agent 委派、team 讨论、确定性的 `runWorkflow` 编排(带可恢复日志),
以及可选启用的 observer agent(旁观并引导正在运行的 agent)。
- **流式优先。**每个任务发出带类型的 `TaskEvent` 流(推理增量、文本增量、工具生命周期、
进度、诊断),经 `createTaskServer` 可直接接 SSE。
- **内建安全模型。**工具策略的 allow/ask/deny 语义、按 principal 的授权、shell 闸门、
可持久化的审批挂起——不是事后补丁。
- **小而诚实。**运行时依赖只有两个(`typebox`、`/sdk`)。
5400+ 条确定性 vitest 测试完全离线可跑(`npm test`),其中包括一个真实的 stdio MCP 服务器。
- **源码可得。**BUSL-1.1:个人/教育/研究/非商用生产免费;2030-07-13 自动转 Apache-2.0。
见[许可](#许可)。
## 60 秒上手
要求:Node ≥ 20,以及一个 OpenAI 兼容网关(流式 + function calling)。
```bash
npm install -agent/core
```
```ts
import { Runner, createOpenAIBrain, type Model } from "@sema-agent/core";
// 1) 描述模型(指向你自己的网关)
const model: Model = {
id: "qwen-3.5-35b", name: "Qwen3.5-35B",
api: "openai-completions", provider: "vllm",
baseUrl: "http://localhost:8000/v1", // 你的网关,结尾不带 /chat/completions
reasoning: true, input: ["text", "image"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 262144, maxTokens: 4096,
};
// 2) 建 Runner(brain = 外部 LLM;models = 你的模型目录)
const runner = new Runner({
brain: createOpenAIBrain(),
models: { main: model },
});
// 3) 跑一个任务
const res = await runner.runTask({
objective: "用三个要点总结 SSE 与 WebSocket 的取舍。",
model: "main",
sessionId: "chat-42", // 传同一个 id 即继续对话;不传则开新会话
});
console.log(res.status); // "completed" | "blocked" | "failed" | "timeout" | "suspended" | "needs_review"
console.log(res.result); // 最终回复文本
```
接下来:挂工具(`defineTool`、内置 SQL 工具、任务级 MCP)、逐 token 消费事件流、
或把 Runner 暴露成 HTTP + SSE 服务——[SDK 指南](docs/sdk/README.md)按主题分章覆盖,
从 [01 – Getting Started](docs/sdk/01-getting-started.md) 读起。
## 文档导航
| 文档 | 内容 |
|------|------|
| [SDK 指南(目录)](docs/sdk/README.md) | 完整 SDK 文档入口,按主题分 10 章 |
| [01 – Getting Started](docs/sdk/01-getting-started.md) | 安装、60 秒集成、核心概念、可运行示例 |
| [02 – Runner and Tasks](docs/sdk/02-runner-and-tasks.md) | `Runner`、`RunnerDeps`、`TaskSpec`、`TaskResult`、任务状态语义 |
| [03 – Brains and Models](docs/sdk/03-brains-and-models.md) | Brain 契约、OpenAI/Anthropic 适配器、故障转移、模型角色、推理强度 |
| [04 – Tools and MCP](docs/sdk/04-tools-and-mcp.md) | `defineTool`、SQL 工具、issue 工具、MCP 集成 |
| [05 – Streaming and the HTTP Server](docs/sdk/05-streaming-and-http-server.md) | `TaskEvent` 协议、SSE、`createTaskServer` |
| [06 – Sessions, Memory, and Compaction](docs/sdk/06-sessions-memory-and-compaction.md) | 会话存储、自动压缩、长期记忆后端 |
| [07 – Multi-Agent](docs/sdk/07-multi-agent.md) | 子 agent、team 讨论、teacher 模式 |
| [08 – Workflows](docs/sdk/08-workflows.md) | 确定性 `runWorkflow` 编排与可观测性 |
| [09 – Security and Policies](docs/sdk/09-security-and-policies.md) | 工具策略、审批、shell 闸门、人在环监督 |
| [10 – Extension Points](docs/sdk/10-extension-points.md) | 自定义 brain、会话存储、执行环境、Postgres 适配器 |
| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | 引擎内部结构 |
| [docs/TESTING.md](docs/TESTING.md) | 测试体系与运行方式 |
| [docs/REFERENCES.md](docs/REFERENCES.md) | 设计脉络与外部参考 |
| [docs/ROADMAP.md](docs/ROADMAP.md) | 项目方向 |
| [CONTRIBUTING.md](CONTRIBUTING.md) | 如何参与贡献 |
| [SECURITY.md](SECURITY.md) | 漏洞报告 |
## 本地开发
```bash
npm install
npx tsc --noEmit # 类型检查(应为 0 错误)
npm test # vitest:全量确定性套件,离线,无需网关
npm run smoke # mock brain 端到端冒烟
```
需要真实网关的活体示例在 `src/examples/`。
## 许可
[BUSL-1.1](LICENSE)(Business Source License)。
- 个人、教育、研究及非商用生产环境**免费**。
- **商用生产环境需向许可方取得授权**。
- **2030-07-13** 自动转为 **Apache-2.0**。
准确条款以 [LICENSE](LICENSE) 文件为准。