🚀 parquet_mcp_server
一個功能強大的MCP(模型控制協議)服務器,提供用於執行網絡搜索和查找相似內容的工具。此服務器專為Claude Desktop設計,能為需要網絡搜索功能的應用程序,以及需要根據搜索查詢查找類似內容的項目提供有力支持。
🚀 快速開始
parquet_mcp_server是一個強大的MCP服務器,可用於執行網絡搜索和查找相似內容。下面將詳細介紹其安裝、使用、測試等步驟。
✨ 主要特性
- 網絡搜索:執行網絡搜索並抓取結果。
- 相似性搜索:從之前的結果中提取相關信息。
📦 安裝指南
通過Smithery安裝
自動使用Smithery安裝Parquet MCP Server for Claude Desktop:
npx -y @smithery/cli install @DeepSpringAI/parquet_mcp_server --client claude
克隆此倉庫
git clone ...
cd parquet_mcp_server
創建並激活虛擬環境
uv venv
.venv\Scripts\activate
source .venv/bin/activate
安裝包
uv pip install -e .
環境變量配置
創建一個.env
文件,並添加以下變量:
EMBEDDING_URL=http://sample-url.com/api/embed
VECTOR_DB_HOST=host.docker.internal
VECTOR_DB_PORT=5432
VECTOR_DB_NAME=vector_db
VECTOR_DB_USER=postgres
VECTOR_DB_PASSWORD=postgres
💻 使用示例
安裝PostgreSQL和pgVector擴展
- 在PostgreSQL中創建一個新數據庫並啟用pgVector擴展:
CREATE EXTENSION vector;
- 創建用於存儲搜索結果的表:
CREATE TABLE web_search (
id SERIAL PRIMARY KEY,
text TEXT, # 存儲完整的網頁內容或文本片段
metadata JSONB, # 包含URL、標題等元數據
embedding VECTOR(1024), # 文本對應的向量嵌入,維度為1024
created_at TIMESTAMP DEFAULT NOW() # 記錄創建時間
);
📚 詳細文檔
測試指南
初始化數據庫
使用以下命令初始化PostgreSQL數據庫並插入示例數據:
psql -h host.docker.internal -U postgres -d vector_db -f init.sql
搜索測試
向服務器發送一個包含嵌入向量的搜索請求,例如:
POST /api/search HTTP/1.1
Content-Type: application/json
{
"embedding": [0.1, 0.2, ..., 0.3], # 長度為1024的向量
"match_threshold": 0.7, # 相似性閾值,默認0.7
"match_count": 5 # 最大返回結果數,默認5
}
PostgreSQL相似性搜索函數
為了在PostgreSQL中執行基於向量的相似性搜索,請使用以下SQL函數:
CREATE OR REPLACE FUNCTION match_web_search(
query_embedding vector(1024), # 查詢向量,長度必須為1024
match_threshold float, # 相似性閾值
match_count int # 最大返回結果數,默認5
)
RETURNS TABLE (
id bigint,
metadata jsonb,
text TEXT, # 返回完整的文本內容
created_at TIMESTAMP, # 返回創建時間戳
similarity float
)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT
web_search.id,
web_search.metadata,
web_search.text,
web_search.created_at,
1 - (web_search.embedding <=> query_embedding) as similarity
FROM web_search
WHERE 1 - (web_search.embedding <=> query_embedding) > match_threshold
ORDER BY web_search.created_at DESC, # 按時間排序,最新結果優先
web_search.embedding <=> query_embedding # 按相似性排序
LIMIT match_count; # 限制返回結果數量
END;
$$;
這個函數允許在PostgreSQL中執行基於向量的相似性搜索,根據指定的閾值和結果數限制返回符合條件的結果。結果按時間戳降序排列,再按相似性排序。
後端代碼示例
以下是後端服務的一個簡單實現示例:
from fastapi import FastAPI, HTTPException
import requests
import json
from typing import List, Optional
app = FastAPI()
class SearchResults(BaseModel):
id: int
metadata: dict
text: str
created_at: datetime
similarity: float
@app.post("/api/search", response_model=List[SearchResults])
async def search(web_search: WebSearch) -> List[SearchResults]:
try:
response = requests.post(
"http://localhost:8000/api/vector/search",
json={
"vector": web_search.embedding,
"threshold": 0.7,
"count": 5
}
)
if response.status_code != 200:
raise HTTPException(status_code=500, detail="搜索失敗")
return response.json()
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
🔧 技術細節
其他注意事項
⚠️ 重要提示
- 確保PostgreSQL版本為13或更高,以支持向量數據類型。
- pgVector擴展必須正確安裝,並且數據庫已啟用該擴展。
- 網絡搜索功能依賴於第三方爬蟲工具(如
requests
和beautifulsoup4
),請確保這些庫已安裝並配置正確。
- 在生產環境中使用時,請根據實際需求調整相似性閾值和結果返回數量。