LangChain & Dify
一、LangChain
LangChain是一个用于开发由语言模型驱动的应用程序框架,类似于数据库领域的JDBC,用在数据连接和动作执行等需求上,如个人助手、学习辅助、数据分析等。
1. 核心组件
A. Models:包装器允许连接到大语言模型;
B. Prompt Templates:模板让你避免硬编码文本输入,可以动态地将用户输入插入到模板中,并发送给语言模型;
C. Chains:它将不同的组件组合起来解决特定的任务,如在文本中查找信息;
D. Agents:它使得LLMs能够与外界环境进行交互,如API请求;
E. Embedding:嵌入与向量存储是数据表示和检索的手段,为模型提供必要的语言理解基础;
F. Indexes:索引帮助你从语言模型中提取相关信息;
G. Retrievers:是一个接口,它根据非结构化查询返回文档。
2. 标准接口
A. stream:返回响应的数据块,对应异步返回就是astream;
B. invoke:对输入调用链,对应异步返回就是ainvoke;
C. batch:对输入列表调用链,对应异步返回就是abatch;
D.atream_log:异步返回中间步骤以及最终响应;
E.astream_events:beta流式传输中发生的事件。
3. 底层原理:
4. 代码示例:接入ollama本地大模型

5. Coze是字节跳动推出的一款AI聊天机器人开发平台,专注于为用户提供快速、低门槛的聊天机器人搭建方案。
可参考:LangChain官方文档
二、Dify
Dify是一款开源的大模型应用开发平台,使用DIfy比LangChain能更为简单的搭建应用。
1. 本地私有化部署
A. 下载Docker:前往官网下载Docker,并安装,注意更换镜像源;
B. 安装Ollama:前往官网下载Ollama,并安装,默认端口11434;
C. 安装大模型:ollama run deepseek-r1:8b、ollama run bge-m3:latest;
注意:去掉deepseek返回的think标签可以用代码如下
import re
def main(sql_str) ->dict:
# 使用正则表达式去掉details标签及内容
pattern = re.compile(r'<details.*?</details', '')
sql = pattern.sub('', sql_str)
return {
"result": sql
}
D. 下载Dify包:下载并启动,在docker里env文件末尾添加如下:
# 启用自定义模型 CUSTOM_MODEL_ENABLED=true # 指定 Ollama 的 API 地址(根据部署环境调整 IP) OLLAMA_API_BASE_URL=host.docker.internal:11434
2. 应用分类
A. 聊天助手:基于LLM构建对话式交互的助手。
B. 文本生成:构建面向文本生成类任务的助手;
C. Agent:能够分解任务、推理思考、调用工具的对话式智能助手;
D. 工作流:基于流程编排的方式定义更加灵活的LLM工作流,支持并行节点;
3. 工具

A. 工具可以为工作流提供强大的第三方能力支持,分内置工具(需要授权)和自定义工具(通过OpenAPI-Swagger标准格式导入);
B. 自定义工具:需要开发接口,然后导入引用。
可参考:Dify官网文档
三、Text2SQL
Text2SQL就是指把文本(自然语言)转成数据库结构化语言,亦称NL2SQL
1. 文本转SQL分类
A. Text2SQL:将文本转换为MySQL或Clickhouse查询;
B. Text2DSL:指将文本转换为Elasticsearch的DSL语法查询;
2. 面临问题
A. 应只允许用户查询数据,禁止向数据库或索引中插入、修改与删除数据等操作;
B. 对于大型数据库,可能查询效率低下。
3. Vanna.AI
A. 实现原理:Vanna.AI是基于RAG的SQL生成开源框架,事先用向量数据库将待查询数据库的建表语句、文档、常用SQL及其自然语言查询问题存储起来,当用户发起请求时,会先从向量数据库中检索出相关的建表语句、文档及SQL问答对放入prompt里,LLM根据prompt生成查询SQL并执行,框架会进一步将查询结果使用plotly可视化出来或用LLM生成后续问题。如果用户反馈LLM生成的结果是正确的,可以将这一问答对存储到向量数据库,可以使得以后的生成结果更准确;
B. 优点:
易用性:允许非技术用户通过自然语言与数据库交互,无需编写复杂的SQL查询;
灵活性:它可以处理多种类型的数据库和查询,适用于不同的应用场景;
自我学习:可以在成功执行的查询上“自动训练”或者界面提示用户对结果提供反馈,使未来的结果更加准确;
C. 缺点:
准确性:生成的SQL查询可能不完全准确,可能需要人工干预修正,对于一些复杂的查询语句无法正确生成;
性能:对于大型数据库,生成SQL查询可能会有些慢;
依赖数据库结构:需要事先知道数据库的结构信息,包括表名和字段名。
D. 使用方式
若是私有化部署且不联网:可以本地部署Vanan.AI并调用接口/api/v0/generate_sql?question='',亦或python开发服务引入Vanan库;
若是可以联网:可以使用Dify中工具Vanna.AI进行使用。


可参考:Vanna.AI官方文档
可参考:AI中常用技术学习

浙公网安备 33010602011771号