Skip to main content

Example Selectors

Example selectors allow dynamically choosing examples to include in prompts based on the input. This provides a way to tailor prompts to each specific input.

Use Cases​

Example selectors are commonly used in few-shot prompting for tasks like question answering and search.

  • In a question answering system, the selector can pick examples similar to the question to provide more useful context. For instance, if the question is about a person, the selector could pull in examples related to people.

  • In a search engine, the selector can choose examples related to the search query to help guide the model's response. If the query is about cooking, it could select cooking-related examples.

Creating an Example Selector​

To use an example selector, first create it and pass it your pool of examples:

from langchain.prompts import ExampleSelector

examples = [...]

selector = ExampleSelector(examples)

Then when generating a prompt, provide the selector to FewShotPromptTemplate instead of the full examples:

from langchain.prompts import FewShotPromptTemplate

prompt = FewShotPromptTemplate(
example_selector=selector,
# ...
)

This will dynamically choose examples each time the prompt is formatted.

SemanticSimilarityExampleSelector​

One useful built-in selector is SemanticSimilarityExampleSelector. This chooses the examples most similar to the input based on semantic search over embeddings.

For example:

from langchain.prompts import SemanticSimilarityExampleSelector
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS

selector = SemanticSimilarityExampleSelector(
examples,
OpenAIEmbeddings(),
FAISS()
)

The selector has parameters to control the number of examples and other settings.

Best Practices​

To use SemanticSimilarityExampleSelector effectively:

  • Structure your example dataset into logical groups based on topics. This allows the selector to return coherent, related examples.

  • Try different embedding models and tune the similarity threshold. Different embeddings work better for different tasks.

  • Index your dataset for efficient nearest neighbor search. Tools like FAISS are designed for this.

  • Balance example diversity with similarity. You may want to filter out examples that are too similar.

Custom Example Selectors​

For advanced use cases, you can create custom selectors by subclassing the base ExampleSelector class:

from langchain.prompts import ExampleSelector

class MySelector(ExampleSelector):
def select_examples(self, input):
# Custom selection logic
...

The key is implementing the select_examples method to return examples based on your own logic.

Conclusion​

Example selectors allow prompts to be dynamic and targeted. LangChain provides pre-built selectors and interfaces to create custom ones. Selectors are useful for tailoring prompts to specific inputs when you have a large pool of examples.