بناء وكيل ذكاء اصطناعي متطور مع تنفيذ بايثون مباشر والتحقق الآلي من النتائج
هذا البرنامج التعليمي يوضح كيفية الاستفادة من قوة وكيل ذكاء اصطناعي متطور، مدعّمًا بقدرات تنفيذ بايثون والتحقق من النتائج، لمعالجة المهام الحسابية المعقدة. من خلال دمج إطار عمل وكيل ReAct من LangChain مع واجهة برمجة التطبيقات Claude من Anthropic، سنقوم ببناء حل شامل لإنشاء رمز بايثون وتنفيذه مباشرةً، والتقاط مخرجاته، والحفاظ على حالة التنفيذ، والتحقق تلقائيًا من النتائج مقابل الخصائص المتوقعة أو حالات الاختبار. هذه الحلقة المتكاملة من “الكتابة → التشغيل → التحقق” تمكنك من تطوير تحليلات وقواعد خوارزميات وأنابيب تعلم آلي بسيطة بثقة في كل خطوة.
1. التثبيت والتحضير
سنبدأ بتثبيت المكتبات اللازمة:
pip install langchain langchain-anthropic langchain-core anthropic
نقوم بتثبيت إطار عمل LangChain الأساسي بالإضافة إلى تكامل Anthropic وأدواته الأساسية، مما يضمن توفر كل من أدوات تنظيم الوكيل (langchain، langchain-core) وربطات Claude المحددة (langchain-anthropic، anthropic) في بيئتك.
ثم نستورد المكتبات الضرورية:
import os
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain_core.prompts import PromptTemplate
from langchain_anthropic import ChatAnthropic
import sys
import io
import re
import json
from typing import Dict, Any, List
نجمع كل ما هو ضروري لبناء وكيلنا من نمط ReAct: وصول نظام التشغيل إلى متغيرات البيئة، ومنشئو وكلاء LangChain (create_react_agent، AgentExecutor)، وفئة Tool لتحديد الإجراءات المخصصة، وPromptTemplate لإنشاء موجه سلسلة الأفكار، وعميل ChatAnthropic من Anthropic للاتصال بـ Claude. تتعامل وحدات بايثون القياسية (sys، io، re، json) مع التقاط المدخلات/المخرجات، والتعبيرات العادية، والتصدي، بينما توفر typing إرشادات الأنواع لكتابة أكثر وضوحًا وأكثر قابلية للصيانة.
2. أداة PythonREPLTool
هذه الفئة تغلف مُفسّر سطر الأوامر (REPL) داخلي لبايثون:
class PythonREPLTool:
def __init__(self):
self.globals_dict = { '__builtins__': __builtins__, 'json': json, 're': re }
self.locals_dict = {}
self.execution_history = []
def run(self, code: str) -> str:
try:
old_stdout = sys.stdout
old_stderr = sys.stderr
sys.stdout = captured_output = io.StringIO()
sys.stderr = captured_error = io.StringIO()
execution_result = None
try:
result = eval(code, self.globals_dict, self.locals_dict)
execution_result = result
if result is not None:
print(result)
except SyntaxError:
exec(code, self.globals_dict, self.locals_dict)
output = captured_output.getvalue()
error_output = captured_error.getvalue()
sys.stdout = old_stdout
sys.stderr = old_stderr
self.execution_history.append({
'code': code,
'output': output,
'result': execution_result,
'error': error_output
})
response = f"**Code Executed:**n```pythonn{code}n```nn"
if error_output:
response += f"**Errors/Warnings:**n{error_output}nn"
response += f"**Output:**n{output if output.strip() else 'No console output'}"
if execution_result is not None and not output.strip():
response += f"n**Return Value:** {execution_result}"
return response
except Exception as e:
sys.stdout = old_stdout
sys.stderr = old_stderr
error_info = f"**Code Executed:**n```pythonn{code}n```nn**Runtime Error:**n{str(e)}n**Error Type:** {type(e).__name__}"
self.execution_history.append({
'code': code,
'output': '',
'result': None,
'error': str(e)
})
return error_info
def get_execution_history(self) -> List[Dict[str, Any]]:
return self.execution_history
def clear_history(self):
self.execution_history = []
تلتقط وتنفذ الاكواد التعسفية (تقييم التعبيرات أو تشغيل الجمل)، وتحويل stdout/stderr لتسجيل المخرجات والأخطاء، والحفاظ على سجل لكل تنفيذ. إرجاع ملخص منسق، بما في ذلك الكود المنفذ، وأي مخرجات وحدة التحكم أو أخطاء، وقيم الإرجاع، يوفر ملاحظات شفافة وقابلة للتكرار لكل جزء من الاكواد التي يتم تشغيلها داخل وكيلنا.
3. أداة ResultValidator
هذه الفئة تقوم ببناء روتينات التحقق من الصحة المخصصة، والتحقق من الخصائص العددية، والتحقق من بنية البيانات، أو تشغيل حالات اختبار الخوارزمية مقابل سجل تنفيذ الوكيل:
class ResultValidator:
def __init__(self, python_repl: PythonREPLTool):
self.python_repl = python_repl
# ... (Rest of the ResultValidator class remains the same as in the original code) ...
(يتبع نفس الكود الأصلي مع إعادة تنسيقه)
4. إنشاء الأدوات ونموذج الموجه
نقوم بتغليف طرق REPL والتحقق من الصحة في كائنات LangChain Tool:
python_repl = PythonREPLTool()
validator = ResultValidator(python_repl)
python_tool = Tool(
name="python_repl",
description="Execute Python code and return both the code and its output. Maintains state between executions.",
func=python_repl.run
)
validation_tool = Tool(
name="result_validator",
description="Validate the results of previous computations with specific test cases and expected properties.",
func=lambda query: validator.validate_mathematical_result(query, {})
)
prompt_template = """You are Claude, an advanced AI assistant with Python execution and result validation capabilities. ... (rest of the prompt template) ..."""
prompt = PromptTemplate(
template=prompt_template,
input_variables=["input", "agent_scratchpad"],
partial_variables={
"tools": "python_repl - Execute Python codenresult_validator - Validate computation results",
"tool_names": "python_repl, result_validator"
}
)
يحدد هذا الموجه سلسلة أفكار واضحة مع حوامل لأسماء الأدوات وأمثلة استخدامها، مما يوجه الوكيل إلى: (1) تقسيم المشكلة، (2) استدعاء python_repl لتنفيذ الكود اللازم، (3) استدعاء result_validator لتأكيد الصحة، وأخيرًا (4) تقديم “إجابة نهائية” ذاتية الفحص. يضمن هذا الهيكل عملية عمل منظمة “كتابة → تشغيل → تحقق”.
5. فئة AdvancedClaudeCodeAgent
تغلف هذه الفئة كل شيء في واجهة سهلة الاستخدام:
class AdvancedClaudeCodeAgent:
def __init__(self, anthropic_api_key=None):
# ... (Implementation remains the same) ...
(يتبع نفس الكود الأصلي مع إعادة تنسيقه)
6. أمثلة للاستخدام
(يتم عرض أمثلة الاستخدام مع تنسيق Markdown مناسب)
if __name__ == "__main__":
API_KEY = "Use Your Own Key Here" # Replace with your actual API key
agent = AdvancedClaudeCodeAgent(anthropic_api_key=API_KEY)
print(" Advanced Claude Code Agent with Validation")
print("=" * 60)
# ... (Example queries and results) ...
(نفس أمثلة الاستخدام من الكود الأصلي مع إعادة صياغتها وتنسيقها بشكل أفضل)
7. الخاتمة
لقد قمنا بتطوير وكيل متعدد الاستخدامات قادر على الجمع بسلاسة بين الاستدلال التوليدي والتحكم الحسابي الدقيق. في جوهره، لا يقوم هذا الوكيل فقط بصياغة أجزاء من أكواد بايثون؛ بل يقوم بتشغيلها في الحال والتحقق من صحتها مقابل المعايير المحددة، مما يغلق حلقة التغذية الراجعة تلقائيًا. سواء كنت تقوم بتحليل الأعداد الأولية، أو تقييمات بيانات إحصائية، أو قياسات أداء الخوارزميات، أو تدفقات عمل تعلم آلي شاملة، فإن هذا النمط يضمن الموثوقية وإمكانية التكرار.
اترك تعليقاً