레시피
흔한 use case를 위한 구체적 패턴. 각 레시피는 전체 흐름을 보여줍니다 — 정책 한 번 설정 → 매 턴 add+search 루프. 응답 생성은 당신의 LLM 플러그인.
라이브 데모
이 시나리오들을 Playground에서 시도해보세요 — 공개 뷰어에 각 레시피가 미리 연결되어 있어 1 클릭으로 대화 가능합니다.
1. AI 튜터 — 학생 학습 누적
각 학생의 마스터한 스킬·약한 부분·학습 선호·목표를 추적하여 다음 세션이 개인화되게 합니다.
from memgen import MemgenClient
import openai
memgen = MemgenClient(api_key="mg-...")
memgen.project.update(
project_id="<project-id>",
extraction_policy=(
"Extract learning context: skill_mastered, skill_struggling, "
"preference (visual/audio/pace), goal (with deadline). Skip grades and PII."
),
label_taxonomy=[
{"skill_mastered": "Topics student understands"},
{"skill_struggling": "Topics student finds hard"},
{"preference": "How they like to learn"},
{"goal": "Learning target with deadline"},
],
)
def tutor_reply(student_id: str, question: str) -> str:
ctx = memgen.search(query=question, user_id=student_id, top_k=5)
notes = "\n".join(f"- {m['memory']}" for m in ctx.results)
answer = openai.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system",
"content": f"You are a tutor.\nWhat we know about this student:\n{notes}"},
{"role": "user", "content": question},
],
).choices[0].message.content
memgen.add(messages=[
{"role": "user", "content": question},
{"role": "assistant", "content": answer},
], user_id=student_id)
return answer2. 고객 지원 — 시간을 가로지르는 티켓 연결
각 티켓은 run_id. 고객은 영속 user_id. 과거 티켓 정보가 자동으로 컨텍스트로 떠오릅니다.
memgen.project.update(
project_id="<project-id>",
extraction_policy=(
"Extract: product_issue (with SKU), resolution, customer preferences, "
"unresolved dissatisfaction. Skip payment cards."
),
label_taxonomy=[
{"product_issue": "Defect or complaint"},
{"resolution": "How resolved"},
{"preference": "Customer preference"},
{"dissatisfaction": "Unresolved complaint"},
],
)
def handle_ticket(customer_id: str, ticket_id: str, message: str) -> str:
history = memgen.search(query=message, user_id=customer_id, top_k=10)
response = my_llm.reply(message, context=history.results)
memgen.add(
messages=[
{"role": "user", "content": message},
{"role": "assistant", "content": response},
],
user_id=customer_id,
run_id=ticket_id,
metadata={"channel": "email"},
)
return response3. 회의록 — 결정·액션 아이템 자동 추출
transcript를 넣으면 카테고리화된 결정·액션(담당자 포함)·미해결 질문·리스크가 돌아옵니다.
memgen.project.update(
project_id="<project-id>",
extraction_policy=(
"Extract meeting outcomes: decision (with owner), "
"action_item (with assignee + deadline), open_question, risk."
),
label_taxonomy=[
{"decision": "Concrete decisions"},
{"action_item": "Tasks with owner"},
{"open_question": "Unresolved follow-ups"},
{"risk": "Concerns raised"},
],
)
def ingest_meeting(meeting_id: str, transcript: str, attendees: list[str]):
memgen.add(
messages=[{"role": "user", "content": transcript}],
run_id=meeting_id,
agent_id="meeting_recorder",
metadata={"attendees": attendees, "date": "2026-05-03"},
)
def my_action_items(person: str):
return memgen.search(
query=f"action items for {person}",
agent_id="meeting_recorder",
top_k=20,
)4. LangChain 에이전트 도구
memgen을 에이전트가 자율 호출할 수 있는 두 도구로 노출: remember_fact와 recall_facts.
from langchain.tools import StructuredTool
from memgen import MemgenClient
memgen = MemgenClient(api_key="mg-...")
def remember(content: str, user_id: str = "default") -> str:
memgen.add(messages=[{"role": "user", "content": content}], user_id=user_id)
return "stored"
def recall(query: str, user_id: str = "default") -> list[str]:
hits = memgen.search(query=query, user_id=user_id, top_k=5)
return [m["memory"] for m in hits.results]
tools = [
StructuredTool.from_function(remember, name="remember_fact",
description="Store a fact about the user for later recall."),
StructuredTool.from_function(recall, name="recall_facts",
description="Retrieve facts about the user matching a query."),
]5. 모더레이션·검증을 위한 sync extract
저장 전에 무엇이 저장될지 검사가 필요할 때.
r = memgen.extract(
messages=[{"role": "user", "content": user_input}],
user_id="alice",
store=False,
)
if r.importance >= 2 and "payment" not in r.tags:
memgen.add(messages=[{"role":"user","content": user_input}], user_id="alice")더 많은 예시를 원하시나요?
위 패턴은 모두 repo의 examples/python/ 에 실행 가능 스크립트로 있습니다.