AgentSkillsCN

edsl-survey-memory

通过配置记忆模式,控制代理在回答问题时可查看哪些先前的答案。

SKILL.md
--- frontmatter
name: edsl-survey-memory
description: Configure memory modes to control which prior answers agents see when answering questions
allowed-tools: Read, Glob, Bash(python:*)

Survey Memory System

Memory controls which previous question-answer pairs an agent sees when answering each question. This affects how context is provided in the LLM prompt.

Memory Modes

ModeDescriptionUse Case
No MemoryAgent sees no prior answersIndependent questions
Full MemoryAgent sees ALL prior answersConversational surveys
Lagged MemoryAgent sees last N answersRecent context only
Targeted MemorySpecific questions see specific priorsPrecise control

Full Memory Mode

Every question sees all prior answers:

python
from edsl import Survey

survey = Survey([q1, q2, q3, q4, q5])

# Enable full memory (returns new Survey)
survey = survey.set_full_memory_mode()

# Now:
# - q2 sees q1's answer
# - q3 sees q1 and q2's answers
# - q4 sees q1, q2, and q3's answers
# - etc.

Lagged Memory Mode

Each question sees only the last N answers:

python
survey = Survey([q1, q2, q3, q4, q5])

# Each question sees the last 2 Q&A pairs
survey = survey.set_lagged_memory(lags=2)

# Now:
# - q3 sees q1 and q2's answers
# - q4 sees q2 and q3's answers
# - q5 sees q3 and q4's answers

Targeted Memory

Specific questions see specific prior answers:

python
survey = Survey([q1, q2, q3, q4, summary])

# q3 remembers q1's answer
survey = survey.add_targeted_memory("q3", "q1")

# summary remembers multiple specific questions
survey = survey.add_memory_collection("summary", ["q1", "q2", "q3"])

# Chain multiple targeted memories
survey = (survey
    .add_targeted_memory("q3", "q1")
    .add_targeted_memory("q4", "q2")
    .add_memory_collection("summary", ["q1", "q2", "q3", "q4"]))

Memory Collection

One question sees multiple specific prior answers:

python
# Create a summary question that sees specific prior answers
summary_q = QuestionFreeText(
    question_name="summary",
    question_text="Based on your previous answers, what patterns do you notice?"
)

survey = Survey([q1, q2, q3, q4, summary_q])

# summary sees answers from q1, q2, q3, q4
survey = survey.add_memory_collection("summary", ["q1", "q2", "q3", "q4"])

Combining Memory Modes

You can combine different memory approaches:

python
survey = (Survey([intro, q1, q2, q3, q4, summary])
    # Start with lagged memory as base
    .set_lagged_memory(lags=1)
    # Add specific memory for summary
    .add_memory_collection("summary", ["q1", "q2", "q3", "q4"]))

Memory and Dependencies

Memory creates dependencies in the survey's DAG (Directed Acyclic Graph):

  • If question B remembers question A, then B depends on A
  • This affects parallel execution and validation
  • Questions cannot remember future questions (forward references)
python
# This works - q3 remembers q1
survey = survey.add_targeted_memory("q3", "q1")

# This would fail - can't remember future questions
# survey = survey.add_targeted_memory("q1", "q3")  # Error!

View Memory Configuration

python
# Access the memory plan
memory_plan = survey.memory_plan

# See memory for each question
for question_name, memory in memory_plan.data.items():
    print(f"{question_name} remembers: {memory.data}")

How Memory Affects Prompts

When an agent answers a question with memory, the prompt includes:

code
Before this question, you already answered:

Question: What is your name?
Answer: Alice

Question: What is your occupation?
Answer: Software engineer

Now answer this question:
...

Memory Modes Comparison

python
survey = Survey([q1, q2, q3, q4])

# No memory (default) - each question is independent
# q4 sees: nothing

# Full memory
survey_full = survey.set_full_memory_mode()
# q4 sees: q1, q2, q3

# Lagged memory (lags=2)
survey_lagged = survey.set_lagged_memory(lags=2)
# q4 sees: q2, q3

# Targeted memory
survey_targeted = survey.add_targeted_memory("q4", "q1")
# q4 sees: q1 only

Quick Reference

TaskMethod
Full memorysurvey.set_full_memory_mode()
Lagged memorysurvey.set_lagged_memory(lags=N)
Single targetedsurvey.add_targeted_memory(focal, prior)
Multiple targetedsurvey.add_memory_collection(focal, [priors])
View memory plansurvey.memory_plan