VANNA AI本地部署的详细步骤请参考文章:
这里主要说明连接ORACLE碰到的问题。
如果需要VANNA AI连接ORACLE数据库查询数据,python需要安装oracledb:
pip3 install oracledb
oracledb支持两种连接ORACLE的模式thin和thick,thin模式只支持ORACLE DB版本是12.1之后的,如果是之前的版本就只能用thick模式,本地需要安装oracle client,例如连接ORACLE 9.2需要安装ORACLE CLIENT 11.2
安装完后,如果要直接用VANNA内置的连接connect_to_oracle会报错,因为VANNA是用THIN模式连接ORACLE:
DPY-3010: connections to this database server version are not supported by python-oracledb in thin mode
要改THICK模式需要修改VANNA本身的连接DB部分的程序:
找到自己安装的VANNA的路径,例如CONDA下的路径类似:
D:\anaconda3\envs\vanna\Lib\site-packages\vanna\base
修改base.py, 增加一句:oracledb.init_oracle_client(lib_dir=r"D:\product\11.2.0\client_1\BIN")
lib_dir是指ORACLE CLIENT的安装路径
def connect_to_oracle
....
if not password:
raise ImproperlyConfigured("Please set your Oracle db password")
conn = None
oracledb.init_oracle_client(lib_dir=r"D:\product\11.2.0\client_1\BIN")
try:
conn = oracledb.connect(
user=user,
password=password,
dsn=dsn,
**kwargs
)
...
然后可以用下面的测试一下:这里是本地OLLAMA+gemma3:4b+CHROMADB+ORACLE DB 9I
from vanna.ollama import Ollama
from vanna.chromadb import ChromaDB_VectorStore
from vanna.flask import VannaFlaskApp
class MyVanna(ChromaDB_VectorStore, Ollama):
def __init__(self, config=None):
ChromaDB_VectorStore.__init__(self, config=config)
Ollama.__init__(self, config=config)
vn = MyVanna(config={'model': 'gemma3:4b','ollama_host': 'http://127.0.0.1:11434'})
vn.connect_to_oracle(dsn=r'DB IP:PORT/SERVICE NAME', user='xx', password='xxxx')
if __name__ == '__main__':
app = VannaFlaskApp(vn)
app.run()
DB IP为ORACLE DB的IP,PORT通常1521,SERVICE NAME可以用下面的SQL查询出来。
select value from v$parameter where name like '%service_name%';
若出现下面提示,表示连接成功
Your app is running at:
http://localhost:8084
* Serving Flask app 'vanna.flask'
* Debug mode: on
若提示
DPY-6001: Service "xx" is not registered with the listener at host "xxx" port xxx. (Similar to ORA-12514)
表示DSN未写对。
5189

被折叠的 条评论
为什么被折叠?



