Tacitbase MCP 服务器为 Tacitbase 提供高级搜索功能,支持 Tacitbase 原生搜索和 Typesense 增强搜索特性,极大提升搜索的灵活性和效率。
Tacitbase MCP 服务器为 Tacitbase 带来高级搜索能力,支持 Tacitbase 原生搜索和 Typesense 增强搜索特性。你可以按以下步骤安装和运行该服务器:
go mod download
go build -o tb-mcp-server
./tb-mcp-server
在运行服务器前,需要配置以下环境变量:
TACITBASE_AUTH_TOKEN
:Tacitbase API 的身份验证令牌TYPESENSE_API_KEY
:Typesense 的 API 密钥TYPESENSE_HOST
(默认: localhost):Typesense 服务的主机地址TYPESENSE_PORT
(默认: 8108):Typesense 服务的端口TYPESENSE_PROTOCOL
(默认: http):Typesense 服务的协议go mod download
go build -o tb-mcp-server
./tb-mcp-server
{
"query": "golang 开发者",
"search_fields": "技能,最新经验",
"filter_fields": "地点:旧金山",
"sort_by": "最新经验:降序",
"page": 1,
"per_page": 20
}
{
"vector_query": "[0.1, 0.2, ..., 0.512]",
"filter_fields": "工作经验:>5",
"page": 1,
"per_page": 20
}
{
"query": "具备团队领导经验且熟悉云技术的候选人",
"search_fields": "技能,经验,教育背景",
"filter_fields": "地点:北京, 年龄范围:28-35",
"sort_by": "相关性:降序",
"page": 1,
"per_page": 20
}
该项目采用干净、模块化的架构:
.
├── 模型/ # 数据结构和类型
├── 服务/ # 商业逻辑和外部服务交互
├── 处理器/ # 请求处理器和路由逻辑
├── 工具/ # 工具注册和配置
├── main.go # 应用程序入口点
└── README.md # 项目文档
models
:包含应用程序中使用的数据结构和类型services
:实现商业逻辑和外部服务交互handlers
:包含处理传入请求的请求处理器tools
:注册可用于搜索候选人的工具search_candidates
)vector_search_candidates
)semantic_search_candidates
)使用 Go 模块管理的项目,可以通过以下命令初始化:
go mod init your_project_name
go mod tidy
运行项目中的测试用例:
go test -v ./...
API 文档可以通过以下工具生成:
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
type SearchRequest struct {
Query string `json:"query"`
SearchFields []string `json:"search_fields"`
FilterFields map[string]string `json:"filter_fields"`
SortBy string `json:"sort_by"`
Page int `json:"page"`
PerPage int `json:"per_page"`
}
func main() {
r := gin.DefaultRouter()
r.POST("/search", func(c *gin.Context) {
var req SearchRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "请求格式错误"})
return
}
// 模拟搜索逻辑
results := search(req.Query, req.SearchFields, req.FilterFields)
c.JSON(http.StatusOK, gin.H{
"results": results,
"page": req.Page,
"per_page": req.PerPage,
})
})
r.Run(":8080")
}
func search(query string, fields []string, filters map[string]string) []map[string]interface{} {
// 模拟搜索结果
return []map[string]interface{}{
{
"id": 1,
"title": "Golang 开发工程师",
"company": "示例公司",
},
{
"id": 2,
"title": "高级 Golang 开发者",
"company": "另一家公司",
},
}
}
package main
import (
"fmt"
"math"
"github.com/gocarina/goshark"
)
func vectorSearch(embeddings []float64, queryEmbedding []float64) []int {
// 计算余弦相似度
similarities := make([]float64, len(embeddings))
for i, vec := range embeddings {
dotProduct := 0.0
for j := 0; j < len(vec); j++ {
dotProduct += vec[j] * queryEmbedding[j]
}
norm := math.Sqrt(float64(len(queryEmbedding))) * math.Sqrt(float64(len(embeddings[i])))
if norm == 0 {
similarities[i] = 0
} else {
similarities[i] = dotProduct / norm
}
}
// 根据相似度排序
order := make(sort.IntSlice, len(similarities))
for i := range order {
order[i] = i
}
order.Sort(func(i, j int) bool {
return similarities[i] > similarities[j]
})
return order.Indizes()
}
该项目采用模块化架构,将不同功能模块分离,提高代码的可维护性和可扩展性。各模块职责明确,如 models
负责数据结构和类型定义,services
处理商业逻辑和外部服务交互等。同时,项目支持多种搜索方式,包括基本搜索、向量搜索和语义搜索,每种搜索方式都有其独特的实现逻辑。
本项目遵循 MIT 协议。
欢迎为该项目贡献力量!请参考 CONTRIBUTING.md 文件了解如何参与。