mcpField
A
AgentDB Advanced Features

AgentDB Advanced Features

github.com/ruvnet数据与数据库80.0k1.1k 次安装今天更新
代码仓库

关于 AgentDB Advanced Features

介绍 AgentDB 分布式部署与搜索进阶方法的技能,涵盖 QUIC 同步、多数据库管理、自定义距离指标,以及结合向量与元数据的检索。

主要功能

  1. 01实例间 QUIC 同步
  2. 02余弦、欧氏与点积指标
  3. 03自定义距离函数
  4. 04带元数据过滤的向量搜索
  5. 05多数据库与分片管理
  6. 06使用 MMR 增加结果多样性

适用场景

  1. 01跨网络同步 AgentDB 节点
  2. 02按元数据过滤语义搜索
  3. 03按领域拆分数据库或分片
  4. 04获取更多样化的搜索结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ruvnet/ruflo --skill agentdb-advanced-features

安装后在 Claude Code 中输入/agentdb-advanced-features确认已加载。

详细介绍

AgentDB 高级功能

此技能的作用

介绍 AgentDB 的高级功能,包括分布式系统、多数据库协调、自定义距离度量、混合搜索(向量 + 元数据)、QUIC 同步和生产部署模式。助力构建复杂的 AI 系统,实现亚毫秒级跨节点通信和高级搜索功能。

性能:<1ms QUIC 同步、带筛选条件的混合搜索、自定义距离度量。

前提条件

  • Node.js 18+
  • AgentDB v1.0.7+(通过 agentic-flow)
  • 了解分布式系统(用于 QUIC 同步)
  • 了解向量搜索基础知识

QUIC 同步

什么是 QUIC 同步?

QUIC(Quick UDP Internet Connections)可在跨网络边界的 AgentDB 实例之间实现亚毫秒级延迟同步,并支持自动重试、多路复用和加密。

优势:

  • 节点间延迟 <1ms
  • 多路复用流(可同时执行多个操作)
  • 内置加密(TLS 1.3)
  • 自动重试和恢复
  • 基于事件的广播
启用 QUIC 同步
import { createAgentDBAdapter } from 'agentic-flow$reasoningbank';

// Initialize with QUIC synchronization
const adapter = await createAgentDBAdapter({
  dbPath: '.agentdb$distributed.db',
  enableQUICSync: true,
  syncPort: 4433,
  syncPeers: [
    '192.168.1.10:4433',
    '192.168.1.11:4433',
    '192.168.1.12:4433',
  ],
});

// Patterns automatically sync across all peers
await adapter.insertPattern({
  // ... pattern data
});

// Available on all peers within ~1ms
QUIC 配置
const adapter = await createAgentDBAdapter({
  enableQUICSync: true,
  syncPort: 4433,              // QUIC server port
  syncPeers: ['host1:4433'],   // Peer addresses
  syncInterval: 1000,          // Sync interval (ms)
  syncBatchSize: 100,          // Patterns per batch
  maxRetries: 3,               // Retry failed syncs
  compression: true,           // Enable compression
});
多节点部署
# Node 1 (192.168.1.10)
AGENTDB_QUIC_SYNC=true \
AGENTDB_QUIC_PORT=4433 \
AGENTDB_QUIC_PEERS=192.168.1.11:4433,192.168.1.12:4433 \
node server.js

# Node 2 (192.168.1.11)
AGENTDB_QUIC_SYNC=true \
AGENTDB_QUIC_PORT=4433 \
AGENTDB_QUIC_PEERS=192.168.1.10:4433,192.168.1.12:4433 \
node server.js

# Node 3 (192.168.1.12)
AGENTDB_QUIC_SYNC=true \
AGENTDB_QUIC_PORT=4433 \
AGENTDB_QUIC_PEERS=192.168.1.10:4433,192.168.1.11:4433 \
node server.js

距离度量

余弦相似度(默认)

最适用于归一化向量和语义相似度:

# CLI
npx agentdb@latest query .$vectors.db "[0.1,0.2,...]" -m cosine

# API
const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  metric: 'cosine',
  k: 10,
});

使用场景:

  • 文本嵌入(BERT、GPT 等)
  • 语义搜索
  • 文档相似度
  • 大多数通用应用

公式:cos(θ) = (A · B) / (||A|| × ||B||) 范围:[-1, 1](1 = 相同,-1 = 相反)

欧几里得距离(L2)

最适用于空间数据和几何相似度:

# CLI
npx agentdb@latest query .$vectors.db "[0.1,0.2,...]" -m euclidean

# API
const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  metric: 'euclidean',
  k: 10,
});

使用场景:

  • 图像嵌入
  • 空间数据
  • 计算机视觉
  • 向量模长会产生影响的场景

公式:d = √(Σ(ai - bi)²) 范围:[0, ∞](0 = 相同,∞ = 差异极大)

点积

最适用于预先归一化的向量,计算速度快:

# CLI
npx agentdb@latest query .$vectors.db "[0.1,0.2,...]" -m dot

# API
const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  metric: 'dot',
  k: 10,
});

使用场景:

  • 预先归一化的嵌入
  • 快速计算相似度
  • 向量已是单位长度的场景

公式:dot = Σ(ai × bi) 范围:[-∞, ∞](值越大 = 越相似)

自定义距离度量
// Implement custom distance function
function customDistance(vec1: number[], vec2: number[]): number {
  // Weighted Euclidean distance
  const weights = [1.0, 2.0, 1.5, ...];
  let sum = 0;
  for (let i = 0; i < vec1.length; i++) {
    sum += weights[i] * Math.pow(vec1[i] - vec2[i], 2);
  }
  return Math.sqrt(sum);
}

// Use in search (requires custom implementation)

混合搜索(向量 + 元数据)

基本混合搜索

结合向量相似度和元数据筛选:

// Store documents with metadata
await adapter.insertPattern({
  id: '',
  type: 'document',
  domain: 'research-papers',
  pattern_data: JSON.stringify({
    embedding: documentEmbedding,
    text: documentText,
    metadata: {
      author: 'Jane Smith',
      year: 2025,
      category: 'machine-learning',
      citations: 150,
    }
  }),
  confidence: 1.0,
  usage_count: 0,
  success_count: 0,
  created_at: Date.now(),
  last_used: Date.now(),
});

// Hybrid search: vector similarity + metadata filters
const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  domain: 'research-papers',
  k: 20,
  filters: {
    year: { $gte: 2023 },          // Published 2023 or later
    category: 'machine-learning',   // ML papers only
    citations: { $gte: 50 },       // Highly cited
  },
});
高级筛选
// Complex metadata queries
const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  domain: 'products',
  k: 50,
  filters: {
    price: { $gte: 10, $lte: 100 },      // Price range
    category: { $in: ['electronics', 'gadgets'] },  // Multiple categories
    rating: { $gte: 4.0 },                // High rated
    inStock: true,                        // Available
    tags: { $contains: 'wireless' },      // Has tag
  },
});
加权混合搜索

结合向量分数和元数据分数:

const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  domain: 'content',
  k: 20,
  hybridWeights: {
    vectorSimilarity: 0.7,  // 70% weight on semantic similarity
    metadataScore: 0.3,     // 30% weight on metadata match
  },
  filters: {
    category: 'technology',
    recency: { $gte: Date.now() - 30 * 24 * 3600000 },  // Last 30 days
  },
});

多数据库管理

多个数据库
// Separate databases for different domains
const knowledgeDB = await createAgentDBAdapter({
  dbPath: '.agentdb$knowledge.db',
});

const conversationDB = await createAgentDBAdapter({
  dbPath: '.agentdb$conversations.db',
});

const codeDB = await createAgentDBAdapter({
  dbPath: '.agentdb$code.db',
});

// Use appropriate database for each task
await knowledgeDB.insertPattern({ /* knowledge */ });
await conversationDB.insertPattern({ /* conversation */ });
await codeDB.insertPattern({ /* code */ });
数据库分片
// Shard by domain for horizontal scaling
const shards = {
  'domain-a': await createAgentDBAdapter({ dbPath: '.agentdb$shard-a.db' }),
  'domain-b': await createAgentDBAdapter({ dbPath: '.agentdb$shard-b.db' }),
  'domain-c': await createAgentDBAdapter({ dbPath: '.agentdb$shard-c.db' }),
};

// Route queries to appropriate shard
function getDBForDomain(domain: string) {
  const shardKey = domain.split('-')[0];  // Extract shard key
  return shards[shardKey] || shards['domain-a'];
}

// Insert to correct shard
const db = getDBForDomain('domain-a-task');
await db.insertPattern({ /* ... */ });

MMR(最大边际相关性)

检索多样化结果,避免冗余:

// Without MMR: Similar results may be redundant
const standardResults = await adapter.retrieveWithReasoning(queryEmbedding, {
  k: 10,
  useMMR: false,
});

// With MMR: Diverse, non-redundant results
const diverseResults = await adapter.retrieveWithReasoning(queryEmbedding, {
  k: 10,
  useMMR: true,
  mmrLambda: 0.5,  // Balance relevance (0) vs diversity (1)
});

MMR 参数:

  • mmrLambda = 0:相关性最高(可能存在冗余)
  • mmrLambda = 0.5:均衡(默认)
  • mmrLambda = 1:多样性最高(相关性可能较低)

使用场景:

  • 搜索结果多样化
  • 推荐系统
  • 避免回音室效应
  • 探索式搜索

上下文合成

根据多条记忆生成丰富的上下文:

const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  domain: 'problem-solving',
  k: 10,
  synthesizeContext: true,  // Enable context synthesis
});

// ContextSynthesizer creates coherent narrative
console.log('Synthesized Context:', result.context);
// "Based on 10 similar problem-solving attempts, the most effective
//  approach involves: 1) analyzing root cause, 2) brainstorming solutions,
//  3) evaluating trade-offs, 4) implementing incrementally. Success rate: 85%"

console.log('Patterns:', result.patterns);
// Extracted common patterns across memories

生产模式

连接池
// Singleton pattern for shared adapter
class AgentDBPool {
  private static instance: AgentDBAdapter;

  static async getInstance() {
    if (!this.instance) {
      this.instance = await createAgentDBAdapter({
        dbPath: '.agentdb$production.db',
        quantizationType: 'scalar',
        cacheSize: 2000,
      });
    }
    return this.instance;
  }
}

// Use in application
const db = await AgentDBPool.getInstance();
const results = await db.retrieveWithReasoning(queryEmbedding, { k: 10 });
错误处理
async function safeRetrieve(queryEmbedding: number[], options: any) {
  try {
    const result = await adapter.retrieveWithReasoning(queryEmbedding, options);
    return result;
  } catch (error) {
    if (error.code === 'DIMENSION_MISMATCH') {
      console.error('Query embedding dimension mismatch');
      // Handle dimension error
    } else if (error.code === 'DATABASE_LOCKED') {
      // Retry with exponential backoff
      await new Promise(resolve => setTimeout(resolve, 100));
      return safeRetrieve(queryEmbedding, options);
    }
    throw error;
  }
}
监控和日志记录
// Performance monitoring
const startTime = Date.now();
const result = await adapter.retrieveWithReasoning(queryEmbedding, { k: 10 });
const latency = Date.now() - startTime;

if (latency > 100) {
  console.warn('Slow query detected:', latency, 'ms');
}

// Log statistics
const stats = await adapter.getStats();
console.log('Database Stats:', {
  totalPatterns: stats.totalPatterns,
  dbSize: stats.dbSize,
  cacheHitRate: stats.cacheHitRate,
  avgSearchLatency: stats.avgSearchLatency,
});

CLI 高级操作

数据库导入/导出
# Export with compression
npx agentdb@latest export .$vectors.db .$backup.json.gz --compress

# Import from backup
npx agentdb@latest import .$backup.json.gz --decompress

# Merge databases
npx agentdb@latest merge .$db1.sqlite .$db2.sqlite .$merged.sqlite
数据库优化
# Vacuum database (reclaim space)
sqlite3 .agentdb$vectors.db "VACUUM;"

# Analyze for query optimization
sqlite3 .agentdb$vectors.db "ANALYZE;"

# Rebuild indices
npx agentdb@latest reindex .$vectors.db

环境变量

# AgentDB configuration
AGENTDB_PATH=.agentdb$reasoningbank.db
AGENTDB_ENABLED=true

# Performance tuning
AGENTDB_QUANTIZATION=binary     # binary|scalar|product|none
AGENTDB_CACHE_SIZE=2000
AGENTDB_HNSW_M=16
AGENTDB_HNSW_EF=100

# Learning plugins
AGENTDB_LEARNING=true

# Reasoning agents
AGENTDB_REASONING=true

# QUIC synchronization
AGENTDB_QUIC_SYNC=true
AGENTDB_QUIC_PORT=4433
AGENTDB_QUIC_PEERS=host1:4433,host2:4433

故障排除

问题:QUIC 同步无法正常工作
# Check firewall allows UDP port 4433
# NOTE: Requires administrator privileges - for reference only
sudo ufw allow 4433/udp

# Verify peers are reachable
ping host1

# Check QUIC logs
DEBUG=agentdb:quic node server.js
问题:混合搜索未返回结果
// Relax filters
const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  k: 100,  // Increase k
  filters: {
    // Remove or relax filters
  },
});
问题:记忆整合过于激进
// Disable automatic optimization
const result = await adapter.retrieveWithReasoning(queryEmbedding, {
  optimizeMemory: false,  // Disable auto-consolidation
  k: 10,
});

了解更多

  • QUIC 协议:docs$quic-synchronization.pdf
  • 混合搜索:docs$hybrid-search-guide.md
  • GitHub:https:/$github.com$ruvnet$agentic-flow$tree$main$packages$agentdb
  • 网站:https:/$agentdb.ruv.io

类别:高级 / 分布式系统 难度:高级 预计耗时:45-60 分钟

评论

支持 Markdown