<?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>OpenWebUI &#8211; my blog &#8211; nutttaro</title>
	<atom:link href="https://nutttaro.com/blog/tag/openwebui/feed/" rel="self" type="application/rss+xml" />
	<link>https://nutttaro.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 03 Jul 2026 02:54:36 +0000</lastBuildDate>
	<language>th</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://nutttaro.com/blog/wp-content/uploads/2026/07/fav.gif</url>
	<title>OpenWebUI &#8211; my blog &#8211; nutttaro</title>
	<link>https://nutttaro.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>สร้าง Local LLM ใช้เองตั้งแต่ศูนย์</title>
		<link>https://nutttaro.com/blog/local-llm-with-5060-ti/</link>
					<comments>https://nutttaro.com/blog/local-llm-with-5060-ti/#respond</comments>
		
		<dc:creator><![CDATA[nutttaro]]></dc:creator>
		<pubDate>Fri, 03 Jul 2026 02:00:00 +0000</pubDate>
				<category><![CDATA[Local LLM]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[OpenWebUI]]></category>
		<guid isPermaLink="false">https://nutttaro.com/blog/?p=103</guid>

					<description><![CDATA[บทเรียนจากการลอง 7 โมเดลบน RTX 5060 Ti 16GB เปิด OpenWebUI ให้ทีมใช้ผ่าน internet, ต่อ Claude Code เข้า local model, แล้วเสิร์ฟ API แบบ OpenAI ให้ WordPress — ทั้งหมดบนการ์ดใบเดียว พร้อมหลุมพรางที่เจอ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 id="บทเร-ยนจากการลอง-7-โมเดลบน-rtx-5060-ti-16gb" class="wp-block-heading">บทเรียนจากการลอง 7 โมเดลบน RTX 5060 Ti 16GB</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">เปิด OpenWebUI ให้ทีมใช้ผ่าน internet, ต่อ Claude Code เข้า local model, แล้วเสิร์ฟ API แบบ OpenAI ให้ WordPress — ทั้งหมดบนการ์ดใบเดียว พร้อมหลุมพรางที่เจอจริงระหว่างทาง</p>
</blockquote>



<p class="wp-block-paragraph"></p>



<h2 id="ทำไมต-อง-local-llm" class="wp-block-heading">ทำไมต้อง Local LLM</h2>



<p class="wp-block-paragraph">ผมอยากได้ระบบ AI ส่วนตัวที่: คุยได้ผ่านเว็บแบบ ChatGPT, ค้นเว็บและตอบจากเอกสารของเราเองได้, ต่อกับ Claude Code ไว้ช่วยเขียนโค้ด, และเปิด API ให้แอปอื่น (เช่น WordPress) เรียกไปใช้ generate ข้อความ — โดยข้อมูลไม่ต้องออกไปไหน ไม่มีค่า subscription รายเดือน</p>



<p class="wp-block-paragraph">ฮาร์ดแวร์ที่มี: Ubuntu, การ์ดจอ RTX 5060 Ti VRAM 16GB ฟังดูเหมือนพอ แต่ตัวเลข 16GB นี่แหละที่กลายเป็นตัวกำหนดทุกการตัดสินใจตลอดทาง</p>



<p class="wp-block-paragraph">สิ่งที่ผมเรียนรู้คือ การ setup ส่วน &#8220;ให้มันทำงาน&#8221; ใช้เวลาไม่นาน แต่การ &#8220;ทำให้มันทำงานได้ดีจริง&#8221; ต้องผ่านการลองผิดลองถูกเยอะมาก โดยเฉพาะเรื่องเลือกโมเดลให้เหมาะกับ VRAM ที่มี บทความนี้เลยเล่าทั้งวิธีทำและหลุมที่ตกลงไป เผื่อใครจะทำตามจะได้ข้ามหลุมเหล่านี้</p>



<p class="wp-block-paragraph"></p>



<h2 id="ส-วนท-1-วาง-stack-หล-ก-ollama-openwebui" class="wp-block-heading">ส่วนที่ 1: วาง stack หลัก — Ollama + OpenWebUI</h2>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="683" src="https://nutttaro.com/blog/wp-content/uploads/2026/07/local-llm-ollama-1024x683.avif" alt="Local LLM and Ollama" class="wp-image-161" srcset="https://nutttaro.com/blog/wp-content/uploads/2026/07/local-llm-ollama-1024x683.avif 1024w, https://nutttaro.com/blog/wp-content/uploads/2026/07/local-llm-ollama-300x200.avif 300w, https://nutttaro.com/blog/wp-content/uploads/2026/07/local-llm-ollama-768x512.avif 768w, https://nutttaro.com/blog/wp-content/uploads/2026/07/local-llm-ollama.avif 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">ตัวเลือก framework ที่ลงตัวที่สุดสำหรับผู้เริ่มต้นคือ <strong><a href="https://ollama.com/" target="_blank" data-type="link" data-id="https://ollama.com/" rel="noreferrer noopener">Ollama</a></strong> — ติดตั้งง่าย จัดการ model ง่าย มี REST API ในตัว และเข้ากับ OpenWebUI ได้ตรงๆ</p>



<pre class="wp-block-code"><code>curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen3:14b</code></pre>



<p class="wp-block-paragraph">จากนั้นรัน OpenWebUI ผ่าน Docker เป็นหน้าเว็บสำหรับใช้งาน และต่อ Cloudflare Tunnel เพื่อเปิดให้เข้าถึงจาก internet ได้โดยไม่ต้อง forward port (tunnel เป็น outbound connection จึงทำงานได้แม้อยู่หลัง NAT หรือ IP สาธารณะเปลี่ยน)</p>



<h3 id="หล-มท-1-container-เช-อม-ollama-ไม-ได" class="wp-block-heading">หลุมที่ 1: container เชื่อม Ollama ไม่ได้</h3>



<p class="wp-block-paragraph">อาการแรกที่เจอคือ OpenWebUI ขึ้น &#8220;Ollama: Network Problem&#8221; ทั้งที่ Ollama รันอยู่ ไล่เช็คจนเจอว่า OpenWebUI ใน container ยิงไปที่ host ผ่าน <code>host.docker.internal</code> แต่ packet ถูก <strong>UFW (firewall) ดรอป</strong> เพราะมีแต่ rule allow port 22 (อาจเป็นเพราะ <a href="https://nutttaro.com/blog/internet-fibre-vscode/" data-type="post" data-id="91">IPv6</a> ?)</p>



<p class="wp-block-paragraph">วิธีแก้คืออนุญาต traffic จาก docker subnet:</p>



<pre class="wp-block-code"><code>sudo ufw allow from 172.16.0.0/12 to any port 11434
sudo ufw reload</code></pre>



<p class="wp-block-paragraph">บทเรียน: ถ้า container เชื่อม service บน host ไม่ได้ และ <code>curl</code> จากใน container ขึ้น <code>Connection timed out</code> (ไม่ใช่ <code>refused</code>) — มักเป็น firewall ดรอป ไม่ใช่ service ไม่ทำงาน</p>



<h3 id="หล-มท-2-ด-ง-docker-image-ไม-ได" class="wp-block-heading">หลุมที่ 2: ดึง Docker image ไม่ได้</h3>



<p class="wp-block-paragraph">ตอนจะติดตั้ง SearXNG (search engine สำหรับ web search) เจอ <code>TLS handshake timeout</code> เวลา pull จาก Docker Hub ทั้งที่ image จาก ghcr.io ดึงได้ปกติ ต้นเหตุคือ DNS ของ ISP resolve CDN ของ docker.io ได้ไม่ดี แก้โดยตั้ง DNS ของ Docker daemon ตรงๆ:</p>



<pre class="wp-block-code"><code>echo '{"dns": &#91;"1.1.1.1", "8.8.8.8"]}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker</code></pre>



<p class="wp-block-paragraph">แค่นี้ก็ดึง image ได้ บทเรียน: ปัญหา network ของ Docker หลายอย่างแก้ที่ DNS ได้โดยไม่ต้องเปลี่ยนเน็ต</p>



<p class="wp-block-paragraph"></p>



<h2 id="ส-วนท-2-ทำให-ฉลาดข-น-web-search-rag" class="wp-block-heading">ส่วนที่ 2: ทำให้ฉลาดขึ้น — Web Search + RAG</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="683" src="https://nutttaro.com/blog/wp-content/uploads/2026/07/openwebui-1024x683.avif" alt="LocalLLM with OpenWebUI" class="wp-image-166" srcset="https://nutttaro.com/blog/wp-content/uploads/2026/07/openwebui-1024x683.avif 1024w, https://nutttaro.com/blog/wp-content/uploads/2026/07/openwebui-300x200.avif 300w, https://nutttaro.com/blog/wp-content/uploads/2026/07/openwebui-768x512.avif 768w, https://nutttaro.com/blog/wp-content/uploads/2026/07/openwebui.avif 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">OpenWebUI มี web search และ RAG (ตอบจากเอกสาร) ในตัว แค่เปิดใช้และตั้งค่า SearXNG เป็น search engine แต่พอลองค้นจริง เจออาการประหลาด: <strong>ค้นเจอ แต่สรุปมั่ว</strong> บางทีก็ขึ้น &#8220;No search result&#8221; แล้วตอบจากความรู้เก่า</p>



<p class="wp-block-paragraph">ไล่ดู log ของ Ollama เจอบรรทัดชี้เป็น: <code>task.n_tokens = 23</code> — แปลว่าผลค้นหาไม่ได้ถูกส่งเข้า model เลย model เห็นแค่คำถามเปล่าๆ</p>



<p class="wp-block-paragraph">ต้นเหตุจริงคือ <strong>embedding model พัง</strong> (error 500) ทำให้ผลค้นหา embed ไม่ได้ → vector DB ว่าง → retrieve ได้ 0 ท่อน วิธีแก้คือเปลี่ยน embedding model เป็น <code>bge-m3</code> ซึ่งรองรับภาษาไทยได้ดีด้วย:</p>



<pre class="wp-block-code"><code>ollama pull bge-m3</code></pre>



<p class="wp-block-paragraph">ตั้งใน Admin Settings → Documents → Embedding Model เป็น <code>bge-m3</code> แล้วลองใหม่ คราวนี้ log ขึ้น <code>n_tokens = 16324, truncated = 0</code> — ผลค้นหาเข้า model ครบ สรุปได้ถูกต้อง</p>



<p class="wp-block-paragraph">อีกตัวที่สำคัญคือ <strong>num_ctx (context window)</strong> — Ollama ตั้ง default ไว้แค่ 4096 ซึ่งเล็กเกินไปสำหรับ web search ที่ต้องยัดผลหลายหน้าเข้า context ต้องขยายเป็น 16384–32768 ผ่าน Advanced Params ของ model</p>



<p class="wp-block-paragraph"></p>



<h2 id="ส-วนท-3-บทเร-ยนใหญ-เล-อกโมเดลให-เหมาะก-บ-vram" class="wp-block-heading">ส่วนที่ 3: บทเรียนใหญ่ — เลือกโมเดลให้เหมาะกับ VRAM</h2>



<p class="wp-block-paragraph">นี่คือส่วนที่ใช้เวลามากที่สุด และได้บทเรียนเยอะที่สุด ผมลองโมเดลไป 7 ตัวกว่าจะเจอตัวที่ใช่ ขอสรุปเป็นตารางก่อน:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Model</th><th>ขนาด</th><th>ลง GPU เต็ม?</th><th>eval rate</th><th>ผลสรุป</th></tr></thead><tbody><tr><td>qwen3.5:9b</td><td>6.6GB</td><td>✅ 100%</td><td>~70 tok/s</td><td>เร็วสุด</td></tr><tr><td>qwen3:14b</td><td>9.3GB</td><td>✅ 100%</td><td>~37 tok/s</td><td>สมดุล ฉลาดดี</td></tr><tr><td>gemma4:e4b</td><td>9.6GB</td><td>✅ 100%</td><td>~50 tok/s</td><td>มั่ว, output overflow</td></tr><tr><td>glm-4.7-flash</td><td>19GB</td><td>❌ offload 26%</td><td>~50 tok/s</td><td>MoE เร็วแม้ offload แต่ prompt eval ผันผวน</td></tr><tr><td>batiai/qwen3.6-27b:q3</td><td>13–19GB</td><td>⚠️ ขึ้นกับ context</td><td>~26 tok/s</td><td>offload ถ้า context ใหญ่</td></tr><tr><td>qwen3.6:27b</td><td>17GB</td><td>❌ offload หนัก</td><td>~14 tok/s</td><td>ช้าเกินไป</td></tr></tbody></table></figure>



<h3 id="บทเร-ยน-a-dense-model-ท-ใหญ-เก-น-vram-ช-าท-นท" class="wp-block-heading">บทเรียน A: dense model ที่ใหญ่เกิน VRAM = ช้าทันที</h3>



<p class="wp-block-paragraph">qwen3.6:27b (17GB) ใหญ่กว่า VRAM 16GB ทำให้ Ollama ต้อง offload บางส่วนไป CPU (<code>ollama ps</code> ขึ้น <code>12%/88% CPU/GPU</code>) ผลคือ eval rate ดิ่งจาก ~70 เหลือ 14 tok/s ตอบคำถามที่ต้องเขียนยาวๆ ใช้เวลาเป็นนาที</p>



<h3 id="บทเร-ยน-b-context-window-ก-น-vram-มหาศาล" class="wp-block-heading">บทเรียน B: context window กิน VRAM มหาศาล</h3>



<p class="wp-block-paragraph">เคสที่ทำให้ผมเข้าใจเรื่องนี้ชัดสุดคือ <code>batiai/qwen3.6-27b:q3</code> ตัว model เองแค่ 13GB (ลง GPU ได้) แต่พอ default context เป็น 128K ตัว KV cache บวมจน SIZE รวมเป็น 19GB → offload → ช้า พอลด context เหลือ 16K ตัวเดียวกันกลับมาเป็น 100% GPU และเร็วขึ้นเกือบ 3 เท่า</p>



<p class="wp-block-paragraph">บทเรียน: บนการ์ด VRAM จำกัด คุณต้องเลือกระหว่าง &#8220;params เยอะ&#8221; กับ &#8220;context ใหญ่&#8221; — เลือกได้อย่างเดียว</p>



<h3 id="บทเร-ยน-c-thinking-mode-ทำให-ร-ส-ก-ช-า" class="wp-block-heading">บทเรียน C: thinking mode ทำให้ &#8220;รู้สึก&#8221; ช้า</h3>



<p class="wp-block-paragraph">ผมเคยสงสัยว่าทำไม Ollama บน Ubuntu รู้สึกช้ากว่าบน Windows ทั้งที่ใช้ CUDA เหมือนกัน (เช็คจาก log ว่าใช้ CUDA จริง ไม่ใช่ Vulkan) คำตอบคือ <strong>thinking mode</strong> — model ตระกูล qwen3 จะ &#8220;คิด&#8221; ก่อนตอบ ถาม &#8220;Hello&#8221; คำเดียวมันคิด 259 tokens ก่อนตอบ 10 tokens</p>



<p class="wp-block-paragraph">ทดสอบเทียบ: ถาม &#8220;Hello&#8221; บน qwen3.5:9b เปิด thinking ใช้ 4.2 วินาที, ปิด thinking (<code>/set nothink</code> ใน CLI) เหลือ 0.87 วินาที — eval rate เท่าเดิม (~70 tok/s) แต่ total duration ต่างกัน 5 เท่า เพราะจำนวน token ที่ต้อง generate ต่างกัน</p>



<p class="wp-block-paragraph">บทเรียน: GPU ความเร็วเท่าเดิม แต่ thinking ทำให้ต้องผลิต token เยอะกว่ามากต่อคำตอบ สำหรับงาน chat ทั่วไปปิดได้เลย คุ้มกว่า</p>



<p class="wp-block-paragraph"></p>



<h2 id="ส-วนท-4-ต-อ-claude-code-เข-า-local-model" class="wp-block-heading">ส่วนที่ 4: ต่อ Claude Code เข้า local model</h2>



<p class="wp-block-paragraph">Ollama v0.14+ รองรับ Anthropic Messages API แล้ว Claude Code จึงต่อกับ local model ได้โดยตรงไม่ต้องใช้ proxy แค่ตั้ง environment variables:</p>



<pre class="wp-block-code"><code>export ANTHROPIC_BASE_URL=http://localhost:11434
export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_API_KEY=""
export ANTHROPIC_DEFAULT_SONNET_MODEL=qwen3.5:9b
# ตั้ง HAIKU และ OPUS เป็น model เดียวกันด้วย เพราะ Claude Code route ไปหลาย tier</code></pre>



<h3 id="หล-มท-3-tool-calling-format-ต-องถ-ก" class="wp-block-heading">หลุมที่ 3: tool calling format ต้องถูก</h3>



<p class="wp-block-paragraph">ปัญหาที่ปวดหัวสุดคือ บาง model สั่งให้ &#8220;สร้างไฟล์ index.html&#8221; แล้วมันพ่นโค้ดออกมาเป็นข้อความแทนที่จะสร้างไฟล์จริง</p>



<p class="wp-block-paragraph">วิธี debug ที่ได้ผลคือ ยิง API ใส่ tool definition ตรงๆ แล้วดูว่า response มี field <code>tool_calls</code> แยกออกมา (ถูก) หรือ JSON ปนอยู่ใน <code>content</code> (ผิด):</p>



<pre class="wp-block-code"><code>curl http://localhost:11434/api/chat -d '{
  "model": "MODEL_NAME",
  "messages": &#91;{"role":"user","content":"create index.html"}],
  "tools": &#91;{"type":"function","function":{"name":"write_file","parameters":{"type":"object","properties":{"path":{"type":"string"},"content":{"type":"string"}}}}}],
  "stream": false
}'</code></pre>



<p class="wp-block-paragraph">ผลที่เจอน่าสนใจมาก: <strong>qwen2.5-coder</strong> (coding model แท้ๆ) กลับพ่น tool call เป็นข้อความใน content — Claude Code parse ไม่ได้ ส่วน <strong>qwen3.5:9b</strong> และ qwen3:14b ให้ <code>tool_calls</code> ถูกต้อง</p>



<p class="wp-block-paragraph">บทเรียน: สำหรับ Claude Code ปัจจัยสำคัญไม่ใช่ว่าเป็น &#8220;coding model&#8221; หรือไม่ แต่คือ <strong>tool-call format ถูกต้องไหม</strong> — ทดสอบด้วย curl ก่อนเสมอ</p>



<h3 id="ผ-ชนะ-qwen3-5-9b" class="wp-block-heading">ผู้ชนะ: qwen3.5:9b</h3>



<p class="wp-block-paragraph">หลังลองมาทั้งหมด qwen3.5:9b กลายเป็นตัวที่ลงตัวสุดสำหรับ Claude Code บนการ์ดนี้ เพราะ:</p>



<ul class="wp-block-list">
<li>ขนาดแค่ 6.6GB → เหลือ VRAM ~8GB เอาไปทำ context ได้ถึง 64K (ที่ Claude Code แนะนำ) โดยยังลง GPU เต็ม</li>



<li>tool-call format ถูกต้อง</li>



<li>เร็ว ไม่ offload → ไม่ timeout</li>



<li>ที่เซอร์ไพรส์สุด: ทดสอบสั่ง &#8220;Create HTML Hello World&#8221; โดย<strong>ไม่บอกให้ save และไม่มี CLAUDE.md ช่วย</strong> — มันเข้าใจ intent เอง สร้างไฟล์ hello.html ให้ พร้อมตั้งชื่อไฟล์เอง</li>
</ul>



<p class="wp-block-paragraph">บทเรียน: VRAM ที่ &#8220;เหลือเยอะ&#8221; ไม่ได้เสียเปล่า — มันเอาไปทำ context window ใหญ่ได้ ซึ่ง model ใหญ่ที่กิน VRAM หมดทำไม่ได้</p>



<h3 id="หล-มท-4-cloudflare-tunnel-ม-timeout-100-ว-นาท" class="wp-block-heading">หลุมที่ 4: Cloudflare Tunnel มี timeout 100 วินาที</h3>



<p class="wp-block-paragraph">ตอนเปิด Claude Code ให้เรียก API ผ่าน tunnel จากเครื่องนอก เจอ <code>Error 524</code> — Cloudflare มี hard limit ที่ ~100 วินาทีต่อ request ถ้า model ตอบไม่ทันจะถูกตัด โมเดลที่ offload (ตอบช้า) จะชน limit นี้บ่อย แต่ qwen3.5:9b ที่เร็วและไม่ offload ผ่านได้สบาย</p>



<p class="wp-block-paragraph">สำหรับการเปิด API ออก internet ผมใช้ nginx เป็น reverse proxy หน้า Ollama แล้วบังคับ Bearer token auth (เพราะ Ollama API ไม่มี authentication ในตัว — ห้ามเปิด port 11434 ออก internet ตรงๆ เด็ดขาด):</p>



<pre class="wp-block-code"><code>server {
    listen 8443;
    location / {
        if ($http_authorization != "Bearer YOUR_SECRET_TOKEN") {
            return 401 '{"error":"unauthorized"}';
        }
        proxy_pass http://127.0.0.1:11434;
        proxy_buffering off;
        proxy_read_timeout 600s;
    }
}</code></pre>



<p class="wp-block-paragraph"></p>



<h2 id="ส-วนท-5-เส-ร-ฟ-api-แบบ-openai-ให-wordpress" class="wp-block-heading">ส่วนที่ 5: เสิร์ฟ API แบบ OpenAI ให้ WordPress</h2>



<p class="wp-block-paragraph">ข้อดีของ Ollama คือ expose endpoint หลายแบบพร้อมกันบน port เดียว — <code>/v1/messages</code> (Anthropic format สำหรับ Claude Code) และ <code>/v1/chat/completions</code> (OpenAI format) ดังนั้น nginx + Bearer auth ตัวเดียวรองรับได้ทั้ง Claude Code, WordPress, และแอปอื่นๆ</p>



<h3 id="หล-มท-5-thinking-ของ-qwen3-5-ป-ดยากผ-าน-api" class="wp-block-heading">หลุมที่ 5: thinking ของ qwen3.5 ปิดยากผ่าน API</h3>



<p class="wp-block-paragraph">WordPress plugin ขอ generate ข้อความ แต่ qwen3.5 ดัน thinking ทำให้ response มี field <code>reasoning</code> ยาวเป็นพัน token ทั้งที่คำตอบจริงแค่ 3 ประโยค ปัญหาคือ:</p>



<ul class="wp-block-list">
<li><code>SYSTEM /no_think</code> ใน Modelfile ไม่ทำงานเมื่อ client ส่ง system prompt เอง</li>



<li><code>PARAMETER think false</code> ใน Modelfile ยังไม่รองรับ (error)</li>



<li>วิธีเดียวที่ได้ผลคือส่ง <code>think: false</code> ใน API request — แต่ WordPress plugin หลายตัวใส่ custom param ไม่ได้</li>
</ul>



<p class="wp-block-paragraph">ทางออกที่ practical สำหรับงาน generate text คือใช้ model ที่ <strong>ไม่มี thinking ตั้งแต่แรก</strong> เช่น qwen2.5 ทั่วไป (generation เก่ากว่า ตอบตรงๆ ไม่มี reasoning กวน) — แยกหน้าที่ชัดเจน: qwen3.5:9b สำหรับ Claude Code, qwen2.5 สำหรับงานเขียนผ่าน WordPress</p>



<p class="wp-block-paragraph"></p>



<h2 id="สร-ป" class="wp-block-heading">สรุป</h2>



<p class="wp-block-paragraph">หลังผ่านหลุมทั้งหมด ระบบที่ได้คือ:</p>



<ul class="wp-block-list">
<li><strong>OpenWebUI + web search + RAG</strong> สำหรับ chat ทั่วไป เปิดให้ทีมใช้ผ่าน Cloudflare Tunnel</li>



<li><strong>Claude Code</strong> ต่อ qwen3.5:9b (context 64K) สำหรับช่วยเขียนโค้ด</li>



<li><strong>OpenAI-compatible API</strong> ให้ WordPress และแอปอื่นเรียก generate ข้อความ</li>



<li>ทั้งหมดผ่าน nginx + Bearer auth, ทุก service auto-start หลัง reboot</li>
</ul>



<p class="wp-block-paragraph">บทเรียนที่สำคัญที่สุดสำหรับใครที่มีการ์ด 16GB:</p>



<ol class="wp-block-list">
<li><strong>เลือก model ที่ลง GPU เต็ม</strong> สำคัญกว่าเลือก model ที่ params เยอะ — model เล็กที่เร็วและไม่ offload ชนะ model ใหญ่ที่ offload เสมอ</li>



<li><strong>VRAM ที่เหลือไม่เสียเปล่า</strong> — เอาไปทำ context window ใหญ่ได้</li>



<li><strong>ทดสอบ tool-call format ด้วย curl</strong> ก่อนสรุปว่า model ใช้กับ Claude Code ได้</li>



<li><strong>ปิด thinking</strong> สำหรับงานที่ไม่ต้องการเหตุผลหลายขั้น — ช่วยเรื่องความเร็วและ token usage มาก</li>



<li><strong>อย่าเปิด Ollama API ออก internet ตรงๆ</strong> — ครอบด้วย auth เสมอ</li>
</ol>



<p class="wp-block-paragraph">Local LLM ในปี 2026 ดีพอสำหรับงานจริงแล้ว ไม่ใช่แค่ของเล่น แต่กุญแจสำคัญคือการจับคู่ model กับฮาร์ดแวร์ให้ถูก — ซึ่งบางทีก็ต้องลองหลายตัวกว่าจะเจอตัวที่ใช่</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nutttaro.com/blog/local-llm-with-5060-ti/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
