Contact
Line : comsiam
Contact
Line : comsiam

การสร้างแชตบอตด้วย Claude API ต้องมีส่วนรับข้อความจากผู้ใช้ เซิร์ฟเวอร์เรียก API และส่งคำตอบกลับไปแสดงบนหน้าแชต ผู้ใช้ ComSiam ควรเรียก Claude API จากฝั่งเซิร์ฟเวอร์ เพื่อเก็บ API Key ให้ปลอดภัย และควรวางแผนจัดเก็บประวัติสนทนาหากต้องการให้บอตจำบริบทได้
① ผู้ใช้พิมพ์ข้อความในหน้าเว็บหรือแอป
② หน้าแชตส่งข้อความไปยังเซิร์ฟเวอร์ของระบบ
③ เซิร์ฟเวอร์ตรวจข้อมูล แล้วส่งข้อความกับประวัติสนทนาที่จำเป็นไปยัง Claude API
④ เซิร์ฟเวอร์อ่านคำตอบและส่งกลับไปยังหน้าแชต
⑤ หน้าแชตแสดงคำตอบให้ผู้ใช้
API Key ควรอยู่บนเซิร์ฟเวอร์ ไม่ควรใส่ไว้ใน JavaScript ที่ส่งไปยังเบราว์เซอร์ เพราะผู้ใช้สามารถตรวจดูและคัดลอกคีย์ได้
ติดตั้ง Express และ SDK ของ Anthropic ในโฟลเดอร์โปรเจกต์:
npm init -y
npm install express @anthropic-ai/sdk
กำหนด ANTHROPIC_API_KEY เป็นตัวแปรสภาพแวดล้อมของเซิร์ฟเวอร์ก่อนรันแอป อย่าใส่คีย์จริงไว้ในไฟล์ซอร์สโค้ดหรือ Repository
สร้างไฟล์ server.mjs:
import express from "express";
import Anthropic from "@anthropic-ai/sdk";
const app = express();
const client = new Anthropic();
app.use(express.json());
app.post("/api/chat", async (req, res) => {
const userMessage = req.body?.message;
if (typeof userMessage !== "string" || !userMessage.trim()) {
return res.status(400).json({ error: "กรุณาส่งข้อความ" });
}
try {
const response = await client.messages.create({
model: "claude-sonnet-5-5",
max_tokens: 512,
messages: [
{ role: "user", content: userMessage.trim() }
]
});
const answer = response.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join("\n");
return res.json({ answer });
} catch (error) {
console.error("Claude API request failed:", error);
return res.status(500).json({ error: "ไม่สามารถสร้างคำตอบได้ในขณะนี้" });
}
});
app.listen(3000, () => {
console.log("Chatbot server is running on port 3000");
});
รันเซิร์ฟเวอร์ด้วย:
node server.mjs
ตัวอย่างนี้รับข้อความหนึ่งครั้งและส่งคำตอบกลับ หากนำไปใช้จริง ควรเพิ่มการจำกัดความยาวข้อความ การควบคุมจำนวนคำขอต่อผู้ใช้ และการจัดการข้อผิดพลาดให้เหมาะกับระบบ
Messages API ไม่เก็บประวัติสนทนาไว้ให้โดยอัตโนมัติ หากต้องการให้บอตตอบต่อจากข้อความก่อนหน้า แอปต้องเก็บประวัติและส่งข้อความก่อนหน้าที่จำเป็นไปกับคำขอครั้งถัดไป โดยสลับบทบาท user และ assistant ตามลำดับ
ตัวอย่างโครงสร้างบทสนทนา:
const messages = [
{ role: "user", content: "สวัสดี" },
{ role: "assistant", content: "สวัสดีครับ มีอะไรให้ช่วยไหม" },
{ role: "user", content: "ช่วยอธิบายบริการของคุณ" }
];
ในระบบจริง ควรเก็บประวัติแยกตามผู้ใช้หรือรหัสเซสชันไว้ฝั่งเซิร์ฟเวอร์ และส่งเฉพาะบริบทที่จำเป็นเพื่อควบคุมความยาวและค่าใช้จ่าย อย่าเชื่อประวัติที่รับจากเบราว์เซอร์ทั้งหมดโดยไม่ตรวจสอบ
ผู้ใช้ ComSiam สามารถเริ่มจากบอตตอบทีละข้อความก่อน แล้วค่อยเพิ่มการจัดเก็บประวัติ การกำหนดบทบาทของบอต และการเชื่อมกับฐานข้อมูลเมื่อจำเป็น
แชตบอตที่ใช้ Claude API ประกอบด้วยหน้าแชต เซิร์ฟเวอร์ และ Messages API โดยเซิร์ฟเวอร์รับข้อความ เรียก Claude แล้วส่งคำตอบกลับ หากต้องการสนทนาหลายรอบ แอปต้องจัดเก็บและส่งประวัติที่จำเป็นไปกับคำขอ ผู้ใช้ ComSiam ควรปกป้อง API Key ตรวจอินพุต และติดตามการใช้งานก่อนเปิดระบบให้ผู้ใช้จริง