Skip to content

jbang2004/memobase

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shows the Memobase logo

User Profile-Based Memory for GenAI Apps

🌬️ Does your AI forget your users?

Memobase maintains long-term memory of your users, for your product.

🖼️ Can you design the memory of AI?

Memobase offers accurate user profile, involving many aspects of your users: Age, Education, Interests, Opinions... Customize the aspects you want Memobase to collect.

⌛️ Do you want users spend more time on your Apps?

Memobase is working with some leading AI companion startups. They have observated increased chatting turns after adopting Memobase, leading to higher user retention and subscription rate.

Memobase is a user profile-based memory system, providing abilities like user managment, multi-modal understanding and long-term user memory to your GenAI applications.

Core Features:

  • 🎯 Memory Design: Define and control exactly what user information your AI captures
  • 🔄 Auto-Profiling: User profiles evolve naturally through conversation
  • 🔌 Easy Setup: Minimal code changes to integrate with your existing LLM stack
  • ⚡️ Fast Retrieval: Industry-leading speeds via non-embedding system
  • 🚀 Production Ready: Battle-tested by our partners in production

Get Started

  1. Start your Memobase Backend, you should have the below two things to continue:

    1. A project url. default to http://localhost:8019

    2. A project token. default to secret

  2. Install the Python SDK: pip install memobase

  3. Get ready to make AI remember your users now.

Here's a step-by-step guide and breakdown for you.

Tip

You can use this quick start script. Or you can keep things super easy by using OpenAI SDK with Memobase.

1. Make sure you're connected

from memobase import MemoBaseClient, ChatBlob

mb = MemoBaseClient("http://localhost:8019", "secret")
assert mb.ping()

2. Manage Users

uid = mb.add_user({"any_key": "any_value"})
mb.update_user(uid, {"any_key": "any_value2"})
u = mb.get_user(uid)
print(u)

# mb.delete(uid)

3. Insert Data

In Memobase, all types of data are blobs to a user that can insert, get and delete:

messages = [
  {
      "role": "user",
      "content": "Hello, I'm Gus",
  },
  {
      "role": "assistant",
      "content": "Hi, nice to meet you, Gus!",
  }
]
bid = u.insert(ChatBlob(messages=messages))
print(u.get(bid)) # not found once you flush the memory.

# u.delete(bid)

Be default, Memobase will remove the blobs once they're processed. This means that apart from the relevant memory, your data will not be stored with Memobase. You can persist the blobs by adjusting the configuration file.

4. Get your Memory

u.flush()

And what will you get?

print(u.profile())
# [UserProfile(topic="basic_info", sub_topic="name", content="Gus",...)]

u.profile() will return a list of profiles that are learned from this user, including topic, sub_topic and content. As you insert more blobs, the profile will become better.

Why need a flush?

In Memobase, we don't memoize users in hot path. We use buffer zones for the recent inserted blobs.

When the buffer zone becomes too large (e.g., 1024 tokens) or remains idle for an extended period (e.g., 1 hour), Memobase will flush the entire buffer into memory. Alternatively, you can use flush() manually decide when to flush, such as when a chat session is closed in your app.

Why/Where should I use Memobase?

Remember the users

By placing profiles into your AI (e.g. system prompt).

Demo
PROFILES = "\n".join([p.describe for p in u.profile()])

print(PROFILES)
# basic_info: name - Gus
# basic_info: age - 25
# ...
# interest: foods - Mexican cuisine
# psychological: goals - Build something that maybe useful
# ...

User analysis and tracking

Too much information is hidden in the conversations between users and AI, that's why you need a new data tracking method to record user preference and behavior.

Demo
PROFILES = u.profile()

def under_age_30(p):
  return p.sub_topic == "age" and int(p.content) < 30

def love_cat(p):
  return p.topic == "interest" and p.sub_topic == "pets" and "cat" in p.content

is_user_under_30 = (
    len([p for p in profiles if under_age_30(p)]) > 0
)
is_user_love_cat = (
  len([p for p in profiles if love_cat(p)]) > 0
)                       
...

Sell something to your customers.

Not everyone is looking for Grammarly, it's always nice to sell something your users might want.

Demo
def pick_an_ad(profiles):
  work_titles = [p for p in profiles if p.topic=="work" and p.sub_topic=="title"]
  if not len(work_titles):
    return None
  wt = work_titles[0].content
  if wt == "Software Engineer":
    return "Deep Learning Stuff"
  elif wt == "some job":
    return "some ads"
  ...

Documentation

For detailed usage instructions, visit the documentation.

Support

Join the community for support and discussions:

Or Just email us ❤️

License

This project is licensed under the Apache 2.0 License - see the LICENSE file for details.

About

1st User Profile-Based Memory for GenAI Apps

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.3%
  • Other 0.7%