LangChain 简介
LangChain 是一个开源框架,设计用于开发和部署与语言模型(如大型语言模型LLM)交互的应用程序。它提供了一种简便的方法来构建基于自然语言处理(NLP)的系统,这些系统可以执行各种任务,例如问答、文本生成、文档检索等。LangChain 的主要目标是简化开发过程,使开发者能够快速地将强大的语言模型功能集成到他们的应用程序中。
LangChain 包含三个关键组件:
-
链(Chains):这是执行特定任务的模块化工作流。链条可以简单也可以复杂,取决于任务需求。它们可以是简单的问答机制,也可以是涉及多个步骤的复杂流程。
-
语言模型(Language Models):这些是预训练的模型,可以生成或修改文本。LangChain 支持多种语言模型,包括那些可以从外部服务调用的模型。
-
代理(Agents):代理是更高级的概念,它们使用链条来自主地执行任务。代理可以根据环境或输入数据的变化来决定使用哪些链条,从而实现一定程度的自动化决策。
LangChain 还支持与文档数据库的交互,这使得从结构化数据中提取信息变得容易,并且可以通过 API 调用来集成其他服务。开发者可以利用 LangChain 来创建聊天机器人、虚拟助手、自动化的写作工具以及其他依赖于语言理解和生成的应用程序。
LangChain 官方地址 https://python.langchain.com/v0.2/docs/introduction/
准备数据库、表
使用LangChain中的SQLDatabase工具来与SQL数据库进行交互,首先准备一些测试数据。
基于SQLite数据库
基于SQLite数据库进行基本操作:创建表、插入测试数据以及查询插入数据
在项目根目录下,创建一个sqlite_data.py文件,代码如下:
# 导入sqlite3库,一个Python内置的轻量级数据库
import sqlite3print("------------------------连接数据库------------------------")
# 连接数据库
conn = sqlite3.connect('demo.db')
cursor = conn.cursor()print("------------------------数据表创建------------------------")# 执行SQL命令 创建User表
cursor.execute('''CREATE TABLE User (ID INTEGER PRIMARY KEY, Name TEXT NOT NULL, Age INT,Money REAL,CreateDate DATE DEFAULT CURRENT_DATE );''')print("------------------------数据插入------------------------")
# 插入数据
users = [('Java', 10, 20.5),('Python', 20, 0),('Vue', 33, 55.0),('Go', 5, 100.55),
]for user in users:cursor.execute('''INSERT INTO User (Name, Age, Money) VALUES (?, ?, ?);''', user)print("------------------------查询数据------------------------")
users = cursor.execute("SELECT * from User")
for row in users:print(row)# 提交更改
conn.commit()# 关闭数据库连接
conn.close()
idea编辑器里运行该文件,会创建一个sqllite的数据库和一个User表,并插入了4条用户数据。后面测试使用。
创建一个文件,例如“chainlit_chat”
mkdir chainlit_chat
进入 chainlit_chat
文件夹下,执行命令创建python 虚拟环境空间(需要提前安装好python sdk
。 Chainlit
需要python>=3.8
。,具体操作,由于文章长度问题就不在叙述,自行百度),命令如下:
python -m venv .venv
- 这一步是避免python第三方库冲突,省事版可以跳过
.venv
是创建的虚拟空间文件夹可以自定义
接下来激活你创建虚拟空间,命令如下:
#linux or mac
source .venv/bin/activate
#windows
.venv\Scripts\activate
在项目根目录下创建requirements.txt
,内容如下:
langchain
chainlit
chromadb
tiktoken
pymupdf
langchain_community
dashscope~=1.20.3
执行以下命令安装依赖:
pip install -r .\requirements.txt
- 安装后,项目根目录下会多出
.chainlit
和.files
文件夹和chainlit.md
文件
在项目根目录下创建.env
环境变量,配置如下:
DASHSCOPE_API_KEY="sk-api_key"
DASHSCOPE_API_KEY
是阿里dashscope的服务的APIkey,代码中使用DashScope的sdk实现,所以不需要配置base_url。默认就是阿里的base_url。- 阿里模型接口地址 https://dashscope.console.aliyun.com/model
在项目根目录下创建app.py文件,代码如下:
import chainlit as cl
from langchain_community.agent_toolkits import SQLDatabaseToolkit, create_sql_agent
from langchain_community.llms import Tongyi
from langchain_community.utilities import SQLDatabase@cl.step(type="tool", name="数据库查询")
async def db_query(message: cl.Message):agent = cl.user_session.get("agent")response = {}async for chunk in agent.astream(message.content):response = chunkreturn response['output']@cl.on_chat_start
async def on_chat_start():db = SQLDatabase.from_uri("sqlite:///demo.db")llm = Tongyi(model='qwen-plus', verbose=True)toolkit = SQLDatabaseToolkit(llm=llm, db=db)db_agent = create_sql_agent(llm=llm,toolkit=toolkit)cl.user_session.set("agent", db_agent)@cl.on_message
async def on_message(message: cl.Message):output = await db_query(message)await cl.Message(content=output).send()
db = SQLDatabase.from_uri("sqlite:///demo.db")
中的demo.db
文件是上面sqlite_data.py
文件执行后生成的llm = Tongyi(model='qwen-plus', verbose=True)
中verbose
意思是是否打印详细输出- 在底层,
LangChain
使用SQLAlchemy
连接到 SQL 数据库。因此,SQLDatabaseChain
可以与SQLAlchemy
支持的任何 SQL 方言一起使用,例如MS SQL、MySQL、MariaDB、PostgreSQL、Oracle SQL、Databricks
和SQLite
。有关连接到数据库的要求的更多信息,请参阅 SQLAlchemy 文档。
连接mysql
代码示例:
# 连接 MySQL 数据库
db_user = "root"
db_password = "12345678"
db_host = "IP"
db_port = "3306"
db_name = "demo"
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}")
运行应用程序
要启动 Chainlit
应用程序,请打开终端并导航到包含的目录app.py。然后运行以下命令:
chainlit run app.py -w
- 该
-w
标志告知Chainlit
启用自动重新加载,因此您无需在每次更改应用程序时重新启动服务器。您的聊天机器人 UI 现在应该可以通过http://localhost:8000访问。 - 自定义端口可以追加
--port 80
启动后界面如下:
- 目前存在问题没办法流式输出,因为流公式返回的结果是ai执行sql的过程,最终返回的结果文本是流式返回的最后一段。
- 执行时间有点长,提出问题后,一般5秒左右,才返回。
- 目前支持sql查询相关的操作,不支持数据库新增、修改、删除的操作
相关文章推荐
《Chainlit快速实现AI对话应用的界面定制化教程》
《Chainlit接入FastGpt接口快速实现自定义用户聊天界面》
《使用 Xinference 部署本地模型》
《Fastgpt接入Whisper本地模型实现语音输入》
《Fastgpt部署和接入使用重排模型bge-reranker》
《Fastgpt部署接入 M3E和chatglm2-m3e文本向量模型》
《Fastgpt 无法启动或启动后无法正常使用的讨论(启动失败、用户未注册等问题这里)》
《vllm推理服务兼容openai服务API》
《vLLM模型推理引擎参数大全》
《解决vllm推理框架内在开启多显卡时报错问题》
《Ollama 在本地快速部署大型语言模型,可进行定制并创建属于您自己的模型》