热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >基于LangChain实现数据库操作的智能体

基于LangChain实现数据库操作的智能体

来源:互联网 更新时间:2026-08-05 16:26

在检索或 ReACT 这类场景中,数据库与人工智能的结合几乎成了标配。LangChain 在这方面封装得非常完善,官方文档中关于 SQL 能力的部分,展示了不少实用示例。 背后的逻辑其实不复杂:用大语言模型把自然语言翻译成 SQL 语句,再通过它去执行数据库操作,最后生成一个自然语言形式的结论。整个过程环环相扣,但每一步都有现成的工具链支撑。

应用场景

在人工智能普及之前,想完成数据查询和分析工作,必须掌握扎实的数据库功底——比如 SQL 语法。但现在,LangChain 结合大语言模型之后,这些事情变得相当轻松:写清晰的提示词就够了。 **生成基于自然语言问题的查询。** 传统工作流里,想在数据库中检索信息,SQL 是绕不开的门槛。学习成本不低,而一旦能用自然语言替代,任何人都可以绕过语法学习,直接上手查询数据。 **根据数据库数据回答问题的聊天机器人。** 做一个基于数据库信息的问答机器人完全不违和。产品经理、业务人员,都可以轻松获取数据库里的信息,不再需要依赖技术人员帮忙跑查询。 **数据分析展示面板。** 以前做数据分析和报表展示,往往需要手动写 SQL,再配各种表格。这个过程,现在也可以交给人工智能来处理。

实战案例

需求说明

- 输入查询需求,返回查询结果。 - 查询结果可以选择用自然语言表述(这是一个可选项)。

实现思路

整体思路很清晰:先通过大语言模型将问题转化为 SQL 查询语句,再执行这个查询,最后把执行结果用自然语言包装后返回给用户。每一步都可以用 LangChain 提供的工具链串起来。

对应源码

实现输入提示词、返回查询结果的基础链路如下:
from langchain_community.utilities import SQLDatabase  
db = SQLDatabase.from_uri("sqlite:///Chinook.db")  

# 通过 LLM 获取查询语句  
from langchain.chains import create_sql_query_chain  
from langchain_openai import ChatOpenAI  
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)  
from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool  

# 执行查询动作  
execute_query = QuerySQLDataBaseTool(db=db)  
write_query = create_sql_query_chain(llm, db)  

# 先生成查询语句,再执行查询动作  
chain = write_query | execute_query  
response = chain.invoke({"question": "How many employees are there"})  
print(response)
如果希望查询结果能转换成自然语言,让人更容易理解,可以再追加一个步骤:
from operator import itemgetter  
from langchain_core.output_parsers import StrOutputParser  
from langchain_core.prompts import PromptTemplate  
from langchain_core.runnables import RunnablePassthrough  

answer_prompt = PromptTemplate.from_template(  
"""Given the following user question, corresponding SQL query, and SQL result, answer the user question.

Question: {question}
SQL Query: {query}
SQL Result: {result}
Answer: """  
)  

answer = answer_prompt | llm | StrOutputParser()  

chain = (  
    RunnablePassthrough.assign(query=write_query).assign(  
        result=itemgetter("query") | execute_query  
    )  
    | answer  
)  
print(chain.invoke({"question": "How many employees are there"}))

解决数据库表数据过多的问题

实际使用中,如果数据库里的表太多,可以考虑限制可用的表名,缩小查询范围,也能节省 Token 开销:
chain.invoke(SQLInputWithTables(question="xxx", table_names_to_use=['表a', '表b']))

总结

1. 掌握 LangChain 完成数据库操作的应用场景。 2. 掌握通过 LangChain 完成数据库查询的能力。 3. 掌握通过 LangChain 将查询结果转换为自然语言的能力。
关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc