haystack 为LLMEvaluator添加对AzureOpenAI的支持,

xzlaal3s  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(54)

您的功能请求是否与问题相关?请描述。

LLMEvaluator 目前仅支持 OpenAI ,如果我们也能通过 Azure 使用它与 OpenAI 模型,那就太好了。

描述您希望的解决方案

我希望能够在 Azure OpenAI 中使用评估器(例如 ContextRelevanceEvaluator(api='azure-openai') )
此外,我建议稍微修改 LLMEvaluator 的设计,以增加灵活性。
目前,参数 api_key=Secret.from_env_var("OPENAI_API_KEY") 迫使用户提供特定于 OpenAI 的环境变量,而其他生成器不会使用这些变量。
那么,我们可以尝试实现类似以下的功能:

@component
class LLMEvaluator:
    def __init__(
        self,
        instructions: str,
        ...
        api: str = "openai",
        generator_kwargs: Dict[str, Any] = ..., # instead of api_key
    ):
        ...
        self.generator = OpenAIGenerator(**generator_kwargs)

?
这样就不会强制用户在 LLMEvaluator 中提供任何特定于生成器的信息。它允许通过 generator_kwargs 将生成器可以接受的任何内容(例如 API 密钥、API 版本或 azure_deployment 在 Azure 的情况下)传递给生成器。
同时,如果用户没有传递任何内容,生成器仍然会在示例化过程中查找其所需的环境变量。
我认为 api_key 需要进入弃用周期才能被移除。也许我们可以将其更改为 api_key=Secret.from_env_var("OPENAI_API_KEY", strict=False) 直到被弃用,这样该变量就不需要用于其他生成器了。

描述您考虑过的替代方案

LLMEvaluator (及其所有子类)子类化为自定义组件

附加上下文

很高兴听到您的想法,也欢迎提供其他我没有考虑到的更好的解决方案。 :)
我现在有点忙于其他事情,但我可能会在未来几天内提交带有这个提议的 PR。

e3bfsja2

e3bfsja21#

我在我的PR中解决了这个问题,用于本地评估支持,但决定不继续进行PR:#7745
你可以拿我构建的东西,去掉llama.cpp的部分,保留generation_kwargs部分。

dldeef67

dldeef672#

在深入研究之后,Azure在其openai包中拥有自己的AzureOpenAI类。虽然其他一些服务使用openai api并允许我们重定向到他们的api(本地或托管),但对于Azure来说,似乎不再可能使用base_url: https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/migration
然而,我成功地将LLMEvaluators扩展以支持OpenAI的参数,并且在未来如果添加了任何其他提供商,它也将适用于他们。

t0ybt7op

t0ybt7op3#

让我们重新打开这个。我的意思不是在合并我的PR时自动关闭它,因为我的PR没有解决你所要求的100%。请自由地关注我在这里的帖子,以实现对Azure的新更改的支持:#7987(评论)

相关问题