Documentation
¶
Overview ¶
Package codebase 代码向量数据库的生成与查询系统
Package codebase 代码向量数据库的生成与查询系统
Index ¶
- Constants
- Variables
- func AddToQueue(directory string, task EmbedTask) error
- func CancelIndex(directory string) error
- func CleanDirectory(directory string) error
- func CleanSymbols(directory, filePath string, activeSymbols []string) error
- func GetDimFromCfg() int
- func GetFilePaths(directory string) ([]string, error)
- func Initialize() error
- func IsEmbeddingConfigured() bool
- func RemoveFile(directory, filePath string) error
- func ResumeDirectory(directory string) error
- func RunIndex(ctx context.Context, cwd string, broadcastFn func(IndexStatus)) error
- func Shutdown() error
- func StopDirectory(directory string) error
- type BM25Result
- type CodebaseDB
- func (cdb *CodebaseDB) BM25Search(ctx context.Context, query string, limit int) ([]BM25Result, error)
- func (cdb *CodebaseDB) Search(ctx context.Context, searchType SearchType, query string, limit int) ([]SearchResult, error)
- func (cdb *CodebaseDB) VectorSearch(ctx context.Context, query string, limit int) ([]VectorSearchResult, error)
- type DirStatus
- type EmbedTask
- type IndexStatus
- type QueueManager
- type SearchResult
- type SearchType
- type VectorSearchResult
Constants ¶
const DefaultDim = 768
DefaultDim 默认向量维度(配置中未指定时使用)
Variables ¶
var VecDBs = make(map[string]*CodebaseDB)
VecDBs 向量数据库集合,按目录路径索引
var VecDBsLock sync.Mutex
VecDBsLock 保护 VecDBs map
Functions ¶
func AddToQueue ¶
AddToQueue 将嵌入任务加入指定目录的队列 task.Priority=true 时插队到队头,否则加入队尾
func CleanDirectory ¶
CleanDirectory 清空指定目录的 codebase 数据(删表重建,保留库文件)
func CleanSymbols ¶
symbol=""(整个文件)的记录不会被删除;同时清理对应的 vec0 向量
func GetFilePaths ¶
GetFilePaths 返回 codebase 中所有已索引的文件路径列表
func IsEmbeddingConfigured ¶
func IsEmbeddingConfigured() bool
IsEmbeddingConfigured 检查是否配置了 embedding 模型
func ResumeDirectory ¶
ResumeDirectory 恢复指定目录的队列处理(重新启动 worker)
func RunIndex ¶
func RunIndex(ctx context.Context, cwd string, broadcastFn func(IndexStatus)) error
RunIndex 扫描 cwd 下的合规文件,逐个提取 LSP 符号并提交嵌入任务。 broadcastFn 可选,每次状态变更时调用以广播进度。
func StopDirectory ¶
StopDirectory 停止指定目录的 worker,清空队列中待处理的任务
Types ¶
type BM25Result ¶
type BM25Result struct {
ID int64 `json:"id"`
FilePath string `json:"file_path"`
Symbol string `json:"symbol"`
Tags string `json:"tags"`
FullContent string `json:"full_content"`
EmbedText string `json:"embed_text"`
Score float64 `json:"score"`
}
BM25Result BM25 搜索结果条目
type CodebaseDB ¶
type CodebaseDB struct {
// contains filtered or unexported fields
}
CodebaseDB 单个目录的向量数据库实例
func (*CodebaseDB) BM25Search ¶
func (cdb *CodebaseDB) BM25Search(ctx context.Context, query string, limit int) ([]BM25Result, error)
BM25Search 使用 BM25 算法对 codebase 进行关键词检索
query 是用户的搜索文本,内部会自动从中提取关键词构建 FTS5 查询。 limit 控制最大返回条数(默认 10)。 返回按 BM25 相关性得分排序的结果(得分越低越相关)。 ctx 取消时,查询会立即中止并返回 context.Canceled。
func (*CodebaseDB) Search ¶
func (cdb *CodebaseDB) Search(ctx context.Context, searchType SearchType, query string, limit int) ([]SearchResult, error)
Search 在指定目录执行搜索。
searchType 控制搜索方式:
- SearchAuto: BM25 + 向量混合搜索,始终尝试两者后加权融合
- SearchBM25: 仅 BM25 关键词检索
- SearchVector: 仅向量相似度搜索
limit 控制最大返回条数(默认 10)。 ctx 取消时搜索立即中止。
func (*CodebaseDB) VectorSearch ¶
func (cdb *CodebaseDB) VectorSearch(ctx context.Context, query string, limit int) ([]VectorSearchResult, error)
VectorSearch 使用向量相似度进行语义搜索。
先将 query 转换为嵌入向量,再在 vec0 表中查找最近的 K 个邻居。 limit 控制最大返回条数(默认 10)。 返回按向量距离升序排列的结果(距离越小越相似)。 ctx 取消时,搜索会立即中止并返回 context.Canceled。
type DirStatus ¶
type DirStatus struct {
Directory string `json:"directory"`
QueueLen int `json:"queue_len"`
WorkerActive bool `json:"worker_active"`
Paused bool `json:"paused"`
}
DirStatus 目录嵌入处理状态
func DirectoryStatus ¶
DirectoryStatus 获取指定目录的处理状态
type EmbedTask ¶
type EmbedTask struct {
// EmbedText 用于嵌入计算的文本内容
EmbedText string
// FullContent 查询时需要返回的完整内容
FullContent string
// FilePath 源文件路径
FilePath string
// Symbol 文件内符号标识,""=整个文件
Symbol string
// Tags 标签列表
Tags []string
// Priority true=插队到队头,false=加入队尾
Priority bool
// Done 可选通道,任务完成时关闭
Done chan<- struct{}
}
EmbedTask 单个文件的嵌入任务
type IndexStatus ¶
type IndexStatus struct {
Total int `json:"total"`
Processed int `json:"processed"`
Remaining int `json:"remaining"`
CurrentFile string `json:"currentFile"`
Status string `json:"status"` // "scanning" | "indexing" | "completed" | "error"
Error string `json:"error,omitempty"`
}
IndexStatus 索引进度状态
func GetIndexStatus ¶
func GetIndexStatus(directory string) *IndexStatus
GetIndexStatus 返回指定目录当前索引进度,nil 表示未在索引
type QueueManager ¶
type QueueManager struct {
// contains filtered or unexported fields
}
QueueManager 单个目录的任务队列
func (*QueueManager) Push ¶
func (qm *QueueManager) Push(task *EmbedTask)
Push 将任务加入队列。Priority=true 时插到队首,否则加入队尾
type SearchResult ¶
type SearchResult struct {
ID int64 `json:"id"`
FilePath string `json:"file_path"`
Symbol string `json:"symbol"`
Tags string `json:"tags"`
FullContent string `json:"full_content"`
EmbedText string `json:"embed_text"`
Score float64 `json:"score,omitempty"` // BM25 score(越低越相关),仅 BM25 搜索时有效
Distance float64 `json:"distance,omitempty"` // 向量距离(越低越相似),仅向量搜索时有效
}
SearchResult 统一的搜索结果条目,同时携带 BM25 得分和向量距离
func Search ¶
func Search(ctx context.Context, directory string, searchType SearchType, query string, limit int) ([]SearchResult, error)
Search 包级便捷函数,自动获取指定目录的 CodebaseDB 并执行搜索。
results, err := codebase.Search(ctx, dir, codebase.SearchAuto, "find function", 10)
type SearchType ¶
type SearchType int
SearchType 搜索类型
const ( // SearchAuto 自动混合模式:始终混合 BM25 和向量搜索,加权融合排序 SearchAuto SearchType = iota // SearchBM25 仅 BM25 关键词检索 SearchBM25 // SearchVector 仅向量相似度搜索 SearchVector )
type VectorSearchResult ¶
type VectorSearchResult struct {
ID int64 `json:"id"`
FilePath string `json:"file_path"`
Symbol string `json:"symbol"`
Tags string `json:"tags"`
FullContent string `json:"full_content"`
EmbedText string `json:"embed_text"`
Distance float64 `json:"distance"`
}
VectorSearchResult 向量相似度搜索结果条目