دليل Claude Agent SDK: أمثلة بلغتي Python وTypeScript
ثبّت Claude Agent SDK، ونفّذ أول استعلام لك بلغتي Python وTypeScript، ثم أضف أدوات مخصصة ووكلاء فرعيين وhooks وحدودًا للإنفاق وجلسات قابلة للاستئناف. كل مثال مُراجَع على التوثيق الحالي وجاهز للصقه في مشروعك.
يتيح لك Claude Agent SDK تشغيل حلقة الوكيل نفسها التي تعمل بها Claude Code، من داخل برنامجك الخاص بلغة Python أو TypeScript. ترسل أمرًا نصيًا واحدًا، فيقرأ Claude الملفات، ويشغّل الأوامر، ويعدّل الشيفرة، ويستدعي دوالك الخاصة حتى ينتهي العمل، ويبثّ إليك كل خطوة أثناء تنفيذها. يبني هذا الدليل SDK طبقة فوق أخرى: أول استعلام بكل لغة، ثم الأدوات المخصصة، والوكلاء الفرعيون، وhooks، وحدود الإنفاق، والجلسات القابلة للاستئناف. كل مقتطف يتبع التوثيق الحالي، لذا يمكنك نسخه وضبط متغير بيئة واحد وتشغيله.
ماذا يفعل Agent SDK
الوكيل برنامج يقرر خطوته التالية بنفسه. يقرأ الطلب، ويختار أداة، وينظر في النتيجة، ويواصل حتى ينتهي العمل. يمنحك Agent SDK هذه الحلقة جاهزة: الأدوات المدمجة نفسها، ونظام الأذونات، وإدارة السياق، وhooks التي تعمل داخل Claude Code، مقدَّمة كمكتبة للغتي Python وTypeScript.
الفرق العملي عن استدعاء API مباشرةً هو من يكتب الحلقة. مع Client SDK ترسل رسالة، وتتحقق مما إذا طلب Claude أداة، ثم تشغّلها، وترسل النتيجة إليه، وتكرر ذلك. أما مع Agent SDK فتستدعي query() مرة واحدة، وتمرّ على الرسائل التي تُبث إليك بينما يعمل Claude.
تتبع كل دورة في هذه الحلقة الإيقاع نفسه. يتلقى Claude المطالبة وتعريفات الأدوات، ثم يقرر إن كان سيجيب أو يستدعي أداة. يشغّل SDK الأداة ويعيد النتيجة إليه، وتتكرر الدورة حتى لا يبقى لدى Claude ما يفعله أو يوقفه حدّ ما. تصل كل خطوة إلى شيفرتك على هيئة رسالة، ولهذا تبدو الأمثلة أدناه كمعالجة لتدفق بيانات لا كطلب وردّ واحد. وهذا يعني أنك تستطيع عرض التقدم للمستخدم، أو تسجيل كل استدعاء أداة، أو الإيقاف المبكر.
SDK أم Client SDK أم CLI
تبدو الخيارات الأربعة متشابهة، لذلك يرتّبها هذا الجدول بحسب من يشغّل الوكيل.
الهدف
استخدم
ما تحصل عليه
تضمين وكيل داخل تطبيق Python أو TypeScript الخاص بك
Agent SDK
حلقة وكيل Claude Code كمكتبة، مع أدوات مدمجة وأذونات وجلسات وhooks
العمل تفاعليًا من الطرفية
Claude Code CLI
واجهة طرفية مصممة للاستخدام اليومي والمهام الفردية
استدعاء Claude API من شيفرتك
Client SDK
وصول مباشر إلى الـAPI حيث تكتب حلقة الأدوات بنفسك
أن تستضيف Anthropic الوكيل
Managed Agents
حزام تشغيل مستضاف يدير الحلقة داخل بيئة معزولة مُدارة
💡 نصيحة: لتشغيل الحلقة نفسها من لغة أخرى، شغّل CLI كعملية فرعية مع العلامة -p و--output-format json.
ما الذي تحتاجه أولًا
يجب توفر ثلاثة أشياء قبل كتابة أول سطر شيفرة:
Python 3.10+ أو Node.js 18+
حساب Anthropic مع مفتاح API من Claude Console
مجلد شيفرة يعمل عليه الوكيل، لأنه يستطيع افتراضيًا قراءة الملفات في مجلد العمل الخاص به ومجلداته الفرعية
تحمل الحزمتان ملف Claude Code الثنائي المُصرَّف، لذا يكفي التثبيت العادي. وهناك حالتان تكسران ذلك: عودة pip إلى حزمة المصدر (وأشهر حالاتها Windows على ARM64)، وتثبيت npm يتخطى التبعيات الاختيارية. في الحالتين ثبّت Claude Code بشكل أصلي وسيجده SDK.
يتيح ضبط "type": "module" استخدام await على المستوى الأعلى في سكربتك، ويشغّل tsx ملفات TypeScript دون خطوة بناء.
ضبط بيانات الاعتماد
يقرأ SDK بيانات اعتمادك من متغير بيئة في الصدفة التي تشغّل الوكيل:
export ANTHROPIC_API_KEY=your-api-key
$env:ANTHROPIC_API_KEY = "your-api-key"
لا يحمّل SDK ملفات .env بنفسه. إذا كنت تحفظ بيانات الاعتماد في أحد هذه الملفات، فحمّله أولًا باستخدام python-dotenv أو حزمة dotenv. تعمل مزودات السحابة أيضًا: اضبط CLAUDE_CODE_USE_BEDROCK=1 لخدمة Amazon Bedrock، أو CLAUDE_CODE_USE_VERTEX=1 لـGoogle Cloud، أو CLAUDE_CODE_USE_FOUNDRY=1 لـMicrosoft Foundry، ثم اضبط بيانات اعتماد ذلك المزود.
💡 ملاحظة بشأن السياسة: ما لم توافق Anthropic على ذلك مسبقًا، قد لا تقدم المنتجات الخارجية المبنية على SDK تسجيل الدخول عبر claude.ai أو حدود معدل الاستخدام الخاصة به. استخدم بيانات اعتماد API لأي شيء تنشره.
أول وكيل لك بلغتين
أنشئ ملفًا اسمه utils.py يحتوي على خطأين متعمدين: قائمة فارغة تُسقط حساب المتوسط، ومستخدم مفقود يُسقط البحث عن الاسم:
def calculate_average(numbers):
total = 0
for num in numbers:
total += num
return total / len(numbers)
def get_user_name(user):
return user["name"].upper()
الوكيل أدناه للقراءة فقط. يستطيع فحص الملف، لكن ليس لديه إذن لتغيير أي شيء.
نسخة Python
import asyncio
from claude_agent_sdk import (
query,
ClaudeAgentOptions,
AssistantMessage,
ResultMessage,
TextBlock,
)
async def main():
options = ClaudeAgentOptions(
system_prompt="You review Python code and report crash risks in plain language.",
allowed_tools=["Read", "Glob", "Grep"],
max_turns=8,
)
async for message in query(
prompt="Look at utils.py and list every input that would crash it.",
options=options,
):
if isinstance(message, AssistantMessage):
for block in message.content:
if isinstance(block, TextBlock):
print(block.text)
elif isinstance(message, ResultMessage):
print(f"Finished: {message.subtype}, cost: ${message.total_cost_usd}")
asyncio.run(main())
إليك ما يفعله كل جزء:
query() يُرجع مكرِّرًا غير متزامن (async iterator)، لذا تمرّ عليه بـasync for بينما يفكر Claude ويستدعي الأدوات ويقرأ النتائج
allowed_tools يوافق مسبقًا على Read وGlob وGrep، وهي ثلاث أدوات تستطيع فحص الملفات دون تعديلها
كتل AssistantMessage تحمل نص Claude واستدعاءات أدواته، لذا فالتصفية حسب TextBlock تعطيك مخرجات مقروءة
تصل ResultMessage في الأخير، ومعها subtype وtotal_cost_usd وnum_turns وsession_id
نسخة TypeScript
احفظ هذا الملف باسم agent.ts وشغّله بالأمر npx tsx agent.ts:
import { query } from "@anthropic-ai/claude-agent-sdk";
for await (const message of query({
prompt: "Look at utils.py and list every input that would crash it.",
options: {
systemPrompt: "You review Python code and report crash risks in plain language.",
allowedTools: ["Read", "Glob", "Grep"],
maxTurns: 8
}
})) {
if (message.type === "assistant" && message.message?.content) {
for (const block of message.message.content) {
if ("text" in block) console.log(block.text);
}
} else if (message.type === "result") {
console.log(`Finished: ${message.subtype}, cost: $${message.total_cost_usd}`);
}
}
شغّل أيًا من السكربتين، ويفترض أن ترى Claude يقرأ utils.py، ويصف الخطأين (القسمة على صفر في القائمة الفارغة وTypeError للمستخدم المفقود)، وينتهي بسطر مثل Finished: success. إذا ظهر خطأ مصادقة مثل Not logged in، فمعنى ذلك أن متغير البيئة غير موجود في الصدفة التي شغّلت السكربت، وهذا أكثر الأخطاء شيوعًا في التشغيل الأول.
المنطق واحد في اللغتين، لكن أسماء الخيارات تختلف في حالة الأحرف. احتفظ بهذا الجدول قريبًا منك، فهو يفسّر معظم لحظات "لماذا لا يعمل هذا" عند نقل الشيفرة بين الحزمتين.
الإعداد
Python
TypeScript
الأدوات الموافَق عليها مسبقًا
allowed_tools
allowedTools
وضع الأذونات
permission_mode
permissionMode
حد عدد الدورات
max_turns
maxTurns
حد الإنفاق
max_budget_usd
maxBudgetUsd
خوادم الأدوات المخصصة
mcp_servers
mcpServers
استئناف جلسة
resume
resume
الوكلاء الفرعيون
agents
agents
قوائم الأدوات هي وسيلتك لرفع مستوى الاستقلالية أو خفضه:
الأدوات
ما يستطيع الوكيل فعله
Read، Glob، Grep
فحص الشيفرة دون تغيير أي شيء
Read، Edit، Glob
فحص الشيفرة وتعديلها
Read، Edit، Bash، Glob، Grep
التشغيل من البداية للنهاية، بما في ذلك أوامر الصدفة
💡 سلوكان عليك توقعهما: يرفع query() من نوع الاستدعاء الواحد استثناءً بعد أن يُرجع نتيجة خطأ، مثل بلوغ حد الدورات، لذا لُفّ الحلقة داخل try/except أو try/catch عندما يجب أن يستمر السكربت في العمل. كما أن SDK يقرأ افتراضيًا مجلد .claude/ في مشروعك وملف ~/.claude/، كما تفعل CLI، فتنطبق عليك الإعدادات والمهارات وhooks المعرّفة هناك أيضًا.
بناء أدوات مخصصة
تتولى الأدوات المدمجة الملفات والصدفة. أما منطقك الخاص، كالبحث في قاعدة بيانات أو استدعاء واجهة داخلية، فيُوضع في أداة مخصصة: دالة تُغلَّف في خادم MCP داخل العملية نفسها، يعمل داخل تطبيقك ولا يعمل كعملية منفصلة.
للأداة أربعة أجزاء: اسم، ووصف يقرؤه Claude ليقرر متى يستدعيها، ومخطط إدخال، ومعالج (handler) غير متزامن يُرجع مصفوفة content. اكتب الوصف كما تكتب توجيهات لزميل جديد.
تسجّل الخادم عبر mcp_servers (mcpServers في TypeScript). يصبح الاسم الذي تعطيه للخادم في ذلك القاموس جزءًا من الاسم الكامل للأداة، وفق النمط mcp__{server}__{tool}. ضع هذا الاسم الكامل في قائمة الأدوات المسموح بها، فينفذ الاستدعاء دون مطالبة بالإذن.
أداة Python
import asyncio
from typing import Any
from claude_agent_sdk import (
tool,
create_sdk_mcp_server,
query,
ClaudeAgentOptions,
ResultMessage,
)
ORDERS = {"A100": "shipped", "A101": "packing"}
@tool("get_order_status", "Look up the status of an order by its id", {"order_id": str})
async def get_order_status(args: dict[str, Any]) -> dict[str, Any]:
status = ORDERS.get(args["order_id"])
if status is None:
return {
"content": [{"type": "text", "text": f"No order {args['order_id']}"}],
"is_error": True,
}
return {"content": [{"type": "text", "text": f"Order {args['order_id']}: {status}"}]}
shop_server = create_sdk_mcp_server(
name="shop", version="1.0.0", tools=[get_order_status]
)
async def main():
options = ClaudeAgentOptions(
mcp_servers={"shop": shop_server},
allowed_tools=["mcp__shop__get_order_status"],
)
async for message in query(prompt="Where is order A100?", options=options):
if isinstance(message, ResultMessage) and message.subtype == "success":
print(message.result)
asyncio.run(main())
أداة TypeScript
تصف TypeScript مدخلات الأداة باستخدام Zod، لذا شغّل npm install zod أولًا:
import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";
import { z } from "zod";
const orders: Record<string, string> = { A100: "shipped", A101: "packing" };
const getOrderStatus = tool(
"get_order_status",
"Look up the status of an order by its id",
{ order_id: z.string().describe("Order id such as A100") },
async (args) => {
const status = orders[args.order_id];
if (!status) {
return {
content: [{ type: "text", text: `No order ${args.order_id}` }],
isError: true
};
}
return { content: [{ type: "text", text: `Order ${args.order_id}: ${status}` }] };
}
);
const shopServer = createSdkMcpServer({
name: "shop",
version: "1.0.0",
tools: [getOrderStatus]
});
for await (const message of query({
prompt: "Where is order A100?",
options: {
mcpServers: { shop: shopServer },
allowedTools: ["mcp__shop__get_order_status"]
}
})) {
if (message.type === "result" && message.subtype === "success") {
console.log(message.result);
}
}
💡 نصيحة: في حالات الفشل المتوقعة، مثل رقم طلب غير معروف، أرجِع is_error: True (isError: true في TypeScript) مع رسالتك الخاصة. سيقرأ Claude الرسالة ويستطيع إعادة المحاولة أو الشرح، بدلًا من أن يتلقى نص استثناء مجردًا.
الوكلاء الفرعيون وhooks والحدود
وكيل واحد يعمل بداية جيدة. ثلاث ميزات تُبقي الوكيل الأكبر قابلًا للتنبؤ: الوكلاء الفرعيون يقسّمون العمل، وhooks تراقب كل استدعاء أداة، والحدود توقف الجلسة إذا خرجت عن السيطرة.
تفويض المهام إلى وكلاء فرعيين
الوكيل الفرعي نسخة منفصلة من الوكيل يُنشئها وكيلك الرئيسي لمهمة محددة. يبدأ كل وكيل فرعي بسياق جديد، لذا يستطيع مراجع أن يقرأ عشرات الملفات دون أن يثقل المحادثة الرئيسية، ولا يعود إلى الأصل إلا رسالته الأخيرة. تعرّفهم بخيار agents وتضيف Agent إلى الأدوات المسموح بها.
يحتاج كل تعريف إلى description (متى ينبغي على Claude أن يستخدمه) وprompt (سلوكه). تشمل الحقول الاختيارية tools لتقييد ما يستطيع الوصول إليه، وmodel الذي يقبل الأسماء المستعارة sonnet وopus وhaiku وfable وinherit، أو معرّف النموذج الكامل.
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition
async def main():
options = ClaudeAgentOptions(
allowed_tools=["Read", "Grep", "Glob", "Agent"],
agents={
"code-reviewer": AgentDefinition(
description="Reviews code for security and maintainability problems.",
prompt="You are a careful reviewer. Report concrete problems with file names.",
tools=["Read", "Grep", "Glob"],
model="sonnet",
),
"test-runner": AgentDefinition(
description="Runs the test suite and summarizes failures.",
prompt="Run the tests, then list each failing test with its error.",
tools=["Bash", "Read", "Grep"],
),
},
)
async for message in query(
prompt="Use the code-reviewer agent to check the auth module",
options=options,
):
if hasattr(message, "result"):
print(message.result)
asyncio.run(main())
تستخدم نسخة TypeScript كائنات بسيطة:
import { query } from "@anthropic-ai/claude-agent-sdk";
for await (const message of query({
prompt: "Use the code-reviewer agent to check the auth module",
options: {
allowedTools: ["Read", "Grep", "Glob", "Agent"],
agents: {
"code-reviewer": {
description: "Reviews code for security and maintainability problems.",
prompt: "You are a careful reviewer. Report concrete problems with file names.",
tools: ["Read", "Grep", "Glob"],
model: "sonnet"
}
}
}
})) {
if ("result" in message) console.log(message.result);
}
تسمية الوكيل الفرعي في مطالبتك، كما في المثال أعلاه، تضمن أن يستخدمه Claude. وبدون ذلك يطابق Claude المهمة مع كل description، لذلك تعني الأوصاف الغامضة تفويضًا فائتًا.
💡 ملاحظة عن الإصدار: تظهر الأداة باسم Agent في كتل استخدام الأدوات. كانت الإصدارات الأقدم تسميها Task، وما زالت قائمة الأدوات في رسالة init تستخدم هذا الاسم، لذا طابِق الاسمين عندما تكتشف استدعاءات الوكلاء الفرعيين في تدفق الرسائل.
حظر الاستدعاءات الخطرة باستخدام hooks
الـhooks دوال استدعاء تعمل عند نقاط ثابتة في حلقة الوكيل. أكثرها فائدة PreToolUse، الذي يُطلق قبل تشغيل أداة ويستطيع رفضها. يصفّي matcher حسب اسم الأداة، مثل Bash أو Write|Edit. أرجِع {} للسماح بالاستدعاء.
يرفض هذا الـhook في Python أي أمر صدفة يحتوي على حذف متكرر:
import asyncio
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, HookMatcher
async def block_destructive_bash(input_data, tool_use_id, context):
command = input_data["tool_input"].get("command", "")
if "rm -rf" in command:
return {
"hookSpecificOutput": {
"hookEventName": input_data["hook_event_name"],
"permissionDecision": "deny",
"permissionDecisionReason": "Recursive deletes are blocked",
}
}
return {}
async def main():
options = ClaudeAgentOptions(
allowed_tools=["Bash", "Read"],
hooks={
"PreToolUse": [HookMatcher(matcher="Bash", hooks=[block_destructive_bash])]
},
)
async with ClaudeSDKClient(options=options) as client:
await client.query("Clean up the build folder")
async for message in client.receive_response():
print(message)
asyncio.run(main())
والحماية نفسها في TypeScript:
import { query, HookCallback, PreToolUseHookInput } from "@anthropic-ai/claude-agent-sdk";
const blockDestructiveBash: HookCallback = async (input) => {
const pre = input as PreToolUseHookInput;
const toolInput = pre.tool_input as Record<string, unknown>;
const command = String(toolInput?.command ?? "");
if (command.includes("rm -rf")) {
return {
hookSpecificOutput: {
hookEventName: pre.hook_event_name,
permissionDecision: "deny",
permissionDecisionReason: "Recursive deletes are blocked"
}
};
}
return {};
};
for await (const message of query({
prompt: "Clean up the build folder",
options: {
allowedTools: ["Bash", "Read"],
hooks: { PreToolUse: [{ matcher: "Bash", hooks: [blockDestructiveBash] }] }
}
})) {
if (message.type === "result") console.log(message.subtype);
}
عندما تتطابق عدة hooks، تعمل بالتوازي ويفوز الرد الأشد. يكفي deny واحد لحظر الاستدعاء مهما أرجعت الـhooks الأخرى، لذا اكتب كل hook ليعمل بمفرده.
تحديد الدورات والإنفاق
تضبط أوضاع الأذونات المستوى الافتراضي للثقة. اختر أحدها بـpermission_mode أو permissionMode:
الوضع
السلوك
default
السلوك المعياري، وتمر الأدوات غير الموافَق عليها عبر مسار الأذونات
acceptEdits
تتم الموافقة على تعديلات الملفات تلقائيًا
plan
للتخطيط فقط: يبحث الوكيل دون أن يعدّل
dontAsk
يُرفض كل ما لم يُوافَق عليه مسبقًا
bypassPermissions
تُتخطى فحوصات الأذونات، فاستخدمه بحذر شديد
auto
يراجع مصنّف نموذج كل إجراء
حدّان رقميان يحميان ميزانيتك. max_turns (maxTurns) يحدّ عدد دورات الوكيل، وmax_budget_usd (maxBudgetUsd) يحدّ الإنفاق المقدَّر. وعند بلوغهما ينتهي الاستعلام بنوعي النتيجة error_max_turns أو error_max_budget_usd. تُحتسب طلبات الوكلاء الفرعيين ضمن total_cost_usd نفسه، لذلك تبقى المطالبة التي تتفرع إلى عدة وكلاء فرعيين خاضعة للحد نفسه.
💡 نصيحة للمهام غير المراقَبة: اجمع dontAsk مع قائمة صريحة بالأدوات المسموح بها. يُرفض فورًا كل ما يقع خارج القائمة، بدلًا من انتظار إنسان لن يكون موجودًا.
تتكرر ثلاثة أخطاء في أول الوكلاء:
منح Bash مبكرًا. ابدأ بأدوات القراءة فقط، وأضف Edit أو Bash عندما تفرض المهمة ذلك.
أوصاف غامضة للوكلاء الفرعيين. يفوّض Claude بناءً على نص description، لذا يُتجاهل "وكيل مساعد"، بينما يُستخدم "يراجع الشيفرة بحثًا عن مشكلات أمنية".
عدم وضع حدود في التشغيل الأول. اضبط max_turns وmax_budget_usd قبل أن توجّه الوكيل إلى مستودع كبير.
الحفاظ على السياق عبر الجلسات
كل استدعاء لـquery() يبدأ جلسة جديدة. عندما ينبغي لمتابعة أن تتذكر ما قرأه الوكيل وقرره، تحتاج إلى طريقة لاستمرار الجلسة.
المحادثة متعددة الأدوار في Python
يتتبع ClaudeSDKClient الجلسة نيابةً عنك. كل client.query() يواصل المحادثة نفسها:
import asyncio
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
async def main():
options = ClaudeAgentOptions(allowed_tools=["Read", "Edit", "Glob", "Grep"])
async with ClaudeSDKClient(options=options) as client:
await client.query("Inspect the auth module")
async for message in client.receive_response():
print(message)
# Same session, so the agent remembers the first answer
await client.query("Now refactor it to use JWT")
async for message in client.receive_response():
print(message)
asyncio.run(main())
الاستئناف في TypeScript
لا تملك TypeScript كائن عميل، لذا تلتقط session_id من رسالة النتيجة وتمرّره مجددًا عبر resume:
import { query } from "@anthropic-ai/claude-agent-sdk";
let sessionId: string | undefined;
for await (const message of query({
prompt: "Inspect the auth module",
options: { allowedTools: ["Read", "Glob", "Grep"] }
})) {
if (message.type === "result") sessionId = message.session_id;
}
for await (const message of query({
prompt: "Now propose a refactor based on what you found",
options: { resume: sessionId, allowedTools: ["Read", "Glob", "Grep"] }
})) {
if (message.type === "result" && message.subtype === "success") {
console.log(message.result);
}
}
يقبل Python الفكرة نفسها بصيغة resume=session_id. تدعم اللغتان أيضًا continue_conversation=True / continue: true لاستكمال أحدث جلسة في المجلد، وfork_session=True / forkSession: true لتفريع نسخة من السجل حتى تجرّب طريقة مختلفة دون أن تخسر الأصل.
هناك حدّان مهمان عمليًا. تخزّن الجلسات المحادثة، لا ملفاتك، لذلك إذا عدّل وكيل متفرع الشيفرة فسيغيّر الملفات الحقيقية. كما تُحفظ ملفات الجلسات على الجهاز الذي أنشأها، لذا يتطلب استئنافها على مضيف آخر مهايئ مخزن جلسات أو نسخة منقولة من السجل.
يعمل Agent SDK على جهازك ببيانات اعتمادك الخاصة، لذلك لا يحل PicassoIA محله. ما يقدمه PicassoIA مفيد في مرحلة الصياغة. صياغة موجّه النظام، أو وصف الوكيل الفرعي، أو وصف الأداة، تحدد مدى جودة سلوك الوكيل، واختبار الصياغة في واجهة محادثة أسرع من إعادة تشغيل السكربت عشر مرات.
صِغ الأوامر قبل كتابة الشيفرة
صُمّم Claude Sonnet 5 لمهام البرمجة متعددة الخطوات واستخدام الأدوات، ما يجعله بديلًا مناسبًا لتجربة تعليمات الوكيل. اتبع هذه الخطوات:
في SDK نفسه، يقبل حقل model الأسماء المستعارة الموصوفة سابقًا، لذا يمكنك تشغيل نموذج اقتصادي للوكلاء الفرعيين الروتينيين، ونموذج أقوى للخيط الرئيسي.
أنشئ صورك الخاصة مع PicassoIA
صار لديك الآن وكيل يعمل، إضافة إلى عادة اختبار كل جزء قبل نشره. العادة نفسها تحسّن توليد الصور، وPicassoIA مكان سريع للتدرب عليها.
افتح Seedream 4.5 أو GPT Image 2 واكتب أمرًا بالبنية نفسها المستخدمة في الصور داخل هذا المقال: الشخص وفعله، والمكان، واتجاه الضوء، والعدسة، وملمس سطح أو اثنين. سطر مثل "أيدٍ تكتب على مكتب خشبي، ضوء نافذة ناعم من اليمين، عدسة 85 مم، عمق ميدان ضحل، غبار مرئي على تفاصيل الخشب" يمنح النموذج مادة أكثر بكثير من "مبرمج يكتب".
جرّبه على الترويسة التالية للمدونة، أو صورة المنتج، أو لافتة التوثيق التي تحتاجها. غيّر تفصيلًا واحدًا في كل تشغيل، وقارن النتائج جنبًا إلى جنب، واحتفظ بالأمر الذي ينجح. وإذا أردت أن ترى ما هو متاح أيضًا، فتصفح كل النماذج على picassoia.com/en/all-models وابدأ أول توليد لك اليوم.