Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用(tex ...

打印 上一主题 下一主题

主题 508|帖子 508|积分 1524

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文件,代码如下:
  1. # 导入sqlite3库,一个Python内置的轻量级数据库
  2. import sqlite3
  3. print("------------------------连接数据库------------------------")
  4. # 连接数据库
  5. conn = sqlite3.connect('demo.db')
  6. cursor = conn.cursor()
  7. print("------------------------数据表创建------------------------")
  8. # 执行SQL命令 创建User表
  9. cursor.execute('''
  10.         CREATE TABLE User (
  11.             ID INTEGER PRIMARY KEY,
  12.             Name TEXT NOT NULL,
  13.             Age INT,
  14.             Money REAL,
  15.             CreateDate DATE DEFAULT CURRENT_DATE
  16.         );
  17.     ''')
  18. print("------------------------数据插入------------------------")
  19. # 插入数据
  20. users = [
  21.     ('Java', 10, 20.5),
  22.     ('Python', 20, 0),
  23.     ('Vue', 33, 55.0),
  24.     ('Go', 5, 100.55),
  25. ]
  26. for user in users:
  27.     cursor.execute('''
  28.         INSERT INTO User (Name, Age, Money)
  29.         VALUES (?, ?, ?);
  30.     ''', user)
  31. print("------------------------查询数据------------------------")
  32. users = cursor.execute("SELECT *  from User")
  33. for row in users:
  34.     print(row)
  35. # 提交更改
  36. conn.commit()
  37. # 关闭数据库连接
  38. conn.close()
复制代码
idea编辑器里运行该文件,会创建一个sqllite的数据库和一个User表,并插入了4条用户数据。反面测试使用。
创建一个文件,例如“chainlit_chat”

  1. mkdir chainlit_chat
复制代码
进入 chainlit_chat文件夹下,执行下令创建python 虚拟环境空间(须要提前安装好python sdk。 Chainlit 须要python>=3.8。,详细操作,由于文章长度题目就不在叙述,自行百度),下令如下:
  1. python -m venv .venv
复制代码


  • 这一步是制止python第三方库辩论,省事版可以跳过
  • .venv是创建的虚拟空间文件夹可以自界说
接下来激活你创建虚拟空间,下令如下:
  1. #linux or mac
  2. source .venv/bin/activate
  3. #windows
  4. .venv\Scripts\activate
复制代码
在项目根目次下创建requirements.txt,内容如下:

  1. langchain
  2. chainlit
  3. chromadb
  4. tiktoken
  5. pymupdf
  6. langchain_community
  7. dashscope~=1.20.3
复制代码
执行以下下令安装依赖:

  1. pip install -r .\requirements.txt
复制代码


  • 安装后,项目根目次下会多出.chainlit 和.files文件夹和chainlit.md文件
在项目根目次下创建.env环境变量,配置如下:

  1. 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文件,代码如下:

  1. import chainlit as cl
  2. from langchain_community.agent_toolkits import SQLDatabaseToolkit, create_sql_agent
  3. from langchain_community.llms import Tongyi
  4. from langchain_community.utilities import SQLDatabase
  5. @cl.step(type="tool", name="数据库查询")
  6. async def db_query(message: cl.Message):
  7.     agent = cl.user_session.get("agent")
  8.     response = {}
  9.     async for chunk in agent.astream(
  10.             message.content
  11.     ):
  12.         response = chunk
  13.     return response['output']
  14. @cl.on_chat_start
  15. async def on_chat_start():
  16.     db = SQLDatabase.from_uri("sqlite:///demo.db")
  17.     llm = Tongyi(model='qwen-plus', verbose=True)
  18.     toolkit = SQLDatabaseToolkit(llm=llm, db=db)
  19.     db_agent = create_sql_agent(
  20.         llm=llm,
  21.         toolkit=toolkit
  22.     )
  23.     cl.user_session.set("agent", db_agent)
  24. @cl.on_message
  25. async def on_message(message: cl.Message):
  26.     output = await db_query(message)
  27.     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代码示例:
  1. # 连接 MySQL 数据库
  2. db_user = "root"
  3. db_password = "12345678"
  4. db_host = "IP"
  5. db_port = "3306"
  6. db_name = "demo"
  7. db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}")
复制代码
运行应用程序

要启动 Chainlit 应用程序,请打开终端并导航到包含的目次app.py。然后运行以下下令:
  1. 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 在本地快速摆设大型语言模型,可举行定制并创建属于您自己的模型》

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表