- Streamlit adalah cara cepat untuk membuat UI chatbot AI kustom tetapi membutuhkan fleksibilitas di luar komponen obrolan bawaan.
- Botpress Chat API mendukung logika, pengambilan, dan alur kerja chatbot, yang diekspos melalui klien Python khusus.
- Aplikasi Streamlit mengelola percakapan, mengalirkan respons, dan terintegrasi dengan sesi pengguna yang dinamis.
Sejauh pengetahuan saya, Streamlit adalah cara tercepat untuk membuat aplikasi web yang dapat disesuaikan. Jika Anda ingin membuat chatbot AI dan menerapkannya di front-end Anda sendiri, saya tidak dapat memikirkan pilihan yang lebih baik.
Satu-satunya yang menghambat adalah pustaka elemen obrolan. Mereka cukup khusus disetel ke API OpenAIdan klien Python
Ini sangat bagus - beberapa baris kode untuk berinteraksi dengan beberapa teknologi paling bergengsi yang tersedia, yah... hebat.
Namun, ini bukanlah segalanya.
Bagaimana jika Anda ingin lebih banyak kendali atas bot Anda? Misalnya, Anda mungkin menginginkan alur kerja multi-langkah, atau pembuatan yang ditambahi pengambilan (RAG). Lapisan fungsionalitas tambahan ini umumnya berarti mengutak-atik pustaka dengan segala macam ketergantungan.
Atau tidak?
Dalam tutorial ini, saya akan membuat klien chatbot yang dihosting oleh Streamlit. Saya akan menunjukkan kepada Anda antarmuka untuk iterasi cepat dan chatbot yang sangat dapat disesuaikan. Kemudian, Anda akan belajar cara mengintegrasikan chatbot menggunakan klien Python OpenAI yang dibuat khusus.
Jika Anda membuat prototipe, ketergantungan dan hal-hal teknis seharusnya tidak menghambat Anda.
Dan, dalam semangat pembuatan prototipe cepat, jika Anda ingin melewatkan tutorial dan mulai mengutak-atik, kodenya ada di GitHub.
Bom pergi 💣
Langkah 1: Bangun Logika Chatbot
Baik untuk otomatisasi alur kerja atau chatbot pemesanan janji temu, dunia benar-benar menjadi milik Anda di sini.
Saya mendorong Anda untuk menjelajahi berbagai macam kasus penggunaan untuk chatbot GenAI jika Anda mencari inspirasi. Demi kesederhanaan, saya akan kembali kepada Anda dengan sommelier saya yang mudah-mudahan sekarang sudah terkenal, Winona.
Bot kecil kami yang canggih dan sangat membantu ini dapat dicapai hanya dalam beberapa langkah saja. Saya akan menjelaskannya secara singkat, tetapi ada banyak tutorial yang panjang dan sangat membantu yang bisa Anda telusuri.
1. Berikan Instruksi
Di studio, kita akan menavigasi ke Home di bilah sisi kiri.

Anda akan melihat bagian Petunjuk di bagian depan dan tengah. Klik di atasnya untuk menambahkan atau memodifikasi instruksi dalam teks biasa.

Ini memberi bot kami arahan, kepribadian, dan pagar pembatas. Dengan menggunakan bahasa yang sederhana, Anda dapat mengarahkan bot Anda dengan cukup efektif ke arah perilaku yang diinginkan. Membuatnya terdengar lebih manusiawi, dan
2. Membangun Alur
Di sinilah mur dan baut dari kepribadian bot berada: akses ke informasi spesifik, langkah demi langkah yang kaku, eksekusi kode, dll.
Jangan meremehkan kekuatan kesederhanaan. Satu simpul otonom menyaingi fungsionalitas agen penalaran. Saya memiliki satu yang terhubung ke Knowledge Base (KB) saya.

3. Menambahkan Basis Pengetahuan
Jika instruksinya adalah tentang getaran, KB adalah tentang fakta-fakta yang dingin dan keras. Dalam kasus saya, fakta yang dimaksud adalah wine dalam kumpulan data Wine Reviews, daftar wine, deskripsi, dan harga. Saya akan memperlakukannya sebagai inventaris anggur de-facto untuk bot kami agar menjadi Sommelier.
Saya akan mengklik Tabel di panel kiri dan menekan Tabel Baru di kiri atas halaman, dan memberinya nama deskriptif.

Klik elipsis vertikal (⋮ ) di kanan atas, dan tekan Import.

Seret .csv Anda ke dalam modal yang muncul dan ikuti langkah-langkah di layar.
Untuk membuat tabel dapat diakses oleh bot Anda, buka Basis Pengetahuan di bilah sisi kiri.

Klik ikon tabel kecil berwarna hijau dan pilih sumber yang relevan. Klik Tambah tabel.

Pastikan aliran Anda memiliki akses ke Basis Pengetahuan dan Anda siap menggunakannya.

Langkah 2: Tambahkan Integrasi API Chat
Titik kontak antara bot dan klien lokal kita adalah Chat API. Untuk menambahkannya ke bot kita, saya akan menggulir ke Saluran Komunikasi dan menekan ... Lainnya.

Bacalah dengan teliti integrasi ini jika Anda mau. Kami mencari Chat. Saya harus menggulir sedikit untuk menemukannya.

Klik integrasi dan tekan Instal Integrasi pada modal yang muncul.

Setelah terinstal, Anda akan melihat IDChat API di akhir URL webhook . Anda akan membutuhkannya nanti.
Langkah 4: Membuat Aplikasi Streamlit
Dengan bebek-bebek kita yang sudah siap, sekarang saatnya membangun chatbot. Perhatikan bahwa saya mengikuti panduan Streamlit dalam membangun aplikasi obrolan LLM -dengan beberapa fitur tambahan.
1. Sesuaikan kode pelat ketel
Secara teori, Anda dapat membuat aplikasi bekerja dengan perubahan minimal pada boilerplate dalam contoh Streamlit.
# app.py
from client import BotpressClient
import streamlit as st
from constants import CONVERSATION_ID
st.title("Botpress Front-end for Streamlit")
client = BotpressClient(
api_id=st.secrets["CHAT_API_ID"], user_key=st.secrets["USER_KEY"]
)
if "messages" not in st.session_state:
messages = client.list_messages(CONVERSATION_ID)
next_token = messages["meta"]["nextToken"]
st.session_state.messages = messages["messages"][::-1]
for message in st.session_state.messages:
with st.chat_message(message["userId"]):
st.markdown(message["payload"]["text"])
if prompt := st.chat_input("*wine*-d it up"):
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
client.create_message(prompt, conversation_id=CONVERSATION_ID)
with st.chat_message("assistant"):
response_box = st.empty()
last_rendered = ""
for message in client.listen_conversation(CONVERSATION_ID):
message_id = message["id"]
message_text = message["text"]
if message_id != last_rendered:
last_rendered = message_id
response_box.markdown(message_text)
st.session_state.messages.append(
{"role": "assistant", "content": message_text}
)
Kita membaca variabel rahasia di sini. Jadi, buatlah file .streamlit/secrets.toml dan letakkan variabel Anda di dalamnya:
CHAT_API_ID = "YOUR_API_ID"
KUNCI PENGGUNA = "KUNCI_PENGGUNA_ANDA"
Pengangkatan berat sedang terjadi di dalam:
with st.chat_message("assistant"):
response_box = st.empty()
last_rendered = ""
for message in client.listen_conversation(CONVERSATION_ID):
message_id = message["id"]
message_text = message["text"]
if message_id != last_rendered:
last_rendered = message_id
response_box.markdown(message_text)
st.session_state.messages.append(
{"role": "assistant", "content": message_text}
)
di mana klien terhubung ke elemen obrolan untuk mengirim dan menerima pesan.
Hal ini dapat dilakukan, tetapi tidak ideal untuk beberapa alasan:
- Anda harus membuat percakapan baru secara terpisah.
- Pesan lama akan diformat berbeda dengan pesan baru, karena pesan lama tidak memiliki penunjukan peran (pengguna atau asisten).
- Anda tidak dapat mengalihkan percakapan.
2. Membuat percakapan secara dinamis
Mulai dari awal, saya akan secara otomatis membuat percakapan baru atau membuka percakapan terbaru:
# app.py
from client import BotpressClient
import streamlit as st
st.title("Botpress Front-end for Streamlit")
client = BotpressClient(
api_id=st.secrets["CHAT_API_ID"], user_key=st.secrets["users"][0]["key"]
)
# user info
user = client.get_user()
user_id = user["user"]["id"]
conversations = client.list_conversations()["conversations"]
conversation_ids = [conv["id"] for conv in conversations]
# conversation
def create_conversation():
res = client.create_conversation()
print(f"Created new conversation: {res}")
conversation_id = res["conversation"]["id"]
st.session_state.active_conversation = conversation_id
st.session_state.messages = []
st.rerun()
if not conversations:
create_conversation()
if "active_conversation" not in st.session_state:
st.session_state["active_conversation"] = conversations[0]["id"]
Perhatikan bahwa saya telah memodifikasi kunci rahasia untuk dapat menyimpan beberapa pengguna. Anda akan ingin memodifikasi berkas .streamlit/secrets.toml
untuk mencerminkan hal itu:
[[pengguna]]
key = "kunci_pengguna_anda"
Anda dapat mengulangi blok ini sebanyak yang Anda inginkan, menyimpan pengguna sebagai sebuah array tabel.
3. Memungkinkan pengguna membuat dan beralih di antara percakapan
Seperti judulnya, ini menciptakan menu tarik-turun di bagian atas dengan tombol untuk memungkinkan Anda memilih percakapan.
col1, col2 = st.columns([5, 1])
with col1:
conversation_id = st.selectbox(
"Select Conversation",
options=[conv["id"] for conv in conversations],
index=conversation_ids.index(st.session_state.active_conversation),
)
with col2:
st.markdown("<div style='height: 1.9em'></div>", unsafe_allow_html=True)
if st.button("➕"):
create_conversation()
selected_conversation = client.get_conversation(conversation_id)
4. Menetapkan peran yang benar untuk pesan sebelumnya
Kami akan menyelesaikan masalah pemformatan dari atas dengan menetapkan peran pengguna atau asisten untuk setiap pesan sebelumnya:
if (
"messages" not in st.session_state
or st.session_state.get("active_conversation") != conversation_id
):
st.session_state.active_conversation = conversation_id
st.session_state.messages = []
messages = client.list_messages(conversation_id)
next_token = messages["meta"].get("nextToken")
for message in messages["messages"][::-1]:
role = "user" if message["userId"] == user_id else "assistant"
text = message["payload"]["text"]
st.session_state.messages.append({"role": role, "content": text})
Ini menyesuaikan kode kami dengan struktur yang diharapkan oleh Streamlit.
5. Menambahkan logika pengiriman pesan
Ini kurang-lebih sama seperti sebelumnya, yang disesuaikan untuk struktur yang baru.
# display chat history
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
if prompt := st.chat_input("*wine*-d it up"):
st.session_state.messages.append({"role": "user", "content": prompt})
client.create_message(prompt, conversation_id=conversation_id)
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
stream = client.listen_conversation(conversation_id=conversation_id)
response = st.write_stream(stream)
st.session_state.messages.append({"role": "assistant", "content": response})
5. Membuat pengguna
Logikanya sudah siap, tetapi Anda harus membuat pengguna untuk menjalankan aplikasi. Saya memilih untuk menambahkannya secara terpisah untuk mensimulasikan pengalaman mendaftar ke sebuah layanan. Untungnya bagi Anda, saya juga menulis skrip:
# create_user.py
import argparse
from pathlib import Path
from client import *
from constants import *
secrets_path = Path(".streamlit") / "secrets.toml"
template = """[[users]]
key="{}"
"""
client = BotpressClient()
def create_user(name, id, add_to_secrets=True):
res = client.create_user(name, id)
if not add_to_secrets:
return res
secrets_path.touch(exist_ok=True)
with open(secrets_path, "a") as f:
f.write(template.format(res["user"]["id"], res["key"]))
return res
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Create a Botpress user and optionally store secrets."
)
parser.add_argument("--name", required=True, help="Display name of the user.")
parser.add_argument(
"--id", required=True, help="User ID. If omitted, one is generated by the API."
)
parser.add_argument("--chat_api_id", help="ID for the Botpress Chat API integration. Taken from `.env` file if not provided.")
parser.add_argument(
"--no-secrets",
action="store_true",
help="Do not append to .streamlit/secrets.toml.",
)
args = parser.parse_args()
print(f"Creating user: {args.name} (ID: {args.id or 'auto-generated'})")
result = create_user(name=args.name, id=args.id, add_to_secrets=not args.no_secrets)
print("✅ User created:")
print(result)
Asalkan Anda memiliki ID Chat API, Anda dapat menjalankannya:
python create_user.py -nama NAMA ANDA -id SOME_USER_ID -chat_api_id YOUR_CHAT_API_ID
Ini akan berurusan dengan pembuatan pengguna dan menambahkannya ke file rahasia Anda.
Langkah 5: Jalankan aplikasi
Dengan logika yang telah dibuat dan pengguna yang telah dibuat, saatnya untuk mencoba aplikasi ini. Instal dependensi, dan jalankan:
streamlit jalankan app.py
Dan begitu saja, Anda akan melihat bot kami dengan segala kemegahannya.

Jalankan chatbot Streamlit hari ini
Jika Anda membuat prototipe dengan Streamlit, Anda tahu bahwa penyesuaian seharusnya tidak mengorbankan kenyamanan. Chatbot ada untuk memecahkan masalah - bukan menciptakan masalah.
Botpress hadir dengan pembangun visual seret dan lepaskan, lusinan integrasi resmi, dan titik akhir API yang dapat diakses. Dengan cara ini Anda bisa membangun, mengulang, dan menyebarkan di banyak saluran komunikasi.
Mulai membangun hari ini. Gratis.
Hal-hal yang sering ditanyakan
Mengapa saya memilih Streamlit daripada kerangka kerja front-end lainnya untuk membangun chatbot?
Anda akan memilih Streamlit untuk membangun chatbot jika Anda menginginkan solusi berbasis Python yang cepat yang memungkinkan Anda membuat prototipe aplikasi interaktif dengan cepat tanpa memerlukan keahlian front-end, karena Streamlit menangani elemen UI seperti komponen obrolan dan manajemen status dengan kode minimal.
Apakah chatbot Streamlit cocok untuk penggunaan produksi atau hanya untuk prototipe?
Chatbot Streamlit sangat bagus untuk prototipe dan alat internal, tetapi untuk aplikasi produksi yang berhadapan dengan publik dengan lalu lintas yang padat atau gaya tingkat lanjut, Anda mungkin memerlukan lapisan tambahan seperti proksi terbalik, pengerasan keamanan, dan mungkin kerangka kerja front-end yang lebih kuat untuk menangani skala.
Seberapa dapatkah tampilan dan nuansa chatbot yang dibangun dengan Streamlit disesuaikan?
Meskipun Streamlit memungkinkan Anda menyesuaikan gaya dasar seperti warna, huruf, dan tata letak, namun kurang fleksibel dibandingkan dengan kerangka kerja web tradisional; untuk desain yang benar-benar khusus, Anda perlu menyematkan HTML/CSS atau JavaScript khusus, yang bisa dilakukan tetapi menambah kerumitan dibandingkan dengan menggunakan widget bawaan Streamlit.
Dapatkah saya mengintegrasikan chatbot Streamlit ke situs web yang sudah ada, atau harus berjalan sendiri?
Chatbot Streamlit biasanya berjalan sebagai aplikasi web mandiri di URL-nya sendiri, tetapi Anda dapat menyematkannya ke situs web yang sudah ada melalui iframe, meskipun hal ini memerlukan penanganan gaya dan pertimbangan keamanan untuk membuat pengalaman yang disematkan menjadi mulus bagi pengguna.
Berapa biaya yang dibutuhkan untuk menggunakan chatbot Streamlit untuk penggunaan publik?
Menerapkan chatbot Streamlit dapat gratis jika dihosting secara lokal atau di Streamlit Community Cloud untuk aplikasi yang lebih kecil, tetapi untuk penggunaan publik dalam skala besar, biayanya berkisar antara $ 5 - $ 50 per bulan di platform cloud seperti Heroku, AWS, atau DigitalOcean, tergantung pada lalu lintas dan persyaratan waktu aktif.