llama_index [Bug]: view在使用NLSQLTableQueryEngine时无法正常工作,

fwzugrvs  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(32)

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]

相关日志/回溯

  • 无响应*
qxgroojn

qxgroojn1#

您遇到的问题可能是由于在初始化 SQLDatabase 类时,未将 view_support 参数设置为 True。默认情况下,除非显式设置 view_supportTrue,否则视图不会包含在 _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,
)


此更改确保视图包含在 `_all_tables` 集合中,并可以在 `tables` 列表中使用。

* 要继续与 [Dosu](https://dosu.dev) 对话,请提及 @dosu。*
wvt8vs2t

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

相关问题