codebase

package
v0.3.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 29, 2026 License: GPL-3.0 Imports: 26 Imported by: 0

Documentation

Overview

Package codebase 代码向量数据库的生成与查询系统

Package codebase 代码向量数据库的生成与查询系统

Index

Constants

View Source
const DefaultDim = 768

DefaultDim 默认向量维度(配置中未指定时使用)

Variables

View Source
var VecDBs = make(map[string]*CodebaseDB)

VecDBs 向量数据库集合,按目录路径索引

View Source
var VecDBsLock sync.Mutex

VecDBsLock 保护 VecDBs map

Functions

func AddToQueue

func AddToQueue(directory string, task EmbedTask) error

AddToQueue 将嵌入任务加入指定目录的队列 task.Priority=true 时插队到队头,否则加入队尾

func CancelIndex

func CancelIndex(directory string) error

CancelIndex 取消指定目录正在进行的索引

func CleanDirectory

func CleanDirectory(directory string) error

CleanDirectory 清空指定目录的 codebase 数据(删表重建,保留库文件)

func CleanSymbols

func CleanSymbols(directory, filePath string, activeSymbols []string) error

symbol=""(整个文件)的记录不会被删除;同时清理对应的 vec0 向量

func GetDimFromCfg

func GetDimFromCfg() int

GetDimFromCfg 从全局配置读取当前嵌入模型的维度

func GetFilePaths

func GetFilePaths(directory string) ([]string, error)

GetFilePaths 返回 codebase 中所有已索引的文件路径列表

func Initialize

func Initialize() error

Initialize 从全局配置读取嵌入模型信息,初始化 codebase 包 必须在调用其他任何函数前调用

func IsEmbeddingConfigured

func IsEmbeddingConfigured() bool

IsEmbeddingConfigured 检查是否配置了 embedding 模型

func RemoveFile

func RemoveFile(directory, filePath string) error

RemoveFile 删除指定文件的所有索引条目(含向量)

func ResumeDirectory

func ResumeDirectory(directory string) error

ResumeDirectory 恢复指定目录的队列处理(重新启动 worker)

func RunIndex

func RunIndex(ctx context.Context, cwd string, broadcastFn func(IndexStatus)) error

RunIndex 扫描 cwd 下的合规文件,逐个提取 LSP 符号并提交嵌入任务。 broadcastFn 可选,每次状态变更时调用以广播进度。

func Shutdown

func Shutdown() error

Shutdown 关闭所有目录的数据库连接和 worker

func StopDirectory

func StopDirectory(directory string) error

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

func DirectoryStatus(directory string) *DirStatus

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 NewQueueManager

func NewQueueManager() *QueueManager

NewQueueManager 创建新的队列管理器

func (*QueueManager) Clear

func (qm *QueueManager) Clear()

Clear 清空队列

func (*QueueManager) Close

func (qm *QueueManager) Close()

Close 关闭队列,所有阻塞的 WaitPop 返回 nil

func (*QueueManager) Len

func (qm *QueueManager) Len() int

Len 返回当前队列长度

func (*QueueManager) Pause

func (qm *QueueManager) Pause()

Pause 暂停队列处理(WaitPop 不会返回任务)

func (*QueueManager) Push

func (qm *QueueManager) Push(task *EmbedTask)

Push 将任务加入队列。Priority=true 时插到队首,否则加入队尾

func (*QueueManager) Resume

func (qm *QueueManager) Resume()

Resume 恢复队列处理

func (*QueueManager) WaitPop

func (qm *QueueManager) WaitPop(ctx context.Context) *EmbedTask

WaitPop 阻塞等待直到有可用任务。ctx 取消时返回 nil

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(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 向量相似度搜索结果条目

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL