سيرشدك هذا الدليل خلال كيفية استخدام إحدى ميزات Ollama الجديدة والقوية: القدرة على بث الاستجابات واستدعاء الأدوات (مثل الدوال أو واجهات برمجة التطبيقات) في الوقت الفعلي. هذه الميزة هي تغيير جذري في بناء تطبيقات الدردشة التي تبدو حية ويمكنها التفاعل مع العالم من حولها.
ما ستتعلمه في هذا البرنامج التعليمي:
- ماذا يعني بث الاستجابات واستدعاء الأدوات في Ollama.
- لماذا هذا المزيج مفيد للغاية لمشاريع الذكاء الاصطناعي الخاصة بك.
- تعليمات خطوة بخطوة لتطبيق ذلك باستخدام:
- cURL (للاختبارات السريعة والوصول الشامل)
- Python (لتطبيقات الواجهة الخلفية)
- JavaScript (لتطبيقات الويب وNode.js)
- نظرة خاطفة على كيفية تعامل Ollama بذكاء مع هذه الميزات.
- نصائح للحصول على أفضل أداء.
هل تبحث عن منصة متكاملة وشاملة لفريق المطورين لديك للعمل معًا بأقصى قدر من الإنتاجية؟
Apidog يلبي جميع مطالبك، ويحل محل Postman بسعر معقول أكثر بكثير!
البدء: ما ستحتاجه
لمتابعة الدليل، ستحتاج إلى بعض الأشياء:
- Ollama مثبتًا: تأكد من أن لديك أحدث إصدار من Ollama يعمل على نظامك. إذا لم يكن كذلك، توجه إلى الموقع الرسمي لـ Ollama لتنزيله وتثبيته.
- معرفة أساسية بسطر الأوامر: لأمثلة cURL.
- بيئة Python (لقسم Python): Python 3.x مثبتًا، بالإضافة إلى
pip
لإدارة الحزم. - بيئة Node.js (لقسم JavaScript): Node.js و
npm
مثبتين. - فهم لـ JSON: يستخدم Ollama JSON لهيكلة البيانات واستدعاءات الأدوات.
فهم الأفكار الرئيسية: البث واستدعاء الأدوات
دعنا نفصل ما نعنيه بـ "بث الاستجابات" و"استدعاء الأدوات".
ما هو بث الاستجابات؟
تخيل أنك تدردش مع ذكاء اصطناعي. بدلًا من الانتظار حتى يفكر ويكتب إجابته بالكامل قبل أن ترى أي شيء، يعني البث أن الذكاء الاصطناعي يرسل استجابته إليك جزءًا بجزء، كلمة بكلمة، أثناء توليدها. هذا يجعل التفاعل يبدو أسرع بكثير وأكثر طبيعية، مثل محادثة حقيقية.
مع Ollama، عندما تقوم بتمكين البث ("stream": true
)، تحصل على هذه التحديثات المتزايدة.
كيف يعمل استدعاء الأدوات؟
يسمح استدعاء الأدوات لنماذج الذكاء الاصطناعي الخاصة بك بالقيام بأكثر من مجرد توليد النصوص. يمكنك تحديد "أدوات" - وهي في الأساس دوال أو واجهات برمجة تطبيقات خارجية - يمكن للذكاء الاصطناعي أن يقرر استخدامها للحصول على معلومات أو تنفيذ إجراءات.
على سبيل المثال، يمكن أن تكون الأداة:
get_current_weather(location)
: لجلب الطقس الحالي.calculate_sum(number1, number2)
: لإجراء عملية حسابية.search_web(query)
: للحصول على معلومات من الإنترنت.
تقوم بوصف هذه الأدوات لـ Ollama، وعندما يقرر الذكاء الاصطناعي أن استخدام أداة سيساعد في الإجابة على استعلام المستخدم، فإنه يشير إلى نيته لاستدعاء تلك الأداة بحجج محددة. يقوم تطبيقك بعد ذلك بتنفيذ الأداة ويمكنه إرسال النتائج مرة أخرى إلى الذكاء الاصطناعي لمواصلة المحادثة.
لماذا نجمع بين البث واستدعاء الأدوات؟
الترقية الكبيرة في Ollama هي أنه يمكنه الآن التعامل مع استدعاء الأدوات أثناء بث الاستجابات. هذا يعني أن تطبيقك يمكنه:
- استلام النص الأولي من النموذج (مبثوثًا).
- فجأة، قد يشير البث إلى الحاجة إلى استدعاء أداة.
- يقوم تطبيقك بمعالجة استدعاء الأداة.
- في هذه الأثناء، قد يستمر النموذج في بث المزيد من النصوص (على سبيل المثال، "حسنًا، سأحضر لك الطقس لـ...").
- بمجرد أن يحصل تطبيقك على نتيجة الأداة، يمكنك إرسالها مرة أخرى إلى النموذج، وسوف يستمر في بث استجابته، مستفيدًا الآن من مخرجات الأداة.
هذا يخلق تطبيقات ذكاء اصطناعي سريعة الاستجابة وقادرة للغاية.
ما هي النماذج التي تدعم هذه الميزات؟
لقد مكن Ollama هذه الميزة لعدة نماذج شائعة، بما في ذلك:
- Qwen 3
- Devstral
- Qwen2.5 و Qwen2.5-coder
- Llama 3.1
- Llama 4
- ...والمزيد يضاف باستمرار!
كيف تقوم بأول استدعاء أداة مبثوث باستخدام cURL
cURL هو طريقة رائعة لاختبار واجهة برمجة تطبيقات Ollama بسرعة. دعنا نطلب الطقس في تورنتو.
الخطوة 1: تصور أداتك
أداتنا ستكون get_current_weather
. تحتاج إلى:
location
(سلسلة نصية): مثال، "تورنتو"format
(سلسلة نصية): مثال، "مئوي" أو "فهرنهايت"
الخطوة 2: بناء أمر cURL
افتح الطرفية وجهز الأمر التالي. سنقوم بتفصيله:
curl <http://localhost:11434/api/chat> -d '{
"model": "qwen3",
"messages": [
{
"role": "user",
"content": "What is the weather today in Toronto?"
}
],
"stream": true,
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The location to get the weather for, e.g. San Francisco, CA"
},
"format": {
"type": "string",
"description": "The format to return the weather in, e.g. \\\\\\\\'celsius\\\\\\\\' or \\\\\\\\'fahrenheit\\\\\\\\'",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location", "format"]
}
}
}
]
}'
التفصيل:
curl <http://localhost:11434/api/chat
:> الأمر ونقطة نهاية واجهة برمجة تطبيقات الدردشة لـ Ollama.d '{...}'
: يرسل بيانات JSON في جسم الطلب."model": "qwen3"
: يحدد نموذج الذكاء الاصطناعي الذي سيتم استخدامه."messages": [...]
: سجل المحادثة. هنا، مجرد سؤال المستخدم."stream": true
: هذا هو المفتاح! يخبر Ollama ببث الاستجابة."tools": [...]
: مصفوفة نحدد فيها الأدوات المتاحة للنموذج."type": "function"
: يحدد نوع الأداة."function": {...}
: يصف الدالة."name": "get_current_weather"
: اسم الأداة."description": "..."
: يساعد النموذج على فهم ما تفعله الأداة."parameters": {...}
: يحدد الحجج التي تقبلها الأداة (باستخدام مخطط JSON).
الخطوة 3: التنفيذ ومراقبة المخرجات
اضغط Enter. سترى سلسلة من كائنات JSON تظهر واحدة تلو الأخرى. هذا هو البث!
أمثلة مقتطفات من البث:
{
"model": "qwen3", "created_at": "...",
"message": { "role": "assistant", "content": "Okay, " }, "done": false
}
{
"model": "qwen3", "created_at": "...",
"message": { "role": "assistant", "content": "I will " }, "done": false
}
{
"model": "qwen3", "created_at": "...",
"message": { "role": "assistant", "content": "try to get that for you." }, "done": false
}
(قد يقوم النموذج بإخراج بعض رموز "التفكير" مثل <think>...celsius...</think>
اعتمادًا على عمليته الداخلية، هذه أيضًا جزء من البث)
ثم، بشكل حاسم، قد ترى شيئًا كهذا:
{
"model": "qwen3",
"created_at": "2025-05-27T22:54:58.100509Z",
"message": {
"role": "assistant",
"content": "", // Content might be empty when a tool call is made
"tool_calls": [
{
"function": {
"name": "get_current_weather",
"arguments": { // The arguments the model decided on!
"format": "celsius",
"location": "Toronto"
}
}
}
]
},
"done": false // Still not done, awaiting tool result
}
ما يجب ملاحظته:
- كل جزء هو كائن JSON.
"done": false
يعني أن البث مستمر. الجزء الأخير سيكون به"done": true
.- كائن
"message"
يحتوي على: "role": "assistant"
"content"
: الجزء النصي من البث."tool_calls"
: مصفوفة تظهر عندما يريد النموذج استخدام أداة. تتضمنname
الأداة وarguments
التي قررها.
في تطبيق حقيقي، عندما ترى جزء tool_calls
، سيقوم الكود الخاص بك بما يلي:
- إيقاف معالجة البث مؤقتًا (أو التعامل معه بشكل غير متزامن).
- تنفيذ الدالة/واجهة برمجة التطبيقات الفعلية
get_current_weather
مع "تورنتو" و"مئوي". - الحصول على النتيجة (على سبيل المثال، "20 درجة مئوية").
- إرسال هذه النتيجة مرة أخرى إلى Ollama في رسالة جديدة بـ
role: "tool"
. - سيستخدم النموذج بعد ذلك هذه المعلومات لمواصلة توليد استجابته، والتي سيتم بثها أيضًا.
كيفية بث استدعاءات الأدوات باستخدام Python
دعنا نطبق فكرة مشابهة في Python باستخدام مكتبة Ollama الرسمية.
الخطوة 1: تثبيت مكتبة Ollama Python
إذا لم تكن قد قمت بذلك بالفعل، قم بتثبيت أو ترقية المكتبة:
pip install -U ollama
الخطوة 2: تعريف أداتك والبرمجة في Python
تسمح لك حزمة تطوير برامج Ollama Python بذكاء بتمرير دوال Python مباشرة كأدوات. تقوم بفحص توقيع الدالة وسلسلة التوثيق (docstring) لإنشاء المخطط للذكاء الاصطناعي.
دعنا ننشئ مثالًا بسيطًا لأداة حسابية (الإدخال يستخدم add_two_numbers
ولكن مثال الإخراج يظهر استدعاء subtract_two_numbers
بواسطة النموذج. سنلتزم بـ add_two_numbers
المقدمة للتعريف وندع النموذج يقرر ما يفعله بناءً على المطالبة).
import ollama
# Define the python function that can be used as a tool
def add_two_numbers(a: int, b: int) -> int:
"""
Add two numbers.
Args:
a (int): The first number as an int.
b (int): The second number as an int.
Returns:
int: The sum of the two numbers.
"""
print(f"--- Tool 'add_two_numbers' called with a={a}, b={b} ---")
return a + b
# --- Main conversation logic ---
messages = [{'role': 'user', 'content': 'What is three plus one?'}]
# Or, for the subtraction example in the original output:
# messages = [{'role': 'user', 'content': 'what is three minus one?'}]
print(f"User: {messages[0]['content']}")
# Make the chat request with streaming and the tool
# Note: ChatResponse type hint might be ollama.ChatResponse or similar depending on library version
response_stream = ollama.chat(
model='qwen3', # Or another capable model
messages=messages,
tools=[
{ # You can also define the tool explicitly if needed, or pass the function directly
'type': 'function',
'function': {
'name': 'add_two_numbers', # Must match the Python function name if you want it to be called directly by your code later
'description': 'Add two integer numbers together.',
'parameters': {
'type': 'object',
'properties': {
'a': {'type': 'integer', 'description': 'The first number'},
'b': {'type': 'integer', 'description': 'The second number'}
},
'required': ['a', 'b']
}
}
}
# Simpler way for Python: pass the function directly if the library supports easy schema generation from it
# tools=[add_two_numbers] # The SDK can often create the schema from this
],
stream=True
)
print("Assistant (streaming):")
full_response_content = ""
tool_call_info = None
for chunk in response_stream:
# Print the streamed content part
if chunk['message']['content']:
print(chunk['message']['content'], end='', flush=True)
full_response_content += chunk['message']['content']
# Check for tool calls in the chunk
if 'tool_calls' in chunk['message'] and chunk['message']['tool_calls']:
tool_call_info = chunk['message']['tool_calls'][0] # Assuming one tool call for simplicity
print(f"\\\\n--- Detected Tool Call: {tool_call_info['function']['name']} ---")
break # Stop processing stream for now, handle tool call
if chunk.get('done'):
print("\\\\n--- Stream finished ---")
if not tool_call_info:
print("No tool call was made.")
# --- If a tool call was detected, handle it ---
if tool_call_info:
tool_name = tool_call_info['function']['name']
tool_args = tool_call_info['function']['arguments']
print(f"Arguments for the tool: {tool_args}")
# Here, you'd actually call your Python tool function
if tool_name == "add_two_numbers":
# For safety, ensure arguments are of correct type if necessary
try:
arg_a = int(tool_args.get('a'))
arg_b = int(tool_args.get('b'))
tool_result = add_two_numbers(a=arg_a, b=arg_b)
print(f"--- Tool execution result: {tool_result} ---")
# Now, send this result back to Ollama to continue the conversation
messages.append({'role': 'assistant', 'content': full_response_content, 'tool_calls': [tool_call_info]})
messages.append({
'role': 'tool',
'content': str(tool_result), # Result must be a string
'tool_call_id': tool_call_info.get('id', '') # If your library/model provides a tool_call_id
})
print("\\\\n--- Sending tool result back to model ---")
follow_up_response_stream = ollama.chat(
model='qwen3',
messages=messages,
stream=True
# No tools needed here unless you expect another tool call
)
print("Assistant (after tool call):")
for follow_up_chunk in follow_up_response_stream:
if follow_up_chunk['message']['content']:
print(follow_up_chunk['message']['content'], end='', flush=True)
if follow_up_chunk.get('done'):
print("\\\\n--- Follow-up stream finished ---")
break
except ValueError:
print("Error: Could not parse tool arguments as integers.")
except Exception as e:
print(f"An error occurred during tool execution or follow-up: {e}")
else:
print(f"Error: Unknown tool '{tool_name}' requested by the model.")
شرح كود Python:
- استيراد
ollama
. - دالة
add_two_numbers
: هذه هي أداتنا. تساعد سلسلة التوثيق وتلميحات النوع (type hints) Ollama على فهم الغرض منها ومعاملاتها. messages
: نبدأ المحادثة باستعلام المستخدم.ollama.chat(...)
:
model
،messages
،stream=True
مشابهة لـ cURL.tools=[...]
: نقدم تعريف الأداة. حزمة تطوير برامج Python مرنة للغاية؛ يمكنك تمرير كائن الدالة مباشرة (على سبيل المثال،tools=[add_two_numbers]
) إذا كان بإمكانه استنتاج المخطط، أو تعريفه صراحة كما هو موضح.
- التكرار عبر
response_stream
:
chunk['message']['content']
: هذا هو النص المبثوث. نقوم بطباعته على الفور.chunk['message']['tool_calls']
: إذا كان هذا المفتاح موجودًا وبه محتوى، فإن الذكاء الاصطناعي يريد استخدام أداة. نقوم بتخزينtool_call_info
ونكسر الحلقة للتعامل معه.
- التعامل مع استدعاء الأداة:
- نستخرج
tool_name
وtool_args
. - نستدعي دالة Python الفعلية (
add_two_numbers
) بهذه الحجج. - الأهم: نقوم بعد ذلك بإلحاق استجابة المساعد الجزئية (التي أدت إلى استدعاء الأداة) ورسالة جديدة بـ
role: "tool"
وcontent
كنتيجة دالتنا المحولة إلى سلسلة نصية إلى قائمةmessages
. - نقوم بإجراء استدعاء آخر لـ
ollama.chat
بهذه الرسائل المحدثة للحصول على الاستجابة النهائية للذكاء الاصطناعي بناءً على مخرجات الأداة.
تدفق المخرجات المتوقع:سترى سؤال المستخدم الأولي، ثم استجابة المساعد تتدفق. إذا قرر استدعاء add_two_numbers
(أو subtract_two_numbers
كما في مثال الإخراج الأصلي إذا كانت المطالبة للطرح)، سترى رسالة "Detected Tool Call"، الحجج، نتيجة دالة Python الخاصة بك، ثم المساعد يواصل استجابته باستخدام تلك النتيجة.
(أظهر مثال المخرجات الأصلي:
<think>
Okay, the user is asking ...
</think>
[ToolCall(function=Function(name='subtract_two_numbers', arguments={'a': 3, 'b': 1}))]
يشير هذا إلى عملية "التفكير" الداخلية للذكاء الاصطناعي ثم كائن استدعاء الأداة المهيكل الذي توفره حزمة تطوير برامج Python.)
كيفية بث استدعاءات الأدوات باستخدام JavaScript (Node.js)
الآن، دعنا نفعل الشيء نفسه باستخدام JavaScript، عادةً للواجهة الخلفية Node.js أو تطبيق ويب.
الخطوة 1: تثبيت مكتبة Ollama JavaScript
في دليل مشروعك، قم بتشغيل:
npm i ollama
الخطوة 2: تعريف مخطط الأداة والبرمجة في JavaScript
في JavaScript، عادةً ما تقوم بتعريف مخطط الأداة ككائن JSON.
import ollama from 'ollama';
// Describe the tool schema (e.g., for adding two numbers)
const addTool = {
type: 'function',
function: {
name: 'addTwoNumbers',
description: 'Add two numbers together',
parameters: {
type: 'object',
required: ['a', 'b'],
properties: {
a: { type: 'number', description: 'The first number' },
b: { type: 'number', description: 'The second number' }
}
}
}
};
// Your actual JavaScript function that implements the tool
function executeAddTwoNumbers(a, b) {
console.log(`--- Tool 'addTwoNumbers' called with a=${a}, b=${b} ---`);
return a + b;
}
async function main() {
const messages = [{ role: 'user', content: 'What is 2 plus 3?' }];
console.log('User:', messages[0].content);
console.log('Assistant (streaming):');
let assistantResponseContent = "";
let toolToCallInfo = null;
try {
const responseStream = await ollama.chat({
model: 'qwen3', // Or another capable model
messages: messages,
tools: [addTool],
stream: true
});
for await (const chunk of responseStream) {
if (chunk.message.content) {
process.stdout.write(chunk.message.content);
assistantResponseContent += chunk.message.content;
}
if (chunk.message.tool_calls && chunk.message.tool_calls.length > 0) {
toolToCallInfo = chunk.message.tool_calls[0]; // Assuming one tool call
process.stdout.write(`\\\\n--- Detected Tool Call: ${toolToCallInfo.function.name} ---\\\\n`);
break; // Stop processing stream to handle tool call
}
if (chunk.done) {
process.stdout.write('\\\\n--- Stream finished ---\\\\n');
if (!toolToCallInfo) {
console.log("No tool call was made.");
}
break;
}
}
// --- If a tool call was detected, handle it ---
if (toolToCallInfo) {
const toolName = toolToCallInfo.function.name;
const toolArgs = toolToCallInfo.function.arguments;
console.log(`Arguments for the tool:`, toolArgs);
let toolResult;
if (toolName === 'addTwoNumbers') {
toolResult = executeAddTwoNumbers(toolArgs.a, toolArgs.b);
console.log(`--- Tool execution result: ${toolResult} ---`);
// Append assistant's partial message and the tool message
messages.push({
role: 'assistant',
content: assistantResponseContent, // Include content leading up to tool call
tool_calls: [toolToCallInfo]
});
messages.push({
role: 'tool',
content: toolResult.toString(), // Result must be a string
// tool_call_id: toolToCallInfo.id // If available and needed
});
console.log("\\\\n--- Sending tool result back to model ---");
const followUpStream = await ollama.chat({
model: 'qwen3',
messages: messages,
stream: true
});
console.log("Assistant (after tool call):");
for await (const followUpChunk of followUpStream) {
if (followUpChunk.message.content) {
process.stdout.write(followUpChunk.message.content);
}
if (followUpChunk.done) {
process.stdout.write('\\\\n--- Follow-up stream finished ---\\\\n');
break;
}
}
} else {
console.error(`Error: Unknown tool '${toolName}' requested.`);
}
}
} catch (error) {
console.error('Error during Ollama chat:', error);
}
}
main().catch(console.error);
شرح كود JavaScript:
- استيراد
ollama
. - كائن
addTool
: هذا هو مخطط JSON الذي يصف أداتنا لـ Ollama. - دالة
executeAddTwoNumbers
: دالة JavaScript الفعلية لأداتنا. - دالة
main
غير المتزامنة:
- مصفوفة
messages
تبدأ المحادثة. await ollama.chat({...})
: تقوم بالاستدعاء.tools: [addTool]
: تمرر مخطط أداتنا.stream: true
: تمكن البث.for await (const chunk of responseStream)
: هذه الحلقة تعالج كل جزء مبثوث.chunk.message.content
: الجزء النصي من البث.chunk.message.tool_calls
: إذا كان موجودًا، فإن الذكاء الاصطناعي يريد استخدام أداة. نقوم بتخزينtoolToCallInfo
.
- التعامل مع استدعاء الأداة: مشابه لـ Python، إذا تم تعيين
toolToCallInfo
:
- استخراج الاسم والحجج.
- استدعاء
executeAddTwoNumbers()
. - إلحاق رسالة المساعد (التي تضمنت طلب استدعاء الأداة) ورسالة جديدة بـ
role: "tool"
مع النتيجة إلى مصفوفةmessages
. - إجراء استدعاء آخر لـ
ollama.chat
بالرسائل المحدثة للحصول على الاستجابة النهائية.
تدفق المخرجات المتوقع (مشابه لأمثلة cURL و Python):سترى سؤال المستخدم، ثم استجابة المساعد تتدفق. عندما يقرر استدعاء addTwoNumbers
، سيتم طباعة معلومات استدعاء الأداة، النتيجة من دالة JavaScript الخاصة بك، ثم الاستمرار في بث إجابة الذكاء الاصطناعي بناءً على تلك النتيجة.
كان مثال المخرجات الأصلي لـ JS يبدو كالتالي:
Question: What is 2 plus 3?
<think>
Okay, the user is asking...
</think>
Tool call: {
function: {
name: "addTwoNumbers",
arguments: { a: 2, b: 3 },
},
}
كيف يتعامل Ollama مع تحليل الأدوات أثناء البث
قد تتساءل كيف يدير Ollama بث النصوص وتحديد استدعاءات الأدوات بهذه السلاسة. يستخدم محللًا جديدًا ذكيًا تزايديًا.
- الطريقة القديمة: كان على العديد من الأنظمة الانتظار حتى يتم الحصول على الاستجابة بأكملها من الذكاء الاصطناعي، ثم فحصها بحثًا عن استدعاءات الأدوات (عادة ما تكون بتنسيق JSON). هذا كان يعيق البث لأن استدعاء الأداة يمكن أن يظهر في أي مكان.
- طريقة Ollama الجديدة:
- ينظر المحلل إلى قالب كل نموذج محدد لفهم كيفية إشارته إلى استدعاء أداة (على سبيل المثال، رموز خاصة أو بادئات).
- يسمح هذا لـ Ollama بتحديد استدعاءات الأدوات "بشكل تزايدي" أثناء تدفق البيانات، وفصلها عن محتوى النص العادي.
- إنه ذكي بما يكفي للتعامل مع النماذج التي لم يتم تدريبها صراحةً ببادئات الأدوات ولكنها لا تزال تتمكن من إخراج هياكل استدعاء أداة صالحة. يمكنه حتى العودة إلى البحث عن هياكل تشبه JSON إذا لزم الأمر، ولكن بذكاء، بحيث لا يلتقط أي JSON فقط.
لماذا هذا أفضل؟
- بث حقيقي: تحصل على النص على الفور، ويتم تحديد استدعاءات الأدوات أثناء التنفيذ.
- الدقة: إنه أفضل في تجنب الإيجابيات الكاذبة (على سبيل المثال، إذا كان الذكاء الاصطناعي يتحدث عن استدعاء أداة قام به سابقًا، فإن المحلل الجديد أقل عرضة لتشغيله مرة أخرى عن طريق الخطأ).
نصيحة: تحسين الأداء باستخدام نافذة السياق
للتفاعلات الأكثر تعقيدًا، خاصة مع استدعاء الأدوات، يمكن أن يكون حجم "نافذة السياق" التي يستخدمها النموذج مهمًا. نافذة السياق الأكبر تعني أن النموذج يتذكر المزيد من المحادثة الحالية.
- بروتوكول سياق النموذج (MCP): تحسينات Ollama تعمل بشكل جيد مع MCP.
num_ctx
: يمكنك غالبًا اقتراح حجم نافذة السياق. على سبيل المثال، 32,000 (32k
) رمز أو أعلى قد يحسن أداء استدعاء الأدوات وجودة النتائج.- المقايضة: نوافذ السياق الأكبر تستخدم المزيد من الذاكرة.
مثال: تعيين نافذة السياق باستخدام cURL(استخدم نموذجًا يدعم سياقات أكبر، مثل llama3.1
أو llama4
كما هو مقترح في المادة الأصلية - على الرغم من أن المثال يستخدم llama3.2
)
curl -X POST "<http://localhost:11434/api/chat>" -d '{
"model": "llama3.1",
"messages": [
{
"role": "user",
"content": "why is the sky blue?"
}
],
"options": {
"num_ctx": 32000
}
}'
جرب هذا الإعداد إذا وجدت أن استدعاء الأدوات ليس موثوقًا بالقدر الذي تريده.
إلى أين تذهب من هنا؟
لديك الآن الأساسيات لبناء تطبيقات ذكاء اصطناعي متطورة وفي الوقت الفعلي باستخدام Ollama من خلال بث الاستجابات واستدعاء الأدوات!
أفكار لاستكشافها:
- ربط الأدوات بواجهات برمجة تطبيقات حقيقية (الطقس، الأسهم، محركات البحث).
- بناء وكلاء يمكنهم أداء مهام متعددة الخطوات.
- إنشاء روبوتات دردشة أكثر طبيعية واستجابة.
ارجع إلى التوثيق الرسمي لـ Ollama ومستودع GitHub الخاص به (بما في ذلك "Tool Streaming Pull Request" المذكور في المصدر الأصلي للتعمق التقني) للحصول على أحدث التحديثات والمزيد من الأمثلة المتقدمة.
هل تبحث عن منصة متكاملة وشاملة لفريق المطورين لديك للعمل معًا بأقصى قدر من الإنتاجية؟
Apidog يلبي جميع مطالبك، ويحل محل Postman بسعر معقول أكثر بكثير!