llm-application-dev — скилл для Claude Code: LLM-приложения и RAG
Скилл для разработки приложений на больших языковых моделях: промпты, RAG-конвейер, вызовы API и обработка ошибок.
npx skills add MoizIbnYousaf/ai-agent-skills --skill llm-application-dev -a claude-codeЧто делает llm-application-dev
Скилл даёт агенту готовые шаблоны для кода, который работает с LLM. Внутри — структурированные системные промпты с правилами и контекстом, примеры few-shot для классификации, цепочки рассуждений. Плюс паттерны интеграции: клиенты OpenAI и Anthropic на TypeScript, потоковая выдача ответа через stream: true.
Отдельный блок про RAG. Пайплайн разбит на шаги: получить эмбеддинг вопроса, найти похожие документы в векторной базе, собрать контекст, сгенерировать ответ. Есть функция нарезки документа на чанки с перекрытием и пример хранения эмбеддингов в Supabase с pgvector. Для сбоев — обёртка с повторными попытками и экспоненциальной задержкой при ошибке 429.
Ключи API скилл не создаёт: код читает OPENAI_API_KEY и ANTHROPIC_API_KEY из переменных окружения, так что без них примеры не запустятся. Ещё в примерах зашиты конкретные модели и лимиты вроде max_tokens: 500 — это повод проверить значения под свой счёт и задачу, а не копировать как есть.
Какие задачи решает
- написать системный промпт с правилами и подстановкой контекста
- собрать RAG-конвейер от эмбеддинга вопроса до ответа
- нарезать документ на чанки с перекрытием
- добавить повторные попытки при ошибке 429
- сделать потоковую выдачу ответа в чате
Примеры запросов агенту
- собери RAG-пайплайн для поиска по нашим документам на Supabase с pgvector
- добавь в вызов LLM повторные попытки с экспоненциальной задержкой на 429
- сделай потоковый ответ от Anthropic в нашем чате
Как установить llm-application-dev
1Через Skills CLI (Vercel)
npx skills add MoizIbnYousaf/ai-agent-skills --skill llm-application-dev -a claude-code2Вручную: положить файлы
~/.claude/skills/llm-application-dev/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/llm-application-dev/
1Через Skills CLI (Vercel)
npx skills add MoizIbnYousaf/ai-agent-skills --skill llm-application-dev -a codex2Вручную: положить файлы
.agents/skills/llm-application-dev/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add MoizIbnYousaf/ai-agent-skills --skill llm-application-dev -a cursor2Вручную: положить файлы
.cursor/skills/llm-application-dev/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install MoizIbnYousaf/ai-agent-skills llm-application-dev2Вручную: положить файлы
.github/skills/llm-application-dev/SKILL.md1Через Skills CLI (Vercel)
npx skills add MoizIbnYousaf/ai-agent-skills --skill llm-application-dev -a gemini-cli2Командой платформы
gemini skills install https://github.com/MoizIbnYousaf/ai-agent-skills --path skills/llm-application-devВручную: положить файлы
.devin/skills/llm-application-dev/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add MoizIbnYousaf/ai-agent-skills --skill llm-application-dev -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора6
Похожие
Рядом в теме «ИИ и ML»
Всё по теме «ИИ и ML» →Вопросы о llm-application-dev
Как установить llm-application-dev в Claude?
Выполните npx skills add MoizIbnYousaf/ai-agent-skills --skill llm-application-dev -a claude-code. Скилл окажется в ~/.claude/skills/llm-application-dev/SKILL.md.
Что делает llm-application-dev?
Даёт шаблоны для приложений на LLM: промпт-инжиниринг, вызовы OpenAI и Anthropic, RAG с векторным поиском, обработку ошибок и советы по работе с токенами.
Что нужно, чтобы примеры заработали?
Код читает OPENAI_API_KEY и ANTHROPIC_API_KEY из переменных окружения. Для RAG-примера нужна векторная база — в шаблоне это Supabase с pgvector.
Исходный текст
SKILL.md · MIT
---
name: llm-application-dev
description: Building applications with Large Language Models - prompt engineering, RAG patterns, and LLM integration. Use for AI-powered features, chatbots, or LLM-based automation.
source: wshobson/agents
license: MIT
version: 4.1.0
---
# LLM Application Development
## Prompt Engineering
### Structured Prompts
```typescript
const systemPrompt = `You are a helpful assistant that answers questions about our product.
RULES:
- Only answer questions about our product
- If you don't know, say "I don't know"
- Keep responses concise (under 100 words)
- Never make up information
CONTEXT:
{context}`;
const userPrompt = `Question: {question}`;
```
### Few-Shot Examples
```typescript
const prompt = `Classify the sentiment of customer feedback.
Examples:
Input: "Love this product!"
Output: positive
Input: "Worst purchase ever"
Output: negative
Input: "It works fine"
Output: neutral
Input: "${customerFeedback}"
Output:`;
```
### Chain of Thought
```typescript
const prompt = `Solve this step by step:
Question: ${question}
Let's think through this:
1. First, identify the key information
2. Then, determine the approach
3. Finally, calculate the answer
Step-by-step solution:`;
```
## API Integration
### OpenAI Pattern
```typescript
import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function chat(messages: Message[]): Promise<string> {
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages,
temperature: 0.7,
max_tokens: 500,
});
return response.choices[0].message.content ?? '';
}
```
### Anthropic Pattern
```typescript
import Anthropic from '@anthropic-ai/sdk';
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
async function chat(prompt: string): Promise<string> {
const response = await anthropic.messages.create({
model: 'claude-3-opus-20240229',
max_tokens: 1024,
messages: [{ role: 'user', content: prompt }],
});
return response.content[0].type === 'text'
? response.content[0].text
: '';
}
```
### Streaming Responses
```typescript
async function* streamChat(prompt: string) {
const stream = await openai.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: prompt }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) yield content;
}
}
```
## RAG (Retrieval-Augmented Generation)
### Basic RAG Pipeline
```typescript
async function ragQuery(question: string): Promise<string> {
// 1. Embed the question
const questionEmbedding = await embedText(question);
// 2. Search vector database
const relevantDocs = await vectorDb.search(questionEmbedding, { limit: 5 });
// 3. Build context
const context = relevantDocs.map(d => d.content).join('\n\n');
// 4. Generate answer
const prompt = `Answer based on this context:\n${context}\n\nQuestion: ${question}`;
return await chat(prompt);
}
```
### Document Chunking
```typescript
function chunkDocument(text: string, options: ChunkOptions): string[] {
const { chunkSize = 1000, overlap = 200 } = options;
const chunks: string[] = [];
let start = 0;
while (start < text.length) {
const end = Math.min(start + chunkSize, text.length);
chunks.push(text.slice(start, end));
start += chunkSize - overlap;
}
return chunks;
}
```
### Embedding Storage
```typescript
// Using Supabase with pgvector
async function storeEmbeddings(docs: Document[]) {
for (const doc of docs) {
const embedding = await embedText(doc.content);
await supabase.from('documents').insert({
content: doc.content,
metadata: doc.metadata,
embedding: embedding, // vector column
});
}
}
async function searchSimilar(query: string, limit = 5) {
const embedding = await embedText(query);
const { data } = await supabase.rpc('match_documents', {
query_embedding: embedding,
match_count: limit,
});
return data;
}
```
## Error Handling
```typescript
async function safeLLMCall<T>(
fn: () => Promise<T>,
options: { retries?: number; fallback?: T }
): Promise<T> {
const { retries = 3, fallback } = options;
for (let i = 0; i < retries; i++) {
try {
return await fn();
} catch (error) {
if (error.status === 429) {
// Rate limit - exponential backoff
await sleep(Math.pow(2, i) * 1000);
continue;
}
if (i === retries - 1) {
if (fallback !== undefined) return fallback;
throw error;
}
}
}
throw new Error('Max retries exceeded');
}
```
## Best Practices
- **Token Management**: Track usage and set limits
- **Caching**: Cache embeddings and common queries
- **Evaluation**: Test prompts with diverse inputs
- **Guardrails**: Validate outputs before using
- **Logging**: Log prompts and responses for debugging
- **Cost Control**: Use cheaper models for simple tasks
- **Latency**: Stream responses for better UX
- **Privacy**: Don't send PII to external APIs
© MoizIbnYousaf · MIT · MoizIbnYousaf/ai-agent-skills