Skip to main content

Anthropic Integration

Use Trix memories with Claude models for context-aware AI applications.

Setup

setup.ts
import { Trix } from '@trixdb/client';
import Anthropic from '@anthropic-ai/sdk';

const trix = new Trix({ apiKey: process.env.TRIX_API_KEY });
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

Basic Usage

chat.ts
async function chat(userMessage, userId) {
  // 1. Recall relevant memories
  const results = await trix.memories.list({
    q: userMessage,
    spaceId: userId,
    limit: 5
  });

  // 2. Build context from memories
  const context = results.data
    .map(m => `- ${m.content}`)
    .join('\n');

  // 3. Create message with context
  const response = await anthropic.messages.create({
    model: 'claude-opus-5',
    max_tokens: 1024,
    system: `You are a helpful assistant. Here's what you know about this user:\n${context}`,
    messages: [
      { role: 'user', content: userMessage }
    ]
  });

  return response.content[0].text;
}

Using Claude Tools

Use Claude's tool use for automatic memory management:

tools.ts
const tools = [{
  name: 'remember',
  description: 'Store important information about the user for future reference',
  input_schema: {
    type: 'object',
    properties: {
      content: {
        type: 'string',
        description: 'The information to remember'
      }
    },
    required: ['content']
  }
}];

const response = await anthropic.messages.create({
  model: 'claude-opus-5',
  max_tokens: 1024,
  tools,
  messages: [{ role: 'user', content: userMessage }]
});

// Handle tool use
for (const block of response.content) {
  if (block.type === 'tool_use' && block.name === 'remember') {
    await trix.memories.create({ content: block.input.content, spaceId: userId });
  }
}

Claude's tool use is ideal for letting the AI decide what information is worth remembering.

Streaming with Memory

streaming.ts
async function* streamChat(userMessage, userId) {
  const results = await trix.memories.list({ q: userMessage, spaceId: userId });

  const stream = await anthropic.messages.stream({
    model: 'claude-sonnet-5',
    max_tokens: 1024,
    system: buildSystemPrompt(results.data),
    messages: [{ role: 'user', content: userMessage }]
  });

  for await (const chunk of stream) {
    yield chunk;
  }
}