@xiaohui-wang/mcpadvisor
Version:
MCP Advisor & Installation - Find the right MCP server for your needs
55 lines (54 loc) • 1.82 kB
JavaScript
/**
* OceanBase 搜索提供者实现模块
* 提供基于 OceanBase 的向量搜索功能
*/
import { getTextEmbedding } from '../../utils/embedding.js';
import logger from '../../utils/logger.js';
/**
* 转换为 MCPServerResponse 格式
*/
export const convertToServerResponse = (key, server) => {
return {
title: server.display_name,
description: server.description,
github_url: server.repository.url,
similarity: 0 // 将在搜索时计算
};
};
/**
* 处理并索引数据
*/
export const processAndIndexData = async (data, vectorEngine, createSearchableText) => {
// 清除现有索引
await vectorEngine.clear();
// 处理每个服务器条目
const entries = Object.entries(data);
for (const [key, server] of entries) {
// 创建可搜索文本
const searchableText = createSearchableText(server);
// 获取文本嵌入
const embedding = getTextEmbedding(searchableText);
// 转换为 MCPServerResponse 格式
const serverResponse = convertToServerResponse(key, server);
// 添加到向量索引
await vectorEngine.addEntry(key, embedding, serverResponse);
}
logger.info(`Indexed ${entries.length} MCP servers`);
};
/**
* 执行向量搜索
*/
export const performVectorSearch = async (query, vectorEngine) => {
try {
// 获取查询嵌入
const queryEmbedding = getTextEmbedding(query);
// 使用向量引擎搜索
const results = await vectorEngine.search(queryEmbedding);
logger.debug(`Found ${results.length} results from vector search`);
return results;
}
catch (error) {
logger.error(`Error in vector search: ${error instanceof Error ? error.message : String(error)}`);
throw error;
}
};