写点什么

Airweave - 让 AI 代理搜索任何应用的统一知识平台

作者:qife
  • 2025-07-07
    福建
  • 本文字数:1849 字

    阅读完需:约 6 分钟

项目概述

Airweave 是一个创新的知识搜索平台,通过连接各类应用程序、生产力工具、数据库和文档存储,将其内容转化为可搜索的知识库。平台提供标准化的搜索接口,支持 REST API 和 MCP 协议访问,使 AI 代理能够跨应用进行语义搜索。

核心功能

  • 多源数据集成:支持连接 Asana、Notion、Confluence 等多种应用和数据源

  • 语义搜索能力:基于向量数据库实现高级语义搜索功能

  • 多组织管理:完整的 Auth0 组织集成,支持邀请流程和多组织用户

  • 知识图谱构建:自动构建应用内容的语义化知识图谱

  • 统一 API 接口:通过标准化 API 或 MCP 协议暴露搜索功能

  • 实时同步:支持定时任务和实时数据同步

  • 向量存储支持:集成 Qdrant 等向量数据库存储嵌入内容

技术架构

后端架构

  • 框架:基于 Python FastAPI 构建

  • 数据库:PostgreSQL + Qdrant 向量数据库

  • 认证:Auth0 JWT 验证 + API 密钥回退

  • 任务队列:Redis + Temporal 工作流引擎

  • 部署:Docker 容器化部署

前端架构

  • 框架:React/TypeScript

  • 状态管理:Redux + 组织存储上下文

  • 认证:Auth0 React 集成

安装指南

系统要求

  • Docker 和 Docker Compose

  • Python 3.11+

  • Node.js 20+

  • PostgreSQL 数据库

开发环境设置

  1. 克隆仓库:


   git clone https://github.com/airweave-ai/airweave.git   cd airweave
复制代码


  1. 安装预提交钩子:


   pip install pre-commit   pre-commit install
复制代码


  1. 启动开发环境:


   ./start.sh
复制代码


  1. 配置环境变量:


   cp .env.example .env   # 编辑.env文件配置必要的环境变量
复制代码

使用示例

创建 API 密钥

@router.post("/api-keys", response_model=schemas.APIKey)async def create_api_key(    api_key_in: schemas.APIKeyCreate = Body({}),    auth_context: AuthContext = Depends(deps.get_auth_context)):    """创建新的API密钥"""    api_key_obj = await crud.api_key.create(        db=db,         obj_in=api_key_in,         auth_context=auth_context    )    return api_key_obj
复制代码

搜索集合内容

@router.get("/collections/search")async def search_collection(    query: str,    collection_id: UUID,    db: AsyncSession = Depends(deps.get_db)):    """在指定集合中执行语义搜索"""    results = await search_service.search(        query=query,        collection_id=collection_id    )    return results
复制代码

核心代码解析

Auth0 管理客户端

class Auth0ManagementClient:    def __init__(self):        self.domain = settings.AUTH0_DOMAIN        self.client_id = settings.AUTH0_M2M_CLIENT_ID        self.client_secret = settings.AUTH0_M2M_CLIENT_SECRET        self.audience = f"https://{self.domain}/api/v2/"
async def _get_management_token(self): """获取Auth0管理API访问令牌""" async with httpx.AsyncClient() as client: response = await client.post( f"https://{self.domain}/oauth/token", json={ "client_id": self.client_id, "client_secret": self.client_secret, "audience": self.audience, "grant_type": "client_credentials" } ) return response.json()["access_token"]
复制代码

向量数据库服务

class QdrantDestination(VectorDBDestination):    """Qdrant向量数据库实现"""        @classmethod    async def create(cls, collection_id: UUID):        """创建Qdrant目标实例"""        instance = cls()        instance.collection_id = collection_id        instance.collection_name = str(collection_id)        instance.client = AsyncQdrantClient(            url=settings.QDRANT_URL,            api_key=settings.QDRANT_API_KEY        )        return instance
async def bulk_insert(self, entities: list[ChunkEntity]): """批量插入实体到Qdrant""" points = [ rest.PointStruct( id=str(entity.id), vector=entity.embedding, payload=entity.to_dict() ) for entity in entities ] await self.client.upsert( collection_name=self.collection_name, points=points )
复制代码


更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
Airweave - 让AI代理搜索任何应用的统一知识平台_AI代理_qife_InfoQ写作社区