<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NLU Archive - Das ist die Welt von Thomas</title>
	<atom:link href="https://www.schiffler.eu/thema/nlu/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.schiffler.eu/thema/nlu/</link>
	<description>meine Gedanken, mal strukturiert, mal nicht ...</description>
	<lastBuildDate>Wed, 22 Jan 2025 06:23:24 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.schiffler.eu/wp-content/uploads/2025/07/cropped-Profilfoto_2024-32x32.png</url>
	<title>NLU Archive - Das ist die Welt von Thomas</title>
	<link>https://www.schiffler.eu/thema/nlu/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Dockerfile für SNIPS NLU &#8211; Fix für SSLError / CertificateError</title>
		<link>https://www.schiffler.eu/dockerfile-fuer-snips-nlu-fix-fuer-sslerror/</link>
					<comments>https://www.schiffler.eu/dockerfile-fuer-snips-nlu-fix-fuer-sslerror/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Tue, 17 Oct 2023 21:16:00 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[assistent.ai]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Conversational AI]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[NLU]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Snips]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=1988</guid>

					<description><![CDATA[<p>Trotz generativer KI ist das Thema NLU noch nicht ganz vom Tisch. Dem ein oder anderen ist die SNIPS NLU &#8230; <a href="https://www.schiffler.eu/dockerfile-fuer-snips-nlu-fix-fuer-sslerror/" class="more-link">More <span class="screen-reader-text">Dockerfile für SNIPS NLU &#8211; Fix für SSLError / CertificateError</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/dockerfile-fuer-snips-nlu-fix-fuer-sslerror/">Dockerfile für SNIPS NLU &#8211; Fix für SSLError / CertificateError</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Trotz generativer KI ist das Thema NLU noch nicht ganz vom Tisch. Dem ein oder anderen ist die <a href="https://snips-nlu.readthedocs.io/en/latest/">SNIPS NLU</a> vermutlich noch ein begriff. Diese leichtgewichtige NLU wurde seinerzeit als Open-Source NLU umgesetzt und zeichnete sich durch seine Offlinefähigkeit aus. Nachdem das Startup hinter der NLU von Sonos übernommen wurde war dann Schluß mit Lustig für die NLU. Zwar steht das <a href="https://github.com/snipsco/snips-nlu" target="_blank" rel="noreferrer noopener">Repository noch auf Github</a> zur Verfügung, lässt sich aber nicht mehr ohne weiteres bauen oder installieren. </p>



<p class="wp-block-paragraph">Da ich die NLU selbst für ein <a href="https://www.schiffler.eu/thema/conversational-ai/">eigenes Projekt</a> benötige habe ich mir die Mühe gemacht, selbige wieder zum Laufen zu bekommen. Die hierfür notwendigen Schritte sind in diesem Artikel dokumentiert.</p>



<h2 class="wp-block-heading">Was ist das Fehlerbild?</h2>



<p class="wp-block-paragraph">Versucht man die <a href="https://snips-nlu.readthedocs.io/en/latest/installation.html" target="_blank" rel="noreferrer noopener">SNIPS-NLU wie in der Dokumentation beschrieben zu installieren</a> so kommt es zu einem SSL-Fehler. Der Fehler selbst tritt beim Versuch die Entitys für Deutsch herunterzuladen. Hierbei kommt die folgende Fehlermeldung:</p>



<pre class="wp-block-code"><code>requests.exceptions.SSLError: HTTPSConnectionPool(host='resources.snips.ai', port=443): Max retries exceeded with url: /nlu/gazetteer-entities/de/country/v0.2/latest (Caused b<br>y SSLError(CertificateError("hostname 'resources.snips.ai' doesn't match either of 'cloudfront.net', '*.cloudfront.net'",),))</code></pre>



<p class="wp-block-paragraph">Die Fehlermeldung ist recht eindeutig und sagt aus, dass das SSL-Zertifikat für die Domain resources.snips.ai quasi abgelaufen ist und aus diesem Grund der SSL-Check fehlschlägt. Der Download der System-Entities ist somit leider nicht möglich. </p>



<h2 class="wp-block-heading">utils.py bearbeiten und SSL-Check deaktivieren</h2>



<p class="wp-block-paragraph">Nachdem meine Versuche fehlschlugen den SSL-Check auf Betriebssystemebene zu deaktivieren blieb mir nur ein Blick in den Quellcode. Die SNIPS NLU lädt über die Datei <a href="https://github.com/snipsco/snips-nlu/blob/master/snips_nlu/cli/utils.py">utils.py</a> über eine Methode &#8218;get_json&#8216; das Json-File vom Remote Server. Hierbei wird die requests.get Methode genutzt. Über die zusätzliche Angabe des Parameters &#8218;verify=False&#8216; kann die SSL-Zertifikatsprüfung deaktiviert werden. </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h5 class="wp-block-heading">alter Code (ab Zeile 71)</h5>



<pre class="wp-block-code"><code>def get_json(url, desc):
    r = requests.get(url)
    if r.status_code != 200:
        raise OSError("%s: Received status code %s when fetching the resource"
                      % (desc, r.status_code))
    return r.json()
</code></pre>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h5 class="wp-block-heading">neuer Code &#8211; <a href="https://github.com/tschiffler/snips-nlu/blob/master/snips_nlu/cli/utils.py">siehe Github</a></h5>



<pre class="wp-block-code"><code>def get_json(url, desc):
    r = requests.get(url, verify=False)
    if r.status_code != 200:
        raise OSError("%s: Received status code %s when fetching the resource"
                      % (desc, r.status_code))
    return r.json()
</code></pre>
</div>
</div>



<h2 class="wp-block-heading">Docker-Image bauen und Files ersetzen</h2>



<p class="wp-block-paragraph">Nachdem nun die entsprechenden Anpassungen im Code erfolgt sind muss noch der passende Docker-Container gebaut werden. Hier mein Docker-File:</p>



<pre class="wp-block-code"><code>FROM python:3.6-slim-stretch

#set TimeZone
ENV TZ="Europe/Berlin"

#setup Snips
RUN pip install urllib3==1.26.6
RUN pip install snips-nlu

#Download Languages
RUN python -m snips_nlu download-all-languages

#Copy Files for Snips
COPY files/cli/utils.py /usr/local/lib/python3.6/site-packages/snips_nlu/cli/utils.py

#Prepare for Downloading languages
RUN pip config set global.trusted-host "resources.snips.ai" --trusted-host=https://resources.snips.ai/

#Download entites
RUN python -m snips_nlu download-language-entities de
RUN python -m snips_nlu download-language-entities en

#setup Endpoints
RUN pip install fastapi
RUN pip install uvicorn
</code></pre>



<h2 class="wp-block-heading">SNIPS NLU Code auf Gihub veröffentlicht</h2>



<p class="wp-block-paragraph">Sowohl der Code der angepassten utils.py als auch des Dockerfiles wurden auf Github.com veröffentlicht:</p>



<ul class="wp-block-list">
<li><a href="https://github.com/tschiffler/snips-nlu-docker/blob/main/files/cli/utils.py">utils.py</a></li>



<li><a href="https://github.com/tschiffler/snips-nlu-docker/blob/main/Dockerfile">Dockerfile</a></li>



<li><a href="https://github.com/tschiffler/snips-nlu-docker">Gesamtprojekt</a></li>
</ul>



<h2 class="wp-block-heading">Erweiterung im Webservice</h2>



<p class="wp-block-paragraph">Im Dockerfile selbst wird von mir noch die fastapi mit installiert. Dies hat den Hintergrund dass ich mir einen eigenen kleinen Restservice mit Python geschrieben habe, welcher mit die Snips-Funktionalitäten per Rest bereit stellt. So kann die NLU bequem in bestehende Prozesse integriert werden. </p>



<p class="wp-block-paragraph">Sollte jemand Interesse an diesem Service haben so gebt mir kurz bescheid und ich veröffentlichte den aktuellen Code. Dieser ist aktuell noch in Arbeit, so dass eine Veröffentlichung aktuell noch wenig Sinn ergibt <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/dockerfile-fuer-snips-nlu-fix-fuer-sslerror/">Dockerfile für SNIPS NLU &#8211; Fix für SSLError / CertificateError</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/dockerfile-fuer-snips-nlu-fix-fuer-sslerror/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 44/53 objects using APC
Page Caching using Disk: Enhanced 
Lazy Loading (feed)
Minified using APC
Database Caching 12/25 queries in 0.002 seconds using APC

Served from: www.schiffler.eu @ 2026-06-24 08:18:07 by W3 Total Cache
-->