Saltar al contenido principal

Recuperación del código base

Continue indexa tu código base para que pueda extraer automáticamente el contexto más relevante de todo tu espacio de trabajo. Esto se realiza mediante una combinación de recuperación basada en embeddings y búsqueda por palabras clave. Por defecto, todos los embeddings se calculan localmente con all-MiniLM-L6-v2 y se almacenan localmente en ~/.continue/index.

Actualmente, la función de recuperación del código base está disponible como los proveedores de contexto "codebase" y "folder". Puedes usarlos escribiendo @codebase o @folder en el cuadro de entrada y luego haciendo una pregunta. El contenido del cuadro de entrada se comparará con los embeddings del resto del código base (o carpeta) para determinar archivos relevantes.

Aquí hay algunos casos de uso comunes en los que puede ser útil:

  • Hacer preguntas generales sobre tu código base
    • "¿Cómo agrego un nuevo endpoint al servidor?"
    • "¿Usamos la función CodeLens de VS Code en algún lugar?"
    • "¿Hay algún código escrito para convertir HTML a markdown?"
  • Generar código usando muestras existentes como referencia
    • "Genera un nuevo componente React con un selector de fecha, utilizando los mismos patrones que los componentes existentes"
    • "Escribe un borrador de una aplicación CLI para este proyecto usando argparse de Python"
    • "Implementa el método foo en la clase bar, siguiendo los patrones vistos en otras subclases de baz."
  • Usa @folder para hacer preguntas sobre una carpeta específica, aumentando la probabilidad de resultados relevantes
    • "¿Cuál es el propósito principal de esta carpeta?"
    • "¿Cómo usamos la API CodeLens de VS Code?"
    • O cualquiera de los ejemplos anteriores, pero con @folder en lugar de @codebase

Aquí hay casos de uso en los que no es útil:

  • Cuando necesitas que el LLM vea literalmente todos los archivos en tu código base
    • "Encuentra en todas partes donde se llama a la función foo"
    • "Revisa nuestro código base y encuentra errores ortográficos"
  • Refactorización
    • "Agrega un nuevo parámetro a la función bar y actualiza los usos"

Configuración

Hay algunas opciones que te permiten configurar el comportamiento del proveedor de contexto de código base. Estas se pueden establecer en config.json y son las mismas para los proveedores de contexto de código base y carpeta:

~/.continue/config.json
{
"contextProviders": [
{
"name": "codebase",
"params": {
"nRetrieve": 25,
"nFinal": 5,
"useReranking": true
}
}
]
}

nRetrieve

Número de resultados a recuperar inicialmente de la base de datos vectorial (predeterminado: 25)

nFinal

Número final de resultados a usar después del reordenamiento (predeterminado: 5)

useReranking

Si usar o no el reordenamiento, lo que permitirá la selección inicial de nRetrieve resultados, y luego usará un LLM para seleccionar los nFinal resultados principales (predeterminado: true)

Proveedores de embeddings

También admitimos otros métodos de generación de embeddings, que se pueden configurar con la propiedad "embeddingsProvider" en config.json. Actualmente tenemos soporte incorporado para los siguientes proveedores:

Transformers.js (actualmente solo VS Code)

Transformers.js es un puerto en JavaScript de la popular biblioteca Transformers. Permite que los embeddings se calculen localmente en el navegador (o en este caso dentro de la barra lateral de tu IDE). El modelo usado es all-MiniLM-L6-v2, que se envía junto con la extensión Continue y genera embeddings de tamaño 384.

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "transformers.js"
}
}

Ollama

Ollama es la forma más fácil de comenzar a trabajar con modelos de lenguaje de código abierto. Proporciona una API REST completamente local para trabajar con LLMs, incluida la generación de embeddings. Recomendamos usar un modelo de embeddings como nomic-embed-text:

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "ollama",
"model": "nomic-embed-text",
"apiBase": "http://localhost:11434" // opcional, predeterminado a http://localhost:11434
}
}

Text Embeddings Inference

Hugging Face Text Embeddings Inference te permite alojar tu propio endpoint de embeddings. Puedes configurar embeddings para usar tu endpoint de la siguiente manera:

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "huggingface-tei",
"apiBase": "http://localhost:8080"
}
}

Voyage AI

Voyage AI ofrece los mejores embeddings para código con su modelo voyage-code-2. Después de obtener una clave API de aquí, puedes configurarlo así:

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "openai",
"model": "voyage-code-2",
"apiBase": "https://api.voyageai.com/v1/",
"apiKey": "<VOYAGE_API_KEY>"
}
}

OpenAI

Los embeddings de OpenAI son embeddings de alta dimensión que ofrecen un gran rendimiento tanto en texto como en código.

Configuración para el modelo text-embedding-3-small

Este es el predeterminado. El modelo text-embedding-3-small ofrece un equilibrio excepcional entre rendimiento y eficiencia, adecuado para una gama versátil de aplicaciones.

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "openai",
"model": "text-embedding-3-small",
"apiBase": "<tu endpoint compatible con OpenAI>", // opcional, predeterminado a la API de OpenAI
"apiKey": "<OPENAI_API_KEY>"
}
}

Configuración para el modelo text-embedding-3-large

Para aquellos que requieren el nivel más alto de detalle y precisión en los embeddings, el modelo text-embedding-3-large es la mejor opción.

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "openai",
"model": "text-embedding-3-large",
"apiBase": "<tu endpoint compatible con OpenAI>", // opcional, predeterminado a la API de OpenAI
"apiKey": "<OPENAI_API_KEY>"
}
}

Configuración del modelo heredado

Para ciertos escenarios, aún puedes encontrar relevante el modelo text-embedding-ada-002. A continuación se muestra el ejemplo de configuración:

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "openai",
"model": "text-embedding-ada-002",
"apiBase": "<tu endpoint compatible con OpenAI>", // opcional, predeterminado a la API de OpenAI
"apiKey": "<OPENAI_API_KEY>"
}
}

Cohere

Configuración para el modelo embed-english-v3.0. Este es el predeterminado.

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "cohere",
"model": "embed-english-v3.0",
"apiKey": "<COHERE_API_KEY>"
}
}

Consulta los embeddings de Cohere para modelos disponibles. Solo se admiten modelos de embeddings v3 y superiores.

Gemini

El modelo de Text Embedding de Gemini está optimizado para crear embeddings con 768 dimensiones para texto de hasta 2,048 tokens.

A partir de mayo de 2024, el único modelo de embeddings disponible de Gemini es text-embedding-004.

~/.continue/config.json
{
"embeddingsProvider": {
"provider": "gemini",
"apiKey": "<GEMINI_API_KEY>"
}
}

Escritura de un EmbeddingsProvider personalizado

Si tienes tu propia API capaz de generar embeddings, Continue facilita la escritura de un EmbeddingsProvider personalizado. Todo lo que tienes que hacer es escribir una función que convierta cadenas en matrices de números y agregar esto a tu configuración en config.ts. Aquí hay un ejemplo:

~/.continue/config.ts
export function modifyConfig(config: Config): Config {
config.embeddingsProvider = {
embed: (chunks: string[]) => {
return Promise.all(
chunks.map(async (chunk) => {
const response = await fetch("https://example.com/embeddings", {
method: "POST",
body: JSON.stringify({ text: chunk }),
});
const data = await response.json();
return data.embedding;
})
);
},
};

return config;
}

Proveedores de reranking

El reranker juega un papel crucial en la refinación de los resultados recuperados de tu código base. Procesa el conjunto inicial de resultados obtenidos a través de la recuperación basada en embeddings, mejorando su relevancia y precisión para tus consultas.

Continue ofrece varias opciones de reranking: cohere, voyage, llm, huggingface-tei, y free-trial, que se pueden configurar en config.json.

Voyage AI

Voyage AI ofrece el mejor modelo de reranking para código con su modelo rerank-lite-1. Después de obtener una clave API de aquí, puedes configurarlo así:

~/.continue/config.json
{
"reranker": {
"name": "voyage",
"params": {
"model": "rerank-lite-1",
"apiKey": "<VOYAGE_API_KEY>"
}
}
}

Cohere

Consulta la documentación de rerankers de Cohere aquí.

~/.continue/config.json
{
"reranker": {
"name": "cohere",
"params": {
"model": "rerank-english-v3.0",
"apiKey": "<COHERE_API_KEY>"
}
}
}

LLM

Si solo tienes acceso a un único LLM, puedes usarlo como reranker. Esto se desaconseja a menos que sea realmente necesario, ya que será mucho más costoso y aún menos preciso que cualquiera de los modelos anteriores entrenados específicamente para la tarea. Ten en cuenta que esto no funcionará si estás utilizando un modelo local, por ejemplo con Ollama, debido a la necesidad de realizar demasiadas solicitudes paralelas.

~/.continue/config.json
{
"reranker": {
"name": "llm",
"params": {
"modelTitle": "My Model Title"
}
}
}

El campo "modelTitle" debe coincidir con uno de los modelos en tu array "models" en config.json.

Text Embeddings Inference

Hugging Face Text Embeddings Inference te permite alojar tu propio endpoint de reranking. Puedes configurar tu reranker de la siguiente manera:

~/.continue/config.json
{
"reranker": {
"name": "huggingface-tei",
"params": {
"apiBase": "http://localhost:8080",
"truncate": true,
"truncation_direction": "Right"
}
}
}

Prueba gratuita (Voyage AI)

Continue ofrece una prueba gratuita del modelo de reranking de Voyage AI.

~/.continue/config.json
{
"reranker": {
"name": "free-trial"
}
}

Ignorar archivos durante el indexado

Continue respeta los archivos .gitignore para determinar qué archivos no deben ser indexados. Si deseas excluir archivos adicionales, puedes agregarlos a un archivo .continueignore, que sigue las mismas reglas que .gitignore.

Si deseas ver exactamente qué archivos ha indexado Continue, los metadatos se almacenan en ~/.continue/index/index.sqlite. Puedes usar una herramienta como DB Browser for SQLite para ver la tabla tag_catalog dentro de este archivo.

Si necesitas forzar una actualización del índice, recarga la ventana de VS Code con cmd/ctrl + shift + p + "Recargar ventana".