Appearance
Anthropic Claude API完全指南
Claude以其安全、可靠、长上下文著称,是企业级AI应用的优质选择
概述
Anthropic是一家专注于AI安全的公司,其Claude系列模型以安全、可靠、长上下文处理能力著称。本教程将带你全面掌握Claude API的使用方法。
为什么选择Claude?
| 优势 | 说明 |
|---|---|
| 超长上下文 | 最高支持200K Token上下文 |
| 安全可靠 | 专注于AI安全,减少有害输出 |
| 推理能力强 | 复杂推理任务表现出色 |
| 代码能力 | 代码生成和理解能力强 |
Claude模型概览
Claude 3系列模型:
Claude 3 Opus(最强能力)
├── 最强的推理和创作能力
├── 适合复杂任务
└── 200K上下文
Claude 3 Sonnet(平衡之选)
├── 性能与成本平衡
├── 适合大多数场景
└── 200K上下文
Claude 3 Haiku(快速响应)
├── 速度最快
├── 成本最低
└── 200K上下文
Claude 3.5 Sonnet(最新版本)
├── 性能超越Claude 3 Opus
├── 速度接近Haiku
└── 200K上下文基本概念
API Key
php
<?php
// Claude API Key格式
// sk-ant-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx
// 安全存储方式
$apiKey = getenv('ANTHROPIC_API_KEY');消息格式
Claude API使用独特的消息格式:
php
<?php
// Claude消息格式
$messages = [
[
'role' => 'user',
'content' => '你好,请介绍一下你自己'
]
];
// 系统提示单独设置
$systemPrompt = '你是一个专业的AI助手';Token计算
Claude Token计算规则:
英文:约4字符 = 1 Token
中文:约1.5汉字 = 1 Token
上下文限制:
- 最大输入:200K Token
- 最大输出:4K-8K Token(取决于模型)环境准备
安装依赖
php
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;创建Claude客户端
php
<?php
class ClaudeClient
{
private $client;
private $apiKey;
private $baseUrl = 'https://api.anthropic.com/v1';
public function __construct(string $apiKey)
{
$this->apiKey = $apiKey;
$this->client = new Client([
'base_uri' => $this->baseUrl,
'timeout' => 60,
'headers' => [
'x-api-key' => $this->apiKey,
'anthropic-version' => '2023-06-01',
'Content-Type' => 'application/json',
],
]);
}
public function messages(
array $messages,
string $model = 'claude-3-5-sonnet-20241022',
string $system = '',
int $maxTokens = 4096
): array {
$params = [
'model' => $model,
'max_tokens' => $maxTokens,
'messages' => $messages,
];
if (!empty($system)) {
$params['system'] = $system;
}
try {
$response = $this->client->post('/messages', [
'json' => $params,
]);
return json_decode($response->getBody(), true);
} catch (RequestException $e) {
$errorBody = $e->getResponse() ? $e->getResponse()->getBody()->getContents() : 'Unknown error';
throw new Exception('Claude API Error: ' . $errorBody);
}
}
}
// 使用示例
$apiKey = getenv('ANTHROPIC_API_KEY');
$client = new ClaudeClient($apiKey);
$result = $client->messages(
[['role' => 'user', 'content' => '请用一句话介绍PHP语言']],
'claude-3-5-sonnet-20241022',
'你是一个专业的编程助手',
1024
);
echo $result['content'][0]['text'];运行结果:
PHP是一种开源的服务器端脚本语言,特别适合Web开发,可嵌入HTML中使用。高级参数配置
完整参数示例
php
<?php
class ClaudeClient
{
// ... 前面的代码 ...
public function messagesAdvanced(
array $messages,
string $model = 'claude-3-5-sonnet-20241022',
array $options = []
): array {
$params = [
'model' => $model,
'max_tokens' => $options['max_tokens'] ?? 4096,
'messages' => $messages,
];
// 系统提示
if (!empty($options['system'])) {
$params['system'] = $options['system'];
}
// 温度:0-1,默认1
if (isset($options['temperature'])) {
$params['temperature'] = $options['temperature'];
}
// Top P:0-1
if (isset($options['top_p'])) {
$params['top_p'] = $options['top_p'];
}
// Top K:1-100
if (isset($options['top_k'])) {
$params['top_k'] = $options['top_k'];
}
// 停止序列
if (!empty($options['stop_sequences'])) {
$params['stop_sequences'] = $options['stop_sequences'];
}
try {
$response = $this->client->post('/messages', [
'json' => $params,
]);
return json_decode($response->getBody(), true);
} catch (RequestException $e) {
$errorBody = $e->getResponse() ? $e->getResponse()->getBody()->getContents() : 'Unknown error';
throw new Exception('Claude API Error: ' . $errorBody);
}
}
}
// 使用示例
$result = $client->messagesAdvanced(
[['role' => 'user', 'content' => '写一首关于代码的诗']],
'claude-3-5-sonnet-20241022',
[
'system' => '你是一位诗人,擅长写技术相关的诗歌',
'temperature' => 0.8,
'max_tokens' => 500,
]
);
echo $result['content'][0]['text'];参数详解
| 参数 | 范围 | 默认值 | 说明 |
|---|---|---|---|
| max_tokens | 1-模型上限 | 必填 | 最大生成Token数 |
| temperature | 0-1 | 1 | 控制随机性,0最确定 |
| top_p | 0-1 | - | 核采样参数 |
| top_k | 1-100 | - | 只考虑前K个候选词 |
| stop_sequences | 字符串数组 | - | 遇到停止序列时终止 |
| system | 字符串 | - | 系统提示 |
流式响应处理
实现流式输出
php
<?php
class ClaudeClient
{
// ... 前面的代码 ...
public function messagesStream(
array $messages,
string $model = 'claude-3-5-sonnet-20241022',
string $system = '',
int $maxTokens = 4096
): Generator {
$params = [
'model' => $model,
'max_tokens' => $maxTokens,
'messages' => $messages,
'stream' => true,
];
if (!empty($system)) {
$params['system'] = $system;
}
$response = $this->client->post('/messages', [
'json' => $params,
'stream' => true,
]);
$body = $response->getBody();
$buffer = '';
while (!$body->eof()) {
$chunk = $body->read(1024);
$buffer .= $chunk;
while (($pos = strpos($buffer, "\n")) !== false) {
$line = substr($buffer, 0, $pos);
$buffer = substr($buffer, $pos + 1);
$line = trim($line);
if (empty($line)) {
continue;
}
if (strpos($line, 'data: ') === 0) {
$json = substr($line, 6);
$data = json_decode($json, true);
if ($data['type'] === 'content_block_delta' &&
isset($data['delta']['text'])) {
yield $data['delta']['text'];
}
}
}
}
}
}
// 使用示例
echo "Claude回复:";
foreach ($client->messagesStream(
[['role' => 'user', 'content' => '讲一个程序员笑话']],
'claude-3-5-sonnet-20241022'
) as $chunk) {
echo $chunk;
flush();
}运行结果:
Claude回复:一个程序员去面试,面试官问:"你有什么特长?"
程序员说:"我能在没有咖啡的情况下工作8小时。"
面试官:"这算什么特长?"
程序员:"你试试看就知道了。"多轮对话实现
完整对话管理
php
<?php
class ClaudeChatSession
{
private ClaudeClient $client;
private array $messages = [];
private string $systemPrompt;
private string $model;
public function __construct(
ClaudeClient $client,
string $model = 'claude-3-5-sonnet-20241022',
string $systemPrompt = ''
) {
$this->client = $client;
$this->model = $model;
$this->systemPrompt = $systemPrompt;
}
public function chat(string $userMessage): string
{
$this->messages[] = [
'role' => 'user',
'content' => $userMessage,
];
$response = $this->client->messages(
$this->messages,
$this->model,
$this->systemPrompt
);
$assistantMessage = $response['content'][0]['text'];
$this->messages[] = [
'role' => 'assistant',
'content' => $assistantMessage,
];
return $assistantMessage;
}
public function getHistory(): array
{
return $this->messages;
}
public function clearHistory(): void
{
$this->messages = [];
}
}
// 使用示例
$session = new ClaudeChatSession(
$client,
'claude-3-5-sonnet-20241022',
'你是一位专业的PHP开发工程师,用简洁的语言回答问题。'
);
echo "用户:PHP有哪些优点?\n";
echo "Claude:" . $session->chat('PHP有哪些优点?') . "\n\n";
echo "用户:它适合做什么?\n";
echo "Claude:" . $session->chat('它适合做什么?') . "\n";长上下文处理
利用200K上下文处理长文档
php
<?php
class LongDocumentProcessor
{
private ClaudeClient $client;
public function __construct(ClaudeClient $client)
{
$this->client = $client;
}
public function analyzeDocument(string $document, string $question): string
{
$systemPrompt = '你是一个文档分析助手。请根据提供的文档内容回答问题。';
$userMessage = <<<MESSAGE
以下是文档内容:
{$document}
---
请回答问题:{$question}
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
4096
);
return $result['content'][0]['text'];
}
public function summarizeDocument(string $document, int $maxLength = 500): string
{
$systemPrompt = '你是一个文档摘要助手。请生成简洁、准确的摘要。';
$userMessage = <<<MESSAGE
请为以下文档生成一个不超过{$maxLength}字的摘要:
{$document}
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
1024
);
return $result['content'][0]['text'];
}
public function extractKeyPoints(string $document): array
{
$systemPrompt = '你是一个文档分析助手。请提取文档的关键要点。';
$userMessage = <<<MESSAGE
请从以下文档中提取5-10个关键要点,以JSON数组格式返回:
{$document}
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
2048
);
return json_decode($result['content'][0]['text'], true);
}
}
// 使用示例
$processor = new LongDocumentProcessor($client);
// 读取长文档
$document = file_get_contents('long_article.txt');
// 分析文档
$answer = $processor->analyzeDocument($document, '这篇文章的核心观点是什么?');
echo $answer;
// 生成摘要
$summary = $processor->summarizeDocument($document);
echo "摘要:\n" . $summary;常见错误与踩坑点
错误1:忽略max_tokens必填
php
<?php
// ❌ 错误做法:不设置max_tokens
$result = $client->messages($messages);
// ✅ 正确做法:必须设置max_tokens
$result = $client->messages($messages, 'claude-3-5-sonnet-20241022', '', 4096);错误2:消息格式错误
php
<?php
// ❌ 错误做法:使用OpenAI格式
$messages = [
['role' => 'system', 'content' => '你是助手'],
['role' => 'user', 'content' => '你好'],
];
// ✅ 正确做法:使用Claude格式
$messages = [
['role' => 'user', 'content' => '你好'],
];
$systemPrompt = '你是助手';
$result = $client->messages($messages, 'claude-3-5-sonnet-20241022', $systemPrompt);错误3:连续user消息
php
<?php
// ❌ 错误做法:连续的user消息
$messages = [
['role' => 'user', 'content' => '问题1'],
['role' => 'user', 'content' => '问题2'],
];
// ✅ 正确做法:user和assistant交替
$messages = [
['role' => 'user', 'content' => '问题1'],
['role' => 'assistant', 'content' => '回答1'],
['role' => 'user', 'content' => '问题2'],
];错误4:忽略API版本头
php
<?php
// ❌ 错误做法:不设置anthropic-version
$headers = [
'x-api-key' => $apiKey,
'Content-Type' => 'application/json',
];
// ✅ 正确做法:设置anthropic-version
$headers = [
'x-api-key' => $apiKey,
'anthropic-version' => '2023-06-01',
'Content-Type' => 'application/json',
];常见应用场景
场景1:代码审查助手
php
<?php
class CodeReviewAssistant
{
private ClaudeClient $client;
public function __construct(ClaudeClient $client)
{
$this->client = $client;
}
public function review(string $code, string $language = 'PHP'): array
{
$systemPrompt = '你是一位资深代码审查专家。请从代码质量、安全性、性能三个维度审查代码。';
$userMessage = <<<MESSAGE
请审查以下{$language}代码:
```{$language}
{$code}请以JSON格式返回审查结果: { "quality": {"score": 1-10, "issues": [], "suggestions": []}, "security": {"score": 1-10, "issues": [], "suggestions": []}, "performance": {"score": 1-10, "issues": [], "suggestions": []}, "overall_score": 1-10 } MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
2048
);
return json_decode($result['content'][0]['text'], true);
}
}
### 场景2:文档问答系统
```php
<?php
class DocumentQA
{
private ClaudeClient $client;
private string $document;
public function __construct(ClaudeClient $client, string $document)
{
$this->client = $client;
$this->document = $document;
}
public function ask(string $question): string
{
$systemPrompt = '你是一个文档问答助手。请根据提供的文档内容准确回答问题。如果文档中没有相关信息,请诚实说明。';
$userMessage = <<<MESSAGE
文档内容:
{$this->document}
---
问题:{$question}
请根据文档内容回答:
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
1024
);
return $result['content'][0]['text'];
}
}场景3:内容生成器
php
<?php
class ContentGenerator
{
private ClaudeClient $client;
public function generateArticle(string $topic, string $style = '专业', int $wordCount = 800): string
{
$systemPrompt = '你是一位专业的内容创作者,擅长撰写高质量的文章。';
$userMessage = <<<MESSAGE
请以{$style}的风格,撰写一篇关于"{$topic}"的文章。
要求:
1. 字数约{$wordCount}字
2. 结构清晰,分段明确
3. 内容准确,有实用价值
4. 语言流畅,易于理解
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
2048
);
return $result['content'][0]['text'];
}
}场景4:数据分析助手
php
<?php
class DataAnalysisAssistant
{
private ClaudeClient $client;
public function analyzeData(string $data, string $analysisType): string
{
$systemPrompt = '你是一位数据分析专家,擅长从数据中发现洞察和规律。';
$userMessage = <<<MESSAGE
请对以下数据进行{$analysisType}分析:
{$data}
请提供详细的分析结果和建议。
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
2048
);
return $result['content'][0]['text'];
}
public function generateReport(string $data, string $reportType): string
{
$systemPrompt = '你是一位报告撰写专家,擅长生成结构清晰、内容详实的分析报告。';
$userMessage = <<<MESSAGE
请根据以下数据生成一份{$reportType}报告:
{$data}
报告应包含:
1. 数据概述
2. 主要发现
3. 详细分析
4. 结论与建议
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
4096
);
return $result['content'][0]['text'];
}
}场景5:智能翻译
php
<?php
class TranslationAssistant
{
private ClaudeClient $client;
public function translate(
string $text,
string $sourceLang,
string $targetLang,
string $style = '自然'
): string {
$systemPrompt = '你是一位专业的翻译专家,精通多种语言。';
$userMessage = <<<MESSAGE
请将以下{$sourceLang}文本翻译成{$targetLang},翻译风格要求{$style}:
{$text}
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
2048
);
return $result['content'][0]['text'];
}
public function translateDocument(string $document, string $targetLang): string
{
$systemPrompt = '你是一位专业的文档翻译专家,请保持原文的格式和结构。';
$userMessage = <<<MESSAGE
请将以下文档翻译成{$targetLang},保持原文的格式和结构:
{$document}
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
4096
);
return $result['content'][0]['text'];
}
}企业级进阶应用场景
场景1:构建智能客服系统
php
<?php
class IntelligentCustomerService
{
private ClaudeClient $client;
private array $knowledgeBase = [];
private string $systemPrompt;
public function __construct(ClaudeClient $client)
{
$this->client = $client;
$this->systemPrompt = <<<PROMPT
你是一个专业的客服助手。请遵循以下规则:
1. 友好、专业地回答客户问题
2. 如果不确定答案,诚实告知并建议联系人工客服
3. 回答简洁明了,不超过200字
4. 使用礼貌用语
5. 如果问题涉及退款、投诉等敏感问题,建议转接人工客服
PROMPT;
}
public function addKnowledge(string $category, string $content): void
{
$this->knowledgeBase[$category] = $content;
}
public function handleQuery(string $query): string
{
$knowledgeContext = '';
foreach ($this->knowledgeBase as $category => $content) {
$knowledgeContext .= "【{$category}】\n{$content}\n\n";
}
$userMessage = <<<MESSAGE
知识库内容:
{$knowledgeContext}
客户问题:{$query}
请根据知识库内容回答客户问题:
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$this->systemPrompt,
500
);
return $result['content'][0]['text'];
}
}场景2:构建合同审核系统
php
<?php
class ContractReviewer
{
private ClaudeClient $client;
public function reviewContract(string $contract): array
{
$systemPrompt = '你是一位资深法律顾问,专注于合同审核。请从法律风险、条款完整性、公平性等角度审核合同。';
$userMessage = <<<MESSAGE
请审核以下合同,从以下维度进行分析:
1. 法律风险:识别可能存在的法律风险
2. 条款完整性:检查必要条款是否完整
3. 公平性:评估合同条款的公平性
4. 建议修改:提出具体的修改建议
合同内容:
{$contract}
请以JSON格式返回审核结果:
{
"risks": [{"type": "风险类型", "description": "风险描述", "severity": "高/中/低"}],
"missing_clauses": ["缺失条款1", "缺失条款2"],
"fairness_score": 1-10,
"suggestions": ["建议1", "建议2"],
"summary": "总体评价"
}
MESSAGE;
$result = $this->client->messages(
[['role' => 'user', 'content' => $userMessage]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
4096
);
return json_decode($result['content'][0]['text'], true);
}
}行业最佳实践
实践1:使用Claude进行安全内容生成
php
<?php
class SafeContentGenerator
{
private ClaudeClient $client;
public function generateSafeContent(string $prompt): string
{
$systemPrompt = '你是一个内容安全审核助手。请确保生成的内容符合以下要求:
1. 不包含任何有害、违法内容
2. 不包含歧视性言论
3. 不包含虚假信息
4. 内容积极向上';
$result = $this->client->messages(
[['role' => 'user', 'content' => $prompt]],
'claude-3-5-sonnet-20241022',
$systemPrompt,
1024
);
return $result['content'][0]['text'];
}
}实践2:实现重试机制
php
<?php
class ResilientClaudeClient
{
private ClaudeClient $client;
private int $maxRetries = 3;
private int $baseDelay = 1000;
public function messagesWithRetry(
array $messages,
string $model = 'claude-3-5-sonnet-20241022',
string $system = '',
int $maxTokens = 4096
): array {
$lastException = null;
for ($i = 0; $i < $this->maxRetries; $i++) {
try {
return $this->client->messages($messages, $model, $system, $maxTokens);
} catch (Exception $e) {
$lastException = $e;
if ($this->isRateLimitError($e)) {
$delay = $this->baseDelay * pow(2, $i);
usleep($delay * 1000);
}
}
}
throw $lastException;
}
private function isRateLimitError(Exception $e): bool
{
return strpos($e->getMessage(), 'rate_limit') !== false ||
strpos($e->getMessage(), '429') !== false;
}
}实践3:实现缓存机制
php
<?php
class CachedClaudeClient
{
private ClaudeClient $client;
private string $cacheDir;
private int $cacheTTL = 3600;
public function __construct(ClaudeClient $client, string $cacheDir = '/tmp/claude_cache')
{
$this->client = $client;
$this->cacheDir = $cacheDir;
if (!is_dir($cacheDir)) {
mkdir($cacheDir, 0755, true);
}
}
public function messagesWithCache(
array $messages,
string $model = 'claude-3-5-sonnet-20241022',
string $system = '',
int $maxTokens = 4096
): array {
$cacheKey = md5($model . $system . serialize($messages) . $maxTokens);
$cacheFile = $this->cacheDir . '/' . $cacheKey . '.json';
if (file_exists($cacheFile)) {
$cache = json_decode(file_get_contents($cacheFile), true);
if (time() - $cache['timestamp'] < $this->cacheTTL) {
return $cache['data'];
}
}
$result = $this->client->messages($messages, $model, $system, $maxTokens);
file_put_contents($cacheFile, json_encode([
'timestamp' => time(),
'data' => $result,
]));
return $result;
}
}常见问题答疑(FAQ)
Q1:Claude和GPT如何选择?
回答:
| 场景 | 推荐选择 | 原因 |
|---|---|---|
| 长文档处理 | Claude | 200K上下文,处理长文本能力强 |
| 安全敏感场景 | Claude | 专注AI安全,有害输出更少 |
| 复杂推理 | Claude 3.5 Sonnet | 推理能力强 |
| 成本敏感 | Claude 3 Haiku | 成本低,速度快 |
| 生态丰富度 | GPT | 插件、工具更多 |
Q2:如何处理超长文档?
回答:
php
<?php
// Claude支持200K上下文,可以直接处理长文档
$document = file_get_contents('very_long_document.txt');
// 直接发送完整文档
$result = $client->messages(
[['role' => 'user', 'content' => "请总结以下文档:\n\n{$document}"]],
'claude-3-5-sonnet-20241022',
'你是一个文档摘要助手',
2048
);Q3:如何实现多模态输入?
回答:
php
<?php
// Claude 3支持图像输入
function analyzeImage(ClaudeClient $client, string $imageBase64, string $mimeType, string $question): string
{
$messages = [
[
'role' => 'user',
'content' => [
[
'type' => 'image',
'source' => [
'type' => 'base64',
'media_type' => $mimeType,
'data' => $imageBase64,
],
],
[
'type' => 'text',
'text' => $question,
],
],
],
];
$result = $client->messages($messages, 'claude-3-5-sonnet-20241022', '', 1024);
return $result['content'][0]['text'];
}
// 使用示例
$imageData = base64_encode(file_get_contents('image.png'));
$answer = analyzeImage($client, $imageData, 'image/png', '这张图片里有什么?');Q4:如何控制输出长度?
回答:
php
<?php
// 方法1:设置max_tokens
$result = $client->messages($messages, 'claude-3-5-sonnet-20241022', '', 100);
// 方法2:在Prompt中明确要求
$prompt = "请用50字以内回答:{$question}";
$result = $client->messages(
[['role' => 'user', 'content' => $prompt]],
'claude-3-5-sonnet-20241022',
'',
200
);Q5:如何处理API错误?
回答:
php
<?php
function handleClaudeError(Exception $e): string
{
$message = $e->getMessage();
if (strpos($message, 'invalid_api_key') !== false) {
return 'API Key无效,请检查配置';
}
if (strpos($message, 'rate_limit') !== false) {
return '请求过于频繁,请稍后重试';
}
if (strpos($message, 'context_length_exceeded') !== false) {
return '输入内容过长,请减少输入长度';
}
if (strpos($message, 'overloaded') !== false) {
return '服务繁忙,请稍后重试';
}
return '服务暂时不可用,请稍后重试';
}
try {
$result = $client->messages($messages);
} catch (Exception $e) {
echo handleClaudeError($e);
}Q6:如何优化Token使用?
回答:
php
<?php
// 1. 使用简洁的系统提示
$systemPrompt = '你是助手'; // 而不是长篇大论
// 2. 避免重复内容
$messages = [
['role' => 'user', 'content' => '问题'],
['role' => 'assistant', 'content' => '回答'],
['role' => 'user', 'content' => '追问'],
];
// 3. 使用缓存
$cachedClient = new CachedClaudeClient($client);
// 4. 选择合适的模型
$model = 'claude-3-haiku-20240307'; // 简单任务用Haiku实战练习
基础练习
练习1:编写一个简单的Claude聊天程序。
参考代码:
php
<?php
require 'vendor/autoload.php';
$apiKey = getenv('ANTHROPIC_API_KEY');
$client = new ClaudeClient($apiKey);
echo "Claude聊天助手 (输入 'quit' 退出)\n";
while (true) {
echo "\n你: ";
$input = trim(fgets(STDIN));
if ($input === 'quit') {
break;
}
$result = $client->messages(
[['role' => 'user', 'content' => $input]],
'claude-3-5-sonnet-20241022',
'你是一个友好的AI助手',
1024
);
echo "Claude: " . $result['content'][0]['text'] . "\n";
}进阶练习
练习2:实现一个文档问答系统。
参考代码:
php
<?php
class SimpleDocumentQA
{
private ClaudeClient $client;
private string $document;
public function loadDocument(string $filePath): void
{
$this->document = file_get_contents($filePath);
}
public function ask(string $question): string
{
$prompt = <<<PROMPT
文档内容:
{$this->document}
问题:{$question}
请根据文档内容回答:
PROMPT;
$result = $this->client->messages(
[['role' => 'user', 'content' => $prompt]],
'claude-3-5-sonnet-20241022',
'你是文档问答助手',
1024
);
return $result['content'][0]['text'];
}
}挑战练习
练习3:构建一个智能代码解释器。
参考代码:
php
<?php
class CodeInterpreter
{
private ClaudeClient $client;
public function explain(string $code, string $language = 'PHP'): string
{
$prompt = <<<PROMPT
请详细解释以下{$language}代码的功能、逻辑和实现原理:
```{$language}
{$code}请包括:
代码功能概述
逐行解释
关键算法说明
可能的优化建议 PROMPT;
$result = $this->client->messages( [['role' => 'user', 'content' => $prompt]], 'claude-3-5-sonnet-20241022', '你是代码解释专家', 2048 ); return $result['content'][0]['text'];}
public function debug(string $code, string $error): string { $prompt = <<<PROMPT 以下代码出现了错误,请分析原因并提供修复方案:
代码:
错误信息:
请提供:
错误原因分析
修复方案
修复后的代码 PROMPT;
$result = $this->client->messages( [['role' => 'user', 'content' => $prompt]], 'claude-3-5-sonnet-20241022', '你是代码调试专家', 2048 ); return $result['content'][0]['text'];} }
---
## 知识点总结
### 核心要点
1. **API基础**:理解Claude独特的消息格式和参数
2. **长上下文**:充分利用200K上下文处理长文档
3. **安全可靠**:Claude专注于AI安全,适合企业应用
4. **模型选择**:根据任务选择合适的模型
5. **错误处理**:完善的异常处理和重试机制
### 易错点回顾
| 易错点 | 正确做法 |
|--------|---------|
| 忘记设置max_tokens | max_tokens是必填参数 |
| 使用OpenAI消息格式 | Claude系统提示单独设置 |
| 连续user消息 | user和assistant必须交替 |
| 忽略API版本头 | 设置anthropic-version |
---
## 拓展参考资料
### 官方文档
- [Anthropic API文档](https://docs.anthropic.com/)
- [Claude模型介绍](https://www.anthropic.com/claude)
- [API参考](https://docs.anthropic.com/claude/reference)
### 进阶学习路径
1. **本知识点** → Claude API基础使用
2. **下一步** → [Google Gemini API](/ai/llm-tools/gemini)
3. **进阶** → [错误处理与重试](/ai/llm-tools/error-handling)
4. **高级** → [安全与鉴权](/ai/llm-tools/security)
---
> 💡 **记住**:Claude以其安全、可靠、长上下文著称,是企业级AI应用的优质选择。善用其200K上下文,可以处理更复杂的任务。