دليل برمجي لتمكين ذاكرة mem0 مع روبوت Anthropic Claude: محادثات غنية بالسياق

يقدم هذا الدليل الشامل طريقة عملية لإنشاء روبوت محادثة متكامل على منصة Google Colab، مستفيدًا من قدرات نموذج Claude من Anthropic بالإضافة إلى مميزات ذاكرة mem0 لاستدعاء المعلومات بسلاسة. يُمكننا هذا المزيج، الذي يجمع بين سهولة استخدام LangGraph في تنظيم آلية الحالة (state-machine) وقوة ذاكرة mem0 القائمة على المتجهات، من تزويد مساعدنا الافتراضي بقدرة تذكر المحادثات السابقة، واسترجاع التفاصيل ذات الصلة عند الطلب، والحفاظ على استمرارية طبيعية عبر جلسات متعددة. سواء كنت تبني روبوتات دعم عملاء، أو مساعدين افتراضيين، أو عروضًا تفاعلية، فإن هذا الدليل سيوفر لك أساسًا متينًا لتجارب الذكاء الاصطناعي القائمة على الذاكرة.

1. تثبيت المكتبات اللازمة

بادئ ذي بدء، نقوم بتثبيت وتحديث المكتبات الضرورية لبناء روبوت محادثة قائم على الذاكرة مع Claude على Google Colab. هذا يضمن تجنب مشاكل التبعيات ويسهل عملية الإعداد:

pip install -qU langgraph mem0ai langchain langchain-anthropic anthropic

2. استيراد المكتبات الأساسية

نقوم باستيراد الوحدات الأساسية اللازمة لبناء روبوت المحادثة:

import os
from typing import Annotated, TypedDict, List
from langgraph.graph import StateGraph, START
from langgraph.graph.message import add_messages
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_anthropic import ChatAnthropic
from mem0 import MemoryClient

3. إعداد مفاتيح API

نقوم بتعيين مفاتيح API الخاصة بـ Anthropic و Mem0 بشكل آمن في المتغيرات البيئية:

os.environ["ANTHROPIC_API_KEY"] = "Use Your Own API Key"
MEM0_API_KEY = "Use Your Own API Key"

ملاحظة: يجب استبدال "Use Your Own API Key" بمفاتيح API الخاصة بك.

4. تهيئة نموذج Claude وذاكرة mem0

نقوم بتهيئة نموذج Claude وعميل ذاكرة mem0:

llm = ChatAnthropic(
    model="claude-3-5-haiku-latest",
    temperature=0.0,
    max_tokens=1024,
    anthropic_api_key=os.environ["ANTHROPIC_API_KEY"]
)
mem0 = MemoryClient(api_key=MEM0_API_KEY)

5. تعريف هيكل حالة المحادثة ووظيفة روبوت المحادثة

نقوم بتعريف هيكل حالة المحادثة باستخدام TypedDict ووظيفة chatbot التي تدير تدفق المحادثة:

class State(TypedDict):
    messages: Annotated[List[HumanMessage | AIMessage], add_messages]
    mem0_user_id: str

graph = StateGraph(State)

def chatbot(state: State):
    messages = state["messages"]
    user_id = state["mem0_user_id"]
    memories = mem0.search(messages[-1].content, user_id=user_id)
    context = "n".join(f"- {m['memory']}" for m in memories)
    system_message = SystemMessage(content=(
        "You are a helpful customer support assistant. "
        "Use the context below to personalize your answers:n" + context
    ))
    full_msgs = [system_message] + messages
    ai_resp: AIMessage = llm.invoke(full_msgs)
    mem0.add(f"User: {messages[-1].content}nAssistant: {ai_resp.content}", user_id=user_id)
    return {"messages": [ai_resp]}

6. بناء وتجميع الرسم البياني باستخدام LangGraph

نقوم بتوصيل وظيفة chatbot برسم بياني LangGraph:

graph.add_node("chatbot", chatbot)
graph.add_edge(START, "chatbot")
graph.add_edge("chatbot", "chatbot")
compiled_graph = graph.compile()

7. تشغيل المحادثة

أخيرًا، نقوم بتعريف دالة run_conversation لتشغيل المحادثة:

def run_conversation(user_input: str, mem0_user_id: str):
    config = {"configurable": {"thread_id": mem0_user_id}}
    state = {"messages": [HumanMessage(content=user_input)], "mem0_user_id": mem0_user_id}
    for event in compiled_graph.stream(state, config):
        for node_output in event.values():
            if node_output.get("messages"):
                print("Assistant:", node_output["messages"][-1].content)
                return

if __name__ == "__main__":
    print("Welcome! (type 'exit' to quit)")
    mem0_user_id = "customer_123"
    while True:
        user_in = input("You: ")
        if user_in.lower() in ["exit", "quit", "bye"]:
            print("Assistant: Goodbye!")
            break
        run_conversation(user_in, mem0_user_id)

هذا الكود يوفر روبوت محادثة متكامل يستخدم Claude و mem0. يمكن تطويره أكثر بإضافة المزيد من الميزات.

المصدر: MarkTechPost