Guide for developing with the Prism PHP package — a Laravel package for integrating LLMs. Enable or use this when working with Prism features such as text generation, structured output, embeddings, image generation, audio processing, streaming, tools/function calling, or any LLM provider integration (OpenAI, Anthropic, Gemini, Mistral, Groq, XAI, DeepSeek, OpenRouter, Ollama, VoyageAI, ElevenLabs). Use for any Prism-related development tasks.
Prism is a Laravel package for integrating Large Language Models (LLMs) into applications with a fluent, expressive and eloquent API.
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
$response = Prism::text()
->using(Provider::Anthropic, 'claude-3-5-sonnet-20241022')
->withSystemPrompt('You are an expert mathematician.')
->withPrompt('Explain the Pythagorean theorem.')
->asText();
echo $response->text;
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
use Prism\Prism\Schema\ObjectSchema;
use Prism\Prism\Schema\StringSchema;
$schema = new ObjectSchema(
name: 'movie_review',
description: 'A structured movie review',
properties: [
new StringSchema('title', 'The movie title'),
new StringSchema('rating', 'Rating out of 5 stars'),
new StringSchema('summary', 'Brief review summary')
],
requiredFields: ['title', 'rating', 'summary']
);
$response = Prism::structured()
->using(Provider::OpenAI, 'gpt-4o')
->withSchema($schema)
->withPrompt('Review the movie Inception')
->asStructured();
$review = $response->structured;
echo $review['title'];
Route::get('/chat', function () {
return Prism::text()
->using('anthropic', 'claude-3-7-sonnet')
->withPrompt(request('message'))
->asEventStreamResponse();
});
use Prism\Prism\Facades\Prism;
use Prism\Prism\Tool;
$weatherTool = Tool::as('get_weather')
->for('Get current weather for a location')
->withStringParameter('location', 'The city and state')
->using(fn (string $location): string =>
"Weather in {$location}: 72F, sunny"
);
$response = Prism::text()
->using('anthropic', 'claude-3-5-sonnet-latest')
->withTools([$weatherTool])
->withMaxSteps(3)
->withPrompt('What is the weather in San Francisco?')
->asText();
use Prism\Prism\ValueObjects\Media\Image;
use Prism\Prism\ValueObjects\Media\Document;
$response = Prism::text()
->using(Provider::Anthropic, 'claude-3-5-sonnet-20241022')
->withPrompt(
'What objects do you see in this image?',
[Image::fromLocalPath('/path/to/image.jpg')]
)
->asText();
IMPORTANT: Always search the docs before implementing Prism features.
Read a specific doc file directly:
read vendor/prism-php/prism/docs/core-concepts/text-generation.md
read vendor/prism-php/prism/docs/providers/openai.md
Search for a topic across docs:
grep "streaming" vendor/prism-php/prism/docs/
grep "withProviderOptions" vendor/prism-php/prism/docs/providers/
Find all doc files:
glob "vendor/prism-php/prism/docs/**/*.md"
| Need | Read This File |
|------|----------------|
| Text generation | docs/core-concepts/text-generation.md |
| Streaming responses | docs/core-concepts/streaming-output.md |
| Tools / function calling | docs/core-concepts/tools-function-calling.md |
| Structured JSON output | docs/core-concepts/structured-output.md |
| Embeddings | docs/core-concepts/embeddings.md |
| Image generation | docs/core-concepts/image-generation.md |
| Audio (TTS/STT) | docs/core-concepts/audio.md |
| Schema definitions | docs/core-concepts/schemas.md |
| Testing | docs/core-concepts/testing.md |
| Image input | docs/input-modalities/images.md |
| Document input (PDF) | docs/input-modalities/documents.md |
| OpenAI options | docs/providers/openai.md |
| Anthropic options | docs/providers/anthropic.md |
| Other providers | docs/providers/{provider}.md |
| Error handling | docs/advanced/error-handling.md |
For implementation details:
glob "src/**/*.php"
grep "class Tool" src/
Prism\Prism\Facades\Prism facade or prism() helperPrism::text(), Prism::structured(), Prism::embeddings(), Prism::image(), Prism::audio()->using(Provider::Name, 'model-id') to specify provider/model->asText(), ->asStructured(), ->asStream(), ->asEventStreamResponse(), ->asDataStreamResponse()Use ->withProviderOptions([...]) to pass provider-specific features:
$response = Prism::text()
->using('anthropic', 'claude-3-7-sonnet-latest')
->withPrompt('Your prompt')
->withProviderOptions(['thinking' => ['enabled' => true]]) // Anthropic-specific
->asText();
Always search the provider docs first to find available options for each provider:
docs/providers/openai.md - strict mode, reasoning, image generation optionsdocs/providers/anthropic.md - thinking mode, prompt caching, citationsdocs/providers/gemini.md, docs/providers/mistral.md, etc.NEVER use the old package: echolabsdev/prism is deprecated.
ALWAYS use: prism-php/prism
# Correct
composer require prism-php/prism
# Wrong - do not use
composer require echolabsdev/prism
ALWAYS use the Prism\Prism namespace for all Prism classes:
// Correct
use Prism\Prism\Facades\Prism;
use Prism\Prism\Enums\Provider;
use Prism\Prism\Tool;
use Prism\Prism\Schema\ObjectSchema;
// Wrong - these namespaces do not exist
use EchoLabs\Prism\Prism;
use Prism\Facades\Prism;
When working with Prism, follow this pattern:
Determine what you need:
Text generation? → Use Prism::text()
Structured JSON output? → Use Prism::structured()
Embeddings? → Use Prism::embeddings()
Image generation? → Use Prism::image()
Audio (TTS/STT)? → Use Prism::audio()
Always read the relevant docs first before implementing.
references/relay.mdnpx skills add prism-php/developing-with-prism下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer