Continue 源码分析 - 向量数据库存储位置

向量数据库存储位置

生成规则

LanceDB 存储位置:~/.continue/index/lancedb

  • UsersjunjianGitHubcontinuedevcontinue-0.9.191-vscodeextensionsvscodeNONEvectordb_OpenAIEmbeddingsProviderbge-base-zh-v1.5.lance
  • UsersjunjianGitHubcontinuedevcontinue-0.9.191-vscodeextensionsvscodeNONEvectordb_TransformersJsEmbeddingsProviderall-MiniLM-L6-v2.lance
  • UsersjunjianGitHubcontinuedevcontinue-0.9.191-vscodeextensionsvscodeNONEvectordb_TransformersJsEmbeddingsProviderbge-small-zh-v1.5.lance

向量数据库存储目录名字的组成部分: IndexTag.directory: /Users/junjian/GitHub/continuedev/continue-0.9.191-vscode/extensions/vscode IndexTag.branch: NONE IndexTag.

Langfuse: Open Source LLM Engineering Platform

Langfuse

LLM 可观察性(LLM Observability)、提示管理(Prompt Management)、LLM 评估(LLM Evaluations)、数据集(Datasets)、LLM 指标(LLM Metrics)和提示游乐场(Prompt Playground)

概述(Overview)

开发(Develop)

  • LLM Observability(可观察性):为您的应用程序进行仪表化,并开始将跟踪数据传输到 Langfuse(快速入门,集成跟踪)
  • Langfuse UI:检查和调试复杂的日志(演示,跟踪)
  • Prompt Management:从 Langfuse 中管理、版本化和部署提示(提示管理)
  • Prompt Engineering:使用 LLM 游乐场测试和迭代您的提示

监控(Monitor)

  • LLM Analytics(分析):跟踪指标(成本、延迟、质量)并从仪表板和数据导出中获得见解(分析)
  • LLM Evaluations(评估):为您的 LLM 完成收集和计算分数(分数和评估)
    • 在 Langfuse 中运行(基于模型的评估)和 LLM 作为评判
    • 收集用户反馈(用户反馈)
    • 在 Langfuse 中手动评分 LLM 输出(手动评分)

LiteLLM: [Python SDK] [Proxy Server (LLM Gateway)]

LiteLLM Proxy Server (LLM Gateway)

安装

pip install 'litellm[proxy]'

编辑配置文件:config.yaml

model_list:
  - model_name: qwen-coder
    litellm_params:
      model: ollama/qwen2.5-coder:7b
  - model_name: bge-m3
    litellm_params:
      model: ollama/bge-m3
  - model_name: llava
    litellm_params:
      model: ollama/llava:7b
      api_base: "http://localhost:11434"
      # api_base: http://127.0.0.1:11434/v1 # ❌ 500 Internal Server Error
  - model_name: gpt-4
    litellm_params:
      model: openai/gpt-4-32k
// ...

命令部署 # 集成 Langfuse LANGFUSE_PUBLIC_KEY=pk-lf-fd5d8fb

Kong AI Gateway

Kong

更快地构建生产就绪的 AI 应用程序(对于开发人员)

通过简单更改一行代码,使用现代基础设施构建具有多 LLM 支持和路由、高级 AI 负载均衡、LLM 可观察性、LLM 安全性和治理等功能的语义智能 AI 应用程序。

将语义智能注入到您的 AI 应用程序中(对于平台团队)

通过语义缓存加速每个 AI 应用程序,通过语义路由智能地跨多个模型路由,构建高级提示模板,检测和防止滥用,以及 AI 可观察性。

AI 流量的 L7 可观察性,用于成本监控和调优(AI 指标和可观察性)

获取应用程序发送的每个 AI 请求的见解,并捕获详细信息以了解和优化您的 AI 使用和成本,支持 10 多个日志摄取器。

安装(Docker)

PostgreSQL docker run -d --name kong-database \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ -e &q

SGLang 大模型服务框架

SGLang

SGLang is a fast serving framework for large language models and vision language models. It makes your interaction with models faster and more controllable by co-designing the backend runtime and frontend language.

SGLang 是用于大型语言模型和视觉语言模型的快速服务框架。通过协同设计后端运行时和前端语言,使您与模型的交互更快速、更可控。

The core features include:

核心功能包括: Fast Backend Runtime: Efficient serving with RadixAttention for prefix caching, jump-forward constrained decoding, continuous batching, token attention (paged attention), tensor parallelism, FlashInfer kernels, and quantization (AWQ/FP8/GPTQ/Marlin).

大模型推理需要多少显存?

计算加载模型需要的显存

模型参数(B) 参数使用的位数(bits) 加载需要显存(G)
0.5 16 1
1.5 16 3
7 16 14
9 16 18
22 16 44
72 16 144

计算支持不同长度的上下文需要的显存

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 技术,进行语法分析,以构建更好的交互体验。

GraphRAG

GraphRAG

GraphRAG 项目是一个数据管道和转换套件,旨在利用大型语言模型(LLMs)的力量从非结构化文本中提取有意义的结构化数据。

若要了解更多关于 GraphRAG 以及它如何用于增强您的大型语言模型(LLMs)对您的私有数据进行推理的能力,请访问 Microsoft Research Blog Post

Get Started

构建虚拟环境

cd /Users/junjian/GitHub/microsoft/graphrag

python -m venv env
source env/bin/activate

安装 GraphRAG

pip install graphrag

准备数据 mkdir -p ./ragtest/input curl https://www.gutenberg.

TypeScript 入门

TypeScript 安装

安装 tsc,它是 TypeScript 的编译器。

npm i -g typescript

查看版本

tsc -v
Version 5.5.3

安装 ts-node,它是 TypeScript 的运行时。

npm i -g ts-node

查看版本

ts-node -v
v10.9.2

Hello World

使用 tsc --init 命令快速创建一个 tsconfig.json 文件。

tsc --init

Created a new tsconfig.json with:                                                                                       
                                                                                                                     TS 
  target: es2016
  module: commonjs
  strict: true
  esModuleInterop: true
  skipLibCheck: true
  forceConsistentCasingInFileNames: true


You can learn more at https://aka.ms/tsconfig

创建一个 hello.ts 文件。

function hello(name: string) {
  console.log(`Hello, ${name}!`);
}

hello("TypeScript");

使用 tsc 命令编译 hello.ts 文件。

tsc hello.ts

编译后生成一个 hello.js 文件。

Continue 源码分析

Continue

VS Code Extension

通过配置创建新的 Extension,用于区别于 Continue 。

{
  "name": "continue",
  "icon": "media/icon.png",
  "version": "0.9.218",
  "displayName": "LNSoft Continue",
  "description": "The leading open-source AI code assistant",
  "publisher": "LNSoft Continue"
}

入口

VS Code 扩展的起点是 activate.tsactivateExtension 这里的函数将注册所有命令,并将 Continue GUI 作为 webview 加载到 IDE 的侧边栏中。

配置

目录:extensions/vscode

package.json

package.json 由开发者手动创建和维护,主要用于定义项目的配置信息。

Visual Studio Code 快捷键

快捷键

常用
显示所有命令 F1, ⇧ ⌘ P
全屏 ⌃ ⌘ F
设置 ⌘ ,
键盘快捷方式 ⌘ K ⌘ S
导航
转到文件 ⌘ P
转到工作区中的符号 ⌘ T
聚焦并选择痕迹导航 ⇧ ⌘ .
转到编辑器中的符号 ⇧ ⌘ O
转到行 ⌃ G
转到括号 ⇧ ⌘ \
转到定义 F12
转到引用 ⇧ F12
后退 ⌃ -
前进 ⌃ ⇧ -
显示
切换主侧栏可见性 ⌘ B
切换辅助侧栏可见性 ⌥ ⌘ B
切换面板可见性 ⌘ J
切换终端可见性 ⌃ `
查看资源管理器 ⇧ ⌘ E
查看搜索 ⇧ ⌘ F
查看调试 ⇧ ⌘ D
查看 GitHub Copilot 聊天 ⇧ ⌘ Space
编辑器
切分编辑器 ⌘ \
关闭编辑器 ⌘ W
选择单词 ⌘ D
选择所有的查找匹配项 ⇧ ⌘ L

键盘参考表