بناء مساعد ذكاء اصطناعي متطور باستخدام Jina، LangChain، و Gemini لاسترجاع المعلومات في الوقت الفعلي

يوضح هذا البرنامج التعليمي كيفية بناء مساعد ذكاء اصطناعي ذكي من خلال دمج أدوات LangChain و Gemini 2.0 Flash و Jina Search. من خلال الجمع بين قدرات نموذج لغة كبير (LLM) قوي وواجهة برمجة تطبيقات بحث خارجية، نقوم بإنشاء مساعد يمكنه تقديم معلومات محدثة مع الاستشهادات. يتناول هذا البرنامج التعليمي خطوة بخطوة إعداد مفاتيح واجهة برمجة التطبيقات، وتثبيت المكتبات اللازمة، وربط الأدوات بنموذج Gemini، وبناء LangChain مخصص يستدعي الأدوات الخارجية ديناميكيًا عندما يحتاج النموذج إلى معلومات جديدة أو محددة. في نهاية هذا البرنامج التعليمي، سيكون لدينا مساعد ذكاء اصطناعي تفاعلي يعمل بكامل طاقته، قادر على الاستجابة لاستعلامات المستخدم بإجابات دقيقة وحديثة ومصادرها موثقة.

1. تثبيت المكتبات اللازمة

نقوم بتثبيت حزم Python المطلوبة لهذا المشروع باستخدام الأمر التالي:

pip install --quiet -U "langchain-community>=0.2.16" langchain langchain-google-genai

تشمل هذه الحزم إطار عمل LangChain لبناء تطبيقات الذكاء الاصطناعي، وأدوات LangChain Community (الإصدار 0.2.16 أو أعلى)، وتكامل LangChain مع نماذج Google Gemini. تتيح هذه الحزم استخدام نماذج Gemini والأدوات الخارجية بسلاسة داخل خطوط أنابيب LangChain.

2. استيراد الوحدات الأساسية

نقوم باستيراد الوحدات الأساسية اللازمة للمشروع:

import getpass
import os
import json
from typing import Dict, Any
  • getpass: يسمح بإدخال مفاتيح واجهة برمجة التطبيقات بأمان دون عرضها على الشاشة.
  • os: يساعد في إدارة متغيرات البيئة ومسارات الملفات.
  • json: يستخدم للتعامل مع هياكل بيانات JSON.
  • typing: يوفر إرشادات الأنواع للمتغيرات، مثل القواميس وحجج الدوال، مما يضمن قابلية قراءة وسهولة صيانة أفضل للرمز.

3. إعداد مفاتيح واجهة برمجة التطبيقات

نتأكد من تعيين مفاتيح واجهة برمجة التطبيقات اللازمة لجينا وجوجل جيميني كمتغيرات بيئية. إذا لم تكن المفاتيح مُعرّفة بالفعل في البيئة، سيطلب البرنامج من المستخدم إدخالها بأمان باستخدام وحدة getpass:

if not os.environ.get("JINA_API_KEY"):
    os.environ["JINA_API_KEY"] = getpass.getpass("Enter your Jina API key: ")
if not os.environ.get("GOOGLE_API_KEY"):
    os.environ["GOOGLE_API_KEY"] = getpass.getpass("Enter your Google/Gemini API key: ")

4. تهيئة الأدوات والنموذج

نقوم باستيراد الوحدات والصفوف الرئيسية من نظام LangChain البيئي:

from langchain_community.tools import JinaSearch
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableConfig, chain
from langchain_core.messages import HumanMessage, AIMessage, ToolMessage
print(" Setting up tools and model...")

5. تهيئة أداة البحث Jina

search_tool = JinaSearch()
print(f" Jina Search tool initialized: {search_tool.name}")
print("n Testing Jina Search directly:")
direct_search_result = search_tool.invoke({"query": "what is langgraph"})
print(f"Direct search result preview: {direct_search_result[:200]}...")

6. تهيئة نموذج Gemini

gemini_model = ChatGoogleGenerativeAI(model="gemini-2.0-flash", temperature=0.1, convert_system_message_to_human=True)
print(" Gemini model initialized")

7. تعريف قالب المطالبة

detailed_prompt = ChatPromptTemplate.from_messages([
    ("system", """You are an intelligent assistant with access to web search capabilities. When users ask questions, you can use the Jina search tool to find current information. Instructions: 1. If the question requires recent or specific information, use the search tool 2. Provide comprehensive answers based on the search results 3. Always cite your sources when using search results 4. Be helpful and informative in your responses"""),
    ("human", "{user_input}"),
    ("placeholder", "{messages}"),
])

8. ربط الأدوات بنموذج Gemini

gemini_with_tools = gemini_model.bind_tools([search_tool])
print(" Tools bound to Gemini model")
main_chain = detailed_prompt | gemini_with_tools

def format_tool_result(tool_call: Dict[str, Any], tool_result: str) -> str:
    """Format tool results for better readability"""
    return f"Search Results for '{tool_call['args']['query']}':n{tool_result[:800]}..."

9. إنشاء سلسلة بحث محسّنة

@chain
def enhanced_search_chain(user_input: str, config: RunnableConfig):
    """ Enhanced chain that handles tool calls and provides detailed responses """
    # ... (rest of the code as in the original)

10. اختبار سلسلة البحث

def test_search_chain():
    # ... (rest of the code as in the original)

11. تشغيل المساعد التفاعلي

if __name__ == "__main__":
    # ... (rest of the code as in the original)

هذا البرنامج التعليمي يوفر شرحًا مفصلًا لكيفية بناء مساعد ذكاء اصطناعي قوي ومتطور، قادر على الوصول إلى المعلومات الحالية من خلال مصادر موثوقة. يمكنك الآن توسيع هذا المشروع من خلال دمج أدوات إضافية، وتخصيص المطالبات، أو نشر المساعد كواجهة برمجة تطبيقات أو تطبيق ويب لتطبيقات أوسع نطاقًا.

المصدر: MarkTechPost