متوسط
⏱ ٢٠ دقيقة قراءة
© بوابة الذكاء الاصطناعي ٢٠٢٦-٠٦-٠٤
تعلم كيفية بناء وكيل ذكاء اصطناعي محادثي ذكي باستخدام LlamaIndex لتنظيم وتوجيه الطلبات ديناميكيًا بين واجهات برمجة التطبيقات الخاصة بـ OpenAI وAnthropic.
المتطلبات الأساسية
- Python ٣.١٠ أو أحدث
- مفاتيح API لـ OpenAI وAnthropic
- معرفة متوسطة بـ Python والبرمجة غير المتزامنة
ما الذي نبنيه
في هذا الدرس، سنقوم ببناء وكيل ذكاء اصطناعي محادثي باستخدام LlamaIndex. بدلاً من استخدام منطق ثابت لتوجيه نية المستخدم، سنستخدم حلقة وكيل ReAct (التفكير والتصرف). يسمح هذا التدفق لمحرك الأساس بتقييم طلب المستخدم واختيار ما إذا كان سيتم تفويض المهمة إلى GPT-4o من OpenAI أو Claude 3.5 Sonnet من Anthropic.
الإعداد والتثبيت
الإصدارات الحديثة من LlamaIndex هي وحداتية. يجب علينا تثبيت إطار العمل الأساسي جنبًا إلى جنب مع حزم تكامل مزودي النماذج المتعددة المحددة.
pip install llama-index llama-index-llms-openai llama-index-llms-anthropic python-dotenvبعد ذلك، قم بتكوين متغيرات البيئة الخاصة بك بشكل آمن. أنشئ ملف .env في دليل المشروع الرئيسي الخاص بك:
# .env file
OPENAI_API_KEY=your_openai_api_key
ANTHROPIC_API_KEY=your_anthropic_api_key
الخطوة ١: تهيئة LLMs باستخدام تجريدات LlamaIndex
أولاً، نقوم بتكوين بيئتنا وتهيئة نماذج اللغة الخاصة بنا باستخدام الأغلفة الرسمية لـ LlamaIndex. هذا يوحد مدخلاتهم ومخرجاتهم.
import os
import asyncio
from dotenv import load_dotenv
from llama_index.llms.openai import OpenAI
from llama_index.llms.anthropic import Anthropic
load_dotenv()
# Instantiate the respective LLM configurations
gpt_model = OpenAI(model="gpt-4o")
claude_model = Anthropic(model="claude-3-5-sonnet-20241022")
الخطوة ٢: تعريف أدوات الوكيل الوظيفية
لتمكين وكيلنا من التفاعل مع هذه النماذج ديناميكيًا، نقوم بتغليف استدعاءات النموذج داخل هياكل FunctionTool الخاصة بـ LlamaIndex. تعمل التعليقات التوضيحية كإشارات للوكيل لقراءة واتخاذ قراراته الهيكلية.
from llama_index.core.tools import FunctionTool
def call_gpt_engine(prompt: str) -> str:
"""Useful when queries require raw logic, structured JSON formatting, or math calculations."""
response = gpt_model.complete(prompt)
return str(response)
def call_claude_engine(prompt: str) -> str:
"""Useful when queries require deeply creative writing, code generation, or nuanced tonal analysis."""
response = claude_model.complete(prompt)
return str(response)
# Convert functions to native tools
gpt_tool = FunctionTool.from_defaults(fn=call_gpt_engine)
claude_tool = FunctionTool.from_defaults(fn=call_claude_engine)
الخطوة ٣: إنشاء وكيل ReAct
الآن، نقوم ببناء ReActAgent، ونمرر أدوات النموذج المخصصة لدينا مباشرة إلى تخطيط التنفيذ الخاص به. سنستخدم GPT-4o كمنسق المحرك المركزي لدينا.
from llama_index.core.agent import ReActAgent
# Bind tools to the orchestration framework
tools = [gpt_tool, claude_tool]
agent = ReActAgent.from_tools(tools, llm=gpt_model, verbose=True)
llama-index-llms-openai. الاستيراد مباشرة من مساحة الأسماء العالمية القديمة سيؤدي إلى تعطل ModuleNotFoundError الهيكلي.اختبار تنفيذك
نفذ استفسارات تستهدف مهام مختلفة لترى كيف يقوم LlamaIndex بتقييم النص، واختيار أداة، وتنسيق متغيراته، والتعامل مع الردود بشكل نظيف.
async def main():
# This should trigger the Claude tool based on your docstring hints
creative_res = await agent.achat("Write a short, moody poem about artificial intelligence.")
print(f"Creative Task:n{creative_res}n")
# This should route to the GPT tool
structured_res = await agent.achat("Generate a structured list of 3 fake user profiles with keys: id, name.")
print(f"Structured Task:n{structured_res}n")
if __name__ == "__main__":
asyncio.run(main())
ما الذي يجب بناؤه بعد ذلك
- أضف
VectorStoreIndexلتزويد نوافذ سياق RAG المحلية مباشرة إلى مسارات تنفيذ الأدوات الخاصة بك. - دمج تخزين قاعدة بيانات مستمر للحفاظ على سجلات الدردشة عبر جلسات التطبيق المتعددة.
- عرض غلاف تنظيم LlamaIndex الخاص بك عبر واجهة خلفية قوية لإطار عمل FastAPI.