您的功能请求是否与问题相关?请描述。
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。
3条答案
按热度按时间e3bfsja21#
我在我的PR中解决了这个问题,用于本地评估支持,但决定不继续进行PR:#7745
你可以拿我构建的东西,去掉llama.cpp的部分,保留generation_kwargs部分。
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的参数,并且在未来如果添加了任何其他提供商,它也将适用于他们。
t0ybt7op3#
让我们重新打开这个。我的意思不是在合并我的PR时自动关闭它,因为我的PR没有解决你所要求的100%。请自由地关注我在这里的帖子,以实现对Azure的新更改的支持:#7987(评论)