Spaces:
Sleeping
Sleeping
| # Getting Started with AI Personas | |
| This guide will help you set up and start using the AI Personas system for urban planning. | |
| ## Prerequisites | |
| - Python 3.11 or higher | |
| - Anthropic API key (get one at https://console.anthropic.com/) | |
| - Basic understanding of urban planning concepts (helpful but not required) | |
| ## Installation | |
| ### 1. Clone and Setup | |
| ```bash | |
| cd AI_Personas | |
| # Create virtual environment | |
| python -m venv venv | |
| # Activate virtual environment | |
| # On macOS/Linux: | |
| source venv/bin/activate | |
| # On Windows: | |
| # venv\Scripts\activate | |
| # Install dependencies | |
| pip install -r requirements.txt | |
| ``` | |
| ### 2. Configure API Key | |
| ```bash | |
| # Copy the environment template | |
| cp .env.example .env | |
| # Edit .env and add your Anthropic API key | |
| # ANTHROPIC_API_KEY=your_actual_key_here | |
| ``` | |
| **Important:** Never commit your `.env` file to version control! | |
| ## Quick Start | |
| ### Test the System | |
| ```bash | |
| # Run a simple test query | |
| python examples/phase1_simple_query.py | |
| ``` | |
| This will query Sarah Chen (our urban planner persona) about a bike lane proposal. | |
| ### Interactive CLI | |
| ```bash | |
| # Launch the interactive command-line interface | |
| python -m src.cli | |
| ``` | |
| The CLI allows you to: | |
| - Query individual personas interactively | |
| - Query all personas with the same question | |
| - Browse available personas and contexts | |
| - Experiment with different scenarios | |
| ### Query Multiple Perspectives | |
| ```bash | |
| # See how all 6 stakeholders respond to the same issue | |
| python examples/phase1_multiple_perspectives.py | |
| ``` | |
| This demonstrates the power of the system: seeing diverse stakeholder perspectives on the same urban planning issue. | |
| ## Understanding the System | |
| ### The 6 Personas | |
| The system includes 6 diverse urban planning stakeholders: | |
| 1. **Sarah Chen** - Progressive urban planner focused on sustainability | |
| 2. **Marcus Thompson** - Local business owner concerned about economic impacts | |
| 3. **Dr. Elena Rodriguez** - Data-driven transportation engineer | |
| 4. **James O'Brien** - Long-time resident protective of neighborhood character | |
| 5. **Priya Patel** - Young housing justice advocate | |
| 6. **David Kim** - Market-driven real estate developer | |
| Each persona has: | |
| - Detailed demographics and background | |
| - Core values and priorities | |
| - Communication style and language patterns | |
| - Domain expertise | |
| - Typical concerns | |
| ### Environmental Contexts | |
| Contexts provide situational information that influences responses: | |
| - **Built environment**: Density, transit access, amenities | |
| - **Social context**: Demographics, community characteristics | |
| - **Economic context**: Housing costs, employment, development | |
| - **Temporal context**: Time, season, recent events | |
| The system currently includes one sample context: `downtown_district` | |
| ## Basic Usage Examples | |
| ### Python API | |
| ```python | |
| from src.pipeline.query_engine import QueryEngine | |
| # Initialize | |
| engine = QueryEngine() | |
| # Query a single persona | |
| response = engine.query( | |
| persona_id="sarah_chen", | |
| question="What do you think about adding bike lanes?", | |
| context_id="downtown_district" | |
| ) | |
| print(f"{response.persona_name}: {response.response}") | |
| # Query multiple personas | |
| responses = engine.query_multiple( | |
| persona_ids=["sarah_chen", "marcus_thompson", "elena_rodriguez"], | |
| question="Should we reduce parking for bike lanes?", | |
| context_id="downtown_district" | |
| ) | |
| for r in responses: | |
| print(f"\n{r.persona_name} ({r.persona_role}):") | |
| print(r.response) | |
| ``` | |
| ### Custom Scenarios | |
| You can add scenario descriptions for more specific queries: | |
| ```python | |
| scenario = """ | |
| The city is considering a $50M bond measure to fund: | |
| - 20 miles of protected bike lanes | |
| - Three new bus rapid transit lines | |
| - Pedestrian improvements in 10 neighborhoods | |
| This would increase property taxes by $200/year for median homeowner. | |
| """ | |
| response = engine.query( | |
| persona_id="james_obrien", | |
| question="Would you support this bond measure?", | |
| context_id="downtown_district", | |
| scenario_description=scenario | |
| ) | |
| ``` | |
| ## Creating Custom Personas | |
| To add your own personas: | |
| 1. Copy an existing persona JSON file from `data/personas/` | |
| 2. Modify the attributes to match your new persona | |
| 3. Save with a new filename in the same directory | |
| 4. The system will automatically load it on next run | |
| Key fields to customize: | |
| - `persona_id`: Unique identifier (use snake_case) | |
| - `name`, `role`, `tagline`: Basic identity | |
| - `demographics`: Age, education, occupation, etc. | |
| - `psychographics`: Values, priorities, political leaning | |
| - `behavioral_profile`: Communication and decision-making style | |
| - `background_story`: Narrative context | |
| ## Creating Custom Contexts | |
| To add environmental contexts: | |
| 1. Copy `data/contexts/downtown_district.json` | |
| 2. Modify the fields to match your location | |
| 3. Save with a new filename in the same directory | |
| ## Tips for Effective Queries | |
| 1. **Be specific**: Instead of "What do you think about housing?", ask "Should we allow 4-story apartment buildings on Main Street?" | |
| 2. **Add context**: Use scenario descriptions to provide relevant details | |
| 3. **Compare perspectives**: Query multiple personas to see different viewpoints | |
| 4. **Use realistic situations**: Ground questions in actual planning decisions | |
| 5. **Consider timing**: Recent events in temporal context can influence responses | |
| ## Troubleshooting | |
| ### "No personas loaded" | |
| - Check that JSON files exist in `data/personas/` | |
| - Verify JSON syntax is valid | |
| - Check file permissions | |
| ### "Anthropic API key must be provided" | |
| - Ensure `.env` file exists | |
| - Verify `ANTHROPIC_API_KEY` is set correctly | |
| - Check that you've activated the virtual environment | |
| ### "Persona not found" | |
| - Run `python -m src.cli` and select option 3 to list available personas | |
| - Check spelling of persona_id (must match exactly) | |
| ### Poor quality responses | |
| - Try adjusting temperature (lower = more consistent, higher = more creative) | |
| - Provide more context via scenario descriptions | |
| - Ensure persona definitions are detailed and realistic | |
| ## Next Steps | |
| ### Phase 2: Population Distributions (Coming Soon) | |
| Phase 2 will enable: | |
| - Generating 100s of persona variants with statistical distributions | |
| - Analyzing response distributions (mean, variance, clusters) | |
| - Visualizing how a population would respond | |
| ### Phase 3: Opinion Dynamics (Coming Soon) | |
| Phase 3 will enable: | |
| - Modeling influence between personas | |
| - Running simulations to find opinion equilibria | |
| - Discovering consensus and polarization patterns | |
| ## Support | |
| - Check the main [README.md](../README.md) for overview | |
| - Review example scripts in `examples/` directory | |
| - Examine persona JSON files in `data/personas/` to understand structure | |
| ## Best Practices | |
| 1. **Version control personas**: Treat persona definitions as code | |
| 2. **Document assumptions**: Add notes in metadata fields | |
| 3. **Iterate on personas**: Refine based on response quality | |
| 4. **Mix perspectives**: Use diverse personas for balanced analysis | |
| 5. **Ground in reality**: Base personas on real stakeholder research | |
| Happy planning! 🏙️ | |