Context Management Tutorial - Refinire
Author: kitfactory
Description: 複数のLLMプロバイダーに対応した統一インターフェースライブラリ

コンテンツにスキップ

# Context Management Tutorial

This tutorial provides a step-by-step guide to using Refinire's context management features.

## Table of Contents

1. Basic Concepts
2. Basic Usage
3. Context Provider Types
4. Advanced Configuration
5. Practical Examples
6. Best Practices

## Basic Concepts

Context management is a system that automatically provides AI agents with the information they need to generate more appropriate responses.

### Key Features

- Conversation History Management: Properly maintain and manage past conversations
- File Context: Automatically provide content from relevant files
- Source Code Search: Automatically search for code related to user questions
- Context Compression: Compress long contexts to appropriate sizes
- Dynamic Selection: Select optimal context based on the situation

## Basic Usage

### 1. Simple Configuration

    from refinire.agents.pipeline import RefinireAgent

    # Basic context configuration
    context_config = [
        {
            "type": "conversation_history",
            "max_items": 5,
            "max_tokens": 1000
        }
    ]

    agent = RefinireAgent(
        model="gpt-3.5-turbo",
        context_providers_config=context_config
    )

### 2. Using Multiple Providers

    context_config = [
        {
            "type": "conversation_history",
            "max_items": 5
        },
        {
            "type": "fixed_file",
            "file_path": "README.md"
        },
        {
            "type": "source_code",
            "max_files": 3,
            "max_file_size": 500
        }
    ]

## Context Provider Types

### 1. ConversationHistoryProvider

Manages conversation history.

    {
        "type": "conversation_history",
        "max_items": 10        # Number of messages to keep
    }

### 2. FixedFileProvider

Always provides content from specified files.

    {
        "type": "fixed_file",
        "file_path": "config.yaml"
    }

### 3. SourceCodeProvider

Automatically searches for source code related to user questions.

    {
        "type": "source_code",
        "max_files": 5,                    # Maximum number of files
        "max_file_size": 1000              # Maximum file size in bytes
    }

### 4. CutContextProvider

Compresses context to specified length.

    {
        "type": "cut_context",
        "provider": {
            "type": "source_code",
            "max_files": 10,
            "max_file_size": 2000
        },
        "max_chars": 3000,           # Maximum character count
        "cut_strategy": "middle",     # Compression strategy (start/end/middle)
        "preserve_sections": True     # Preserve sections
    }

## Advanced Configuration

### 1. String-based Configuration

You can describe configuration using YAML-like strings.

    string_config = """
    - type: conversation_history
      max_items: 5
    - type: source_code
      max_files: 3
      max_file_size: 500
    """

    agent = RefinireAgent(
        model="gpt-3.5-turbo",
        context_providers_config=string_config
    )

### 2. Chained Processing

Providers can receive and process context from previous providers.

    context_config = [
        {
            "type": "source_code",
            "max_files": 10,
            "max_file_size": 2000
        },
        {
            "type": "cut_context",
            "provider": {
                "type": "source_code",
                "max_files": 10,
                "max_file_size": 2000
            },
            "max_chars": 3000,
            "cut_strategy": "middle"
        }
    ]

## Practical Examples

### 1. Code Review Assistance

    context_config = [
        {
            "type": "source_code",
            "max_files": 10,
            "max_file_size": 2000
        },
        {
            "type": "fixed_file",
            "file_path": "CONTRIBUTING.md"
        },
        {
            "type": "conversation_history",
            "max_items": 5
        }
    ]

agent = RefinireAgent( name="CodeReviewAgent", generation_instructions="Review code for quality, best practices, error handling, performance, and documentation completeness.", model="gpt-4", context_providers_config=context_config )

response = await agent.run_async("Please review the quality of this code")

    ### 2. Documentation Generation

    ```python
    context_config = [
        {
            "type": "source_code",
            "max_files": 15,
            "max_file_size": 1500
        },
        {
            "type": "cut_context",
            "provider": {
                "type": "source_code",
                "max_files": 15,
                "max_file_size": 1500
            },
            "max_chars": 4000,
            "cut_strategy": "start"
        }
    ]

agent = RefinireAgent( name="DocGenAgent", generation_instructions="Generate comprehensive documentation based on source code and existing documentation.", model="gpt-4", context_providers_config=context_config )

response = await agent.run_async("Generate API documentation")

    ### 3. Debugging Assistance

    ```python
    context_config = [
        {
            "type": "source_code",
            "max_files": 8,
            "max_file_size": 1000
        },
        {
            "type": "conversation_history",
            "max_items": 10
        }
    ]

agent = RefinireAgent( name="DebugAgent", generation_instructions="Help investigate and resolve errors by analyzing source code and error messages.", model="gpt-4", context_providers_config=context_config )

response = await agent.run_async("Please investigate the cause of this error")

    ## Best Practices

    ### 1. Provider Order

    1. **Information Collection Providers** (source_code, fixed_file)
    2. **Processing Providers** (cut_context, filter)
    3. **History Providers** (conversation_history)

    ### 2. Appropriate Size Settings

    - **max_files**: 3-10 files
    - **max_file_size**: 500-2000 bytes
    - **max_chars**: 1000-3000 characters

    ### 3. Error Handling

    ```python
    try:
        response = await agent.run_async("Question")
    except Exception as e:
        print(f"An error occurred: {e}")
        # Clear context and retry
        agent.clear_context()

### 4. Performance Optimization

- Remove unnecessary providers
- Set appropriate size limits
- Utilize caching

## Troubleshooting

### Common Issues

1. File not found
2. Verify file path is correct

3. Distinguish between relative and absolute paths

4. Context too long

5. Use CutContextProvider

6. Adjust size limits

7. Related files not found

8. Check SourceCodeProvider settings
9. Adjust file name similarity

### Debugging Methods

    # Check available provider schemas
    schemas = agent.get_context_provider_schemas()
    for schema in schemas:
        print(f"- {schema['name']}: {schema['description']}")

    # Clear context
    agent.clear_context()

## Next Steps

- Check detailed specifications in the API Reference
- Reference actual code in the Examples
- Understand the overall system in the Architecture Design