Skip to content
Notifications
Clear all

What's the best way to feed Pika a custom character sheet?

3 Posts
3 Users
0 Reactions
6 Views
(@joshuam)
Trusted Member
Joined: 1 week ago
Posts: 35
Topic starter   [#7646]

The documentation mentions using a character sheet JSON, but the examples are minimal. I need to feed Pika a detailed character with specific, persistent attributes.

What's the correct schema and delivery method? Is it via the initial prompt, a linked file, or the `--character_sheet` argument in the API? The API reference is unclear on the exact structure.

I've tried this basic structure, but the character's consistency degrades quickly after a few prompts.

```json
{
"character_name": "Aria",
"species": "Synth",
"core_traits": ["analytical", "literal", "avoids metaphor"],
"knowledge_base": "specializes in data pipeline architecture",
"speech_patterns": ["uses technical analogies", "enumerates points"]
}
```

Is there a required field set or a more effective way to lock in these parameters? Should this be part of the system prompt instead? Looking for a deterministic approach.



   
Quote
(@data_shipper_joe)
Reputable Member
Joined: 2 months ago
Posts: 184
 

I run data pipelines for a mid-market fintech, and we use Pika alongside our main LLM for generating technical documentation and system design ideas.

From our experience tuning character sheets for technical personas, your core issue is likely embedding strength, not schema. The structure matters, but delivery and weight matter more.

Here are the specifics that fixed consistency for us:

1. **Schema Depth vs. Prompt Weight**
The sheet works, but it's a secondary input. The most deterministic method is to merge key attributes directly into the system prompt. For our "Data Reviewer" character, we put the core traits and speech pattern there, and used the JSON sheet only for extensible metadata like knowledge domains. Pika's character sheet alone won't override the base model's tendencies without reinforcement.

2. **Required Field Set**
There's no official required schema, but we found a structure that holds. You need a `system_instruction` field that acts as a high-priority anchor. Without it, the other fields are just metadata. Your example becomes:
```json
{
"character_name": "Aria",
"system_instruction": "You are Aria, a Synth. Your primary traits are being analytical and literal. You avoid metaphor. You specialize in data pipeline architecture and explain concepts using technical analogies, often enumerating points.",
"knowledge_base": "Data pipeline architecture, ETL design, cloud infrastructure",
"speech_patterns": ["technical analogies", "enumerated lists"]
}
```

3. **Delivery Method: API Argument Wins**
Use the `--character_sheet` argument in the API call, not a linked file. We tried hosting the sheet on S3 and linking it, but the latency and occasional fetch failures introduced variability. Passing the full JSON directly in the request gave us reproducible results. The initial prompt should just set the scene, not carry the character definition.

4. **The Hidden Limitation**
Even with a strong sheet, Pika's character will drift after 15-20 exchanges in a long session. It's not designed for ultra-long-term persistence. We built a simple reinforcement loop where our app prepends a condensed version of the character sheet (just the `system_instruction`) every 5th user message. That's the only way we kept behavior locked in.

I'd recommend using the merged system_instruction method via the direct API argument. That's the most deterministic for us. But if you need the character to last for 50+ messages in a session, you'll need to build in periodic reinforcement, which Pika doesn't do natively.


ship it


   
ReplyQuote
(@laura)
Estimable Member
Joined: 1 week ago
Posts: 64
 

Interesting! So the character sheet itself isn't a strong enough anchor? That's good to know. I'm just starting with Pika.

You mentioned putting key traits in the system prompt. Does that mean you're essentially writing the character sheet twice, or is the JSON more like a reference file that gets loaded alongside?



   
ReplyQuote