بناء وكيل بحث
إعداد المشروع
3 دقيقة للقراءة
لنبني وكيل بحث يمكنه البحث في الويب، وجمع المعلومات، وإنتاج تقارير منظمة. هذا المشروع الختامي يجمع كل ما تعلمته.
ما الذي نبنيه
وكيل بحث يمكنه:
- أخذ موضوع بحث من المستخدم
- البحث في مصادر متعددة للمعلومات
- تجميع النتائج في تقرير متماسك
- الاستشهاد بالمصادر بشكل صحيح
هيكل المشروع
research_agent/
├── agent.py # منطق الوكيل الرئيسي
├── tools/
│ ├── __init__.py
│ ├── search.py # أداة البحث على الويب
│ └── scraper.py # استخراج المحتوى
├── memory/
│ ├── __init__.py
│ └── store.py # ذاكرة البحث
├── prompts/
│ └── templates.py # قوالب المطالبات
├── utils/
│ └── validators.py # التحقق من المخرجات
├── config.py # التكوين
├── requirements.txt
└── main.py # نقطة الدخول
التبعيات
# requirements.txt
langchain>=0.1.0
langchain-openai>=0.0.5
duckduckgo-search>=4.0
beautifulsoup4>=4.12
pydantic>=2.0
python-dotenv>=1.0
التكوين
# config.py
import os
from dotenv import load_dotenv
load_dotenv()
class Config:
# إعدادات LLM
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
MODEL_NAME = os.getenv("MODEL_NAME", "gpt-4o")
TEMPERATURE = 0.3
# إعدادات البحث
MAX_SEARCH_RESULTS = 5
MAX_CONTENT_LENGTH = 4000
# إعدادات الوكيل
MAX_ITERATIONS = 10
TIMEOUT_SECONDS = 120
# إعدادات المخرجات
REPORT_MAX_LENGTH = 2000
INCLUDE_SOURCES = True
هيكل الأداة الأساسية
# tools/__init__.py
from abc import ABC, abstractmethod
class BaseTool(ABC):
name: str
description: str
@abstractmethod
def run(self, query: str) -> dict:
"""تنفيذ الأداة وإرجاع النتائج"""
pass
def __call__(self, query: str) -> dict:
return self.run(query)
تنفيذ أداة البحث
# tools/search.py
from duckduckgo_search import DDGS
from config import Config
class WebSearchTool(BaseTool):
name = "web_search"
description = "البحث في الويب عن معلومات حالية حول موضوع"
def __init__(self):
self.ddgs = DDGS()
def run(self, query: str) -> dict:
try:
results = list(self.ddgs.text(
query,
max_results=Config.MAX_SEARCH_RESULTS
))
return {
"success": True,
"results": [
{
"title": r["title"],
"url": r["href"],
"snippet": r["body"]
}
for r in results
]
}
except Exception as e:
return {
"success": False,
"error": str(e),
"results": []
}
نقطة الدخول
# main.py
from agent import ResearchAgent
from config import Config
def main():
agent = ResearchAgent(config=Config())
topic = input("أدخل موضوع البحث: ")
print(f"\nجاري البحث عن: {topic}\n")
report = agent.research(topic)
print("\n" + "="*50)
print("تقرير البحث")
print("="*50)
print(report)
if __name__ == "__main__":
main()
إعداد البيئة
# إنشاء بيئة افتراضية
python -m venv venv
source venv/bin/activate # على Windows: venv\Scripts\activate
# تثبيت التبعيات
pip install -r requirements.txt
# إنشاء ملف .env
echo "OPENAI_API_KEY=your-key-here" > .env
التالي: تنفيذ منطق الوكيل الأساسي مع نمط ReAct. :::