بناء ذكاء اصطناعي محادثي باستخدام LlamaIndex

Share:
درس تقني
متوسط
⏱ ٢٠ دقيقة قراءة
© بوابة الذكاء الاصطناعي ٢٠٢٦-٠٦-٠٤

تعلم كيفية بناء وكيل ذكاء اصطناعي محادثي ذكي باستخدام 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.
Share:

هل كان هذا الشرح مفيداً؟