如何使用示例选择器来优化提示生成

在构建 AI 驱动的应用程序时,我们通常会使用示例选择器来选择哪些示例应包含在提示中。这是特别重要的,当我们面对大量示例时,需要一个有效的方法来进行筛选。示例选择器类正是负责这一任务的工具。

技术背景介绍

示例选择器的主要目标是从一组示例中,根据输入选择合适的示例。这对于生成更加精准和上下文相关的回复至关重要。LangChain 提供了多种类型的示例选择器,以满足不同的应用需求。

核心原理解析

以下是一个示例选择器的基本接口定义:

from abc import ABC, abstractmethod
from typing import Dict, List, Any

class BaseExampleSelector(ABC):
    """选择需要包含在提示中的示例的接口。"""

    @abstractmethod
    def select_examples(self, input_variables: Dict[str, str]) -> List[dict]:
        """根据输入选择要使用的示例。"""
        
    @abstractmethod
    def add_example(self, example: Dict[str, str]) -> Any:
        """添加新示例到存储中。"""

各个实现需要定义 select_examples 方法,该方法依据输入变量返回示例列表。

代码实现演示

我们将实现一个自定义的示例选择器,根据单词长度选择最佳示例。

from langchain_core.example_selectors.base import BaseExampleSelector

class CustomExampleSelector(BaseExampleSelector):
    def __init__(self, examples):
        self.examples = examples

    def add_example(self, example):
        self.examples.append(example)

    def select_examples(self, input_variables):
        # 假定输入变量中包含 'input' 键
        new_word = input_variables["input"]
        new_word_length = len(new_word)

        # 初始化变量以存储最佳匹配及其长度差异
        best_match = None
        smallest_diff = float("inf")

        # 遍历每个示例
        for example in self.examples:
            # 计算当前示例的长度差异
            current_diff = abs(len(example["input"]) - new_word_length)

            # 更新最佳匹配
            if current_diff < smallest_diff:
                smallest_diff = current_diff
                best_match = example

        return [best_match]

examples = [
    {"input": "hi", "output": "ciao"},
    {"input": "bye", "output": "arrivederci"},
    {"input": "soccer", "output": "calcio"},
]

example_selector = CustomExampleSelector(examples)

# 选择与 "okay" 长度最接近的示例
print(example_selector.select_examples({"input": "okay"}))  # [{'input': 'bye', 'output': 'arrivederci'}]

example_selector.add_example({"input": "hand", "output": "mano"})
print(example_selector.select_examples({"input": "okay"}))  # [{'input': 'hand', 'output': 'mano'}]

应用场景分析

此示例选择器适用于需要精确匹配示例长度的场景,比如翻译应用程序中的短语匹配。使用此方法可以有效地优化提示生成过程,提高生成结果的相关性。

实践建议

  1. 根据你的应用特点选择适合的示例选择器类型。
  2. 在添加新示例时,确保示例数据的多样性和覆盖率。
  3. 根据输入调整选择器逻辑,如基于语义相似性等。

如果遇到问题欢迎在评论区交流。

—END—

你可能感兴趣的:(c#,开发语言,python)