开源Agent平台Suna完全解析(非常详细),从文件管理到语义搜索RAG实战,收藏这一篇就够了!

OpenViking上下文数据库Golang集成实践 技术创新文件系统范式:将AI Agent的上下文管理从扁平向量存储提升为结构化文件系统分层检索策略:L0/L1/L2三层加载机制,减少62.1%的Token消耗记忆自迭代:会话提交触发Agent经验沉淀,实现越用越智能工程实践完整Golang实现:提供生产级可用的OpenViking客户端库企业级集成方案:涵盖文档摄入、检索、会话管理等全流程性能优化成果:检索准确率提升24.1%,响应时间减少53.3%可观测性提升可视化检索轨迹:实现检索过程的白盒化,调试效率提升77.1%全面监控指标。 阅读详情

Suna 是一款开源的通用 AI Agent 平台,知识库(Knowledge Base)模块是其核心功能之一——让 AI Agent 拥有"记忆"和"专业知识"。本文将从设计理念、系统架构、数据模型、后端实现、前端交互到缓存优化,全面剖析 Suna 知识库模块的工程实践。


一、知识库模块的定位与价值

1.1 为什么 Agent 需要知识库?

大语言模型(LLM)虽然拥有广泛的通用知识,但面对用户特定领域的专业资料、私有文档、项目上下文时却力不从心。知识库模块的核心价值在于:

  • 持久化专业知识:用户可以上传 PDF、DOCX、文本文件等各种格式的文档,为 Agent 注入领域知识
  • 精准上下文注入:通过 LLM 生成的摘要,在 Agent 执行时动态注入最相关的知识背景
  • 语义搜索能力:Agent 可以通过自然语言查询从知识库中检索信息,而非简单的关键词匹配
  • 多 Agent 知识共享:同一知识库的文件可以分配给不同 Agent,实现知识复用

1.2 Suna 知识库的设计哲学

Suna 的知识库模块采用了 “摘要注入 + 按需检索” 的双层架构,而非传统 RAG 系统中常见的纯向量检索方案:

传统 RAG:  文档 → 分块 → 向量化 → 向量数据库 → 检索 → 注入 PromptSuna KB:   文档 → LLM 生成摘要 → 摘要注入 System Prompt(轻量级、始终可用)                 ↘ 按需同步到沙箱 → kb-fusion 语义搜索(深度检索)

这种设计的优势在于:

  1. 低延迟:摘要直接注入 System Prompt,无需每次对话都进行向量检索
  2. 高质量:LLM 生成的摘要比机械分块更好地保留了文档的核心信息
  3. 灵活可控:Agent 可以按需决定是否深入检索原始文档内容

二、系统架构全景

2.1 整体架构图

┌─────────────────────────────────────────────────────────────────────┐│                          前端层 (Next.js)                            ││  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────────┐   ││  │ KB Manager   │  │ Agent Config │  │ KbToolView               │   ││  │ (文件夹/文件树)│  │ (知识分配)    │  │ (对话中 KB 操作可视化)      │   ││  └──────┬───────┘  └──────┬───────┘  └──────────┬───────────────┘   ││         │                 │                      │                  │├─────────┼─────────────────┼──────────────────────┼──────────────────┤│         │           REST API 层                  │                  ││         ▼                 ▼                      ▼                  ││  ┌──────────────────────────────────────────────────────────────┐   ││  │               FastAPI Router (/knowledge-base)               │   ││  │  • 文件夹 CRUD    • 文件上传/删除/移动                           │   ││  │  • Agent 分配     • 文件内容获取                                │   ││  └──────────────────────┬───────────────────────────────────────┘   ││                         │                                           │├─────────────────────────┼───────────────────────────────────────────┤│                    核心服务层                                        ││  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────────┐  ││  │FileProcessor │  │PromptManager │  │ SandboxKbTool            │  ││  │ • 内容抽取    │  │ • 摘要注入    │  │ • kb-fusion 语义搜索     │  ││  │ • LLM 摘要   │  │ • 上下文组装  │  │ • 文件同步到沙箱          │  ││  │ • 格式转换    │  │ • 缓存优化    │  │ • CRUD 操作              │  ││  └──────┬───────┘  └──────┬───────┘  └──────────┬───────────────┘  ││         │                 │                      │                  │├─────────┼─────────────────┼──────────────────────┼──────────────────┤│         │           存储与缓存层                  │                  ││  ┌──────┴───────┐  ┌──────┴───────┐  ┌──────────┴───────────────┐  ││  │  S3 (文件)    │  │Redis (缓存)  │  │ Supabase/PostgreSQL     │  ││  │  file-uploads│  │ KB Context   │  │ • knowledge_base_folders │  ││  │              │  │ TTL=300s     │  │ • knowledge_base_entries │  ││  │              │  │              │  │ • agent_assignments      │  ││  └──────────────┘  └──────────────┘  └──────────────────────────┘  │└─────────────────────────────────────────────────────────────────────┘

2.2 核心文件清单

层级文件路径职责
后端 APIbackend/core/knowledge_base/api.pyRESTful API 路由,文件夹/文件/分配管理
文件处理backend/core/knowledge_base/file_processor.py文件内容抽取、LLM 摘要生成
验证backend/core/knowledge_base/validation.py文件名/文件夹名跨平台验证与消毒
沙箱工具backend/core/tools/sb_kb_tool.pyAgent 运行时的 KB 操作工具
Prompt 集成backend/core/agents/runner/prompt_manager.pyKB 摘要注入 System Prompt
缓存backend/core/cache/runtime_cache.pyRedis 缓存 KB 上下文
Embeddingbackend/core/memory/embedding_service.py嵌入向量服务(多 Provider)
数据库backend/supabase/migrations/20250916000000_new_knowledge_base.sql数据库表结构与函数
前端管理apps/frontend/src/components/knowledge-base/knowledge-base-manager.tsxKB 主管理界面
前端工具视图apps/frontend/src/components/thread/tool-views/KbToolView.tsx对话中 KB 操作可视化

三、数据模型设计

3.1 数据库表结构

Suna 的知识库采用三表设计,层次清晰:

-- 1. 文件夹表:用户级别的知识组织单元CREATETABLE knowledge_base_folders (    folder_id   UUID PRIMARY KEYDEFAULT gen_random_uuid(),    account_id  UUIDNOTNULLREFERENCES basejump.accounts(id) ONDELETECASCADE,    name        VARCHAR(255) NOTNULL,    description TEXT,    created_at  TIMESTAMPTZ DEFAULTNOW(),    updated_at  TIMESTAMPTZ DEFAULTNOW(),        CONSTRAINT kb_folders_name_not_empty CHECK (LENGTH(TRIM(name)) > 0));-- 2. 文件条目表:知识库中的每一个文件CREATETABLE knowledge_base_entries (    entry_id      UUID PRIMARY KEYDEFAULT gen_random_uuid(),    folder_id     UUIDNOTNULLREFERENCES knowledge_base_folders(folder_id) ONDELETECASCADE,    account_id    UUIDNOTNULLREFERENCES basejump.accounts(id) ONDELETECASCADE,        filename      VARCHAR(255) NOTNULL,    file_path     TEXTNOTNULL,     -- S3 存储路径    file_size     BIGINTNOTNULL,    mime_type     VARCHAR(255),        summary       TEXTNOTNULL,     -- LLM 生成的摘要    usage_context VARCHAR(100) DEFAULT'always',  -- always | on_request | contextual    is_active     BOOLEANDEFAULTTRUE,        created_at    TIMESTAMPTZ DEFAULTNOW(),    updated_at    TIMESTAMPTZ DEFAULTNOW());-- 3. Agent 分配表:多对多关联 Agent 和文件CREATETABLE agent_knowledge_entry_assignments (    assignment_id UUID PRIMARY KEYDEFAULT gen_random_uuid(),    agent_id      UUIDNOTNULLREFERENCES agents(agent_id) ONDELETECASCADE,    entry_id      UUIDNOTNULLREFERENCES knowledge_base_entries(entry_id) ONDELETECASCADE,    account_id    UUIDNOTNULLREFERENCES basejump.accounts(id) ONDELETECASCADE,        enabled       BOOLEANDEFAULTTRUE,    assigned_at   TIMESTAMPTZ DEFAULTNOW(),        UNIQUE(agent_id, entry_id));

3.2 关键数据库函数

系统定义了一个核心的 PostgreSQL 函数,用于高效聚合 Agent 的知识库上下文:

CREATE ORREPLACEFUNCTION get_agent_knowledge_base_context(    p_agent_id UUID,    p_max_tokens INTEGERDEFAULT4000)RETURNSTEXTSECURITY DEFINERLANGUAGE plpgsqlAS $$DECLARE    context_text TEXT := '';    entry_record RECORD;    current_length INTEGER := 0;    estimated_tokens INTEGER;BEGIN    FOR entry_record IN        SELECT            kbe.filename,            kbe.summary,            kbf.name as folder_name        FROM knowledge_base_entries kbe        JOIN knowledge_base_folders kbf ON kbe.folder_id = kbf.folder_id        JOIN agent_knowledge_entry_assignments akea ON kbe.entry_id = akea.entry_id        WHERE akea.agent_id = p_agent_id        AND akea.enabled = TRUE        AND kbe.is_active = TRUE        AND kbe.usage_context IN ('always', 'contextual')        ORDERBY kbe.created_at DESC    LOOP        -- Token 估算:约 4 字符 = 1 token        estimated_tokens := (current_length + LENGTH(entry_record.filename)                             + LENGTH(entry_record.summary) + 50) / 4;                IF estimated_tokens > p_max_tokens THEN EXIT; ENDIF;                context_text := context_text || E'\n\n## '                      || entry_record.folder_name || '/' || entry_record.filename                      || E'\n' || entry_record.summary;        current_length := LENGTH(context_text);    ENDLOOP;        RETURN CASE         WHEN context_text = '' THEN NULL        ELSE E'# KNOWLEDGE BASE\n\nThe following files are available:' || context_text    END;END;$$;

这个函数的设计要点:

  • Token 限制:通过 p_max_tokens 参数控制注入上下文的总长度,默认 4000 token
  • 粗略估算:使用 4 字符 ≈ 1 token 的经验公式进行快速估算
  • 优先级排序:按创建时间倒序,优先注入最新的文件摘要
  • 过滤机制:只聚合 enabled=TRUE、is_active=TRUE、且 usage_context 为 always 或 contextual 的条目

3.3 安全模型

数据安全通过 PostgreSQL 的行级安全策略(RLS)保障:

ALTER TABLE knowledge_base_folders ENABLEROWLEVELSECURITY;ALTERTABLE knowledge_base_entries ENABLEROWLEVELSECURITY;ALTERTABLE agent_knowledge_entry_assignments ENABLEROWLEVELSECURITY;-- 基于账户的访问控制CREATEPOLICY kb_folders_account_access ON knowledge_base_folders    FORALLUSING (basejump.has_role_on_account(account_id) = true);

每个用户只能访问自己账户下的知识库内容,通过 basejump.has_role_on_account() 函数进行鉴权。


四、后端核心实现

4.1 文件处理管线 (FileProcessor)

文件处理是知识库的核心环节,FileProcessor 类承担了从原始文件到可检索知识的全部转换工作。

4.1.1 处理流程
用户上传文件    │    ▼文件类型检测    │ 支持: .txt, .pdf, .docx, .json, .xml, .csv, .md, .yml, .log 等    │ 智能检测: 对未知扩展名的文件尝试文本编码检测    ▼文件内容抽取 (_extract_content)    │ PDF  → PyPDF2 逐页提取    │ DOCX → python-docx 逐段提取      │ Text → chardet 编码检测 + 解码    ▼智能分块 (_smart_chunk_content)    │ 如果内容超出 LLM 上下文限制    │ 策略: 前半部分 + 重要中间段落 + 末尾部分    ▼LLM 摘要生成 (_generate_summary)    │ 模型链: gemini-2.5-flash-lite → gpt-5-mini → 本地 fallback    ▼数据库写入 + S3 存储
4.1.2 快速处理模式

Suna 采用了先上传后摘要的异步处理策略:

async def process_file_fast(self, account_id, folder_id, file_content,                             filename, mime_type, background_tasks):    """快速文件处理——立即上传文件,后台生成摘要"""        # 1. 文件类型检测(同步,极快)    is_text_based = (        mime_type.startswith('text/') or        mime_type in ['application/json', 'application/xml'] or        self._is_likely_text_file(file_content)    )        # 2. 立即上传到 S3(同步,用户等待此步骤)    s3_path = f"knowledge-base/{folder_id}/{entry_id}/{sanitized_filename}"    await client.storage.from_('file-uploads').upload(s3_path, file_content)        # 3. 写入数据库,摘要暂用占位符    entry_data = {        'entry_id': entry_id,        'summary': 'Processing...',  # 占位摘要        'is_active': True    }    await client.table('knowledge_base_entries').insert(entry_data).execute()        # 4. 后台任务异步生成摘要(不阻塞用户)    background_tasks.add_task(        self._generate_and_update_summary,        entry_id, file_content, filename, mime_type    )        return {'success': True, 'entry_id': entry_id, 'processing': True}

这种设计使得用户上传文件后能立即看到文件出现在列表中(显示 “Processing…” 状态),而耗时的摘要生成在后台异步完成,体验非常流畅。

4.1.3 智能内容分块策略

当文件内容超出 LLM 的上下文窗口时,Suna 使用了一种精心设计的分块策略:

def _smart_chunk_content(self, content: str, max_chars: int) -> str:    """智能分块:保留文档中最重要的部分"""    if len(content) <= max_chars:        return content        quarter = max_chars // 4        # 始终保留开头(通常包含最重要的上下文)    beginning = content[:quarter * 2]   # 前 50%        # 保留结尾(通常包含总结/结论)    ending = content[-quarter:]          # 后 25%        # 从中间部分提取重要段落            # 剩余 25%    middle_content = content[len(beginning):len(content) - quarter]    important_lines = [ ]    for line in middle_content.split('\n'):        is_important = (            line.strip().isupper() or           # 大写标题            line.startswith(('•', '-', '*')) or# 列表项            any(kw in line.lower() for kw in     # 关键词                ['summary', 'conclusion', 'important', 'key', 'main']) or            len(line.strip()) < 100              # 短行通常更重要        )        if is_important:            important_lines.append(line)        returnf"{beginning}\n\n[KEY SECTIONS]\n{middle_section}\n\n[ENDING]\n{ending}"
4.1.4 LLM 摘要生成与模型降级

摘要生成采用了多模型级联降级的策略,确保高可用性:

async def _generate_summary(self, content: str, filename: str) -> str:    # 模型优先级链:轻量快速 → 通用备选    models = [        ("openrouter/google/gemini-2.5-flash-lite", 1_000_000),  # 100万 token 上下文        ("gpt-5-mini", 400_000)                                   # 40万 token 上下文    ]        for model_name, context_limit in models:        try:            prompt = f"""Analyze this file and create a concise summary.File: {filename}Content: {processed_content}Generate a 2-3 sentence summary that captures:1. What this file contains2. Key information or purpose  3. When this knowledge would be usefulKeep it under 200 words and make it actionable for context injection."""                        response = await make_llm_api_call(                messages=[{"role": "user", "content": prompt}],                model_name=model_name,                temperature=0.1,   # 低温度确保摘要稳定                max_tokens=300,                stream=False            )            if summary:                return summary        except Exception:            continue# 降级到下一个模型        # 所有模型失败时的本地 fallback    return self._create_fallback_summary(content, filename)

Prompt 中的 "actionable for context injection" 这个要求非常关键——它引导 LLM 不是简单地做文档摘要,而是生成对 AI Agent 有实际指导意义的描述。

4.2 API 路由设计

API 路由定义在 api.py 中,挂载在 /knowledge-base 前缀下:

方法路径功能说明
GET/folders获取文件夹列表按创建时间倒序,附带条目计数
POST/folders创建文件夹自动去重命名(类似 macOS)
PUT/folders/{id}更新文件夹支持部分更新
DELETE/folders/{id}删除文件夹级联删除文件 + S3 清理 + 缓存失效
POST/folders/{id}/upload上传文件快速模式,后台生成摘要
GET/folders/{id}/entries获取文件列表按文件夹过滤
DELETE/entries/{id}删除文件S3 + DB + 缓存三重清理
PATCH/entries/{id}更新摘要手动编辑 LLM 生成的摘要
GET/entries/{id}/content获取文件内容支持 PDF/DOCX 即时解析
PUT/entries/{id}/move移动文件跨文件夹移动,含 S3 路径更新
GET/agents/{id}/assignments获取 Agent 分配返回 entry_id → enabled 映射
POST/agents/{id}/assignments更新 Agent 分配批量更新分配关系
4.2.1 文件大小限制机制

系统对用户的总文件大小实施了 50MB 的限制:

MAX_TOTAL_FILE_SIZE = 50 * 1024 * 1024# 50MBasyncdef check_total_file_size_limit(account_id: str, new_file_size: int):    """检查新文件是否会超出总大小限制"""    result = await client.table('knowledge_base_entries').select(        'file_size'    ).eq('account_id', account_id).eq('is_active', True).execute()        current_total_size = sum(entry['file_size'] for entry in result.data)        if current_total_size + new_file_size > MAX_TOTAL_FILE_SIZE:        raise HTTPException(            status_code=413,            detail=f"File size limit exceeded. Current: {current_mb:.1f}MB, "                   f"New: {new_mb:.1f}MB, Limit: {limit_mb}MB"        )
4.2.2 文件名验证与消毒

FileNameValidator 类提供了跨平台的文件名安全保障:

class FileNameValidator:    # Windows 非法字符    ILLEGAL_CHARS = r'[<>:"/\|?*\x00-\x1f]'        # Windows 保留名称    RESERVED_NAMES = {'CON', 'PRN', 'AUX', 'NUL', 'COM1', ...}        @classmethod    def sanitize_name(cls, name: str) -> str:        """消毒文件名"""        name = re.sub(cls.ILLEGAL_CHARS, '', name)   # 移除非法字符        name = name.strip('. ')                        # 去除首尾点/空格        name = unicodedata.normalize('NFKC', name)    # Unicode 标准化        if base_name in cls.RESERVED_NAMES:            # 保留名加前缀            name = f"_{name}"        return name        @classmethod    def generate_unique_name(cls, base_name, existing_names, item_type="file"):        """macOS 风格的自动去重命名: file.txt → file 2.txt → file 3.txt"""        if base_name.lower() notin [n.lower() for n in existing_names]:            return base_name                counter = 2        whileTrue:            new_name = f"{name_part} {counter}{ext}"            if new_name.lower() notin [n.lower() for n in existing_names]:                return new_name            counter += 1

4.3 缓存层优化

知识库上下文的获取是一个涉及多表 JOIN 的数据库操作。为了避免每次 Agent 执行都触发这个昂贵的查询,Suna 设计了精细的 Redis 缓存策略:

KB_CONTEXT_TTL = 300  # 5 分钟缓存asyncdef get_cached_kb_context(agent_id: str) -> Optional[str]:    """从 Redis 获取缓存的 KB 上下文"""    cached = await redis_service.get(f"kb_context:{agent_id}")    if cached isnotNone:        return cached.decode() if isinstance(cached, bytes) else cached    returnNoneasyncdef set_cached_kb_context(agent_id: str, context: str) -> None:    """缓存 KB 上下文到 Redis"""    await redis_service.set(f"kb_context:{agent_id}", context, ex=KB_CONTEXT_TTL)asyncdef invalidate_kb_context_cache(agent_id: str) -> None:    """主动失效 KB 上下文缓存"""    await redis_service.delete(f"kb_context:{agent_id}")

缓存失效的触发点非常全面,覆盖了所有可能导致知识库上下文变化的操作:

触发操作失效范围
删除文件夹该文件夹下所有文件关联的所有 Agent
删除文件该文件关联的所有 Agent
更新文件摘要该文件关联的所有 Agent
更新 Agent 分配被修改的 Agent
后台摘要生成完成该文件关联的所有 Agent

此外还有缓存预热机制,在用户登录时提前加载 KB 上下文:

async def warm_kb_context_for_agent(agent_id: str, client) -> None:    """预热 Agent 的 KB 上下文缓存"""    cached = await get_cached_kb_context(agent_id)    if cached isnotNone:        return# 已有缓存,跳过        # 快速检查是否有 KB 条目    entry_count = await threads_repo.get_kb_entry_count(agent_id)    if entry_count == 0:        await set_cached_kb_context(agent_id, "")  # 缓存空结果避免重复查询        return        # 调用数据库函数获取上下文    kb_result = await client.rpc("get_agent_knowledge_base_context",                                   {"p_agent_id": agent_id}).execute()    if kb_result.data and kb_result.data.strip():        await set_cached_kb_context(agent_id, kb_result.data)

五、Prompt 注入机制

5.1 摘要注入 System Prompt

PromptManager._fetch_knowledge_base() 是知识库与 Agent 运行时的关键连接点。它采用了三级优化策略:

┌─ 命中缓存 → 直接返回(毫秒级)                    │KB 上下文获取 ──────┼─ 缓存未命中 → 快速 EXISTS 检查                    │     │                    │     ├─ 无条目 → 缓存空结果 → 返回 null                    │     │                    │     └─ 有条目 → RPC 聚合查询 → 缓存 → 注入                    │                    └─ 超时保护(2 秒硬限制)

注入到 System Prompt 的内容格式如下:

=== YOUR KNOWLEDGE BASE ===You have a knowledge base with files assigned to you. Below are SUMMARIES:# KNOWLEDGE BASE## ProjectDocs/architecture.pdfThis document describes the system architecture...## Research/market-analysis.docx  A comprehensive market analysis covering...=== END KNOWLEDGE BASE ===HOW TO ACCESS FULL FILE CONTENT:1. global_kb_list_contents - List all your KB files2. global_kb_sync - Download KB files to /workspace/downloads/global-knowledge/3. After sync, read files at /workspace/downloads/global-knowledge/[FolderName]/[filename]4. semantic_search - Search across all files with natural language queries

注意这里不仅注入了摘要内容,还明确告诉了 Agent 如何在需要时获取完整文件内容,这是引导 Agent 行为的关键 Prompt 工程技巧。

5.2 超时保护

KB 获取设置了 2 秒的硬超时限制,确保不会因为数据库慢查询影响 Agent 响应速度:

kb_task = PromptManager._with_timeout(    PromptManager._fetch_knowledge_base(agent_config, client),     2.0,         # 2 秒超时    "KB fetch"   # 超时日志标签)

六、Agent 运行时集成:SandboxKbTool

6.1 设计理念

SandboxKbTool 是 Agent 在对话过程中操作知识库的工具类。它实现了 Agent 与知识库的深度交互,而不仅仅是被动接收摘要注入。

这个工具注册了以下能力:

@tool_metadata(    display_name="Knowledge Base",    description="Store and retrieve information from your personal knowledge library",    icon="Brain",    color="bg-yellow-100 dark:bg-yellow-800/50",    weight=200,    visible=True)class SandboxKbTool(SandboxToolsBase):    ...

6.2 核心工具函数

函数功能说明
semantic_search语义搜索使用 kb-fusion 在已索引文件中搜索
global_kb_sync文件同步从 S3 下载 KB 文件到沙箱
global_kb_list_contents列出内容显示所有文件夹和文件及其启用状态
global_kb_enable_all全部启用一键启用所有 KB 文件
global_kb_enable_item单项启用启用/禁用特定文件
global_kb_create_folder创建文件夹Agent 主动创建知识组织
global_kb_upload_file上传文件从沙箱上传文件到 KB
global_kb_delete_item删除项目删除文件或文件夹
ls_kb列出索引查看 kb-fusion 已索引的文件
cleanup_kb清理维护清理过期数据

6.3 文件同步机制

文件同步是将云端知识库文件下载到 Agent 沙箱环境的过程,这是 Agent 能直接读取文件内容的前提:

async def global_kb_sync(self) -> ToolResult:    """同步 KB 文件到 /workspace/downloads/global-knowledge/"""        # 1. 查询 Agent 被分配且启用的所有文件    result = await client.from_("agent_knowledge_entry_assignments").select("""        entry_id,        enabled,        knowledge_base_entries (            entry_id, filename, file_path, file_size, mime_type,            knowledge_base_folders (name)        )    """).eq("agent_id", agent_id).eq("enabled", True).execute()        # 2. 创建沙箱目录结构    kb_dir = f"{self.workspace_path}/downloads/global-knowledge"    await self.sandbox.fs.create_folder(kb_dir, "755")        # 3. 逐文件同步:S3 下载 → 沙箱上传    for assignment in result.data:        entry = assignment['knowledge_base_entries']        folder_name = entry['knowledge_base_folders']['name']                # 从 S3 下载(带重试)        file_response = await self._download_with_retry(client, entry['file_path'])                # 上传到沙箱(带重试和验证)        file_destination = f"{kb_dir}/{safe_folder_name}/{safe_filename}"        await self._upload_file_with_retry(file_response, file_destination)        # 4. 生成 README.md 索引文件    # 5. 最终验证:确认所有文件都已正确写入

整个同步过程包含了精细的错误处理:

  • 下载重试:最多 3 次重试,指数退避
  • 上传重试:最多 3 次重试,每次上传后进行大小校验
  • 文件名安全化:自动处理特殊字符、emoji 等
  • 最终验证:用 find 命令检查所有预期文件是否到位

6.4 语义搜索

语义搜索依赖 kb-fusion 外部工具(一个 Rust 编写的高性能搜索引擎):

async def semantic_search(self, queries=None, query=None, path=None):    # 1. 确保 kb-fusion 已安装(自动下载安装)    await self._ensure_kb_initialized()        # 2. 自动同步 KB 文件(如果还没同步)    await self._auto_sync_kb_if_needed()        # 3. 构建搜索命令    search_command = f'kb search "{search_path}" {query_args} -k 18 --json'        # 4. 在沙箱中执行搜索(需要 OPENAI_API_KEY 做 embedding)    result = await self._execute_kb_command(search_command)        # 5. 解析并返回结果    results_data = json.loads(result["output"])    total_hits = sum(len(qr.get("hits", [ ])) for qr in results_data)

kb-fusion 工具的自动管理非常优雅——首次使用时自动从 GitHub Releases 下载安装,并在后续调用中检查版本是否需要更新:

async def _ensure_kb_initialized(self) -> dict:    # 检查版本是否匹配    check_result = await self._execute_kb_command("kb -v 2>&1")    if f"kb-fusion {self.kb_version}" in check_result["output"]:        return {"success": True, "already_installed": True}        # 需要安装或更新    await self.sandbox.process.exec(        f"curl -L -f {self.kb_download_url} -o /tmp/kb && "        f"chmod +x /tmp/kb && mv /tmp/kb /usr/local/bin/kb"    )

七、Embedding 服务

虽然知识库模块的核心搜索依赖 kb-fusion,但 Suna 也提供了通用的 Embedding 服务用于记忆系统和语义搜索:

class EmbeddingService:    """支持多 Provider 的嵌入向量服务"""        def _create_provider(self) -> EmbeddingProvider:        if provider_name == "openai":            return OpenAIEmbeddingProvider(model="text-embedding-3-small")        elif provider_name in ("voyage", "voyageai"):            return VoyageAIEmbeddingProvider(model="voyage-2")        elif provider_name == "local":            return LocalEmbeddingProvider(model="all-MiniLM-L6-v2")

三种 Provider 的对比:

Provider模型维度特点
OpenAItext-embedding-3-small1536默认选项,平衡成本和质量
VoyageAIvoyage-2—高质量替代方案
Localall-MiniLM-L6-v2384完全本地化,无需 API

八、前端交互设计

8.1 KnowledgeBaseManager 组件

主管理界面是一个功能丰富的文件管理器,支持:

  • 树形文件浏览器:文件夹 + 文件的层级展示
  • 拖拽操作:使用 @dnd-kit/core 实现文件在文件夹间的拖拽移动
  • 文件上传:支持拖拽上传、多文件批量上传、上传进度显示
  • 内联编辑:文件夹重命名、文件摘要编辑
  • Agent 分配模式:在 Agent 配置页面以复选框形式管理文件分配
interface KnowledgeBaseManagerProps {    agentId?: string;           // Agent 上下文    agentName?: string;    showHeader?: boolean;    enableAssignments?: boolean; // 启用 Agent 分配模式    maxHeight?: string;}

组件使用了精心设计的 TreeItem 数据结构来统一管理文件夹和文件:

interface TreeItem {    id: string;    type: 'folder' | 'file';    name: string;    parentId?: string;    data?: Folder | Entry;    children?: TreeItem[ ];    expanded?: boolean;}

8.2 KbToolView:对话中的可视化

当 Agent 在对话中调用 KB 工具时,KbToolView 组件提供了丰富的可视化展示:

  • 搜索结果:显示查询文本和匹配片段
  • 同步状态:显示同步文件数、文件夹结构、失败项
  • 列表内容:以卡片形式展示文件夹和文件统计
  • 操作反馈:创建、上传、删除、启用等操作的状态展示

组件通过解析工具函数名来判断操作类型:

const parseKbTool = (functionName: string, args: Record<string, any>): KbOperation => {    if (functionName.includes('global_kb')) {        const type = functionName.includes('sync') ? 'sync' :                     functionName.includes('create') ? 'create' :                     functionName.includes('upload') ? 'upload' : ...        return { type, scope: 'global', data: args };    }    // ...};

8.3 React Query 数据管理

前端使用 React Query 管理 KB 数据的获取和缓存:

// hooks/knowledge-base/use-folders.tsexportconst useKnowledgeFolders = () => {    const [folders, setFolders] = useState<Folder[ ]>([ ]);    const [loading, setLoading] = useState(true);    const fetchFolders = async () => {        const response = await backendApi.get<Folder[ ]>('/knowledge-base/folders');        setFolders(response.data || [ ]);    };    useEffect(() => { fetchFolders(); }, [ ]);    return { folders, loading, refetch: fetchFolders };};

九、典型工作流程

9.1 用户上传文件到与 Agent 使用

用户操作                          后端处理                        Agent 运行时────────                          ────────                        ──────────1. 打开 KB 管理页面2. 创建文件夹 "项目资料"  ──→  写入 knowledge_base_folders3. 上传 proposal.pdf     ──→  S3 存储 + DB 写入                                ──→  [后台] LLM 生成摘要                                ──→  更新 DB summary 字段                                ──→  失效关联 Agent 缓存4. 进入 Agent 配置页面5. 勾选 proposal.pdf     ──→  写入 agent_assignments                                ──→  失效该 Agent KB 缓存6. 与 Agent 对话          ──→                          ──→  获取 KB 上下文(缓存/DB)   "帮我总结项目提案"                                        注入摘要到 System Prompt                                                       ──→  Agent 发现需要详细内容                                                       ──→  调用 global_kb_sync                                                       ──→  S3 → 沙箱文件系统                                                       ──→  读取完整文件内容                                                       ──→  生成详细回复

9.2 Agent 主动管理知识库

Agent 不仅能读取知识库,还能主动进行管理操作:

用户: "把这次分析的结果保存到知识库里"Agent 执行:  1. global_kb_create_folder("分析报告")        → 创建文件夹  2. 将分析结果写入沙箱文件  3. global_kb_upload_file(                      → 上传到 KB       sandbox_file_path="/workspace/analysis.md",       folder_name="分析报告"     )

十、架构亮点总结

10.1 摘要注入 vs 纯 RAG

特性Suna 方案传统纯 RAG
首次响应延迟低(摘要已在 System Prompt)高(需要 embedding + 检索)
知识全面性Agent 始终知道所有文件的存在只知道检索命中的片段
深度检索按需通过 kb-fusion 进行每次都触发
成本摘要生成一次性消耗每次对话都有 embedding 成本

10.2 异步处理模式

文件上传采用"先返回后处理"的模式:

  • 用户等待时间:仅 S3 上传 + DB 写入(通常 < 1 秒)
  • 后台处理:文件解析 + LLM 摘要(通常 5-30 秒)
  • 体验效果:文件立即出现在列表中,摘要稍后自动更新

10.3 多层缓存策略

请求到达  │  ├─ Redis 缓存命中(TTL=300s)──→ 直接返回  │  ├─ 快速 EXISTS 检查 ──→ 无条目 → 缓存空结果  │  └─ RPC 聚合查询 → 缓存结果 → 返回      │      └─ 超时保护(2 秒硬限制)

10.4 完善的失效机制

每一个可能导致 KB 上下文变化的写操作都会触发对应的缓存失效,确保 Agent 始终获取到最新的知识库状态。失效是精确到 Agent 级别的——只失效受影响的 Agent 缓存,而非全局清空。

10.5 安全与隔离

  • RLS:PostgreSQL 行级安全策略确保用户只能访问自己的知识库
  • 沙箱隔离:KB 文件同步到 Agent 的独立沙箱环境
  • 文件名消毒:跨平台的文件名安全处理,防止路径遍历等攻击
  • 大小限制:每用户 50MB 的总存储限制

十一、未来演进方向

从代码中可以发现一些正在准备或预留的功能:

  1. Git 仓库克隆:前端已有 “Git Clone” Tab UI(目前 disabled),预示着将支持直接克隆 Git 仓库作为知识源
  2. 使用上下文分级:usage_context 字段支持 always、on_request、contextual 三种模式,为更智能的知识注入策略做了预留
  3. 知识库设置页面:前端有独立的知识库设置入口(目前显示 “Coming Soon”)
  4. 更多文件格式:文件处理器的架构设计支持方便地扩展新格式

结语

Suna 的知识库模块是一个设计精良的工程系统。它没有追求"大而全"的 RAG 方案,而是用 “摘要注入 + 按需检索” 的务实设计,在保证低延迟和高可用性的同时,为 Agent 提供了灵活的知识访问能力。从异步文件处理、多模型摘要降级、Redis 缓存优化到沙箱文件同步,每个环节都体现了对生产环境可靠性的深思熟虑。

对于正在构建 AI Agent 平台的开发者来说,Suna 的知识库设计提供了一个很好的参考:不必从一开始就构建复杂的向量数据库管线,LLM 驱动的摘要 + 按需深度检索可能是一个更务实的起步策略。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

用AI学习graphify Graphify是一个AI驱动的知识图谱构建工具,能够将代码、文档、论文、图像和视频等多模态数据转换为结构化知识图谱。其核心技术特点包括: 多模态处理能力: 支持25+编程语言的AST解析 处理PDF、Markdown等文档 集成Whisper进行音视频转录 高效知识提取: 采用确定性AST解析与LLM语义提取结合 相比直接读取源文件,查询token消耗最多减少71.5倍 增量更新机制仅处理变更文件 智能分析功能: 自动识别高中心性的"上帝节点" 发现跨领域的"意外连接&quo 阅读详情

相关推荐

到底什么是Harness工程?一篇文章从入门到企业落地全解析

随着OpenClaw爆火,Harness Engineering(驾驭工程)成为AI编程时代的热门概念,很多小白对其感到陌生。本文用通俗类比和真实案例,避开复杂术语,从基础定义入手,讲清Harness Engineering的核心逻辑——人类工程师设计“约束系统”(马具),让AI模型(烈马)安全高效地完成代码工作,同时拆解其核心组件、企业落地场景和实战成果,帮小白快速入门,读懂这项能解放人力、提升效率的新技术,轻松掌握它的核心价值和落地思路。

program哲学 3270

基于RAG的企业智能客服项目,已拿70万offer!

基于 RAG 构建一套企业智能客服系统📖。

m0_59164520的博客 1445

Python主要智能优化算法库汇总

最近几年简单浏览和对比了一些智能算法的库。现将各种库的主要信息、相关优缺点简单整理如下,各位同学可根据自己的需求和喜好进行选择。 文章目录1、DEAP2、mealpy3、scikit-opt (国产良心)4、Geat2(国产用心)5、pygmo26、pyswarms7、SciPy(想不到吧)小结 1、DEAP 项目地址:https://github.com/DEAP/deap 安装: pip install deap 优点: 起点高,发表在Journal of Machine Learning Rese

半个冯博士 2万+

从Vibe Coding到可控生产力:Harness Engineering的实践启示

摘要:OpenAI提出的Harness Engineering(工程化治理)理念为AI Agent时代的软件工程提供了关键方法论,旨在解决代码高产出下的质量闭环、上下文管理等核心矛盾。其三大目标包括重构工程师角色、将AI纳入可控体系、实现低成本纠错,通过六大举措(如角色重构、机械化约束、反熵机制等)重构工程流程。该理念与vibe coding高度互补,既保留灵感驱动的敏捷性,又通过工程化体系保障稳定性,最终推动工程师从"代码生产者"升级为"工程体系设计者"。

小程故事多的博客 4400

长期换衣行人重识别(Long-Term Clothes-Changing Person Reid)数据集汇总

长期换衣行人重识别任务中目前常用的数据集总览目前换衣数据集的主要问题数据集换衣/总体情况集统计DeepChange(2021)LaST(2021)COCAS(2020)VC-Clothes(2020)LTCC(2020)PRCC(2019)Celebrities-reID(2019) 总览 在长期换衣行人重识别的任务当中,数据集的获取(尤其是对于学术环境下)是一个难点,主要的困难有以下几点: 采集大规模的数据集比较困难。 采集不同的衣服的数据集比较困难。 采集不同衣服不同角度的数据集比较困难。 目前也有

KingsMan666的博客 8380

webview腾讯x5内核离线安装

离线集成腾讯TBS浏览器服务,彻底解决官方下载限流问题,永久免费

观千剑而后识器,操千曲而后晓声。 7910

OpenClaw vs Hermes Agent:2026 年最火的两款开源个人 AI Agent 全面对比

在 2026 年初的 AI Agent 浪潮中,**OpenClaw**和 **Hermes Agent**(Nous Research 出品)迅速成为两大热门开源项目。两者都是**自托管、本地运行、可通过 WhatsApp/Telegram 等聊天软件交互**的自主 AI Agent,但设计理念和侧重点完全不同

莫道桑榆晚 为霞尚满天 1626

Flowable前端可视化配置动态审批人:告别硬编码,实现部门领导、项目经理自动分配

本文详细介绍了Flowable前端可视化配置动态审批人的全栈解决方案,通过表达式分配、监听器分配等动态审批人机制,实现从硬编码到智能分配的转变。文章提供了前端扩展bpmn-js设计器、后端动态解析实现方案及性能优化建议,帮助企业应对组织架构变动,提升审批流程的灵活性和效率。

weixin_30352645的博客 473

大模型工程化:从Prompt到Harness,驾驭AI生产力新时代

大模型工程化三大范式:提示词工程、上下文工程与驾驭工程 摘要:随着大模型技术的成熟,行业焦点转向如何实现能力稳定落地。文章系统阐述大模型工程化的三大范式:提示词工程(Prompt Engineering)作为基础,通过标准化指令引导模型输出;上下文工程(Context Engineering)通过信息注入解决知识边界与幻觉问题;驾驭工程(Harness Engineering)构建全链路管控体系。三者呈递进互补关系,共同支撑生产级应用。当前趋势呈现三大特点:自动化Prompt优化、多模态场景融合、体系化管控

m0_63171455的博客 1852

单反相机物镜设计[DG-10]

REAR(要打在像面,操作数要找像面对应位置15):以透镜单位表示的真实光线径向坐标,波长由Wave定义,参见“Hx、Hy、Px和Py”。最小玻璃厚度最小不能小于semi-dia的1/10,要根据layout看有没有过厚过薄,反复调节。PROD:两个操作数的乘积(操作#1 X操作#2)。3x4就是57.3x0.41=23.5。拦光一般在第一面和最后一面操作,减少边缘无用光线。光阑面与镜面贴近,要调距离,同时设置光阑像差。后截距是指从镜头后表面到焦点的距离。CONS:弧度转为角度。镜头相互嵌入,有错误。

weixin_72050316的博客 600

多模态脑区细分图谱 HCP-MMP v1.0, Glasser et al. 2016 皮层和皮下区域,简写和全称对应关系

人类连接组计划多模态脑区细分图谱(HCP-MMP)提供了对人类大脑皮层区域的非常有用的细分(Glasser et al. 2016a, b)。图谱是多模态的,因为每个区域都是根据四个标准的组合定义的,包括结构(T1加权/T2加权髓鞘含量和皮层厚度图)、静息态功能连接、基于任务的激活和拓扑地形组织。HCP-MMP v1.0图谱包含每个半球180个皮层区域,基于210名参与者的分析。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2621

graphify构建代码知识库,一行代码搭建属于自己的知识图谱

graphify 是一个将任意文件夹(代码、文档、图片、视频等)转化为可查询知识图谱的工具。它的核心理念是:与其让 AI 逐文件读取,不如先把所有内容构建成一张图,让 AI 按图索骥。 你可以把它理解为一个"代码库地图生成器"。输入一个项目目录,它会分析所有文件,提取概念、关系、调用链,然后用可视化的方式呈现给你。更重要的是,这张图是可以查询的——你可以问"认证模块和数据库之间有什么关系",而不需要自己去 grep 几十个文件。

努力前行,总会成为自己心中的那道光 8539

从重复劳动到智能闭环:OpenClaw实战搭建小红书&公众号全自动化运营体系

如果你有一定的代码开发能力,还可以为OpenClaw开发自定义插件,拓展更多的功能,比如对接更多的平台,实现图文+短视频的全平台自动化运营;对接视频剪辑工具,实现短视频脚本生成、剪辑、配音、发布的全流程自动化;对接私域运营工具,实现公域引流、私域承接、用户转化的全链路自动化;对接电商平台,实现内容种草、商品上架、订单管理的全流程自动化,打造完整的内容电商闭环。新媒体运营的本质,是内容价值的传递,而不是机械的重复劳动。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 311

GitNexus 核心引擎深度解析

GitNexus 核心引擎深度解析:GitNexus 是一个将代码库转换为可查询知识图谱的系统,由索引流水线、社区检测和混合搜索三大子系统组成。索引流水线通过9个阶段将代码转换为知识图谱,支持多语言解析和并行处理。社区检测采用Leiden算法进行功能聚类,流程追踪则通过BFS算法从入口点生成执行流程。混合搜索结合关键词和语义搜索,使用RRF算法融合结果。系统优化包括Worker池并行解析、语言感知导入解析、调用关系置信度计算等,实现了高效的代码分析与搜索能力。

2841

55、宇宙微波背景辐射望远镜及其光学系统解析

本文详细解析了宇宙微波背景辐射(CMB)望远镜及其光学系统的设计与优化。内容涵盖折射与反射光学系统的特性、旁瓣控制技术、气球与地面观测系统的对比、探测器阵列的发展、光学系统设计流程以及不同观测场景下的光学系统选择。同时,文章展望了CMB望远镜光学系统的未来发展趋势,包括技术创新、多频段观测、国际合作与大型项目等。通过系统性的分析与对比,为CMB研究提供了全面的技术支持与理论基础。

f9g0h的博客 143

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Harness Engineering:2026年最被低估的工程革命

2026年2月,OpenAI的工程师Ryan Lopopolo在官方博客发布了一篇看似平淡的技术文章。文章描述了一个内部实验:一个3人小组,用5个月时间,构建并上线了一个拥有百万行代码的生产级产品。

xx_nm98的博客 1089

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Harness Engineering(驾驭工程)核心解析

Harness Engineering(国内常译“驾驭工程/管控工程”)是2026年Agent开发领域爆火的新一代工程化范式,是AI工程化从“提示工程→上下文工程”之后的第三次范式跃迁,核心解决Agent在生产环境中长期可靠运行的核心痛点。

weixin_58753619的博客 1401

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Graphify从入门到精通(非常详细),彻底搞懂下一代AI知识库,看这一篇就够了!

Graphify是一款开源命令行工具,由开发者captainkink07在Andrej Karpathy发文后连夜构建。它能将任意文件夹一键转化为持久化知识图谱,支持19种编程语言,与Claude Code深度集成,实现每次查询减少71.5倍token消耗。上线48小时内获得逾6000个GitHub星标,零遥测、无厂商锁定,数据永不离机。

m0_59164520的博客 7445

驾驭未来:零基础读懂“驾驭工程”(Harness Engineering)

在混乱中建立秩序,在复杂中寻找路径。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 2521

OpenViking 深度解析:字节跳动为 AI Agent 设计的上下文数据库

OpenViking 是字节跳动火山引擎 Viking 团队于 2026 年 1 月开源的上下文数据库(Context Database),专为 AI Agent 设计。。把 Agent 所需的一切——记忆、资源文档、技能说明——统一抽象为"文件",组织在一个虚拟文件系统中,通过专属协议viking://进行寻址和访问。OpenViking 解决的是真实存在的问题,技术思路也有其创新之处——用文件系统范式统一管理 Agent 上下文,L0/L1/L2 分层加载在 token 效率上确实能做到显著优化。

潇汀 2381

一文分清用法Dify-Plugin与SkillS

很多人会把插件(Plugin)和Skill(技能)混为一谈,二者看似都是为应用拓展能力、实现更多功能,核心定位、适用范围、使用方式却有着明确差异。

legend24and8的博客 1850

dify查询接口响应到默认的图表渲染

之后走两条线,一条线流式响应返回数据分析的回复,另一条线走图表生成线,负责生成合适的图表。由于ECharts图表生成插件,支持生成的图表有柱状图,线形图,饼图,那么我们可以设置一个问题分类,然后对于数据分类的结果再做模型数据的抽取。在工作流中新建接收http请求的节点,用以接收http请求体数据。实现的效果:可以根据请求体自定义生成合适的图表数据。数据输入:来自于http请求体的数据。插件:ECharts图表生成插件。

qq_43781332的博客 812

AI(四): 工具 (GitNexus、CLI-Anything、 OMO: Oh-My-Openagent, OMO: oh-my-codex、 OpenSpec、 Superpowers)

GitNexus 是一款能够将代码库转化为可查询知识图谱的智能工具。它的核心能力可以概括为三点:解析 —— 基于 Tree-sitter 深度解析代码,提取函数、类、变量之间的调用与依赖关系建图 —— 将代码结构存入 KuzuDB 图数据库,构建完整的代码知识图谱适配 —— 通过 MCP 协议与 Claude 等 AI 智能体无缝对接,提供结构化代码上下文。

Men-DD 2853

Harness Engineering深度指南(非常详细),软件工程转型控制系统设计,从入门到精通,收藏这一篇就够了!

George 提到 **Harness engineering** 这种模式已经出现了三次: * 第一次是在 18 世纪 80 年代,詹姆斯·瓦特(James Watt)发明了离心调速器(Centrifugal governor)。 * 第二次是在 Kubernetes 出现。 * 第三次是 OpenAI 提出的 Harness engineering。

m0_59235945的博客 1034

MCP和Skill的区别

MCP与Skill是智能系统的两个关键维度:MCP(多通道平台/处理器)作为底层架构,负责整合多模态交互渠道(如语音、文本)和计算能力;Skill则是基于MCP的具体功能模块(如"查天气""设闹钟")。核心区别在于:MCP关注系统级资源调度与跨渠道协同,为Skill提供运行环境;Skill聚焦单一任务的精准执行,依赖MCP的底层能力。二者的关系如同"舞台与演员",MCP提供基础设施,Skill实现具体功能,共同构建完整的智能交互体系。

m0_53830442的博客 2219

Graphify:开启你的文档分类新时代

Graphify:开启你的文档分类新时代 项目介绍 Graphify 是一个基于Neo4j的无管理扩展项目,专为文档和文本分类而设计。通过利用强大的自然语言处理技术,Graphify能够高效地训练模型,并对未标记的文本进行智能分类。其简洁的RESTful API使得集成到任何系统中变得轻而易举。 项目技术分析 Graphify的核心在于它的自然语言解析模型,该模型采用先进的算法抽取文本的关键信息并...

gitblog_00060的博客 708
上一篇: 多Agent辩论+知识图谱推理全攻略(非常详细),AAAI 2026论文从入门到精通,收藏这一篇就够了!
下一篇: 大模型关键路径推理实战(非常详细),PathMind算法原理从入门到精通,收藏这一篇就够了!
Python_金钱豹
博客等级 码龄5年 1万+粉丝 2835原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值