• Featured post

C# Task async programming (TAP) and parallel code

The core for asynchronous programming are the objects Task and Task<T>. Both of them are compatible with the keywords async and await.

First of all we need to identify if the code’s I/O-bound or CPU-bound.

  • the code’s limited for external operations and waits for something a lot of time. Examples of this are DDBB calls, or a server’s response. In this case we have to use async/await to free the thread while we wait
  • the code does a CPU-intensive operation. Then we move the work to another thread using Task.Run() so we don’t block the main thread.

async code vs parallel code

(!) Asynchronous code is not the same as parallel code (!)

  • In async code you are trying to make your threads do as little work as possible. This will keep your app responsibe, capable to serve many requests at once and scale well.
  • In parallel code you do the opposite. You use and keep a hold on a thread to do CPU-intensive calculations

async code

The importante of async programming is that you choose when to wait on a task. This way, you can start other tasks concurrently

In async code, one single thread can start the next task concurrently before the previous one completes.
(!) async code doesn’t cause additional threads to be created because an async method doesn’t run on its own thread. (!) It runs on the current synchronization context and uses time on the thread only when the method is active.

parallel code

For parallelism you need multiple threads where each thread executes a task, and all of those tasks are executed at the same time

Read More

Install Poetry Script Globally

# only the first time we install something 
pipx ensurepath
# close and open terminal again

# build, install and run to make sure it works
poetry build
poetry install
poetry run

# install localy with pipx
pipx install .

# now we're able to run it from anywhere
file-enlarger

in this case we invoke it as file-enlarger as the .toml declares it as such

[tool.poetry.scripts]
file-enlarger = "FileEnlarger:main"

Broken pipx?

Install your program with

# install
py -3.14 -m pip install --user .

# find installation to add to PATH
py -3.14 -m pip show fileenlarger

# add it to PATH; logout; restart console
file-enlarger

This will install it in your local /scripts or /Roaming folder. Remember to add it to your path. In this case it’s in

C:\Users\{user}\AppData\Local\Python\pythoncore-3.14-64\Scripts
C:\Users\{user}\AppData\Roaming\Python\Python314\site-packages

AI (my own) Prompt Templates

Github Copilot IDE

Modificar código

– solution proposal x

– requirements Please before you do anything I want you to read and understand [PLANNING]. When coding please take [RESTRICTIONS] into account

[PLANNING] I want you to think deeply about my problem and proposed solution before doing any change. First of all:

  • analyse my code
  • read my problem
  • read my proposed solution
  • check its viability
  • make an index and a plan of what you’re going to do
  • follow and execute it
  • once you’re done, please go back and check that the code changes you made compile, make sense and solve the problem I have

[RESTRICTIONS]

  • don’t use var instead of string
  • don’t use arrays. use List instead

Standalone Copilot

Aprender sobre [TEMA]

Estoy aprendiendo sobre [TEMA]. Investiga fuentes de datos fiables y hazme primero un resumen de que es. Quiero saber para que sirve y que problema soluciona. Luego haz varias búsquedas y agrega los resultados para decirme que es importante o que debo saber sobre [TEMA] para poder comenzar a trabajar con ello. Por último hazme un plan paso a paso de un par de días de los puntos que tengo que estudiar o aprender para poder trabajar bien con [TEMA]

[TEMA]
LangChain

Análisis inicial [PROPUESTA] laboral

Estoy haciendo un trabajo de investigación y análisis inicial previo a un proyecto. Como analista senior quiero que me ayudes a analizar la [PROPUESTA]. Primero razona profundamente e investiga y crea tu propia solución. Asegúrate de que has investigado suficientes fuentes diferentes y que es viable. Luego, una vez ya has creado tu propia solución, valida y critica la mía, comparando ambas soluciones. Es importante que no compares las soluciones hasta que hayas terminado de componer la tuya propia.

Dime que puedo mejorar, posibles puntos de conflicto, contradicciones, donde me equivoco y que ideas mías no son viables o son mejorables.

Hay que tener en cuenta que [RESTRICCIONES] son OBLIGATORIAS y son necesarias tenerlas en cuenta y NO se pueden modificar porque es lo que el cliente ha pedido explícitamente. Del mismo modo [CONCESIONES] son puntos donde se pueden ceder o puntos que aportan algo de libertad a [PROPUESTA]

[PROPUESTA] Es un proyecto donde quieren dar dos inputs: un país europeo y una moneda. (ejemplo: España, peseta). El programa debe mediante usar una API de x para analizar el historico de la moneda local vs el euro. Investiga en profundidad, analiza, piensa paso a paso y ayúdame a saber como trabajar con esta APIs en su conjunto y como hacer la comparación.

[RESTRICCIONES]

  1. es CRITICO para el proyecto que el valor de la moneda sea el historico real.
  2. He pensado en diseñar varios algoritmos de scrapping con distintas APIs para sacar más de una fuente de datos
  3. Tiene que ser aplicable a cualquier país - de momento de Europa occidental

[CONCESIONES]

  1. el tiempo de scrapping puede ser largo
  2. tiene que haber gestión importante de fallos intermedios
    1. reintentos automaticos
    2. persistencia de estado

Análisis [PROYECTO] personal (iterar y mejorar ideas)

Estoy haciendo un trabajo de investigación y análisis inicial previo a un proyecto personal. Como analista senior quiero que me ayudes a analizar [PROYECTO]. Primero razona profundamente e investiga y crea tu propia solución. Asegúrate de que has investigado suficientes fuentes diferentes y que es viable. Luego, una vez ya has creado tu propia solución, valida y critica la mía, comparando ambas soluciones. Es importante que no compares las soluciones hasta que hayas terminado de componer la tuya propia.

Dime que puedo mejorar, posibles puntos de conflicto, contradicciones, donde me equivoco y que ideas mías no son viables o son mejorables.

El objetivo final de este [PROYECTO] personal es aprender diferentes técnicas y tecnologías y seguir mejorando como programador.

[PROYECTO] Quiero practicar con Azure Functions. Tengo una cuenta de spotify que me da miedo que me quiten acceso ya que tengo muchos años de música. Quiero crear una Azure Function que se conecte a la API de Spotify y me haga un backup de las listas que tengo personales, albums guardados y artistas que sigo. Quiero que lo almacene bien en un fichero o una base de datos de Azure.

AI Markdown

Formato ingestión textos (MD)

Se usa markdown como formato estandar de entrada a un LLM. Se utiliza poqrue la sintaxis que tiene lo hace bastante más fácil de parsear para los LLMs que si fuera JSON o XML.

Ejemplo en md

# This is a heading

Mismo ejemplo en XML

<heading level=”1”>This is a Heading</heading>

Se utiliza sobre otros como JSON porque reduce bastante las etiquetas, que a un LLM no le aportan.

Reference(s)

https://developer.webex.com/blog/boosting-ai-performance-the-power-of-llm-friendly-content-in-markdown

AI Prompt Engineering

Preguntar por contexto

Si tenemos un caso de uso complejo, podemos hacer que por defecto el LLM se sienta más inclinado a pedir aclaraciones si añadimos algo como lo siguiente:

If you need more context, please specify what would help you to make a better decision

Zero-Shot / Few-Shot

Clasificación de un prompt en función de los ejemplos que incluya

  • zero-shot - prompt donde no introduces ningún ejemplo. Máxima creatividad, cero fiabilidad.
  • one-shot - prompt con un ejemplo. Lo mínimo para obtener buenos resultados.
  • few-shots - prompts con >1 ejemplo. Cuantos más ejemplos, más inferirá el LLM de ellos, por lo que tendrá menos creatividad pero más fiabilidad.

Multi-Turn

(to do: investigar)

Chain of Thought (CoT)

Evita que los LLMs salten sobre el paso de razonamiento y logra que vayan paso a paso.

En vez de decirle

Cual es la mejor arquitectura para hacer x

Usar

Piensa paso a paso sobre las mejores arquitecturas para hacer x, explicando los pros y contras de cada una y entonces recomiéndame la mejor

Prewarming

Técnica para mejorar resultados con la IA para darle un mejor contexto.

Primero le pedimos

Dame 5 consejos como experto de marketing para nombrar zapatillas deportivas

Una vez tenemos estos consejos, los utilizamos como sigue, aprovechando la ventana de contexto

Siguiente estos consejos, dame 5 nombres comerciales para zapatillas deportivas

External guides

Otra opción parecida a la anterior es buscar previamente nosotros por nuestra cuenta (o si tenemos algunas reglas como los SOLID principles, que queremos cumplir) y pedirle que se base en estos.

Siguiendo estas reglas, dame 5 nombres comerciales para zapatillas deportivas. Reglas: (añadir golden reglas naming)

CRAFT Prompt Structure

Para prompts más complejos con requisitos más específicos.

Estructura de prompts:

  • Contexto: dar background apropiado
  • Rol: el que debe tomar la IA
  • Acción: instrucciones claras
  • Format: especificar el output deseado
  • Target: audiencia

Ejemplo:

## Contexto
Estoy preparando una presentación sobre el efecto del cambio climático en los próximos años
 
## Rol
Eres un analista senior
 
## Accion
Analizame los ultimos estudios disponibles y fuentes de informacion fiables y verificables con reputacion y resume el impacto del cambio climatico en los proximos años relacionado al tiempo ambiental

## Formato
Haz un powerpoint

## Target
un comité de expertos

Especificar formato de respuesta (generar JSON)

Según lo que queramos, podemos pedir formatos específicos como JSON o YAML. Para este approach puede ser útil pasar la respuesta devuelta por un validador de JSON o YAML antes de procesar nada.

Dame 5 nombres comerciales para unas zapatillas deportivas.  
Sigue las siguientes reglas:
* Responde únicamente en formato JSON
* El formato JSON tiene que seguir la siguiente [ESTRUCTURA]
* La respuesta se parseará con json.loads(), por lo que asegúrate de que es JSON válido
* No incluyas símbolos backtick como por ejemplo ` 

[ESTRUCTURA]
[
  {
    "Product name": "product name here",
    "Product description": "description here"
  }
]

Comparar contra su propia solución

A veces puede ser útil darle tiempo para pensar y que lo intente solucionar él primero, y vea si su solución es la misma que la nuestra

Primero intenta resolver [PROBLEMA] por tu propia cuenta. Después, compara tu solución contra mi [SOLUCION PROPUESTA]. Dime si lo resolverías del mismo modo o que es lo que mejorarías y/o cambiarías. No juzgues ni compares contra [SOLUCION PROPUESTA] hasta que no lo hayas resuelto por tí mismo. 

[PROBLEMA]
problema goes here

[SOLUCION PROPUESTA]
mi solucion goes here

Auto-evaluación

Primero le damos un prompt de lo que queremos hacer

 Dame un programa en Python que haga "Hello World"

Luego una vez nos ha dado la solución le hacemos reflexionar iterativamente hasta que no proponga mejoras

Dada la respuesta anterior haz autocrítica y mira si se puede mejorar alguna parte. Si no encuentras ninguna mejora sustancial prefiero que me lo digas antes de que propongas soluciones sin sentido.

AI NLP

Comprende técnicas como sentiment analysis para saber si el tono de un texto es positivo o negativo. Para entrenar al modelo se le pasa un gran número de textos y se le dicen si son positivos o negativos.

También llamado Natural Language Understanding (NLU)

Otras técnicas de NLP son:

  • speech-to-text o text-to-speech conversion
  • extracción de entidades de un texto (lugares, personas, etc.)
  • text classification (asignar docs a categorías específicas)
  • language detection
  • language translation
  • question answering

Tokenization concepts

Los siguientes son conceptos que se aplican a al tokenizacion, dependiendo del problema especifico de NLP que tengamos que resolver.

Text normalization

Esto se hace anets de generar los tokens. Se normaliza el texto removiendo los signos de puntuacion y cambiando todas las palabras a lower-case.

Mr Banks has worked in many banks.

Según el análisis que quieras hacer, puedes querer diferenciar entre Mr banks y banks. También puedes querer que banks sea un token diferente a banks., ya que este último añade como información que es el final de la frase.

Stop words removal

Stop words son palabras que añaden poco valor semántico.
Ejemplo: the, a, it.

n-grams

Multi-term frases como I have o he walked. Una frase compuesta por una unica palabra es un unigram. Si se compone de dos palabras es un bi-gram. Con tres es un tri-gram, etc.

Steaming

Técnica para consolidar palabras que tengan la misma raíz. Mediante esta técnica las palabras power, powered y powerful se consideran como el mismo token.

AI Attack Vectors

Adversarial examples (perturbaciones imperceptibles)

Son imágenes donde matemáticamente se modifica el ruido propio de la imagen de manera muy precisa, para que el modelo la clasifique mal. A ojo humano la imagen parecerá idéntica a la original ya que la perturbación del ruido es mínima, pero no para el modelo que la procese.

Backdoor attacks (triggers)

Ataques donde se entrena al modelo para que responda de forma específica ante un trigger visual, ignorando el contenido de la imagen.

Ejemplo: entrenamos a un modelo con imágenes de un perro con un sticker rojo en la frente y lo etiquetamos como “gato”.
Por inferencia, cualquier imagen que tenga ese mismo sticker rojo, será identificado como “gato”.

Advanced Copilot Features

Agent Mode

Sirve para especificar una task a alto nivel. La IA crea un plan, hace ediciones de código, ejecuta comandos, invoca herramientas y aplica cambios a lo largo de tu codebase. Monitorea o construye resultados, unit tests e itera según se necesita.

A contrario del modo Conversación, el modo agente no para después de dar una respuesta. Se sigue ejecutando y refinando hasta que se consigue el objetivo del prompt o se necesita más input.

Selective Context

example - access agents with @

@workspace I need to create a Dockerfile for this project, can you generate one that will help me package it?

Reference(s)

https://learn.microsoft.com/en-us/visualstudio/ide/copilot-agent-mode?view=visualstudio

AI Base Knowledge

LLM (Large Language Model)

Los LLMs son entrenados para generar predicciones de texto basadas en prompts. El truco está en que el modelo entienda la relación semántica entre palabras, y qué palabras de una secuencia son las que tienen más probabilidades de influir en la siguiente; el modelo usa esto para predecir cual es la siguiente palabra más probable en la secuencia.

Un LLM no tiene “memoria” como tal. Las conversaciones como tal no existen para ellos. Cada input de una conversación contiene todo lo que se ha hablado antes.

Al igual que tenemos LLMs, también existen SLMs (small language models). La diferencia se basa en el volumen de datos con el que han sido entrenados y en el número de variables.

Tokenization

El vocabulario de los LLMs se basa en cientos de miles de tokens, los cuales se basan en graaaandes volúmenes de datos de entrenamiento.

Los tokens se componen de palabras (perro, gato) pero también de partículas (“in” de “innecesario” o de “incomprensible”), puntuación (“casa” y “casa.” son tokens diferentes) y otras secuencias de caracteres.

Ejemplo de tokenization:

  • I (1)
  • heard (2)
  • a (3)
  • dog (4)
  • bark (5)
  • at (6)
  • a (3) (already assigned before)
  • tree (8)

Cuantos más datos de entreno, más tokens y más vocabulario tendrá.

Transforming tokens with a transformer

Ahora que tenemos una serie de tokens con un id único. Tenemos que relacionarlos entre ellos.

Para esto, le asignamos a cada token un vector. Un vector es una lista de números con múltiples dimensiones.
Un ejemplo de vector puede ser [0.25, 0.88, -0.47, 0.91]

Una vez tenemos inicializado este vector con valores aleatorios, utilizamos las dimensiones del vector para hacer un encoding lingüístico y asignarles el valor semántico del token (que significa y como se relaciona con otros tokens).

Because this new vectors have semantic values embedded in them, we call them embeddings

Transformer model

(tampoco quiero entrar en demasiado detalle).

Los vectores se generan mediante ML usando modelos especiales que se llaman embedding models. Estos se encargan de traducir raw data en listas de números.

El transformer model es el que se encarga de hacer el embedding, que es asignar ese valor semántico al vector inicializado.

Se compone de:

  • Un encoder block - crea los embeddings aplicando una técnica llamada attention. La attention layer examina cada token y determina como es influenciado por los tokens alrededor suyo. Los resultados de la attention layer se introducen a una neural network conectada para conseguir la mejor representación vectorial.

La attention layer establece como el modelo decide que tokens son más relevantes para entender el contexto. Por ejemplo, el token casa puede recibir más atención si el modelo detecta que es clave en la frase.

  • Un decoder usa los embeddings calculados por el encoder para determinar cual es el siguiente token más probable de aparecer en la secuencia, iniciada por el prompt.

Embedding

Un embedding es una representación numérica de datos en un espacio vectorial. De esta forma los modelos de IA pueden operar sobre datos no estructurados (texto o imágenes).

Los vectores de cada palabra o documento están diseñados para capturar el significado semántico del contenido.

  • perro estará cerca de mascota
  • contrato estará lejos de playa

Ventana de contexto (Context Window)

La ventana de contexto es el limite de memoria que tiene un LLM. Determina cuánto de la conversación actual puede “mantener en memoria” el modelo.

Si la ventana es suficiente, el modelo podrá mantener la totalidad de la conversación en memoria, pero si nos pasamos del límite, el modelo comenzará a olvidarse de las primeras partes de la conversación, y comenzará a dar respuestas más vagas.

Vector vs SQL databases

El problema con las BBDD típicas es que solo buscan matches exactos. Si yo busco por coche solo me sacará las entradas que contengan coche.

En cambio, como las BBDD de vectores pueden interpretar la semántica de las palabras mediante los vectores, si busco por coche puede sacarme valores como sedán, SUV, Land Rover, etc.


AI Agents

Un agente es un programa de SW el cual usa IA para razonar y actuar de forma (semi)autónoma usando las herramientas proporcionadas.

Se componen de tres elementos:

  • Un LLM: es el cerebro
  • Instrucciones: Un system prompt que define el rol y el comportamiento del agente
  • Herramientas: el agente las utilizará para interactuar con el mundo. Estas pueden incluir:
    • Knowledge tools que le den acceso a información (como BBDD o search engines)
    • Action tools que permitan al agente ejecutar tasks (como enviar emails)

ejemplo: un programa (agente) que ayude a migrar código de Java a C#

  1. el user sube un archivo .java
  2. el agente analiza el código y decide que tools usar
  3. decide que necesita consultar una BBDD de patrones
  4. llama a una tool que accede a esa BBDD
  5. genera el código equivalente en C#
  6. lo entrega al usuario final y guarda el caso para futuros usos

Prompts

System prompt

Definidos por la app que usa el modelo. Se utilizan para definir el comportamiento y el tono del modelo, y cualquier otra restricción a la que se deba adherir.

You’re a helpful assistant that responds in a cheerful, friendly manner

User prompt

Dados por el usuario, o en casos puede que una aplicación, requieren de una respuesta a una pregunta o instrucción.

Summarize the key considerations for adopting gen AI. Format the summary as no more than six bullet points with a professional tone

Customizar modelos (Data Grounding - RAG/Fine Tuning)

El objetivo de customizar los modelos es mejorar aspectos de su performance, calidad y/o seguridad de sus respuestas.

Data Grounding

Proceso de enriquecer una respuesta generada por IA con datos externos o específicos para mejorar su calidad y/o seguridad de sus respuestas. Asegura que el output del modelo está alineado con datos factuales, contextuales y que son confiables.

Data Grounding no es una técnica, es el objetivo.

Para responder al prompt la IA no se basará sólo y únicamente en los datos de su entrenamiento, si no que se le proporciona información adicional (documentos, BBDD, APIs, etc.) para que sus respuestas estén basadas en datos reales y actualizados y no se los invente ni alucine.

RAG (Retrieval Augmented Generation)

Técnica específica de data grounding. Enriquece el conocimiento de un modelo conectándolo a bases de conocimiento externas.

En lugar de confiar solo en el conocimiento entrenado del modelo, busca datos relevantes en tiempo eral y los usa como contexto para generar la respuesta. Por ej: BBDD propietarias, documentos internos de la compañía…

Se usa:

  • cuando se necesita exactitud basada en datos reales
  • cuando el modelo no tiene conocimiento actualizado
  • cuando trabajas con documentos privados o corporativos

Ejemplo:

  • si le pregunto a un asistente cualquier ¿Cuánto dinero puedo pedir en gastos de desplazamiento?, seguramente me responderá que varía según mi empresa
  • si el mismo modelo se construye en una app, la cual tiene la documentación de la empresa como RAG, el modelo irá al apartado correspondiente y lo consultará por mí, dándome como respuesta puedes pedir hasta x, según la documentación y
Cuando usar RAG
  • Cuando necesites respuestas basadas en información muy reciente (hoy, news, current stock prices)
  • Cuando necesites información de fuentes de datos privadas o propietarias (internal company policies, support logs)
  • Cuando quieras que la IA cite sus fuentes

Fine-tuning

Fine tuning es coger un modelo pre-entrenado y especializarlo todavía más con datasets específicos. Esto adapta el modelo para un caso o dominio concreto.

Cuando usar Fine-tuning
  • Cuando necesites que el LLM adopte un estilo, tono o persona específica (ej: hablar como Shakespeare).
  • Cuando necesites que el LLM se profesionalice y responda con jargon de un dominio muy específico (dar soporte médico o legal).

Tips RAG / Fine-Tuning

¿Necesitas datos up-to-the-minute o acceso a datos privados? - Comenzar con RAG. Es más rápido de implementar y necesita menos datos que fine-tuning.

¿Necesitas que la IA hable/escriba en un estilo muy específico o que entienda un nicho de manera profunda? - Hacer fine-tuning. Ayuda al modelo a aprender patrones y estilos que solamente con RAG son muy difíciles de capturar.

¿Necesitas hacer tareas muy complejas que requieren datos específicos / actualizados y un conocimiento profundo? - Hacer ambos (Fine-tuning+RAG).

Evaluar resultados

Algunos indicadores para evaluar la calidad de estos conceptos son:

  • Groundedness: measures how consistent the response is with respect to the retrieved context.
  • Relevance: measures how relevant the response is with respect to the query.
  • Fluency: measures natural language quality and readability.
  • Coherence: measures logical consistency and flow of responses.
  • Content safety: comprehensive assessment of various safety concerns.

Reference(s)

https://medium.com/data-science-collective/genai-power-plays-rag-vs-fine-tuning-vs-grounding-58bee7e285fc https://medium.com/@tahirbalarabe2/understanding-llm-context-windows-tokens-attention-and-challenges-c98e140f174d
https://generativeai.pub/vector-databases-a-beginners-first-step-into-searching-by-meaning-bcb9693dc39b

Prompt Engineering

Regla de las 4 s

  • Single: centrar el prompt en una única tarea o pregunta bien definida. Necesita claridad
  • Specific: las instrucciones deben ser explícitas y detalladas.
  • Short: mantener las solicitudes concisas y al grano
  • Surround: dar un contexto enriquecido. adaptar los ejemplos y el contexto que demos.

Proporcionar claridad

Ser específico y centrarse en una única cosa.

Escribe una funcion de python para filtrar y devolver números pares de una lista determinada

Proporcionar suficiente contexto con detalles

Una forma con copilot seria establecer comentarios en el top de nuestra clase especificando que es lo que queremos hacer

# write a simple flas app that returns...
# create a function that takes a list of numbers and returns...
# create a sample list of numbers
# create...

# start coding here

(!) Copilot usa las pestañas abiertas paralelas en el editor de código para obtener más contexto (!)

Iteración, iteración e iteración

Si el primer output no es perfecto, ¡no empezar de cero! Borra el output, enriquece el prompt con más detalles y vuelve a intentarlo. Este enfoque lleva a código de alta calidad.

Zero shot / One shot / Few shots

Es importante dar ejemplos y aumenta mucho la calidad del código. Se puede hacer mediante comentarios

# Example: convert fahrenheit to celsius
def fahrenheit_to_celsios(fahrenheit):
	celsius = (fahrenheit - 32) * 5/9
	return celsius
	
# I need now a function to convert celsius to fahrenheit

Roles

Se le pueden asignar roles para que se centre en un aspecto

Actua como experto en ciberseguridad. Crea una funcion de validacion de contraseñas que compruebe si hay vulnerabilidades. Sigue directrices OWASP

Actua como experto en optimizacion del rendimiento. Refactoriza este algoritmo para controlar grandes conjuntos de datos de forma eficaz

Actua como especialista en pruebas. Crea pruebas unitarias completas para este módulo de procesamiento de pagos

Tipos de tareas que admite Github Copilot

La ventana de contexto de copilot actualmente es de 200-500 líneas de código (4000 tokens)

  1. Preguntas directas: ¿Como implemento un algoritmo de ordenacion rapida en Python?
  2. Solicitudes relacionadas con codigo: Corrija este error en mi codigo; Explique este fragmetno de codigo
  3. Consultas abiertas: ¿Cuales son los procedimientos recomendados para escribir codigo limpio?
  4. Solicitudes contextuales: Esta es una parte de mi codigo, ¿sugiéreme mejoras?

Interact with Github Copilot

Inline Chat

  1. Seleccionar el código para la query
  2. alt + ç
  3. hacer la pregunta

Algunos comandos útiles para inline chat son

  • /doc - añade comentarios al código
  • /explain - conseguir explicaciones sobre código
  • /fix - propose fixes for problems in the selected code
  • /generate - generar código para responder a una pregunta específica
  • /optimize - analizar y optimizar código seleccionado
  • /tests - generates unit tests for the selected code
  • /comment - converts comments into code snippets
  • /suggest - offer code suggestions based on the current context

Comments to code

You write a comment and the function name/input and when you hit Enter copilot completes with code

# function to iterate all prompts and print them
def iterate_and_print(prompts):

then copilot completes it to this

# function to iterate all prompts and print them
def iterate_and_print(prompts):
    for idx, prompt in enumerate(prompts):
        var_name = chr(ord('A') + idx)
        print(f"Prompt {var_name}:\n{prompt}\n")

Copilot chat

Comandos compatibles con contexto #

# guia a copilot a archivos especificos

genera una funcion para quitar un elemento de mi cesta en #BasketService.cs

De todos modos copilot mete en contexto todas las pestañas que tienes abiertas.

Comandos de barra diagonal /

para ver todos los comandos escribe /

  • /explain #BasketService.cs - obtener una explicacion del archivo
  • /fix #OrderService.cs - sugerir correcciones para problemas
  • /optimize - optimiza código
  • /test #UserService.cs - generar pruebas unitarias

Sugerencias en texto gris

alt + / - iniciar chat en linea para formular preguntas sobre codigo seleccionado alt + , - desencadenar finalizacion con copilot recorrer las finalizaciones

  • alt + . - siguiente
  • alt + , anterior

Uso de agentes

@workspace

Permite a Copilot comprender un contexto más amplio sobre los projectos y configuraciones

  • útil para hacer preguntas a Copilot sobre todo el proyecto
  • útil para generar código que encaje en todo el proyecto, usando referencias del mismo
    @workspace where is the function for GetMetadata?
    

smart action /new

Se puede usar la siguiente smart action para generar

@terminal

Agente útil para preguntas sobre CLI

Through secondary menu

  1. Select the code you want to interact with
  2. right click
  3. acciones de copilot > whichever one you want

    Inline suggestions

    As you type copilot offers real-time completions

    • To accept a suggestion - Tab key
    • To reject a suggestion - keep typing or Esc key

Command palette

Quick access to various functions (no me funciona)

  1. Press Ctrl+Shift+P
  2. Enter Copilot to see commands
  3. Select an action

    Extensiones de Github Copilot

    Buscar o mirar extrensiones compatibles en Github Marketplace