Claude-skill-registry ai-partner-chat
基于用户画像和向量化笔记提供个性化对话。当用户需要个性化交流、上下文感知的回应,或希望 AI 记住并引用其之前的想法和笔记时使用。
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ai-partner-chat" ~/.claude/skills/majiayu000-claude-skill-registry-ai-partner-chat && rm -rf "$T"
skills/data/ai-partner-chat/SKILL.md- pip install
AI Partner Chat
Overview
Provide personalized, context-aware conversations by integrating user persona, AI persona, and vectorized personal notes. This skill enables AI to remember and reference the user's previous thoughts, preferences, and knowledge base, creating a more coherent and personalized interaction experience.
Prerequisites
Before first use, complete these steps in order:
-
Create directory structure
mkdir -p config notes vector_db scripts -
Set up Python environment
python3 -m venv venv ./venv/bin/pip install -r .claude/skills/ai-partner-chat/scripts/requirements.txtNote: First run will download embedding model (~4.3GB)
-
Generate persona templates Copy from
to.claude/skills/ai-partner-chat/assets/
:config/
→user-persona-template.mdconfig/user-persona.md
→ai-persona-template.mdconfig/ai-persona.md
-
User adds notes Place markdown notes in
directory (any format/structure)notes/ -
Initialize vector database (see section 1.2 below)
Now proceed to Core Workflow →
Core Workflow
1. Initial Setup
Before using this skill for the first time, complete the following setup:
1.1 Create Persona Files
Create two Markdown files to define interaction parameters:
User Persona (
user-persona.md):
- Define user's background, expertise, interests
- Specify communication preferences and working style
- Include learning goals and current projects
- Use template:
assets/user-persona-template.md
AI Persona (
ai-persona.md):
- Define AI's role and expertise areas
- Specify communication style and tone
- Set interaction guidelines and response strategies
- Define how to use user context and reference notes
- Use template:
assets/ai-persona-template.md
1.2 Initialize Vector Database
This skill uses AI Agent approach for intelligent note chunking:
When you initialize the vector database, Claude Code will:
- Read notes from
directory<project_root>/notes/ - Analyze each note's format (daily logs, structured docs, continuous text, etc.)
- Generate custom chunking code tailored to that specific note
- Execute the code to produce chunks conforming to
formatchunk_schema.Chunk - Generate embeddings using BAAI/bge-m3 (optimized for Chinese text)
- Store in ChromaDB at
<project_root>/vector_db/
Key advantages:
- ✅ No pre-written chunking strategies needed
- ✅ Each note gets optimal chunking based on its actual structure
- ✅ True AI Agent - generates tools on demand, not calling pre-built tools
Chunk Format Requirement: All chunks must conform to this schema (see
scripts/chunk_schema.py):
{ 'content': 'chunk text content', 'metadata': { 'filename': 'note.md', # Required 'filepath': '/path/to/file', # Required 'chunk_id': 0, # Required 'chunk_type': 'date_entry', # Required 'date': '2025-11-07', # Optional 'title': 'Section title', # Optional } }
Implementation Requirements
Location: Create
<project_root>/scripts/chunk_and_index.py
Required structure:
# Import provided utilities import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent / ".claude/skills/ai-partner-chat/scripts")) from chunk_schema import Chunk, validate_chunk from vector_indexer import VectorIndexer def chunk_note_file(filepath: str) -> List[Chunk]: """ Analyze THIS file's format and generate appropriate chunks. Each chunk must conform to chunk_schema.Chunk format: { 'content': 'text', 'metadata': { 'filename': 'file.md', 'filepath': '/path/to/file', 'chunk_id': 0, 'chunk_type': 'your_label' } } """ # TODO: Analyze actual file format (NOT template-based) # TODO: Generate chunks based on analysis # TODO: Validate each chunk with validate_chunk() pass def main(): # Initialize vector database indexer = VectorIndexer(db_path="./vector_db") indexer.initialize_db() # Process all note files all_chunks = [] for note_file in Path("./notes").glob("**/*"): if note_file.is_file(): chunks = chunk_note_file(str(note_file)) all_chunks.extend(chunks) # Index chunks indexer.index_chunks(all_chunks) if __name__ == "__main__": main()
Execute:
./venv/bin/python scripts/chunk_and_index.py
Key points:
- The
function logic should be dynamically created based on analyzing actual file contentchunk_note_file() - Do NOT copy chunking strategies from examples or templates
- Each file may have different format - analyze individually
- Only requirement: output must conform to
chunk_schema.Chunk
2. Conversation Workflow
For each user query, follow this process:
2.1 Load Personas
Read both persona files to understand:
- User's background, preferences, and communication style
- AI's role definition and interaction guidelines
- How to appropriately reference context
2.2 Retrieve Relevant Notes
Query the vector database to find the top 5 most semantically similar notes:
from scripts.vector_utils import get_relevant_notes # Query for relevant context relevant_notes = get_relevant_notes( query=user_query, db_path="./vector_db", top_k=5 )
Or use the command-line tool:
python scripts/query_notes.py "user query text" --top-k 5
2.3 Construct Context
Combine the following elements to inform the response:
- User Persona: Background, preferences, expertise
- AI Persona: Role, communication style, guidelines
- Relevant Notes (top 5): User's previous thoughts and knowledge
- Current Conversation: Ongoing chat history
2.4 Generate Response
Synthesize a response that:
- Aligns with both persona definitions
- Naturally references relevant notes when applicable
- Maintains continuity with user's knowledge base
- Follows the AI persona's communication guidelines
When Referencing Notes:
- Use natural phrasing: "Based on your previous note about..."
- Make connections: "This relates to what you mentioned in..."
- Avoid robotic citations: integrate context smoothly
Example Response Pattern:
[Acknowledge user's query in preferred communication style] [Incorporate relevant note context naturally if applicable] "I remember you mentioned [insight from note] - this connects well with..." [Provide main response following AI persona guidelines] [Optional: Ask follow-up question based on user's learning style]
3. Maintenance
Adding New Notes
When the user creates new notes, add them to the vector database:
python scripts/add_note.py /path/to/new_note.md
Updating Personas
Personas can be updated anytime by editing the Markdown files. Changes take effect in the next conversation.
Reinitializing Database
To completely rebuild the vector database:
python scripts/init_vector_db.py /path/to/notes --db-path ./vector_db
This will delete the existing database and re-index all notes.
Technical Details
Data Architecture
User data is stored in project root, not inside the skill directory:
<project_root>/ ├── notes/ # User's markdown notes ├── vector_db/ # ChromaDB vector database ├── venv/ # Python dependencies ├── config/ │ ├── user-persona.md # User persona definition │ └── ai-persona.md # AI persona definition └── .claude/skills/ai-partner-chat/ # Skill code (can be deleted/reinstalled) ├── SKILL.md └── scripts/ ├── chunk_schema.py # Chunk format specification ├── vector_indexer.py # Core indexing utilities └── vector_utils.py # Query utilities
Design principles:
- ✅ User data (notes, personas, vectors) lives in project root
- ✅ Easy to backup, migrate, or share across skills
- ✅ Skill code is stateless and replaceable
AI Agent Chunking
Philosophy: Instead of pre-written chunking strategies, Claude Code analyzes each note and generates optimal chunking code on the fly.
How it works:
- Claude reads a note file
- Analyzes format features (date headers, section titles, separators, etc.)
- Writes Python code that chunks this specific note optimally
- Executes the code to produce chunks
- Validates chunks against
formatchunk_schema.Chunk - Indexes chunks using
vector_indexer.py
Benefits:
- Adapts to any note format without pre-programming
- Can handle mixed formats, unusual structures, or evolving note styles
- True "vibe coding" approach - tools are created when needed
Vector Database
- Storage: ChromaDB (persistent local storage at
)<project_root>/vector_db/ - Embedding Model: BAAI/bge-m3 (multilingual, optimized for Chinese)
- Similarity Metric: Cosine similarity
- Chunking: AI-generated custom code per note
Scripts
: Defines required chunk format specificationchunk_schema.py
: Core utilities for embedding generation and ChromaDB indexingvector_indexer.py
: Query utilities for retrieving relevant chunksvector_utils.py
: Python dependencies (chromadb, sentence-transformers)requirements.txt
Note: No pre-written chunking scripts. Chunking is done by Claude Code dynamically.
File Structure
<project_root>/ ├── notes/ # User's notes (managed by user) │ └── *.md ├── vector_db/ # Vector database (auto-generated) ├── venv/ # Python environment ├── config/ # User configuration │ ├── user-persona.md │ └── ai-persona.md └── .claude/skills/ai-partner-chat/ ├── SKILL.md # This file ├── scripts/ │ ├── chunk_schema.py # Chunk format spec │ ├── vector_indexer.py # Indexing utilities │ ├── vector_utils.py # Query utilities │ └── requirements.txt # Dependencies └── assets/ ├── user-persona-template.md └── ai-persona-template.md
Best Practices
Persona Design
- Be Specific: Vague personas lead to generic responses
- Include Examples: Show desired interaction patterns in AI persona
- Update Regularly: Refine personas based on conversation quality
- Balance Detail: Provide enough context without overwhelming
Note Management
- Any Format Welcome: AI Agent approach adapts to your note structure
- Meaningful Content: Rich, substantive notes yield better retrieval
- Regular Updates: Add new notes to
anytime<project_root>/notes/ - Rebuild When Needed: Re-index when note collection changes significantly
Context Integration
- Natural References: Avoid forced citations - only reference when genuinely relevant
- Connection Quality: Prioritize meaningful connections over quantity
- Respect Privacy: Be mindful of sensitive information in notes
- Conversation Flow: Don't let note references disrupt natural dialogue
Troubleshooting
Database Connection Errors:
- Ensure
directory exists and is writable<project_root>/vector_db/ - Check that Python dependencies are installed in venv
Poor Retrieval Quality:
- Try re-indexing with Claude Code analyzing notes fresh
- Verify notes contain substantial content (not just titles)
- Consider increasing
value for more contexttop_k
Chunking Issues:
- If chunks are too large/small, ask Claude to adjust chunking strategy
- Review generated chunking code and provide feedback
- Ensure notes have clear structure for better chunking