如何在类中动态更改Python装饰器值

问题描述 投票:0回答:1

我想知道如何动态替换装饰器参数。 这是代码

import openai
from langsmith.run_helpers import traceable
class LangSmithClass:
    def __init__(self, name):
        self.name = name  # Fixed the assignment of 'name'

    @traceable(run_type="llm", name="openai.ChatCompletion.create")
    def my_llm(self, *args: Any, **kwargs: Any) -> dict:
        return openai.ChatCompletion.create(*args, **kwargs)

    @traceable(run_type="chain")
    def my_chain(self, prompt: str) -> str:
        messages = [
            {
                "role": "system",
                "content": "You are an AI Assistant. ",
            },
            {"role": "user", "content": prompt},
        ]
        return self.my_llm(model="gpt-3.5-turbo", messages=messages)

    @traceable(run_type="chain", name='mybot')
    def my_chat_bot(self, text: str) -> str:
        generated = self.my_chain(text)
        return generated

LangSmithClass("ABC").my_chat_bot("how are you")

我想要的是将

name='mybot'
mybot
替换为
ABC
。假设如果我将 LangSmithClass("ABC") 更改为 LangSmithClass("XYZ"),那么我想将装饰器名称参数值更改为
XYZ
而不是
mybot

class python-decorators langchain
1个回答
0
投票

这是你可以做到的,

    import openai
    from langsmith.run_helpers import traceable
    from typing import Any

    class LangSmithClass:
        def __init__(self, name):
            self.name = name  

        def my_llm(self, *args: Any, **kwargs: Any) -> dict:
            return openai.ChatCompletion.create(*args, **kwargs)

        def my_chain(self, prompt: str) -> str:
            messages = [
                {
                    "role": "system",
                    "content": "You are an AI Assistant. ",
                },
                {"role": "user", "content": prompt},
            ]
            return self.my_llm(model="gpt-3.5-turbo", messages=messages)

        def my_chat_bot(self, text: str) -> str:
            generated = self.my_chain(text)
            return generated

        def dynamic_trace(self, run_type=None, name=None):
            def outer_wrapper(func):
                @traceable(run_type=run_type, name=name)
                def inner_wrapper(*args, **kwargs):
                    return func(*args, **kwargs)
                return inner_wrapper
            return outer_wrapper

        def call_my_chat_bot(self, text: str, run_type=None, name=None):
            decorated_func = self.dynamic_trace(run_type=run_type, name=name)(self.my_chat_bot)
            return decorated_func(text)

    # Example:
    obj = LangSmithClass("ABC")
    print(obj.call_my_chat_bot("how are you", run_type="chain", name="custom_bot"))

© www.soinside.com 2019 - 2024. All rights reserved.