我想知道如何动态替换装饰器参数。 这是代码
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
这是你可以做到的,
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"))