Bloop 使用指南

bloop

bloop 是用 Rust 编写的快速代码搜索引擎

克隆代码

git clone https://github.com/BloopAI/bloop
cd bloop

bloop Server

指定依赖库版本

cargo update -p qdrant-client --precise 1.5.0
cargo update -p reqwest --precise 0.11.20

编译

cargo build -p bleep --release

部署 Qdrant 服务

docker run -p 6333:6333 -p 6334:6334 \
    -v $(pwd)/qdrant_storage_1_5_0:/qdrant/storage:z \
    qdrant/qdrant:v1.5.0

运行

mkdir codes
RUST_BACKTRACE=1 cargo run -p bleep --release -- --source-dir /Users/junjian/GitHub/BloopAI/bloop/codes

bloop App

安装依赖

  • ONNX Runtime
brew install onnxruntime
brew install tauri
brew install vips

Cursor 使用指南

安装与配置

安装

访问 Cursor 官网,下载并安装 Cursor。

配置

运行 Cursor,打开 Cursor 设置。

General > Rules for AI

让模型使用中文回复。

Features > Cursor Tab

功能

使用

使用 Codebase

Final Codebase Context 使用了 100代码块

对于 大主题 (多维度)的问题,使用更多的 代码块 会更有帮助。

代码聊天与编辑器互动

调试

Tabby 使用指南

Tabby

安装 Tabby (macOS)

brew install tabbyml/tabby/tabby

更新

brew upgrade tabbyml/tabby/tabby

安装 Tabby VSCode 扩展

模型

Codestral 的优点

与其他编码 LLM 相比,Codestral 的独特之处在于其单一模型同时支持 指令跟随中间填充 兼容性。这是通过在两个数据集上同时微调基础模型实现的。这种 双重微调策略 使同一个模型在 代码补全对话任务 中都能表现出色,大大简化了模型部署堆栈。

此外,Codestral 在包含 80 多种编程语言的多样化数据集上进行训练,确保了开发人员在使用各种语言时的高质量体验。

运行 Tabby Server

命令行指定参数

Continue 源码分析 - 键盘快捷键

聊天窗口

输入框(TipTapEditor)

Enter ()

  • 不使用 Codebase

Cmd-Enter ( )

  • 使用 Codebase

Alt-Enter ( )

  • 使用 ActiveFile(打开且激活的文件)

Cmd-Backspace ( )

  • 放弃响应

Shift-Enter ( )

  • 换行

源代码:gui/src/components/mainInput/TipTapEditor.tsx

function TipTapEditor(props: TipTapEditorProps) {
  //...
  const editor: Editor = useEditor({
    extensions: [
      Document,
      History,
      Image,
      Placeholder.configure({
        placeholder: () =>
          historyLengthRef.current === 0
            ? "提出任何问题,'/' 斜杠命令,'@' 添加上下文"
            : "提出后续问题",
      }),
      Paragraph.extend({
        addKeyboardShortcuts() {
// ...

新会话 ( L)

源代码:gui/src/pages/gui.tsx

Continue 源码分析 - SQLite 数据库设计

SQLite 数据库设计

CREATE TABLE tag_catalog (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    dir STRING NOT NULL,
    branch STRING NOT NULL,
    artifactId STRING NOT NULL,
    path STRING NOT NULL,
    cacheKey STRING NOT NULL,
    lastUpdated INTEGER NOT NULL
)

CREATE TABLE sqlite_sequence(name,seq)

CREATE TABLE global_cache (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cacheKey STRING NOT NULL,
    dir STRING NOT NULL,
    branch STRING NOT NULL,
    artifactId STRING NOT NULL
)

CREATE TABLE chunks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cacheKey TEXT NOT NULL,
    path TEXT NOT NULL,
    idx INTEGER NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL,
    content TEXT NOT NULL
)

CREATE TABLE chunk_tags (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    tag TEXT NOT NULL,
    chunkId INTEGER NOT NULL,
    FOREIGN KEY (chunkId) REFERENCES chunks (id)
)

CREATE TABLE code_snippets (
    id INTEGER PRIMARY KEY,
    path TEXT NOT NULL,
    cacheKey TEXT NOT NULL,
    content TEXT NOT NULL,
    title TEXT NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL
)

CREATE TABLE code_snippets_tags (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    tag TEXT NOT NULL,
    snippetId INTEGER NOT NULL,
    FOREIGN KEY (snippetId) REFERENCES code_snippets (id)
)

CREATE TABLE lance_db_cache (
    uuid TEXT PRIMARY KEY,
    cacheKey TEXT NOT NULL,
    path TEXT NOT NULL,
    artifact_id TEXT NOT NULL,
    vector TEXT NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL,
    contents TEXT NOT NULL
)

CREATE TABLE fts_metadata (
    id INTEGER PRIMARY KEY,
    path TEXT NOT NULL,
    cacheKey TEXT NOT NULL,
    chunkId INTEGER NOT NULL,
    FOREIGN KEY (chunkId) REFERENCES chunks (id),
    FOREIGN KEY (id) REFERENCES fts (rowid)
)

CREATE VIRTUAL TABLE fts USING fts5(
    path,
    content,
    tokenize = 'trigram'
)

CREATE TABLE 'fts_data'(id INTEGER PRIMARY KEY, block BLOB)
CREATE TABLE 'fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID
CREATE TABLE 'fts_content'(id INTEGER PRIMARY KEY, c0, c1)
CREATE TABLE 'fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB)
CREATE TABLE 'fts_config'(k PRIMARY KEY, v) WITHOUT ROWID

CREATE UNIQUE INDEX idx_tag_catalog_unique 
     ON tag_catalog(dir, branch, artifactId, path, cacheKey)
CREATE UNIQUE INDEX idx_global_cache_unique 
     ON global_cache(cacheKey, dir, branch, artifactId)

数据集

TensorFlow Datasets

数据集 尺寸 (Tokens)
RefinedWeb 500B
C4 172B
Dolma 3T
The Pile 340B
SlimPajama 627B
RedPajama2 20T
FineWeb 15T

结合 TF/IDF 或者 BM25 算法改进代码检索的效果,提高代码检索的准确性。 采用 Jaccard 相似度算法,提高代码相似性检测的效果。 使用 TreeSitter 或者 AST 技术,进行语法分析,以构建更好的交互体验。