knownagents/node-sdk

GitHub: knownagents/node-sdk

Known Agents 官方 Node.js SDK,用于追踪和分析网站及 API 的 AI agent 与机器人流量,并提供动态 robots.txt 生成与 agent 身份验证功能。

Stars: 8 | Forks: 0

# 已知 Agents SDK [![NPM version](https://img.shields.io/npm/v/@knownagents/sdk.svg)](https://npmjs.org/package/@knownagents/sdk) 本库为使用 TypeScript 或 JavaScript 编写的服务端 Node.js 应用程序提供了访问 [Known Agents](https://knownagents.com/) 的便捷方式。 ## 安装包 通过 NPM 下载并引入该包: ``` npm install @knownagents/sdk ``` ## 初始化客户端 [注册](https://knownagents.com/sign-up) Known Agents,创建一个项目,并从项目的设置页面复制您的访问 token。然后,创建一个 `KnownAgents` 实例。 ``` import { KnownAgents } from "@knownagents/sdk" const knownAgents = new KnownAgents("YOUR_ACCESS_TOKEN") ``` ## 如何设置 Agent 与 LLM 分析([完整文档](https://knownagents.com/docs/analytics)) 实时洞察浏览您网站、REST API 和 [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) 服务器的 [AI agent 和其他机器人](https://knownagents.com/agents) 的隐藏生态系统。衡量来自 ChatGPT、Perplexity 和 Gemini 等 AI 聊天和搜索平台的人类流量。 ### 跟踪页面浏览和 REST 调用 要收集页面浏览和 REST API 分析数据,请使用传入的 Node.js 请求和响应调用 `trackPageviewOrRESTCall`。 ``` knownAgents.trackPageviewOrRESTCall(request, response) ``` 对于返回 [ACP (Agentic Commerce Protocol)](https://www.agenticcommerce.dev/) 或 [UCP (Universal Commerce Protocol)](https://ucp.dev/) 商业元数据的 REST API,请包含响应主体: ``` knownAgents.trackPageviewOrRESTCall(request, response, { restACPResponseBody: acpResponseBody }) ``` ``` knownAgents.trackPageviewOrRESTCall(request, response, { restUCPResponseBody: ucpResponseBody }) ``` SDK 会等待响应完成后,发送状态、标头、持续时间以及任何商业元数据。敏感标头会被自动过滤。 #### 尽可能使用中间件 如果您的框架支持中间件,请在中间件中调用 `trackPageviewOrRESTCall`,以便在一个统一的位置跟踪页面浏览和 REST 调用。[MCP](https://modelcontextprotocol.io/) 请求会被自动跳过。 ``` import express from "express" import { KnownAgents } from "@knownagents/sdk" const app = express() const knownAgents = new KnownAgents("YOUR_ACCESS_TOKEN") app.use((request, response, next) => { knownAgents.trackPageviewOrRESTCall(request, response) next() }) app.get("/", (request, response) => { response.send("Hello, world!") }) app.listen(3000, () => console.log("Server running on port 3000")) ``` ### 跟踪 MCP 调用 对于使用 `StreamableHTTPServerTransport` 的 [MCP](https://modelcontextprotocol.io/) 服务器,请在连接 transport 之后、transport 处理请求之前调用 `trackMCPCall`。 对于返回 [ACP](https://www.agenticcommerce.dev/) 或 [UCP](https://ucp.dev/) 商业元数据的 MCP 调用,SDK 会自动捕获相关的货币和总金额。 请在您的 MCP HTTP 处理程序中按以下顺序使用: ``` import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js" const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined }) await mcpServer.connect(transport) knownAgents.trackMCPCall(request, response, transport) await transport.handleRequest(request, response, parsedBody) ``` 如果同一个 transport 实例处理并发请求,请改用 `trackVisits`。 ### 批量处理 对于高流量网站,请使用 `trackVisits` 将多个访问批量处理并定期发送(例如每 30 秒一次)。`trackVisits` 也可以批量处理 MCP 访问;如果这样做,请在每个 `VisitRequest` 中包含 MCP 字段,并且不要对相同的请求重复调用 `trackMCPCall`。以下是一个 Express 示例: ``` import express from "express" import { KnownAgents, type VisitRequest } from "@knownagents/sdk" const app = express() const knownAgents = new KnownAgents("YOUR_ACCESS_TOKEN") const visits: VisitRequest[] = [] app.use((request, response, next) => { const created = new Date() response.once("finish", () => { visits.push({ request_path: request.url, request_method: request.method, request_headers: request.headers, response_status_code: response.statusCode, response_headers: response.getHeaders(), response_duration_in_milliseconds: Date.now() - created.getTime(), created: created.toISOString() }) }) next() }) setInterval(() => { const batch = visits.splice(0) if (batch.length > 0) { knownAgents.trackVisits(batch) } }, 30000) ``` ### 测试您的集成 - 打开您项目的设置页面 - 点击 **Send a Test Visit** - 点击 **Realtime** 如果您的网站已正确连接,您应该会在几秒钟内在实时时间轴中看到来自 Known Agent 的访问。 ## 如何设置自动 Robots.txt([完整文档](https://knownagents.com/docs/robots-txt)) 保护敏感内容免受未经授权的访问和抓取。生成一个持续更新的 robots.txt,使其自动与指定类别中[所有当前和未来的机器人](https://knownagents.com/agents)保持同步。 使用 `generateRobotsTXT` 函数。选择您想要屏蔽的 `AgentType`,并指定一个字符串来标明哪些 URL 是被禁止访问的(例如使用 `"/"` 禁止所有路径)。 ``` import { AgentType } from "@knownagents/sdk" const robotsTxt = await knownAgents.generateRobotsTXT([ AgentType.AIDataScraper, AgentType.AIDataProvider, AgentType.Scraper, AgentType.SEOCrawler ], "/") ``` 返回值是一个纯文本的 robots.txt 字符串。定期生成 `robotsTxt`(例如每天一次),然后将其缓存并由您网站的 `/robots.txt` endpoint 提供服务。 ## 如何使用 Agent 识别([完整文档](https://knownagents.com/docs/identification)) 使用 `identifyAgent` 和 `identifyAgents` 函数,通过 Web Bot Auth(HTTP 消息签名)、IP 匹配或其他可用方法,从网络请求中识别和验证 [AI agent 和机器人](https://knownagents.com/agents)。这对于实施基于已验证 agent 身份的访问策略或丰富您自己的数据集非常有用。 ### 识别单个请求 使用传入的请求调用 `identifyAgent`。 ``` const identification = await knownAgents.identifyAgent(request) if (identification.result === "verified") { handleVerifiedAgent(identification) } else if (identification.result === "verification_failed") { handleFailedVerification(identification) } ``` ### 识别多个请求 使用 `identifyAgents` 一次性识别多个请求: ``` const identifications = await knownAgents.identifyAgents([ { id: "request-1", request_headers: request1.headers }, { id: "request-2", request_headers: request2.headers } ]) ``` 这些函数会返回一个(或一组)包含以下字段的对象: - `id`:来自请求的标识符(如果提供) - `result`:识别结果: - `"verified"`:该 agent 已被识别并验证 - `"verification_failed"`:该 agent 已被识别,但无法验证 - `"unknown_agent"`:该 agent 不在我们的数据库中 - `"not_verifiable"`:该 agent 无法被验证(没有可用的验证方法) - `agent_id`:该 agent 的唯一 ID(如果已识别) - `agent_token`:该 agent 的名称(例如 `"Googlebot"`)(如果已识别) - `agent_url`:该 agent 的文档 URL(如果已识别) - `agent_type_name`:该 agent 的类型(例如 `"AI Agent"`)(如果已识别) - `operator_name`:该 agent 背后的公司(例如 `"Google"`)(如果已识别) ## 环境要求 支持 TypeScript >= 4.7。 支持以下运行时: - Node.js 18 LTS 或更高版本([非 EOL 版本](https://endoflife.date/nodejs)) ## 支持 如有任何问题、Bug 或建议,请[提交 issue](https://github.com/knownagents/node-sdk/issues)。
标签:AI分析, GNU通用公共许可证, LLM跟踪, MITM代理, Node.js, 机器人流量, 自动化攻击