本文记录如何实现一个简单的问答功能,基于SQL数据库执行查询,并通过大模型处理查询结果以生成回答。
在生产环境中部署时,除了以下基础步骤外,还需要考虑连接数据库的安全性、查询语句的审核、超大表格的处理、多轮对话的支持等,将在后续的实践中逐步完善。
案例中的数据集是一个虚构的员工数据集,包含了员工的基本信息、部门信息、入离职时间等。
若对虚构数据集感兴趣,可以参考这篇笔记虚构数据集。
首先通过数据库的URI,建立与数据库的连接。方便起见,这里使用 langchain_community.utilities
中的 SQLDatabase
类,其封装了一系列便捷的方法获取数据库与表格信息。
在企业环境中,通过 pymysql 或 sqlalchemy 等基础库也可以实现相同的功能。
为了使大模型能够根据问题生成正确的查询语句,需要将表格的结构和字段信息传递给大模型。
SQLDatabase
类中的 get_table_info
方法非常实用的获取了表格的字段信息,并提供了前几行数据的预览。
这里构建一段提示词,创建一个让大模型根据问题生成查询语句的任务。
创建一个将结果传递给大模型,并生成自然语言回答的任务,输出最终的回答。
PS:此处的提示词抄袭了Langchain官网的示例
将上述步骤集成到一个 Chain
中,使得整个问答系统可以一次性执行。
测试效果: