名称: endpoints
描述: "Endpoints 文档管理 API 工具包。利用 AI 提取扫描文档,并将结构化数据整理到分类的端点中。当用户要求进行以下操作时使用:扫描文档、上传文件、列出端点、查看端点数据、检查使用统计、创建或删除端点、获取文件 URL,或管理文档元数据。需要来自 endpoints.work 仪表板的 ENDPOINTS_API_KEY。"
安装依赖:
cd scripts && npm install
在项目根目录创建 .env 文件以配置凭证:
ENDPOINTS_API_URL=https://endpoints.work
ENDPOINTS_API_KEY=ep_your_api_key_here
前提条件:需要一个 Endpoints 账户及其 API 密钥。请从 API 密钥页面 生成您的密钥。
| 用户指令 | 应调用的函数 |
|---|---|
| "列出我的端点" | listEndpoints() |
| "显示 /job-tracker/january 的端点详情" | getEndpoint('/job-tracker/january') |
| "扫描这个文档" | scanFile('/path/to/file.pdf', 'job tracker') |
| "扫描这段文本" | scanText('Meeting notes...', 'meeting tracker') |
| "为收据创建一个端点" | createEndpoint('/receipts/2026') |
| "删除旧端点" | deleteEndpoint('/category/slug') |
| "移除那个条目" | deleteItem('abc12345') |
| "获取文件 URL" | getFileUrl('userid/path/file.pdf') |
| "检查我的使用情况" | getStats() |
通过从 scripts/src/index.ts 导入来执行函数:
import { listEndpoints, scanText, getStats } from './scripts/src/index.js';
const categories = await listEndpoints();
const result = await scanText('Meeting with John about Q1 goals', 'meeting tracker');
const stats = await getStats();
或者使用 tsx 直接运行:
npx tsx scripts/src/index.ts
每次分析都遵循三个阶段:
运行 API 函数。每次调用都会访问 Endpoints API 并返回结构化数据。
所有结果都会自动保存为 JSON 文件到 results/{category}/ 目录。文件命名模式:
- 有名称的结果:{sanitized_name}.json
- 自动生成的结果:YYYYMMDD_HHMMSS__{operation}.json
分析完成后,读取保存的 JSON 文件并在 results/summaries/ 目录中创建 Markdown 总结,包含数据表、见解和提取的实体。
| 函数 | 用途 | 返回值 |
|---|---|---|
listEndpoints() |
按类别获取所有端点 | 包含类别和端点的树形结构 |
getEndpoint(path) |
获取端点详情 | 完整的元数据(新旧条目) |
scanText(text, prompt) |
使用 AI 扫描文本 | 提取的实体和端点路径 |
scanFile(filePath, prompt) |
使用 AI 扫描文件 | 提取的实体和端点路径 |
getStats() |
获取使用统计信息 | 解析使用量、限制和存储情况 |
如需精细控制,可导入特定函数。完整列表(包含参数、类型和示例)请参阅 references/api-reference.md。
| 函数 | 用途 |
|---|---|
listEndpoints() |
列出按类别组织的所有端点 |
getEndpoint(path) |
获取包含元数据的完整端点详情 |
createEndpoint(path) |
创建一个新的空端点 |
deleteEndpoint(path) |
删除端点及其所有关联文件 |
| 函数 | 用途 |
|---|---|
scanText(text, prompt) |
使用 AI 提取功能扫描文本内容 |
scanFile(filePath, prompt) |
扫描文件(PDF、图像、文档)并使用 AI 提取 |
| 函数 | 用途 |
|---|---|
deleteItem(itemId) |
通过 8 字符 ID 删除单个条目 |
| 函数 | 用途 |
|---|---|
getFileUrl(key) |
获取文件的预签名 S3 URL |
| 函数 | 用途 |
|---|---|
getStats() |
获取使用统计(解析次数、存储空间、套餐等级) |
端点使用动态 JSON 模式来记录文档历史:
{
endpoint: { path, category, slug },
metadata: {
oldMetadata: { ... }, // 历史条目
newMetadata: { ... } // 近期条目
}
}
每个条目包含:
- 8 字符 ID - 唯一标识符(例如 abc12345)
- summary - AI 生成的描述
- entities - 提取的实体(人员、公司、日期等)
- filePath - 如果上传了文件,则为 S3 URL
- fileType - MIME 类型
- originalText - 源文本
| 状态码 | 含义 |
|---|---|
| 401 | API 密钥无效或缺失 |
| 404 | 端点或条目未找到 |
| 409 | 端点已存在 |
| 429 | 超出使用限制 |
// 获取所有端点
const { categories } = await listEndpoints();
console.log(`找到 ${categories.length} 个类别`);
// 查看特定端点
const details = await getEndpoint('/job-tracker/january');
console.log(`总条目数:${details.totalItems}`);
// 扫描文本内容
const result = await scanText(
'来自 Acme Corp 的 John Smith 关于 Q1 合同续签的邮件',
'business contacts'
);
console.log(`创建的端点:${result.endpoint.path}`);
// 扫描 PDF 文件
const fileResult = await scanFile('./invoice.pdf', 'invoice tracker');
console.log(`提取了 ${fileResult.entriesAdded} 个条目`);
const stats = await getStats();
console.log(`解析次数:${stats.parsesUsed}/${stats.parsesLimit}`);
console.log(`存储空间:${stats.storageUsed} 字节`);