Bug Description
从llama_index.core导入(
SQLDatabase,
VectorStoreIndex,
Settings,
)
从llama_index.llms.openai导入OpenAI
从llama_index.core.query_engine导入NLSQLTableQueryEngine
从llama_index.core.callbacks导入CallbackManager, TokenCountingHandler
设置OpenAI API密钥
openai.api_key = os.environ["OPENAI_API_KEY"]
engine = initialize_database_connection()
tables = ["customer_information_enquiry"]
sql_database = SQLDatabase(engine, include_tables=tables, sample_rows_in_table_info=1)
MODEL = 'gpt-3.5-turbo-0125'
token_counter = TokenCountingHandler(
tokenizer=tiktoken.encoding_for_model(MODEL).encode
)
callback_manager = CallbackManager([token_counter])
llm = OpenAI(temperature=0, model=MODEL)
Settings.llm = llm
Settings.callback_manager = callback_manager
query_engine = NLSQLTableQueryEngine(
sql_database=sql_database,
)
版本
llama-index==0.10.50
重现步骤
使用相同的代码,但不支持视图类型表
tables = ["customer_information_enquiry", "view_table]
相关日志/回溯
- 无响应*
2条答案
按热度按时间qxgroojn1#
您遇到的问题可能是由于在初始化
SQLDatabase
类时,未将view_support
参数设置为True
。默认情况下,除非显式设置view_support
为True
,否则视图不会包含在_all_tables
集合中。要解决此问题,您需要修改
SQLDatabase
的初始化以包含view_support=True
。以下是更新后的代码:from llama_index.core import (
SQLDatabase,
VectorStoreIndex,
Settings,
)
from llama_index.llms.openai import OpenAI
from llama_index.core.query_engine import NLSQLTableQueryEngine
from llama_index.core.callbacks import CallbackManager, TokenCountingHandler
Set OpenAI API key
openai.api_key = os.environ["OPENAI_API_KEY"]
engine = initialize_database_connection()
tables = ["customer_information_enquiry", "view_table"]
sql_database = SQLDatabase(engine, include_tables=tables, sample_rows_in_table_info=1, view_support=True)
MODEL = 'gpt-3.5-turbo-0125'
token_counter = TokenCountingHandler(
tokenizer=tiktoken.encoding_for_model(MODEL).encode
)
callback_manager = CallbackManager([token_counter])
llm = OpenAI(temperature=0, model=MODEL)
Settings.llm = llm
Settings.callback_manager = callback_manager
query_engine = NLSQLTableQueryEngine(
sql_database=sql_database,
)
wvt8vs2t2#
TypeError: Traceback (most recent call last)
File "C:\Users\user\anaconda3\envs\dbgpt\lib\site-packages\llama_index\core\utilities\sql_wrapper.py", line 110, in SQLDatabase.init
self._metadata = metadata or MetaData()
File "C:\Users\user\anaconda3\envs\dbgpt\lib\site-packages\sqlalchemy\sql\schema.py", line 5782, in MetaData.reflect(self, bind, schema, filters, available, kind, scope, **dialect_kwargs)
load = [
name
for name in only
if extend_existing or name not in current
]
File "C:\Users\user\anaconda3\envs\dbgpt\lib\site-packages\sqlalchemy\engine\reflection.py", line 2008, in Inspector._get_reflection_info(self, schema, filter_names, available, _reflect_info, **kw)
info = _ReflectionInfo(
Columns=run(
self.get_multi_columns, check_filter_names_from_meth=True
),
pk_constraint=run(self.get_multi_pk_constraint),
foreign_keys=run(self.get_multi_foreign_keys),
indexes=run(self.get_multi_indexes),
unique_constraints=run(
self.get_multi_unique_constraints, optional=True
),
table_comment=run(self.get_multi_table_comment, optional=True),
check_constraints=run(
self.get_multi_check_constraints, optional=True
),
table_options=run(self.get_multi_table_options, optional=True),
unreflectable=unreflectable,
)
File "C:\Users\user\anaconda3\envs\dbgpt\lib\site-packages\sqlalchemy\engine\reflection.py", line 1994, in Inspector.get_multi_columns(self, schema, filter_names, kind, scope, **kw)
with self._operation_context() as conn:
--> 921 table_col_defs = dict(
922 self.dialect.get_multi_columns(
923 conn,
924 schema=schema,
925 filter_names=filter_names,
926 kind=kind,
927 scope=scope,
928 info_cache=self.info_cache,
929 **kw,
930 )
931 )
932 self._instantiate_types(table_col_defs.values())
-> 933 return table_col_defs
3178 connection,
3179 table_name,
3180 schema,
3181 info_cache=kw.get("info_cache", None),
3182 )
File :2, in _setup_parser(self, connection, table_name, schema, **kw)
File ~\anaconda3\envs\dbgpt\lib\site-packages\sqlalchemy\engine\reflection.py:97, in cache(fn, self, con, *args, **kw)
95 ret: _R = info_cache.get(key)
96 if ret is None:
---> 97 ret = fn(self, con, *args, **kw)
98 info_cache[key] = ret
99 return ret
File ~\anaconda3\envs\dbgpt\lib\site-packages\sqlalchemy\dialects\mysql\base.py:3212, in MySQLDialect._setup_parser(self, connection, table_name, schema, **kw)
3207 if parser._check_view(sql):
3208 # Adapt views to something table-like.
3209 columns = self._describe_table(
3210 connection, None, charset, full_name=full_name
3211 )
-> 3212 sql = parser._describe_to_create(table_name, columns)
3213 return parser.parse(sql, charset)
File ~\anaconda3\envs\dbgpt\lib\site-packages\sqlalchemy\dialects\mysql\reflection.py:350, in MySQLTableDefinitionParser._describe_to_create(self, table_name, columns)
348 line.append("NOT NULL")
349 if default:
--> 350 if "auto_increment" in default:
351 pass
352 elif col_type.startswith("timestamp") and default.startswith(
353 "C"
354 ):
TypeError: a bytes-like object is required, not 'str'
it's giving error