dspy-production-deployment — скилл для Claude Code: установка
Скилл учит агента развёртывать пайплайны DSPy 3.2.1 с безопасным кэшированием, асинхронным запуском, трекингом токенов и стримингом ответов в продакшене.
npx skills add OmidZamani/dspy-skills --skill dspy-production-deployment -a claude-codeЧто делает dspy-production-deployment
Скилл задаёт правила запуска DSPy-программ в продакшене без уязвимостей сериализации. По умолчанию DSPy использует pickle для дискового кэша, поэтому инструкция требует включать dspy.configure_cache(restrict_pickle=True) или регистрировать доверенные типы через safe_types. Для сохранения пайплайнов рекомендуется выгружать только состояние в JSON с флагом save_program=False.
Внутри собраны шаблоны для асинхронного выполнения через acall() и генерации ответов по частям с помощью dspy.streamify(). Для циклических модулей вроде ReAct инструкция подсказывает включать allow_reuse=True. Также настраивается подсчёт токенов вызовом track_usage=True, при этом кэшированные вызовы расход не увеличивают.
Полное сохранение графа через cloudpickle разрешено только для доверенных артефактов, иначе загрузка чужого файла создаёт риск исполнения произвольного кода. Скилл рассчитан на совместимость с DSPy 3.2.1.
Какие задачи решает
- защитить дисковый кэш DSPy от небезопасной десериализации через pickle
- сохранить скомпилированную программу в JSON без бинарных дампов
- настроить асинхронный вызов модулей через
acall() - организовать стриминг токенов для сигнатур DSPy
Примеры запросов агенту
- Настрой безопасное кэширование в DSPy и отключи disk cache
- Покажи, как сохранить скомпилированную программу DSPy только в виде JSON-состояния
- Переведи модуль Predict на стриминг ответов через streamify
Как установить dspy-production-deployment
1Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-production-deployment -a claude-code2Вручную: положить файлы
~/.claude/skills/dspy-production-deployment/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/dspy-production-deployment/
1Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-production-deployment -a codex2Вручную: положить файлы
.agents/skills/dspy-production-deployment/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-production-deployment -a cursor2Вручную: положить файлы
.cursor/skills/dspy-production-deployment/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install OmidZamani/dspy-skills dspy-production-deployment2Вручную: положить файлы
.github/skills/dspy-production-deployment/SKILL.md1Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-production-deployment -a gemini-cli2Командой платформы
gemini skills install https://github.com/OmidZamani/dspy-skills --path skills/dspy-production-deploymentВручную: положить файлы
.devin/skills/dspy-production-deployment/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-production-deployment -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о dspy-production-deployment
Как установить dspy-production-deployment в Claude Code?
Выполните в терминале команду npx skills add OmidZamani/dspy-skills --skill dspy-production-deployment -a claude-code.
Что делает dspy-production-deployment?
Инструкция задаёт правила развёртывания DSPy: безопасный кэш с restrict_pickle=True, экспорт состояния в JSON, асинхронные вызовы и стриминг.
Как безопасно сохранить скомпилированную программу DSPy?
Вызовите compiled.save("./artifacts/program.json", save_program=False) и восстанавливайте состояние через loaded.load(...). Полный экспорт через cloudpickle допустим только для доверенных файлов.
Исходный текст
SKILL.md · MIT
---
name: dspy-production-deployment
version: "1.0.0"
dspy-compatibility: "3.2.1"
tags: ["production"]
requires-extras: []
description: Use for deploying DSPy with save/load, configure_cache, restrict_pickle, track_usage, async execution, streaming, and production runtime controls.
allowed-tools:
- Read
- Write
- Glob
- Grep
---
# DSPy Production Deployment
## Goal
Prepare a DSPy program for repeatable, observable, scalable, and safer production execution.
## Cache Hardening
DSPy enables memory and disk caches by default. Disk cache deserialization uses pickle unless restricted. Enable the allowlist mode in production:
```python
import dspy
dspy.configure_cache(restrict_pickle=True)
```
Register trusted custom cache types only when needed:
```python
dspy.configure_cache(
restrict_pickle=True,
safe_types=[MyResult, Metadata],
)
```
Disable a cache layer explicitly when a deployment cannot persist data or requires fresh model responses:
```python
dspy.configure_cache(
enable_disk_cache=False,
enable_memory_cache=True,
)
```
## Save and Load
Prefer state-only JSON for readable, safer artifacts:
```python
compiled.save("./artifacts/program.json", save_program=False)
loaded = MyProgram()
loaded.load("./artifacts/program.json")
```
Use whole-program save only for trusted artifacts. It uses cloudpickle:
```python
compiled.save("./artifacts/program/", save_program=True)
loaded = dspy.load("./artifacts/program/")
```
Keep the DSPy major version compatible when loading saved programs.
## Usage Tracking
```python
dspy.configure(
lm=dspy.LM("openai/gpt-4o-mini"),
track_usage=True,
)
prediction = program(question="What is DSPy?")
print(prediction.get_lm_usage())
```
Cached calls return no new token usage.
## Async Execution
Most built-in modules support `acall()`:
```python
import asyncio
async def main():
prediction = await program.acall(question="What is DSPy?")
print(prediction.answer)
asyncio.run(main())
```
Implement `aforward()` for custom async modules. Use `dspy.asyncify(program)` only when adapting a synchronous callable is the right boundary.
## Streaming
```python
import asyncio
import dspy
stream_program = dspy.streamify(
dspy.Predict("question -> answer"),
stream_listeners=[
dspy.streaming.StreamListener(signature_field_name="answer"),
],
)
async def main():
async for chunk in stream_program(question="Explain DSPy briefly."):
print(chunk)
asyncio.run(main())
```
For looped modules such as ReAct, set `allow_reuse=True` on listeners for repeated fields. Cache hits yield the final `Prediction` without replaying token chunks.
## Production Checklist
1. Pin the stable DSPy series.
2. Use state-only JSON unless whole-program pickle is necessary and trusted.
3. Enable `restrict_pickle=True`.
4. Record usage, latency, errors, and traces.
5. Load-test async and streaming paths separately.
6. Use [dspy-debugging-observability](../dspy-debugging-observability/SKILL.md) for MLflow and callbacks.
## Official Documentation
- **Production guide**: https://dspy.ai/production/
- **Cache tutorial**: https://dspy.ai/tutorials/cache/
- **Saving tutorial**: https://dspy.ai/tutorials/saving/
- **Async tutorial**: https://dspy.ai/tutorials/async/
- **Streaming tutorial**: https://dspy.ai/tutorials/streaming/
© OmidZamani · MIT · OmidZamani/dspy-skills