跳到内容

行为定制

所有 Vanna 函数都继承自 VannaBase 类。这是一个抽象基类,为所有 Vanna 函数提供基本功能。根据您选择的具体配置,实现代码位于继承自该基类的类中。

您可以选择通过创建直接继承自 VannaBase 或继承自其子类的新类来定制 Vanna 的行为。如果您想改变特定函数的行为或添加新功能,这将非常有用。

类实例化

这是一个示例,展示了当配置使用 OpenAI API 和 ChromaDB 向量存储时如何实例化该类。

要定制具体的行为,您可以在实例化 MyVanna 类时覆盖 基类 中的任何方法。

from vanna.openai.openai_chat import OpenAI_Chat
from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore

class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        OpenAI_Chat.__init__(self, config=config)

vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})

覆盖特定函数

下面是一个如何覆盖 is_sql_valid 函数的示例。

from vanna.openai.openai_chat import OpenAI_Chat
from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore

class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        OpenAI_Chat.__init__(self, config=config)

    def is_sql_valid(self, sql: str) -> bool:
        # Your implementation here

        return False

vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})

# Example usage
is_valid = vn.is_sql_valid("SELECT user_name, user_email FROM users WHERE user_id = 123")
print(f"Is the SQL valid? {is_valid}")

添加额外的基于 LLM 的函数

如果您想添加一个使用 LLM 的新函数,可以通过向类中添加新方法来实现。假设您想“解释”一个 SQL 查询。您可以向类中添加一个新方法,该方法使用 LLM 为该 SQL 查询生成解释。

from vanna.openai.openai_chat import OpenAI_Chat
from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore

class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        OpenAI_Chat.__init__(self, config=config)

    def generate_query_explanation(self, sql: str):
        my_prompt = [
            self.system_message("You are a helpful assistant that will explain a SQL query"),
            self.user_message("Explain this SQL query: " + sql),
        ]

        return self.submit_prompt(prompt=my_prompt)

vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-3.5-turbo'})

vn.generate_query_explanation("SELECT user_name, user_email FROM users WHERE user_id = 123")

输出: '此 SQL 查询正在从 users 表中选择 user_nameuser_email 列。它使用 WHERE 子句指定了一个条件,其中 user_id 列必须等于 123。换句话说,它正在检索 user_id123 的用户的 user_nameuser_email。'

Vanna Logo Vanna.AI 文档

通过提问即可从数据库中获取洞察力的最快方式