Welcome to Pixeltable
Multimodal AI Datastore
Tutorials
- Fundamentals
- Feature Guides
- Cookbooks
- Overview
- Chatbot
- Computer Vision
- Multimodal Vector Database
- Model Context Protocol
Support
Chatbot
Memory
Build a chatbot that remembers conversation history using Pixeltable
Building a Memory-Enabled Chatbot
Learn how to build a chatbot that remembers conversation history using Pixeltable. Works in two phases:
- Define your app structure (once)
- Use your app (anytime)
1
Install Dependencies
pip install pixeltable
Define Your Backend Tables
Create tables.py
:
import pixeltable as pxt
from datetime import datetime
from typing import List, Dict
# Initialize app structure
pxt.drop_dir("chatbot", force=True)
pxt.create_dir("chatbot")
# Create memory table
memory = pxt.create_table(
path_str="chatbot.memory",
{
"role": pxt.String,
"content": pxt.String,
"timestamp": pxt.Timestamp,
},
if_exists="ignore",
)
# Create chat session table
chat_session = pxt.create_table(
path_str="chatbot.chat_session",
{"user_message": pxt.String, "timestamp": pxt.Timestamp},
if_exists="ignore",
)
# Define memory retrieval
@pxt.query
def get_recent_memory():
return (
memory.order_by(memory.timestamp, asc=False)
.select(role=memory.role, content=memory.content)
.limit(10)
)
# Define message creation
@pxt.udf
def create_messages(past_context: List[Dict], current_message: str) -> List[Dict]:
messages = [
{
"role": "system",
"content": "You are a chatbot with memory capabilities.",
}
]
messages.extend(
[{"role": msg["role"], "content": msg["content"]} for msg in past_context]
)
messages.append({"role": "user", "content": current_message})
return messages
# Configure processing workflow
chat_session.add_computed_column(memory_context=get_recent_memory())
chat_session.add_computed_column(
prompt=create_messages(chat_session.memory_context, chat_session.user_message)
)
chat_session.add_computed_column(
llm_response=pxt.functions.openai.chat_completions(
messages=chat_session.prompt,
model="gpt-4o-mini"
)
)
chat_session.add_computed_column(
assistant_response=chat_session.llm_response.choices[0].message.content
)
Use Your App
Create app.py
:
import pixeltable as pxt
from datetime import datetime
# Connect to your app
memory = pxt.get_table("chatbot.memory")
chat_session = pxt.get_table("chatbot.chat_session")
def chat(message: str) -> str:
"""Process a message through the memory-enabled chatbot"""
# Store user message
memory.insert([{
"role": "user",
"content": message,
"timestamp": datetime.now()
}])
# Process through chat session
chat_session.insert([{
"user_message": message,
"timestamp": datetime.now()
}])
# Get response
result = chat_session.select(
chat_session.assistant_response
).where(
chat_session.user_message == message
).collect()
response = result["assistant_response"][0]
# Store assistant response
memory.insert([{
"role": "assistant",
"content": response,
"timestamp": datetime.now()
}])
return response
# Use it!
responses = [
chat("Hi! My name is Alice."),
chat("What's the weather like today?"),
chat("Can you remember my name?"),
]
# Print responses
for i, response in enumerate(responses, 1):
print(f"\nExchange {i}:")
print(f"Bot: {response}")
Was this page helpful?
On this page