# Select by similarity

This object selects examples based on similarity to the inputs. It does this by finding the examples with the embeddings that have the greatest cosine similarity with the inputs.

```python
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.prompts import FewShotPromptTemplate, PromptTemplate

example_prompt = PromptTemplate(
    input_variables=["input", "output"],
    template="Input: {input}\nOutput: {output}",
)

# Examples of a pretend task of creating antonyms.
examples = [
    {"input": "happy", "output": "sad"},
    {"input": "tall", "output": "short"},
    {"input": "energetic", "output": "lethargic"},
    {"input": "sunny", "output": "gloomy"},
    {"input": "windy", "output": "calm"},
]
```


```python
example_selector = SemanticSimilarityExampleSelector.from_examples(
    # The list of examples available to select from.
    examples,
    # The embedding class used to produce embeddings which are used to measure semantic similarity.
    OpenAIEmbeddings(),
    # The VectorStore class that is used to store the embeddings and do a similarity search over.
    Chroma,
    # The number of examples to produce.
    k=1
)
similar_prompt = FewShotPromptTemplate(
    # We provide an ExampleSelector instead of examples.
    example_selector=example_selector,
    example_prompt=example_prompt,
    prefix="Give the antonym of every input",
    suffix="Input: {adjective}\nOutput:",
    input_variables=["adjective"],
)
```

<CodeOutputBlock lang="python">

```
    Running Chroma using direct local API.
    Using DuckDB in-memory for database. Data will be transient.
```

</CodeOutputBlock>


```python
# Input is a feeling, so should select the happy/sad example
print(similar_prompt.format(adjective="worried"))
```

<CodeOutputBlock lang="python">

```
    Give the antonym of every input

    Input: happy
    Output: sad

    Input: worried
    Output:
```

</CodeOutputBlock>


```python
# Input is a measurement, so should select the tall/short example
print(similar_prompt.format(adjective="large"))
```

<CodeOutputBlock lang="python">

```
    Give the antonym of every input

    Input: tall
    Output: short

    Input: large
    Output:
```

</CodeOutputBlock>


```python
# You can add new examples to the SemanticSimilarityExampleSelector as well
similar_prompt.example_selector.add_example({"input": "enthusiastic", "output": "apathetic"})
print(similar_prompt.format(adjective="passionate"))
```

<CodeOutputBlock lang="python">

```
    Give the antonym of every input

    Input: enthusiastic
    Output: apathetic

    Input: passionate
    Output:
```

</CodeOutputBlock>
