



啊,怎么只能选择这几个

用户、监控、训练、函数、数据库

然后到组织

新建一个KEY吧
记得保存下来哈
然后回到自己的计算机上
PS E:\development> mkdir vanna_cloud_demo
目录: E:\development
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2025/3/22 9:45 vanna_cloud_demo
PS E:\development> cd .\vanna_cloud_demo\
PS E:\development\vanna_cloud_demo> uv init
Initialized project `vanna-cloud-demo`
PS E:\development\vanna_cloud_demo> uv venv
Using CPython 3.12.8
Creating virtual environment at: .venv
Activate with: .venv\Scripts\activate
PS E:\development\vanna_cloud_demo> .venv\Scripts\activate
(vanna_cloud_demo) PS E:\development\vanna_cloud_demo>新建一个环境
切换到vscode那边去

(vanna_cloud_demo) PS E:\development\vanna_cloud_demo> uv add vanna
Resolved 42 packages in 3.91s
error: Distribution `kaleido==0.2.1.post1 @ registry+https://pypi.org/simple`
can't be installed because it doesn't have a source distribution or wheel for the current platform
(vanna_cloud_demo) PS E:\development\vanna_cloud_demo> uv add vanna
Resolved 42 packages in 30ms
error: Distribution `kaleido==0.2.1.post1 @ registry+https://pypi.org/simple`
can't be installed because it doesn't have a source distribution or wheel for the current platform
(vanna_cloud_demo) PS E:\development\vanna_cloud_demo>靠。。。
尴尬啊。。。等于说是。。。不支持windows?
行吧
折腾了一下,修复了本机受损的WSL2
然后似乎有需要重装uv
sudo apt install pipx
pipx install uv
pipx ensurepathhttps://blog.lemonhall.me/notesview/show/625
lemonhall@LEMON-HP-LAPTOP:~$ mkdir vanna_cloud_demo
lemonhall@LEMON-HP-LAPTOP:~$ cd vanna_cloud_demo/
lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$ uv init
Initialized project `vanna-cloud-demo`
lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$ uv venv
Using CPython 3.12.3 interpreter at: /usr/bin/python3.12
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$ source .venv/bin/activate
(vanna_cloud_demo) lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$重新建立环境
安装依赖:
(vanna_cloud_demo) lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$ uv add vanna
Resolved 42 packages in 14.80s
error: Distribution `kaleido==0.2.1.post1 @ registry+https://pypi.org/simple` can't be
installed because it doesn't have a source distribution or wheel for the current platform
hint: You're on Linux (`manylinux_2_39_x86_64`), but `kaleido` (v0.2.1.post1) only has
wheels for the following platform: `manylinux2014_armv7l`
(vanna_cloud_demo) lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$卧槽???
什么玩意?
这个kaleido这个库,只有armv71平台的wheels?

然后去官网一看
这只是一个图形库而已

然后一看?啥?
就是只支持arm?什么玩意啊

人家也明确的说,我就是没有。。。
无语了
uv pip install kaleido==1.0.0rc0uv pip install vanna --no-deps # 避免覆盖已安装的kaleido
uv add pandas
uv add requests
uv add plotly
uv add sqlparse
uv add flask
uv add flasgger
uv add flask_sock行吧
对vanna的观感降低一分儿
毕竟这么一个arm的库你添加进来,破坏安装体验
也是无语
(vanna_cloud_demo) lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$
/home/lemonhall/vanna_cloud_demo/.venv/bin/python /home/lemonhall/vanna_cloud_demo/main.py
'NoneType' object has no attribute 'questions'
(vanna_cloud_demo) lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$
/home/lemonhall/vanna_cloud_demo/.venv/bin/python /home/lemonhall/vanna_cloud_demo/main.py
'NoneType' object has no attribute 'questions'
(vanna_cloud_demo) lemonhall@LEMON-HP-LAPTOP:~/vanna_cloud_demo$ 然后接下来就是报错。。。

界面倒是真的挺好看的
sudo apt install sqlite3
安装sqlite3
安装一个向量库吧
uv pip install 'vanna[chromadb,openai]'https://vanna.ai/docs/sqlite-openai-standard-chromadb/

我看了一下它这个数据库的核心
-- Album definition
CREATE TABLE [Album]
(
[AlbumId] INTEGER NOT NULL,
[Title] NVARCHAR(160) NOT NULL,
[ArtistId] INTEGER NOT NULL,
CONSTRAINT [PK_Album] PRIMARY KEY ([AlbumId]),
FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_AlbumArtistId] ON [Album] ([ArtistId]);这是其中一张表的DDL
-- Artist definition
CREATE TABLE [Artist]
(
[ArtistId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_Artist] PRIMARY KEY ([ArtistId])
);
它会下载一个小模型
from vanna.openai import OpenAI_Chat
from vanna.chromadb 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': 'x', 'model': 'ep-20250204220334-l2q5g',
"base_url":"https://ark.cn-beijing.volces.com/api/v3"})
vn.connect_to_sqlite('Chinook.sqlite')
# DDL statements are powerful because they specify table names,
colume names, types, and potentially relationships
vn.train(ddl="""
-- Album definition
CREATE TABLE [Album]
(
[AlbumId] INTEGER NOT NULL,
[Title] NVARCHAR(160) NOT NULL,
[ArtistId] INTEGER NOT NULL,
CONSTRAINT [PK_Album] PRIMARY KEY ([AlbumId]),
FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_AlbumArtistId] ON [Album] ([ArtistId]);
""")
# DDL statements are powerful because they specify table names,
colume names, types, and potentially relationships
vn.train(ddl="""
-- Artist definition
CREATE TABLE [Artist]
(
[ArtistId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_Artist] PRIMARY KEY ([ArtistId])
);
""")
from vanna.flask import VannaFlaskApp
VannaFlaskApp(vn).run()我训了两张表
然后试一试能不能真的跑起来
使用的是V3
-- Customer definition
CREATE TABLE [Customer]
(
[CustomerId] INTEGER NOT NULL,
[FirstName] NVARCHAR(40) NOT NULL,
[LastName] NVARCHAR(20) NOT NULL,
[Company] NVARCHAR(80),
[Address] NVARCHAR(70),
[City] NVARCHAR(40),
[State] NVARCHAR(40),
[Country] NVARCHAR(40),
[PostalCode] NVARCHAR(10),
[Phone] NVARCHAR(24),
[Fax] NVARCHAR(24),
[Email] NVARCHAR(60) NOT NULL,
[SupportRepId] INTEGER,
CONSTRAINT [PK_Customer] PRIMARY KEY ([CustomerId]),
FOREIGN KEY ([SupportRepId]) REFERENCES [Employee] ([EmployeeId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_CustomerSupportRepId] ON [Customer] ([SupportRepId]);-- Employee definition
CREATE TABLE [Employee]
(
[EmployeeId] INTEGER NOT NULL,
[LastName] NVARCHAR(20) NOT NULL,
[FirstName] NVARCHAR(20) NOT NULL,
[Title] NVARCHAR(30),
[ReportsTo] INTEGER,
[BirthDate] DATETIME,
[HireDate] DATETIME,
[Address] NVARCHAR(70),
[City] NVARCHAR(40),
[State] NVARCHAR(40),
[Country] NVARCHAR(40),
[PostalCode] NVARCHAR(10),
[Phone] NVARCHAR(24),
[Fax] NVARCHAR(24),
[Email] NVARCHAR(60),
CONSTRAINT [PK_Employee] PRIMARY KEY ([EmployeeId]),
FOREIGN KEY ([ReportsTo]) REFERENCES [Employee] ([EmployeeId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_EmployeeReportsTo] ON [Employee] ([ReportsTo]);-- Genre definition
CREATE TABLE [Genre]
(
[GenreId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_Genre] PRIMARY KEY ([GenreId])
);-- Invoice definition
CREATE TABLE [Invoice]
(
[InvoiceId] INTEGER NOT NULL,
[CustomerId] INTEGER NOT NULL,
[InvoiceDate] DATETIME NOT NULL,
[BillingAddress] NVARCHAR(70),
[BillingCity] NVARCHAR(40),
[BillingState] NVARCHAR(40),
[BillingCountry] NVARCHAR(40),
[BillingPostalCode] NVARCHAR(10),
[Total] NUMERIC(10,2) NOT NULL,
CONSTRAINT [PK_Invoice] PRIMARY KEY ([InvoiceId]),
FOREIGN KEY ([CustomerId]) REFERENCES [Customer] ([CustomerId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_InvoiceCustomerId] ON [Invoice] ([CustomerId]);-- InvoiceLine definition
CREATE TABLE [InvoiceLine]
(
[InvoiceLineId] INTEGER NOT NULL,
[InvoiceId] INTEGER NOT NULL,
[TrackId] INTEGER NOT NULL,
[UnitPrice] NUMERIC(10,2) NOT NULL,
[Quantity] INTEGER NOT NULL,
CONSTRAINT [PK_InvoiceLine] PRIMARY KEY ([InvoiceLineId]),
FOREIGN KEY ([InvoiceId]) REFERENCES [Invoice] ([InvoiceId])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([TrackId]) REFERENCES [Track] ([TrackId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_InvoiceLineInvoiceId] ON [InvoiceLine] ([InvoiceId]);
CREATE INDEX [IFK_InvoiceLineTrackId] ON [InvoiceLine] ([TrackId]);-- MediaType definition
CREATE TABLE [MediaType]
(
[MediaTypeId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_MediaType] PRIMARY KEY ([MediaTypeId])
);-- Playlist definition
CREATE TABLE [Playlist]
(
[PlaylistId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_Playlist] PRIMARY KEY ([PlaylistId])
);-- PlaylistTrack definition
CREATE TABLE [PlaylistTrack]
(
[PlaylistId] INTEGER NOT NULL,
[TrackId] INTEGER NOT NULL,
CONSTRAINT [PK_PlaylistTrack] PRIMARY KEY ([PlaylistId], [TrackId]),
FOREIGN KEY ([PlaylistId]) REFERENCES [Playlist] ([PlaylistId])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([TrackId]) REFERENCES [Track] ([TrackId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_PlaylistTrackTrackId] ON [PlaylistTrack] ([TrackId]);-- Track definition
CREATE TABLE [Track]
(
[TrackId] INTEGER NOT NULL,
[Name] NVARCHAR(200) NOT NULL,
[AlbumId] INTEGER,
[MediaTypeId] INTEGER NOT NULL,
[GenreId] INTEGER,
[Composer] NVARCHAR(220),
[Milliseconds] INTEGER NOT NULL,
[Bytes] INTEGER,
[UnitPrice] NUMERIC(10,2) NOT NULL,
CONSTRAINT [PK_Track] PRIMARY KEY ([TrackId]),
FOREIGN KEY ([AlbumId]) REFERENCES [Album] ([AlbumId])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([GenreId]) REFERENCES [Genre] ([GenreId])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([MediaTypeId]) REFERENCES [MediaType] ([MediaTypeId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_TrackAlbumId] ON [Track] ([AlbumId]);
CREATE INDEX [IFK_TrackGenreId] ON [Track] ([GenreId]);
CREATE INDEX [IFK_TrackMediaTypeId] ON [Track] ([MediaTypeId]);
然后看训练数据里面就有十一条了
OK,接下来问数据库咯
File "/home/lemonhall/vanna_cloud_demo/.venv/lib/python3.12/site-packages/openai/_base_client.py",
line 1023, in _request
raise self._make_status_error_from_response(err.response) from None
openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorrect API
key provided: 72d76485************************0f54. You can find your API key at
https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error',
'param': None, 'code': 'invalid_api_key'}}
API的问题,好说。。看看为什么它不吃base_url就行
https://github.com/vanna-ai/vanna/blob/main/src/vanna/deepseek/deepseek_chat.py
参考官网仓库ds的例子哈
from vanna.openai import OpenAI_Chat
from vanna.chromadb import ChromaDB_VectorStore
from vanna.base import VannaBase
import os
from openai import OpenAI
class DeepSeekChat(VannaBase):
def __init__(self, config=None):
api_key = 'xxxxxxxxxx'
model = 'xxxxxxxxxxxx'
self.model = model
self.client = OpenAI(api_key=api_key, base_url="https://ark.cn-beijing.volces.com/api/v3")
def system_message(self, message: str) -> any:
return {"role": "system", "content": message}
def user_message(self, message: str) -> any:
return {"role": "user", "content": message}
def assistant_message(self, message: str) -> any:
return {"role": "assistant", "content": message}
def generate_sql(self, question: str, **kwargs) -> str:
# 使用父类的 generate_sql
sql = super().generate_sql(question, **kwargs)
# 替换 "\_" 为 "_"
sql = sql.replace("\\_", "_")
return sql
def submit_prompt(self, prompt, **kwargs) -> str:
chat_response = self.client.chat.completions.create(
model=self.model,
messages=prompt,
)
return chat_response.choices[0].message.content
class MyVanna(ChromaDB_VectorStore, DeepSeekChat):
def __init__(self, config=None):
ChromaDB_VectorStore.__init__(self, config=config)
DeepSeekChat.__init__(self, config=config)
vn = MyVanna()
vn.connect_to_sqlite('Chinook.sqlite')
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- Album definition
CREATE TABLE [Album]
(
[AlbumId] INTEGER NOT NULL,
[Title] NVARCHAR(160) NOT NULL,
[ArtistId] INTEGER NOT NULL,
CONSTRAINT [PK_Album] PRIMARY KEY ([AlbumId]),
FOREIGN KEY ([ArtistId]) REFERENCES [Artist] ([ArtistId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_AlbumArtistId] ON [Album] ([ArtistId]);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- Artist definition
CREATE TABLE [Artist]
(
[ArtistId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_Artist] PRIMARY KEY ([ArtistId])
);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- Customer definition
CREATE TABLE [Customer]
(
[CustomerId] INTEGER NOT NULL,
[FirstName] NVARCHAR(40) NOT NULL,
[LastName] NVARCHAR(20) NOT NULL,
[Company] NVARCHAR(80),
[Address] NVARCHAR(70),
[City] NVARCHAR(40),
[State] NVARCHAR(40),
[Country] NVARCHAR(40),
[PostalCode] NVARCHAR(10),
[Phone] NVARCHAR(24),
[Fax] NVARCHAR(24),
[Email] NVARCHAR(60) NOT NULL,
[SupportRepId] INTEGER,
CONSTRAINT [PK_Customer] PRIMARY KEY ([CustomerId]),
FOREIGN KEY ([SupportRepId]) REFERENCES [Employee] ([EmployeeId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_CustomerSupportRepId] ON [Customer] ([SupportRepId]);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- Employee definition
CREATE TABLE [Employee]
(
[EmployeeId] INTEGER NOT NULL,
[LastName] NVARCHAR(20) NOT NULL,
[FirstName] NVARCHAR(20) NOT NULL,
[Title] NVARCHAR(30),
[ReportsTo] INTEGER,
[BirthDate] DATETIME,
[HireDate] DATETIME,
[Address] NVARCHAR(70),
[City] NVARCHAR(40),
[State] NVARCHAR(40),
[Country] NVARCHAR(40),
[PostalCode] NVARCHAR(10),
[Phone] NVARCHAR(24),
[Fax] NVARCHAR(24),
[Email] NVARCHAR(60),
CONSTRAINT [PK_Employee] PRIMARY KEY ([EmployeeId]),
FOREIGN KEY ([ReportsTo]) REFERENCES [Employee] ([EmployeeId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_EmployeeReportsTo] ON [Employee] ([ReportsTo]);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- Genre definition
CREATE TABLE [Genre]
(
[GenreId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_Genre] PRIMARY KEY ([GenreId])
);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- Invoice definition
CREATE TABLE [Invoice]
(
[InvoiceId] INTEGER NOT NULL,
[CustomerId] INTEGER NOT NULL,
[InvoiceDate] DATETIME NOT NULL,
[BillingAddress] NVARCHAR(70),
[BillingCity] NVARCHAR(40),
[BillingState] NVARCHAR(40),
[BillingCountry] NVARCHAR(40),
[BillingPostalCode] NVARCHAR(10),
[Total] NUMERIC(10,2) NOT NULL,
CONSTRAINT [PK_Invoice] PRIMARY KEY ([InvoiceId]),
FOREIGN KEY ([CustomerId]) REFERENCES [Customer] ([CustomerId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_InvoiceCustomerId] ON [Invoice] ([CustomerId]);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- InvoiceLine definition
CREATE TABLE [InvoiceLine]
(
[InvoiceLineId] INTEGER NOT NULL,
[InvoiceId] INTEGER NOT NULL,
[TrackId] INTEGER NOT NULL,
[UnitPrice] NUMERIC(10,2) NOT NULL,
[Quantity] INTEGER NOT NULL,
CONSTRAINT [PK_InvoiceLine] PRIMARY KEY ([InvoiceLineId]),
FOREIGN KEY ([InvoiceId]) REFERENCES [Invoice] ([InvoiceId])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([TrackId]) REFERENCES [Track] ([TrackId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_InvoiceLineInvoiceId] ON [InvoiceLine] ([InvoiceId]);
CREATE INDEX [IFK_InvoiceLineTrackId] ON [InvoiceLine] ([TrackId]);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- MediaType definition
CREATE TABLE [MediaType]
(
[MediaTypeId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_MediaType] PRIMARY KEY ([MediaTypeId])
);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- Playlist definition
CREATE TABLE [Playlist]
(
[PlaylistId] INTEGER NOT NULL,
[Name] NVARCHAR(120),
CONSTRAINT [PK_Playlist] PRIMARY KEY ([PlaylistId])
);
""")
# DDL statements are powerful because they specify table names,
# colume names, types, and potentially relationships
vn.train(ddl="""
-- PlaylistTrack definition
CREATE TABLE [PlaylistTrack]
(
[PlaylistId] INTEGER NOT NULL,
[TrackId] INTEGER NOT NULL,
CONSTRAINT [PK_PlaylistTrack] PRIMARY KEY ([PlaylistId], [TrackId]),
FOREIGN KEY ([PlaylistId]) REFERENCES [Playlist] ([PlaylistId])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([TrackId]) REFERENCES [Track] ([TrackId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_PlaylistTrackTrackId] ON [PlaylistTrack] ([TrackId]);
""")
vn.train(ddl="""
-- Track definition
CREATE TABLE [Track]
(
[TrackId] INTEGER NOT NULL,
[Name] NVARCHAR(200) NOT NULL,
[AlbumId] INTEGER,
[MediaTypeId] INTEGER NOT NULL,
[GenreId] INTEGER,
[Composer] NVARCHAR(220),
[Milliseconds] INTEGER NOT NULL,
[Bytes] INTEGER,
[UnitPrice] NUMERIC(10,2) NOT NULL,
CONSTRAINT [PK_Track] PRIMARY KEY ([TrackId]),
FOREIGN KEY ([AlbumId]) REFERENCES [Album] ([AlbumId])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([GenreId]) REFERENCES [Genre] ([GenreId])
ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ([MediaTypeId]) REFERENCES [MediaType] ([MediaTypeId])
ON DELETE NO ACTION ON UPDATE NO ACTION
);
CREATE INDEX [IFK_TrackAlbumId] ON [Track] ([AlbumId]);
CREATE INDEX [IFK_TrackGenreId] ON [Track] ([GenreId]);
CREATE INDEX [IFK_TrackMediaTypeId] ON [Track] ([MediaTypeId]);
""")
from vanna.flask import VannaFlaskApp
VannaFlaskApp(vn).run()以上是完整的例子,最后的
然后是输出

销量最好的10张专辑是啥?

接着就拿到了

哦吼
这个图表可以的啊
这边可以看到

结论:简单数据库,那效果是相当好啊
https://vanna.ai/docs/postgres-openai-standard-chromadb/
# The information schema query may need some tweaking depending on your database. This is a good starting point.
df_information_schema = vn.run_sql("SELECT * FROM INFORMATION_SCHEMA.COLUMNS")
# This will break up the information schema into bite-sized chunks that can be referenced by the LLM
plan = vn.get_training_plan_generic(df_information_schema)
plan
# If you like the plan, then uncomment this and run it to train
# vn.train(plan=plan)这样就可以按照数据库来train了
# Sometimes you may want to add documentation about your business terminology or definitions.
vn.train(documentation="Our business defines OTIF score as the
percentage of orders that are delivered on time and in full")
我们的公司将OTIF(准时足量)得分定义为:按时且完整送达的订单所占百分比。
(专业解析:OTIF是供应链管理中的核心指标,全称On-Time In-Full,中文译作"准时足量"。
该翻译在保留专业术语的同时:
1. 使用括号补充英文缩写全称,便于首次接触概念的读者理解;
2. 将"delivered on time and in full"译为"按时且完整送达",精准对应物流场景中既要求时效性(准时)
又要求货品完整性(足量无损)的双重标准;3. 采用百分比定义量化指标,符合企业KPI的表达规范。)等于是把业务属于定义加进去了
https://vanna.ai/docs/hardening-guide/
最后还有一些简单的部署和鉴权的指南
还可以,非常的。。。
nice的一个自由度中等的框架
挺好的