DB-GPT icon indicating copy to clipboard operation
DB-GPT copied to clipboard

[Bug]json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Open cccatcxy opened this issue 1 year ago • 9 comments

Search before asking

  • [X] I had searched in the issues and found no similar issues.

Operating system information

Linux

Python version information

=3.11

DB-GPT version

main

Related scenes

  • [X] Chat Data
  • [ ] Chat Excel
  • [ ] Chat DB
  • [ ] Chat Knowledge
  • [ ] Model Management
  • [ ] Dashboard
  • [ ] Plugins

Installation Information

Device information

GPU:4 GPU memory :15

Models information

LLM:CodeLLam embedding model:text2vec

What happened

使用ChatData查询数据库的信息时,从后台可以看出,大模型给出了正确的SQL。但是在进行执行时,无法解析JSON。 图片 遇到好多次这种错误,不知道是哪里出错了。

What you expected to happen

期望可以正确解析模型回应的JSON信息。

How to reproduce

使用Chatdata查询sqlite数据库。

Additional context

No response

Are you willing to submit PR?

  • [X] Yes I am willing to submit a PR!

cccatcxy avatar Nov 28 '23 08:11 cccatcxy

我也碰到了类似的问题,我是从docker启动,使用给的case_1_student_manager_sqlite.sql [Round 2]

问: 请根据用户选择的数据库和该库的部分可用表结构定义来回答用户问题. 数据库名: x 表结构定义: ['{"database_name": "x", "type": "sqlite", "tables": "", "qps": "1000", "tps": 1000}']

约束: 1. 请根据用户问题理解用户意图,使用给出表结构定义创建一个语法正确的 sqlite sql,如果不需要sql,则直接回答用户问题。 2. 除非用户在问题中指定了他希望获得的具体数据行数,否则始终将查询限制为最多 50 个结果。 3. 只能使用表结构信息中提供的表来生成 sql,如果无法根据提供的表结构中生成 sql ,请说:“提供的表结构信息不足以生成 sql 查询。” 禁止随意捏造信息。 4. 请注意生成SQL时不要弄错表和列的关系 5. 请检查SQL的正确性,并保证正确的情况下优化查询性能 用户问题: 把学生的名字按照年龄从大到小排序 请一步步思考并按照以下JSON格式回复: "{\n "thoughts": "thoughts summary to say to user",\n "sql": "SQL Query to run"\n}" 确保返回正确的json并且可以被Python json.loads方法解析.

答:

stream output:

根据用户提供的数据库和该库的部分可用表结构定义,我们可以生成如下的 SQL 查询语句来按照年龄从大到小排序学生的名字:

SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0);

这条 SQL 语句将会选择 x 数据库中所有年龄大于前一个年龄的记录的 name 字段,并且按照年龄从大到小排序。

INFO [pilot.model.cluster.worker.default_worker] finish_reason: stop INFO [pilot.out_parser.base] illegal json processing: 根据用户提供的数据库和该库的部分可用表结构定义,我们可以生成如下的 SQL 查询语句来按照年龄从大到小排序学生的名字: sql SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0); 这条 SQL 语句将会选择 x 数据库中所有年龄大于前一个年龄的记录的 name 字段,并且按照年龄从大到小排序。 请注意,由于我们没有提供具体的表结构信息,所以无法生成完整的 SQL 语句。但是如果能提供更多的表结构信息,我们可以生成更具体的 SQL 语句。 INFO [pilot.scene.chat_db.auto_execute.out_parser] clean prompt response: 根据用户提供的数据库和该库的部分可用表结构定义,我们可以生成如下的 SQL 查询语句来按照年龄从大到小排序学生的名字: sql SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0); 这条 SQL 语句将会选择 x 数据库中所有年龄大于前一个年龄的记录的 name 字段,并且按照年龄从大到小排序。 请注意,由于我们没有提供具体的表结构信息,所以无法生成完整的 SQL 语句。但是如果能提供更多的表结构信息,我们可以生成更具体的 SQL 语句。 ERROR [pilot.scene.chat_db.auto_execute.out_parser] json load faild

TongaoY avatar Nov 28 '23 12:11 TongaoY

请一步步思考并按照以下JSON格式回复: "{\n "thoughts": "thoughts summary to say to user",\n "sql": "SQL Query to run"\n}" 确保返回正确的json并且可以被Python json.loads方法解析.

因为模型没按要求输出json

daxiaraoming avatar Nov 29 '23 01:11 daxiaraoming

为什么模型有时候能按照要求输出 JSON回应,有时候不能输出JSON?这个不稳定的现象应该怎么解决?

cccatcxy avatar Nov 29 '23 02:11 cccatcxy

输出格式约束,目前主要依靠模型的基础能力。 也有一些微调方法可以提升相关能力, 在text2SQL这个场景,后续我们在架构层面会引入多模型+场景的协同编排,这样在写SQL的场景就可以只输出SQL语句。 当然也可以关注Text2API与Text2DSL等微调方向的发展。

csunny avatar Nov 29 '23 03:11 csunny

输出格式约束,目前主要依靠模型的基础能力。 也有一些微调方法可以提升相关能力, 在text2SQL这个场景,后续我们在架构层面会引入多模型+场景的协同编排,这样在写SQL的场景就可以只输出SQL语句。 当然也可以关注Text2API与Text2DSL等微调方向的发展。

DBgpt代码中在该场景的prompt里已经约束了模型相应的输出格式为JSON,但是模型还是不能百分百按照约束格式输出,是否可以使用P-Tuning 进行微调模型,提高模型输出格式的正确率?

cccatcxy avatar Nov 29 '23 03:11 cccatcxy

是的,Prompt在ChatGPT或者GPT-4的表现会好一些,其他开源模型表现目前看还比较差。 可以尝试通过P-Tuning、LoRA等方法进行微调。

csunny avatar Nov 29 '23 06:11 csunny

我也碰到了类似的问题,我是从docker启动,使用给的case_1_student_manager_sqlite.sql [Round 2]

问: 请根据用户选择的数据库和该库的部分可用表结构定义来回答用户问题. 数据库名: x 表结构定义: ['{"database_name": "x", "type": "sqlite", "tables": "", "qps": "1000", "tps": 1000}']

约束: 1. 请根据用户问题理解用户意图,使用给出表结构定义创建一个语法正确的 sqlite sql,如果不需要sql,则直接回答用户问题。 2. 除非用户在问题中指定了他希望获得的具体数据行数,否则始终将查询限制为最多 50 个结果。 3. 只能使用表结构信息中提供的表来生成 sql,如果无法根据提供的表结构中生成 sql ,请说:“提供的表结构信息不足以生成 sql 查询。” 禁止随意捏造信息。 4. 请注意生成SQL时不要弄错表和列的关系 5. 请检查SQL的正确性,并保证正确的情况下优化查询性能 用户问题: 把学生的名字按照年龄从大到小排序 请一步步思考并按照以下JSON格式回复: "{\n "thoughts": "thoughts summary to say to user",\n "sql": "SQL Query to run"\n}" 确保返回正确的json并且可以被Python json.loads方法解析.

答:

stream output:

根据用户提供的数据库和该库的部分可用表结构定义,我们可以生成如下的 SQL 查询语句来按照年龄从大到小排序学生的名字:

SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0);

这条 SQL 语句将会选择 x 数据库中所有年龄大于前一个年龄的记录的 name 字段,并且按照年龄从大到小排序。

INFO [pilot.model.cluster.worker.default_worker] finish_reason: stop INFO [pilot.out_parser.base] illegal json processing: 根据用户提供的数据库和该库的部分可用表结构定义,我们可以生成如下的 SQL 查询语句来按照年龄从大到小排序学生的名字: sql SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0); 这条 SQL 语句将会选择 x 数据库中所有年龄大于前一个年龄的记录的 name 字段,并且按照年龄从大到小排序。 请注意,由于我们没有提供具体的表结构信息,所以无法生成完整的 SQL 语句。但是如果能提供更多的表结构信息,我们可以生成更具体的 SQL 语句。 INFO [pilot.scene.chat_db.auto_execute.out_parser] clean prompt response: 根据用户提供的数据库和该库的部分可用表结构定义,我们可以生成如下的 SQL 查询语句来按照年龄从大到小排序学生的名字: sql SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0); 这条 SQL 语句将会选择 x 数据库中所有年龄大于前一个年龄的记录的 name 字段,并且按照年龄从大到小排序。 请注意,由于我们没有提供具体的表结构信息,所以无法生成完整的 SQL 语句。但是如果能提供更多的表结构信息,我们可以生成更具体的 SQL 语句。 ERROR [pilot.scene.chat_db.auto_execute.out_parser] json load faild

这个没有获取到正确的table schema信息,可以截图看下你数据连接信息是怎么配置的? 1.界面打开数据管理 2.查看你的数据连接配置是否正确(最好用绝对路径)

Aries-ckt avatar Nov 30 '23 02:11 Aries-ckt

我也搞了类似的问题,我是从docker启动,使用给的case_1_student_manager_sqlite.sql [Round 2] 问:请根据用户选择的数据库和该库的部分可用表结构定义来回答用户问题。数据库名: x 表结构定义: ['{"database_name": "x", "type": "sqlite", "tables": "", "qps": "1000", "tps": 1000}'] 约束: 1. 请根据用户问题理解用户意愿,使用给出的表结构定义创建一个语法正确的sqlite sql,如果不需要sql,则直接回答用户问题。 2. 除非用户在问题中指定了他希望获得的具体数据行数,否则始终将查询限制为最多50个结果。 3.只能使用表结构信息中提供的表来生成sql,如果无法根据提供的表结构中生成sql,请说:“提供的表”结构信息直接生成sql查询。”禁止随意捏造信息。 4.请注意生成SQL时不要弄错表和列的关系 5.请检查SQL的正确性,并保证正确的情况下优化查询性能用户问题:把学生的名字按照年龄从大到小排序请一步思考并按照以下JSON格式回复: "{\n "thoughts": "对用户说的想法总结",\n "sql": "要运行的SQL查询"\n}"确保返回正确的json并且可以被Python json.loads方法解析。 答: 流输出: 根据提供用户的数据库和该库的部分可用的表结构定义,我们可以生成如下的SQL查询语句来按照年龄从大到小排序学生的姓名:

SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0);

这条SQL语句将选择x数据库中所有年龄大于前一个年龄的记录name字段,并且按照年龄从大到小排序。 INFO [pilot.model.cluster.worker.default_worker] finish_reason: stop INFO [pilot.out_parser.base]非法json处理:根据用户提供的数据库定义和该库的部分可用表结构,我们可以生成如下的SQL查询语句来按照年龄从大到小排序学生的名字:sql SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0); 这条SQL语句将选择x数据库中所有年龄大于前一个年龄记录的name字段,并且按照年龄从大到小排序。请注意,由于我们没有提供具体的表结构信息,所以无法生成完整的SQL语句。但是如果能提供更多的表结构信息,我们可以生成更具体的SQL语句。 INFO [pilot.scene.chat_db.auto_execute.out_parser] clean提示响应:根据用户提供了数据库和该库的部分可用的表结构定义,我们可以生成如下的 SQL 查询语句来按照年龄从大到小排序学生的姓名:这条 SQL 语句将选择数据库中所有年龄大于前sql SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0); 一个x年龄的记录的name字段,并且按照年龄从大到小排序。请注意,由于我们没有提供具体的表结构信息,所以无法生成完整的SQL语句。但是如果能够提供更多的表结构信息,我们可以生成更具体的SQL语句。 ERROR [pilot.scene.chat_db.auto_execute.out_parser] json加载失败

这个没有获取到正确的表架构信息,可以截图看下你的数据连接信息是怎么配置的? 1.界面打开 数据管理 2.查看你的数据连接配置是否正确(最好用绝对路径)

您好,我使用docker run --ipc host --gpus all -d
-p 5000:5000
-e LOCAL_DB_TYPE=sqlite
-e LOCAL_DB_PATH=/home/yta/DB-GPT-main/docker/examples/sqls/x.db
-e LLM_MODEL=chatglm2-6b
-e LANGUAGE=zh
-v /home/yta/tmp/chatglm2-6b:/app/models/chatglm2-6b
-v /home/yta/tmp/text2vec-large-chinese:/app/models/text2vec-large-chinese
--name dbgpt
eosphorosai/dbgpt:v0.4.0启动,网页上添加的数据库squite配置为,地址:/home/yta/DB-GPT-main/docker/examples/sqls/x.db,x.db文件为case_1_student_manager_sqlite.sql改的名称,我也同时试了,地址:/home/yta/DB-GPT-main/docker/examples/sqls/case_1_student_manager_sqlite.sql,地址:/home/yta/DB-GPT-main/pilot/data/default_sqlite.db,对应这里 -e LOCAL_DB_PATH=/home/yta/DB-GPT-main/docker/examples/sqls/x.db \都做了修改,都不行

TongaoY avatar Nov 30 '23 02:11 TongaoY

我也搞了类似的问题,我是从docker启动,使用给的case_1_student_manager_sqlite.sql [Round 2] 问:请根据用户选择的数据库和该库的部分可用表结构定义来回答用户问题。数据库名: x 表结构定义: ['{"database_name": "x", "type": "sqlite", "tables": "", "qps": "1000", "tps": 1000}'] 约束: 1. 请根据用户问题理解用户意愿,使用给出的表结构定义创建一个语法正确的sqlite sql,如果不需要sql,则直接回答用户问题。 2. 除非用户在问题中指定了他希望获得的具体数据行数,否则始终将查询限制为最多50个结果。 3.只能使用表结构信息中提供的表来生成sql,如果无法根据提供的表结构中生成sql,请说:“提供的表”结构信息直接生成sql查询。”禁止随意捏造信息。 4.请注意生成SQL时不要弄错表和列的关系 5.请检查SQL的正确性,并保证正确的情况下优化查询性能用户问题:把学生的名字按照年龄从大到小排序请一步思考并按照以下JSON格式回复: "{\n "thoughts": "对用户说的想法总结",\n "sql": "要运行的SQL查询"\n}"确保返回正确的json并且可以被Python json.loads方法解析。 答: 流输出: 根据提供用户的数据库和该库的部分可用的表结构定义,我们可以生成如下的SQL查询语句来按照年龄从大到小排序学生的姓名:

SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0);

这条SQL语句将选择x数据库中所有年龄大于前一个年龄的记录name字段,并且按照年龄从大到小排序。 INFO [pilot.model.cluster.worker.default_worker] finish_reason: stop INFO [pilot.out_parser.base]非法json处理:根据用户提供的数据库定义和该库的部分可用表结构,我们可以生成如下的SQL查询语句来按照年龄从大到小排序学生的名字:sql SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0); 这条SQL语句将选择x数据库中所有年龄大于前一个年龄记录的name字段,并且按照年龄从大到小排序。请注意,由于我们没有提供具体的表结构信息,所以无法生成完整的SQL语句。但是如果能提供更多的表结构信息,我们可以生成更具体的SQL语句。 INFO [pilot.scene.chat_db.auto_execute.out_parser] clean提示响应:根据用户提供了数据库和该库的部分可用的表结构定义,我们可以生成如下的 SQL 查询语句来按照年龄从大到小排序学生的姓名:这条 SQL 语句将选择数据库中所有年龄大于前sql SELECT name FROM x WHERE age > (SELECT age FROM x ORDER BY age DESC LIMIT 1 OFFSET 0); 一个x年龄的记录的name字段,并且按照年龄从大到小排序。请注意,由于我们没有提供具体的表结构信息,所以无法生成完整的SQL语句。但是如果能够提供更多的表结构信息,我们可以生成更具体的SQL语句。 ERROR [pilot.scene.chat_db.auto_execute.out_parser] json加载失败

这个没有获取到正确的表架构信息,可以截图看下你的数据连接信息是怎么配置的? 1.界面打开 数据管理 2.查看你的数据连接配置是否正确(最好用绝对路径)

1 2

TongaoY avatar Nov 30 '23 02:11 TongaoY

This issue has been marked as stale, because it has been over 30 days without any activity.

github-actions[bot] avatar Dec 30 '23 21:12 github-actions[bot]

This issue bas been closed, because it has been marked as stale and there has been no activity for over 7 days.

github-actions[bot] avatar Jan 07 '24 21:01 github-actions[bot]

是的,Prompt在ChatGPT或者GPT-4的表现会好一些,其他开源模型表现目前看还比较差。 可以尝试通过P-Tuning、LoRA等方法进行微调。

您好,我想问问我使用的是DB-GPT-HUB中的lora微调Baichuan2-13B模型,微调之后的模型应用于DB-GPT框架出现了这个错误,是微调之后的模型不稳定吗?还是其他原因呢?

KOBEBRYANTand avatar Jun 17 '24 03:06 KOBEBRYANTand