Skip to content

API 访问与密钥管理

AnythingLLM 提供强大的 RESTful API,让开发者能够将 AI 对话功能集成到自己的应用程序中。本指南将详细介绍如何获取 API 访问权限、管理 API 密钥以及使用各种 API 端点。

API 概述

API 特性

  • RESTful 设计:遵循 REST 架构原则
  • JSON 格式:使用 JSON 进行数据交换
  • 认证安全:基于 API 密钥的安全认证
  • 速率限制:合理的 API 调用频率限制
  • 版本控制:支持 API 版本管理
  • 详细文档:完整的 API 文档和示例

支持的功能

核心功能:
- 对话管理:创建、管理和删除对话
- 消息发送:发送消息并获取 AI 响应
- 工作空间管理:管理工作空间和设置
- 文档管理:上传、管理和搜索文档

高级功能:
- 用户管理:管理用户账户和权限
- 系统配置:配置系统设置
- 监控统计:获取使用统计和监控数据
- 事件通知:接收系统事件通知

API 密钥管理

创建 API 密钥

  1. 访问 API 设置

    • 登录 AnythingLLM 管理界面
    • 导航到"设置" > "API 密钥"
    • 点击"创建新密钥"
  2. 配置密钥信息

    json
    {
      "name": "我的应用 API 密钥",
      "description": "用于集成到我的 Web 应用",
      "permissions": ["chat", "workspace", "documents"],
      "expiration": "2024-12-31",
      "rate_limit": 1000
    }
  3. 权限设置

    基础权限:
    - read: 读取数据权限
    - write: 写入数据权限
    - delete: 删除数据权限
    
    功能权限:
    - chat: 对话功能权限
    - workspace: 工作空间管理权限
    - documents: 文档管理权限
    - users: 用户管理权限
    - admin: 管理员权限

密钥安全管理

安全最佳实践:
- 定期轮换:定期更换 API 密钥
- 最小权限:只授予必要的权限
- 安全存储:安全存储密钥,避免硬编码
- 监控使用:监控 API 密钥的使用情况

存储建议:
- 环境变量:使用环境变量存储密钥
- 密钥管理服务:使用专业的密钥管理服务
- 加密存储:对存储的密钥进行加密
- 访问控制:限制密钥的访问权限

密钥操作

  • 查看密钥:查看现有的 API 密钥列表
  • 编辑密钥:修改密钥权限和设置
  • 禁用密钥:临时禁用密钥
  • 删除密钥:永久删除不再使用的密钥
  • 重新生成:重新生成密钥值

API 认证

认证方式

AnythingLLM API 使用 Bearer Token 认证:

bash
# 在请求头中包含 API 密钥
curl -H "Authorization: Bearer YOUR_API_KEY" \
     -H "Content-Type: application/json" \
     https://your-anythingllm-instance.com/api/v1/workspaces

认证示例

javascript
// JavaScript 示例
const apiKey = process.env.ANYTHINGLLM_API_KEY;
const headers = {
  'Authorization': `Bearer ${apiKey}`,
  'Content-Type': 'application/json'
};

fetch('https://your-instance.com/api/v1/workspaces', {
  method: 'GET',
  headers: headers
})
.then(response => response.json())
.then(data => console.log(data));
python
# Python 示例
import requests
import os

api_key = os.getenv('ANYTHINGLLM_API_KEY')
headers = {
    'Authorization': f'Bearer {api_key}',
    'Content-Type': 'application/json'
}

response = requests.get(
    'https://your-instance.com/api/v1/workspaces',
    headers=headers
)
data = response.json()

核心 API 端点

工作空间 API

bash
# 获取所有工作空间
GET /api/v1/workspaces

# 创建新工作空间
POST /api/v1/workspaces
{
  "name": "新工作空间",
  "description": "工作空间描述"
}

# 获取特定工作空间
GET /api/v1/workspaces/{workspace_id}

# 更新工作空间
PUT /api/v1/workspaces/{workspace_id}
{
  "name": "更新的名称",
  "settings": {...}
}

# 删除工作空间
DELETE /api/v1/workspaces/{workspace_id}

对话 API

bash
# 发送消息
POST /api/v1/workspaces/{workspace_id}/chat
{
  "message": "你好,请帮我分析这个文档",
  "mode": "chat",
  "include_sources": true
}

# 获取对话历史
GET /api/v1/workspaces/{workspace_id}/chats

# 获取特定对话
GET /api/v1/workspaces/{workspace_id}/chats/{chat_id}

# 删除对话
DELETE /api/v1/workspaces/{workspace_id}/chats/{chat_id}

文档 API

bash
# 上传文档
POST /api/v1/workspaces/{workspace_id}/documents
Content-Type: multipart/form-data
{
  "file": [文件数据],
  "metadata": {
    "title": "文档标题",
    "description": "文档描述"
  }
}

# 获取文档列表
GET /api/v1/workspaces/{workspace_id}/documents

# 搜索文档
GET /api/v1/workspaces/{workspace_id}/documents/search?q=搜索关键词

# 删除文档
DELETE /api/v1/workspaces/{workspace_id}/documents/{document_id}

用户管理 API

bash
# 获取用户列表
GET /api/v1/users

# 创建用户
POST /api/v1/users
{
  "username": "newuser",
  "email": "user@example.com",
  "role": "user"
}

# 更新用户
PUT /api/v1/users/{user_id}
{
  "role": "admin",
  "permissions": ["workspace:read", "workspace:write"]
}

# 删除用户
DELETE /api/v1/users/{user_id}

响应格式

成功响应

json
{
  "success": true,
  "data": {
    "id": "workspace_123",
    "name": "我的工作空间",
    "created_at": "2024-01-01T00:00:00Z"
  },
  "message": "操作成功完成"
}

错误响应

json
{
  "success": false,
  "error": {
    "code": "INVALID_REQUEST",
    "message": "请求参数无效",
    "details": {
      "field": "name",
      "issue": "名称不能为空"
    }
  }
}

分页响应

json
{
  "success": true,
  "data": [...],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 100,
    "total_pages": 5
  }
}

错误处理

HTTP 状态码

成功状态码:
- 200 OK: 请求成功
- 201 Created: 资源创建成功
- 204 No Content: 删除成功

客户端错误:
- 400 Bad Request: 请求参数错误
- 401 Unauthorized: 认证失败
- 403 Forbidden: 权限不足
- 404 Not Found: 资源不存在
- 429 Too Many Requests: 请求频率超限

服务器错误:
- 500 Internal Server Error: 服务器内部错误
- 502 Bad Gateway: 网关错误
- 503 Service Unavailable: 服务不可用

错误代码

认证错误:
- AUTH_INVALID_TOKEN: 无效的 API 密钥
- AUTH_EXPIRED_TOKEN: API 密钥已过期
- AUTH_INSUFFICIENT_PERMISSIONS: 权限不足

请求错误:
- INVALID_REQUEST: 请求格式错误
- MISSING_PARAMETER: 缺少必需参数
- INVALID_PARAMETER: 参数值无效

资源错误:
- RESOURCE_NOT_FOUND: 资源不存在
- RESOURCE_CONFLICT: 资源冲突
- RESOURCE_LIMIT_EXCEEDED: 资源限制超出

系统错误:
- INTERNAL_ERROR: 内部系统错误
- SERVICE_UNAVAILABLE: 服务暂时不可用
- RATE_LIMIT_EXCEEDED: 请求频率超限

速率限制

限制策略

默认限制:
- 每分钟 60 次请求
- 每小时 1000 次请求
- 每天 10000 次请求

高级用户:
- 每分钟 120 次请求
- 每小时 2000 次请求
- 每天 20000 次请求

企业用户:
- 自定义限制
- 专用配额
- 优先级处理

限制响应头

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1640995200
X-RateLimit-Window: 60

处理速率限制

javascript
async function makeAPIRequest(url, options) {
  try {
    const response = await fetch(url, options);
    
    if (response.status === 429) {
      const resetTime = response.headers.get('X-RateLimit-Reset');
      const waitTime = (resetTime * 1000) - Date.now();
      
      console.log(`速率限制,等待 ${waitTime}ms`);
      await new Promise(resolve => setTimeout(resolve, waitTime));
      
      // 重试请求
      return makeAPIRequest(url, options);
    }
    
    return response.json();
  } catch (error) {
    console.error('API 请求失败:', error);
    throw error;
  }
}

SDK 和客户端库

官方 SDK

javascript
// JavaScript/Node.js SDK
npm install @anythingllm/sdk

const AnythingLLM = require('@anythingllm/sdk');
const client = new AnythingLLM({
  apiKey: process.env.ANYTHINGLLM_API_KEY,
  baseURL: 'https://your-instance.com'
});

// 发送消息
const response = await client.chat.send({
  workspaceId: 'workspace_123',
  message: '你好,世界!'
});
python
# Python SDK
pip install anythingllm-python

from anythingllm import AnythingLLM

client = AnythingLLM(
    api_key=os.getenv('ANYTHINGLLM_API_KEY'),
    base_url='https://your-instance.com'
)

# 发送消息
response = client.chat.send(
    workspace_id='workspace_123',
    message='你好,世界!'
)

社区客户端库

  • Go: anythingllm-go
  • PHP: anythingllm-php
  • Ruby: anythingllm-ruby
  • Java: anythingllm-java

集成示例

Web 应用集成

javascript
// React 组件示例
import React, { useState } from 'react';

function ChatComponent() {
  const [message, setMessage] = useState('');
  const [response, setResponse] = useState('');

  const sendMessage = async () => {
    try {
      const res = await fetch('/api/v1/workspaces/my-workspace/chat', {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${process.env.REACT_APP_API_KEY}`,
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ message })
      });
      
      const data = await res.json();
      setResponse(data.data.response);
    } catch (error) {
      console.error('发送消息失败:', error);
    }
  };

  return (
    <div>
      <input 
        value={message}
        onChange={(e) => setMessage(e.target.value)}
        placeholder="输入您的消息..."
      />
      <button onClick={sendMessage}>发送</button>
      <div>{response}</div>
    </div>
  );
}

移动应用集成

swift
// iOS Swift 示例
import Foundation

class AnythingLLMClient {
    private let apiKey: String
    private let baseURL: String
    
    init(apiKey: String, baseURL: String) {
        self.apiKey = apiKey
        self.baseURL = baseURL
    }
    
    func sendMessage(workspaceId: String, message: String, completion: @escaping (Result<String, Error>) -> Void) {
        guard let url = URL(string: "\(baseURL)/api/v1/workspaces/\(workspaceId)/chat") else {
            completion(.failure(NSError(domain: "InvalidURL", code: 0, userInfo: nil)))
            return
        }
        
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        
        let body = ["message": message]
        request.httpBody = try? JSONSerialization.data(withJSONObject: body)
        
        URLSession.shared.dataTask(with: request) { data, response, error in
            // 处理响应
        }.resume()
    }
}

监控和调试

API 日志

启用 API 请求日志记录:

json
{
  "logging": {
    "level": "info",
    "api_requests": true,
    "include_headers": false,
    "include_body": true
  }
}

调试工具

  • API 测试工具:内置的 API 测试界面
  • 请求日志:详细的请求和响应日志
  • 性能监控:API 响应时间监控
  • 错误追踪:错误日志和堆栈跟踪

监控指标

性能指标:
- 响应时间:平均和 P95 响应时间
- 吞吐量:每秒请求数
- 错误率:错误请求的百分比
- 可用性:服务可用时间百分比

使用指标:
- API 调用次数:总调用次数
- 活跃用户:使用 API 的活跃用户数
- 热门端点:最常用的 API 端点
- 资源使用:CPU、内存、存储使用情况

最佳实践

API 设计

  • 版本控制:使用 API 版本控制
  • 幂等性:确保操作的幂等性
  • 缓存策略:合理使用缓存
  • 错误处理:统一的错误处理机制

安全实践

  • HTTPS 使用:始终使用 HTTPS
  • 输入验证:验证所有输入参数
  • 输出编码:对输出进行适当编码
  • 审计日志:记录重要操作的审计日志

性能优化

  • 批量操作:使用批量 API 减少请求次数
  • 分页查询:对大量数据使用分页
  • 异步处理:对耗时操作使用异步处理
  • 连接池:使用连接池管理 HTTP 连接

API 是 AnythingLLM 强大功能的重要接口,合理使用可以构建出色的 AI 应用程序。

AnythingLLM 是一个功能强大的开源 AI 知识管理平台,支持多种 LLM 模型,让您轻松构建智能对话系统和知识库。