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 clasebar
, siguiendo los patrones vistos en otras subclases debaz
."
- 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"
- "Encuentra en todas partes donde se llama a la función
- Refactorización
- "Agrega un nuevo parámetro a la función
bar
y actualiza los usos"
- "Agrega un nuevo parámetro a la función
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:
{
"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.
{
"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
:
{
"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:
{
"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í:
{
"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.
{
"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.
{
"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:
{
"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.
{
"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
.
{
"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:
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í:
{
"reranker": {
"name": "voyage",
"params": {
"model": "rerank-lite-1",
"apiKey": "<VOYAGE_API_KEY>"
}
}
}
Cohere
Consulta la documentación de rerankers de Cohere aquí.
{
"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.
{
"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:
{
"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.
{
"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".