大模型在技术上 能 / 怎么 实现比较准确的数据库查询 吗/呢 ? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
p1nk
V2EX    程序员

大模型在技术上 能 / 怎么 实现比较准确的数据库查询 吗/呢 ?

  p1nk 183 天前 8271 次点击
这是一个创建于 183 天前的主题,其中的信息可能已经有所发展或是发生改变。

背景

领导给了个任务,在本地配置一个 deepseek 大模型,然后构建公司内部的知识库、连接公司内部的数据库,实现领导和员工对访问需求。 现在上述三个任务都已经实现了,但是在对接数据库查询这块有很大问题。

问题

在将提示词(包含任务要求、数据表信息)和用户给到模型之后,模型给出的 sql 语句,十次有七次是直接无法执行的,基本就是语法有问题(常见错误 order by 、to_char 等等),再有三次就是和表结构有冲突,无法执行。

尝试

我尝试根据它 sql 的错误语法再加提示词,但是问题是越来越多的提示词再加上需要告知的表结构,提示词都快把可输入最长 token 占满了,而且提示词也不是百分百有效(比如我告诉它不要使用任何 order by ,但是还是输出...)

疑惑

我一开始就怀疑这件事是否可行,现在变得严格怀疑这件事是否可行。
表结构很简单的话我尝试过没有任何问题,可以做到百分百不出错,但是一旦企业的表结构极其复杂各种嵌套,在这种情况下还一定要用自然语言生成需要精准执行的 SQL 语句,我严格怀疑能做到么?
希望是我的技术水平不够,能有大佬帮我解解惑

78 条回复    2025-07-03 14:22:36 +08:00
leonhao
    1
leonhao  
   183 天前   1
你需要先把表结构转化成简单的结构,现在的 AI 还没这么智能,题外话,随便应付一下领导得了,反正无法上线,这个场景现阶段就是个玩具
mumbler
    2
mumbler  
   183 天前
我们团队能做到,找我们合作啊
ferock
    3
ferock  
PRO
   183 天前 via iPhone
写那么多提示词就差自己写 sql 教 ai 了
Varsion13
    4
Varsion13  
   183 天前   3
可以换一个思路(目前我们是这么做的)

开放 API 给 AI ,喊 AI 根据对话内容直接请求对应的 API ,然后展示 Response
elron
    5
elron  
   183 天前
text2sql 很常见的技术啊
sunmacarenas
    6
sunmacarenas  
   183 天前   1
可以看下 ragflow 里的 DB Assistant 这个 Agent
p1nk
    7
p1nk  
OP
   183 天前
@leonhao #1 我也是这么觉得,得让数据库同事弄个简单的表出来,别整那么复杂。而且说这么多到头来也是给自己和别的同事找工作,还不一定有成效...

@Varsion13 #4 大佬这个思路好厉害,确实是一个方法我琢磨琢磨

@elron #5 我指的是对于复杂的表结构和问题,模型不能生成正确的 sql
XG9H3BN7CWMMmnjw
    8
XG9H3BN7CWMMmnjw  
   183 天前
我觉得是无法做到百分百准确,最多接近正确答案
daodao
    9
daodao  
   183 天前
你说的这个需求 是现在大模型落地最常见的应用场景。。。
sunny352787
    10
sunny352787  
   183 天前   1
这不就是 MCP 吗?你搭一个 MCP 服务让 AI 调用就好了
hmxxmh
    11
hmxxmh  
   183 天前   1
最早可以用 function call,现在都是 mcp
hefish
    12
hefish  
   183 天前
不能把机器当人使。。。。

同理,也不能把人当机器使。。。
p1nk
    13
p1nk  
OP
   183 天前
@sunmacarenas #6

@sunny352787 #10

@hmxxmh #11

感谢大佬,我研究一下。
我一直在弄 function call ,敢情都有 mcp 了。一直瞎造轮子
sayoko
    14
sayoko  
   183 天前   1
可以参考下这个库,只试用过 https://github.com/vanna-ai/vanna
XG9H3BN7CWMMmnjw
    15
XG9H3BN7CWMMmnjw  
   183 天前
@p1nk #13 楼主最靠谱的就是用 MCP 参考 4 楼说的,生成 sql 都是白扯
ChoiYoonJung
    16
ChoiYoonJung  
   183 天前   1
除了 mcp 什么的,如果一定想要用大模型生成 sql 直接用,可以参考 dify 工作流的方式,加一个节点让大模型去校验 sql 并给出修改意见,然后根据修改意见再改一版
MRlaopeng
    17
MRlaopeng  
   183 天前
大佬这个咋实现的 (构建公司内部的知识库、连接公司内部的数据库,实现领导和员工对访问需求)
super452
    18
super452  
   183 天前
要是这个需求能落地,sqlboy 的末日就到了 hh
hhyyd
    19
hhyyd  
   183 天前
很难哎,应该把大模型更多当人来看,就像一个新入职的员工,直接让他按 XXX 口径取 XXX 数据, 他不知道数据不知道业务,很容易取错。


就算带了两年给训练成熟练工了,取相同的数据也很难一口气写个 100%对的 sql 。更别说业务的迭代了
skyemin
    20
skyemin  
   183 天前
@Varsion13 请教一下 ai 现在可以直接请求 api 吗,怎么实现的
qianmoumou
    21
qianmoumou  
   183 天前
prompt+mcp 就行了
jimrok
    22
jimrok  
   183 天前
提取数据的事情还是让 mcp 做吧,又能控制权限,又能适配数据库变化。
NizumaEiji
    23
NizumaEiji  
   183 天前
这不就是 text2sql 么 我最近也在搞类似的问题 但是感觉还好

你是直接给了业务表的表结构和查询权限给 llm 了么 然后因为业务表结构太多太乱导致模型自己的生成的 sql 比较混乱么

是否可以考虑缩减给 llm 的 prompt 里的表结构中的字段,把你觉得没用的或者冗余的字段给删掉

或者你可以自己定义实现一个跟业务有关的宽表给 llm 做查询
AlexBob
    24
AlexBob  
   183 天前
你要把你的数据库,数据化,训练模型才能达到你们说的这个效果,用开源的就是一个玩具,它是辅助,不会思考的.

每次更新数据库结构,表结构,去训练模型.
luoyide2010
    25
luoyide2010  
   183 天前
有条件就大模型微调呗,感觉 deepseek 知识库一般般,幻觉相对严重,不太适合这种任务
ljpCN
    26
ljpCN  
   183 天前
听 4 楼的,在大模型能力有下一个台阶飞跃之前,你只能做点中间层的工作来弥补
kjstart
    27
kjstart  
   183 天前
我也做了, 查询太复杂你就先定义一些 mcp 顶一下. 否则提示写太多模型也蒙了.
mumbler
    28
mumbler  
   183 天前
@skyemin #20 function calling,tools use,mcp 了解一下
cylaw
    29
cylaw  
   183 天前
@Varsion13 请教一下,如果用 MCP ,应该用什么思路去做通用查询?用户每次查询的请求都不同,对应到具体 SQL 或 API 肯定也不同
p1nk
    30
p1nk  
OP
   183 天前
@Fca #15 感谢大佬,我看了下 mcp 介绍和几个小 demo ,确实很像 #4 那种实现方式,通过语句分析出执行哪个方法然后去 server 执行。我再研究研究


@sayoko #14 感谢,我看 readme 可能和我理解的普通的差不多,我具体细看一下


@ChoiYoonJung #16 使用过但是没研究过 dify ,“加一个节点让大模型去校验 sql 并给出修改意见然后再次执行”,感觉意义不大,因为 sql 的报错的参考价值不大...


@MRlaopeng #17 分别是本地生成 faiss 、langchain 和 sqlalchemy 通过 create_sql_query_chain 连接、使用 fastapi


@super452 #18 hahhaa 我真想过这个事


@NizumaEiji #23
是的,给了表结构,不然 llm 不知道列代表啥。我目前只测试了两个表总共十个列属性给到 prompt ,就这都各种错。正式库中总共一百多个表,每个表至少 5 个关键列,再加上各种外键,光提示结构估计都要把 prompt 的 token 占满
至于单独建一个跟业务有关的表只给 llm 做查询用,这个也是退而求其次的想法了,感觉也只能这样了。不然表结构那么大,别说模型,就是告诉一个人,他都得来回查来回对比


@billbob #24 大佬方便细说一下吗?“把数据库数据化”没明白,是指把数据库的数据提取成知识给到 llm 吗?


@luoyide2010 #25 数据库相关也不太好微调呀,数据库每时每刻都在变


@kjstart #27 我听前面的大佬说的 mcp 也去研究了下,感觉其实就是个封装好的 function calling 。面对公司定制化的业务端的需求,自己手动 function calling 没差,也不知道还是我理解错了
XG9H3BN7CWMMmnjw
    31
XG9H3BN7CWMMmnjw  
   183 天前
@p1nk #30 考虑把数据库的数据都向量化,这样也能通过向量模型和向量数据库匹配出最相似的数据
ChoiYoonJung
    32
ChoiYoonJung  
   183 天前   1
@p1nk #30 还是可以尝试一下,我这边去做类似的需求的时候,基本语法和表结构还是可以修复的,这个不一定在 sql 执行后做,初版 sql 写出来就可以做校验了,然后就是看之前的提示词有没有用类似少样本的一些技巧,也可以有一些提升
Charon2050
    33
Charon2050  
   183 天前
方案 1:While 语句没成功 : {请求大模型回答}
方案 2:把返回值发给大模型,让它自行判断是否成功
davidqw
    34
davidqw  
   183 天前
MCP 最有用的场景之一就是数据库
r00mz
    35
r00mz  
   183 天前   1
放弃遐想,现阶段你老板的需求是伪需求,无法做到精准查询。题外话,数据库查询和 MCP 有啥关系,MCP 就一个协议而已。
pweng286
    36
pweng286  
   183 天前
简单的应该可以吧
我们数据库里边字段一大堆还涉及到 json 字段的处理.ai 就完全胡言乱语了
fcbwalk
    37
fcbwalk  
   183 天前
MCP-server 是更好的方案。你在本地部署的 deepseek 够用吗,需要啥配置?我目前就是没有好的 LLM 可用,感觉效果最好的是 Claude Desktop(Claude 3.7 Sonnet),但是免费每天有使用限制。如果不在乎数据隐私安全的话,我建议你直接使用 Claude Desktop ,然后配置下 MCP ,就可以直接用了,甚至还能根据 sql 查询结果直接生成 react 代码编写的可视化图表。
AlexBob
    38
AlexBob  
   183 天前
@p1nk 模型训练,你用的所有模型都是训练出来的.
你可以根据你的业务,数据库专门去训练模型,来帮你.
bbao
    39
bbao  
   183 天前
一个领导的玩具~~
Suger828
    40
Suger828  
   183 天前
mcp 有毛用,他不也是生成 sql , 最大的难点是大模型不能理解你的业务需求,还有表多导致的多表连接查询,和选择表会出错
Clannad0708
    41
Clannad0708  
   183 天前
mcp function call 都行,顺便问下
大佬这个咋实现的 (构建公司内部的知识库、连接公司内部的数据库,实现领导和员工对访问需求)
这个是怎么做的
YOUXIAZ
    42
YOUXIAZ  
   183 天前   1
skyemin
    43
skyemin  
   183 天前
@YOUXIAZ 没理解 Cursor 调 MCP Server 是怎么能直接查数据库,用的什么技术
aeron
    44
aeron  
   183 天前
@cylaw ReAct ,模型自己生成 sql ,自己去尝试执行,自己判定执行结果。最简单的参考 langchain 的官方示例就能写一个
z1gui
    45
z1gui  
   183 天前
我没太懂如何结合 ds+mcp 的,是通过 dify_或者 fastgpt 这类 agent 工具么,看楼上的教程,通过 cursor 或者 cherry studio 配置 mcp 服务的。另外,mcp 服务查询常规的 mysql ,oracle 数据库肯定是没问题,如果是不常规的一些国产数据库,mcp 服务是不是要自己写,那如何创建一个 mcp 服务啊
dabingbing
    46
dabingbing  
   183 天前   2
1.反正不能随便问,设计几个可能用的到的业务,数据做成宽表,视图貌似就可以
2.mcp 没毛用
lawrencelee
    47
lawrencelee  
   183 天前   1
常规的 text2sql 在宽表上表现比较好,但一旦涉及星型和雪花这种模型就容易吃瘪。我们采取的方式是根据业务精调模型,效果还挺好,就是精调模型有前期成本。
easing
    48
easing  
   183 天前   4
说 MCP 的是以为 OP 不知道怎么让大模型执行 sql 查询么。。。
OP 的问题是大模型生成的 sql 语句准确率不足的问题,这个和 MCP 有半毛钱关系
zzxCNCZ
    49
zzxCNCZ  
   183 天前   2
正好我也做过这方面的相关业务,楼上说的 mcp 给开发用用还行,实际公司业务一般都是分块,设计多表关联,都比较复杂,cp 应对简单的还行,复杂的业务,比方说表关联是在应用层做的,在数据表设计中没有体现,直接使用 mcp 就会吃瘪。我们最终实现比价精准的方案是通过 1.表数据清晰 2.清洗表结构整理,字段说明 3.业务分块代入到 ai 上下文中 最终就能实现描述特定业务,找到业务表,生成 sql ,再查询
niubiman
    50
niubiman  
   183 天前   1
我今天下午也在测试这个, 我用通义灵码然后把数据库结构文件添加到上下文进行对话, 可以针对表结构进行比较准确的生成, 并且语法也符合目标库的语法
Orlion
    51
Orlion  
   183 天前
恰好我最近在做类似的事情,思路是:给大模型一个简单的表结构,输出“正确的”SQL ,然后再做一个 sql parser ,适配输出符合真实业务表结构的 sql
luqicoder67
    52
luqicoder67  
   183 天前
好奇 op 背景中的 3 个任务怎么完成的,学习一下
highkay
    53
highkay  
   183 天前   2
1. mcp 只是一套标准的协议,也就是 api 设计和实现规范,和你业务完全没关系,目前 db 相关的几个 mcp 基本处于玩具的状态,满足不了实际的业务需求。
2. 一般用户需要的其实是 BI ,所以可以看看 headless bi 的产品,比如腾讯的 https://github.com/tencentmusic/supersonic
mightybruce
    54
mightybruce  
   183 天前   1
大模型和 MCP 并不能直接解决这些问题, 这个任务叫做 NL2SQL, 看你的任务有多复杂,这 NL2SQL 比大模型出现都早好几年, 你多研究研究吧, 多数人说的都是错的。
https://github.com/hkustdial/nl2sql_handbook
https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/llm-based-nl2sql
mightybruce
    55
mightybruce  
   183 天前   1
如果你们想一部到位,不如花钱去买 chatbi 的 AI 产品,网易数帆和百度千帆都有这种的。

国内业界做的比较好的是蚂蚁搞的 text2sql 相关的项目
下面这个 DB-GPT 支持对 text2sql 的微调。

https://github.com/eosphoros-ai/DB-GPT
    56
p1nk  
OP
   183 天前
@Fca #31 数据库的数据怎么向量化呢?我搜到的都是非结构化内容向量化成 faiss ,没有搜到把 sql 、oracle 这种数据库向量化的内容,大佬方便说下吗?


@ChoiYoonJung #32 感谢,那我明天试试,循环几次同时带上错误信息


@pweng286 #36 简单的可以,复杂的就不行了。哪怕用很简单的方式就能调戏模型。给他一段代码其中包含 ` # 这种东西,然后让他正则匹配其中某一部分。模型给的结果就会乱掉


@fcbwalk #37
本地的是个小的,目前单位在采购设备布 671B 。至于数据安全,领导最担心的就是数据安全,不然也不会花老鼻子钱买设备了
关于提到 “MCP-server 是更好的方案”,我的理解不知道对不对。我研究了几个 demo ,目前客户端怎么开发还没整明白,但是他大概的逻辑我看明白了,可是我感觉还是走的 function 那套呀,不过是大家都是同一种协议可以公开互相用。但面对公司独特的业务场景,server 端还是得自己写,同时也没办法公开出去,不是又和 function calling 一样了吗
mightybruce
    57
mightybruce  
   183 天前
RAG 是可以解决一部分问题,不过 V2EX 上的人回答都不对, 可以看看 finglm 智谱金融行业大模型挑战赛, V2EX 上没几个做这个相关的,这都是前沿技术,要都懂了怎么可能。
https://github.com/MetaGLM/FinGLM2/tree/main/baseline/soldier_baseline
https://github.com/Jinglever/FinGLM2-semi-final
eric227
    58
eric227  
   183 天前
关键词:Text2DSL
frandy
    59
frandy  
   183 天前   15
巧了,仅一个月就在弄这样的产品,首先罗列下相关的开源项目
https://github.com/tencentmusic/supersonic 腾讯音乐出的 chatbi,结合 llm 和 bi 能力,看完源码,你会发现,是先通过传统的 bi 进行语义匹配,然后仍给 llm 做处理,减少模型的幻觉产生
https://github.com/eosphoros-ai/DB-GPT 核心是它的提示词,核心是它的提示词,核心是它的提示词,可以得到图表
https://github.com/CodePhiliaX/Chat2DB 开源版就是挂羊头卖狗肉,广告做的好
好了,说了那么多,就是 Text2Sql 的本质就是大模型自身的能力,
我们能做的是
1 、在喂给大模型之前,做一些语义处理,然后大模型生成 sql 之后,对 sql 进行校正,这一块,又可以让大模型来校正,反复迭代
2 、表结构不要有歧义性,关联的 id 等需要明确表明是哪个表的哪个字段,这样处理之后,32b 参数量的模型,至少能准确生成 2-3 张表关联的 sql 语句
3 、引入 rag,可以把 ddl 的信息做成 rag ,然后先进行相似度匹配,然后得到对应的相关表结构信息,最后生成 sql.
4 、切分场景,不要一把梭把所有表结构信息都仍给大模型,大模型也扛不住,尽量切分场景,场景的识别也可以依靠大模型,专业术语叫意图识别
5 、指令型的大模型比推理型的速度要高,但是出的结果不一定准确,可以结合使用。
至于 mcp,emm,别太神话。追根到对应的某个 mcp 服务器的相关源码,其实还是上面那些
以上就是我近一个月开发此类产品的最大体会。
ps:这种类型的需求,领导是最喜欢的,但是,mmp 的这种需求,你必须得知道你的数据库里有哪些信息的数据,所以就等于领导要有提问的艺术,而这,是领导缺乏的。so,做此类需求,只能尽人事,听天命,懂甩锅,会报命。
xvan
    60
xvan  
   183 天前
不管是大模型或者是专门的 nl2sql 的模型,都会有生成语句无法查询出结果甚至复杂到无限输出的问题,尤其是复杂的查询。如果是给领导演示,尽可能的梳理业务将可能查询的数据生成的新的简单的表,而不是现场进行各种多表查询。
vem
    61
vem  
   183 天前
Dify + 这个插件 https://marketplace.dify.ai/plugins/jaguarliuu/rookie_text2data
实测 MySQL 在表不多的情况下,比我预想的要好
iyaozhen
    62
iyaozhen  
   183 天前
可能没那么复杂

在本地配置一个 deepseek 大模型,换成字节火山云上的满血版,可能就好了
yufeng0681
    63
yufeng0681  
   183 天前
@frandy #59 我感觉应该是分析语义,识别用户真实意图,系统以前实现的数据查询场景都可以映射出来,通过语义来控制。 如果是新的查询场景,那就要一步步拆解,先分析出要用到哪几张表,表里的哪几个字段; 输出是要呈现哪几个字段。 然后再告知 AI ,输入和输出 [我想象,应该是 AI Agent 来拆分实现这个]
macadurian
    64
macadurian  
   183 天前
能问一下你的服务器配置吗?部署的 deepseek 哪个版本的模型?
Loocor
    65
Loocor  
   183 天前
斗胆分享一个我弄的试验库: https://github.com/loocor/db2llm
视频介绍在: https://www.zhihu.com/zvideo/1883089086501352960
kjstart
    66
kjstart  
   183 天前
@p1nk 没差, 但你写了 mcp 不就能用大模型分析回复了吗? 你自己查数不是还要自己估嘛, 那不 AI...
XCFOX
    67
XCFOX  
   182 天前
分析一下我的思路:

1. 将数据库以 GraphQL 的形式暴露 API ,使用 Hasura 或 Graphile
2. 将 GraphQL 通过 MCP 连接到 AI ,使用 https://github.com/blurrah/mcp-graphql
akira
    68
akira  
   182 天前
最近刚好在做 chat bi 的东西,其实如果你们之前 bi 构建了的话,
不要直接用 生产库的数据 来出, 走 BI 的宽表 ,这个时候出来的效果就好很多啦
horizon
    69
horizon  
   182 天前
不能,你需要 function calling
提供 sql api ,让大模型填充参数
elevioux
    70
elevioux  
   182 天前
不知道楼上说的 mcp 和 题主的需求有什么关系,mcp 本质不就是远程的 function call 吗?难道还要限定用户的话题范围? function call 没有覆盖的,一律不知道?

最近公司老板也有相似需求,而且还要鉴别用户权限,限定可查数据。我的做法是根据用户 ID 手动创建固定的临时表,整理好所有可查数据。AI 只需要对接几个临时表就好,不用管数据库一大堆乱七八糟的表。

效果是,生成 SQL 本身没问题,但 AI 还不能完全理解业务,差强人意,还要调教。
chunshuxvgou
    71
chunshuxvgou  
   182 天前
你本地部署的是哪个模型? 32b? 70b ?
111111111111
    72
111111111111  
   182 天前   1
怎么这么多人无脑 MCP ,MCP 只是个接口协议和数据库没啥关系呀

我这边自己做的 demo 是:
- rag (描述业务关系和数据关系)+
- function calling (执行 sql )
- 提示词工程(要求 LLM 按照既定步骤进行,比如先查表结构再生成 SQL ,认真检查和验证 SQL ,最后再执行 SQ 取数据回答问题)

在表不多而且表关系不那么复杂的情况下,效果看起来还好,至少没有再出现生成的 SQL 执行不了,几乎不太需要代码级别干预,但是 LLM 在生成 SQL 过于聚焦你提出的“问题”,问题之外的事情考虑还是不完善,比如人的重名,数据的统计维度。所以还是需要每次的反馈,不断调整问题或者提示词。

在这个 demo 中,我的感受是:其他人必须要通过我来使用效果才好,直接给他们用效果非常差
因为我会把他们的的问题或者需求理解一遍后,再以 LLM 更容易理解正确的方式进行提问,
这有点像专职司机,车是公司的,但是只有我最懂它,最能用好它,知道怎么对它进行保养维护
areless
    73
areless  
   182 天前 via Android
text2sql 是有专门的比赛 排名的。现在只不过换了一种使用 llm 的方式去解决这个问题。实际上排名靠前的成功率也是不高的。
lawrencelee
    74
lawrencelee  
   182 天前
@areless 话说这个比赛在哪里呀?
kelvinji2009
    75
kelvinji2009  
   182 天前
@frandy 相似理解和感受
Hyxiao
    76
Hyxiao  
   182 天前
场景跟你差不多,但是我们数据是保存在 es 中的,最近将 es 升到了 8 ,支持了语义搜索,在 dify 设置外置知识库对接项目提供的接口,就可以做到问的问题都可以关联上 es 相关的内容
areless
    77
areless  
   182 天前 via Android
@lawrencelee 在阿里在阿里,2019 年首届中文 nl2sql
NothingExist
    78
NothingExist  
   98 天前
@Varsion13 有什么 API 呢
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     867 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 32ms UTC 21:50 PVG 05:50 LAX 14:50 JFK 17:50
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86