You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/ur/10-ai-framework-project
softchris 3f7ec0bbe8
🌐 Update translations via Co-op Translator
1 month ago
..
solution 🌐 Update translations via Co-op Translator 2 months ago
README.md 🌐 Update translations via Co-op Translator 1 month ago

README.md

اے آئی فریم ورک

کبھی ایسا محسوس ہوا کہ اے آئی ایپلیکیشنز کو شروع سے بنانے کی کوشش کرتے ہوئے آپ پریشان ہو گئے ہیں؟ آپ اکیلے نہیں ہیں! اے آئی فریم ورکز ایسے ہیں جیسے اے آئی ڈیولپمنٹ کے لیے سوئس آرمی نائف - یہ طاقتور ٹولز ہیں جو ذہین ایپلیکیشنز بناتے وقت آپ کا وقت اور پریشانی بچا سکتے ہیں۔ اے آئی فریم ورک کو ایک منظم لائبریری کے طور پر سوچیں: یہ پہلے سے تیار شدہ اجزاء، معیاری APIs، اور ذہین خلاصے فراہم کرتا ہے تاکہ آپ مسائل حل کرنے پر توجہ مرکوز کر سکیں بجائے اس کے کہ آپ عمل درآمد کی تفصیلات سے لڑیں۔

اس سبق میں، ہم دیکھیں گے کہ کس طرح LangChain جیسے فریم ورک پیچیدہ اے آئی انٹیگریشن کے کاموں کو صاف، قابلِ پڑھ کوڈ میں تبدیل کر سکتے ہیں۔ آپ یہ سیکھیں گے کہ حقیقی دنیا کے چیلنجز جیسے گفتگو کا ریکارڈ رکھنا، ٹول کالنگ کو نافذ کرنا، اور مختلف اے آئی ماڈلز کو ایک متحد انٹرفیس کے ذریعے سنبھالنا کیسے ممکن ہے۔

جب ہم ختم کریں گے، تو آپ جان جائیں گے کہ کب فریم ورکز کا استعمال کرنا ہے بجائے خام API کالز کے، ان کے خلاصے کو مؤثر طریقے سے کیسے استعمال کرنا ہے، اور حقیقی دنیا کے استعمال کے لیے تیار اے آئی ایپلیکیشنز کیسے بنانی ہیں۔ آئیے دیکھتے ہیں کہ اے آئی فریم ورکز آپ کے پروجیکٹس کے لیے کیا کر سکتے ہیں۔

فریم ورک کیوں منتخب کریں؟

تو آپ اے آئی ایپ بنانے کے لیے تیار ہیں - زبردست! لیکن بات یہ ہے: آپ کے پاس کئی مختلف راستے ہیں جنہیں آپ اختیار کر سکتے ہیں، اور ہر ایک کے اپنے فوائد اور نقصانات ہیں۔ یہ کچھ ایسا ہی ہے جیسے کہیں پہنچنے کے لیے پیدل چلنا، سائیکل چلانا، یا گاڑی چلانا منتخب کرنا - یہ سب آپ کو وہاں پہنچا دیں گے، لیکن تجربہ (اور کوشش) بالکل مختلف ہوگی۔

آئیے تین اہم طریقے دیکھتے ہیں جن سے آپ اپنے پروجیکٹس میں اے آئی کو شامل کر سکتے ہیں:

طریقہ فوائد بہترین استعمال غور طلب نکات
براہ راست HTTP درخواستیں مکمل کنٹرول، کوئی انحصار نہیں سادہ سوالات، بنیادی اصول سیکھنا زیادہ تفصیلی کوڈ، دستی خرابی ہینڈلنگ
SDK انٹیگریشن کم بوائلر پلیٹ، ماڈل مخصوص اصلاح سنگل ماڈل ایپلیکیشنز مخصوص فراہم کنندگان تک محدود
اے آئی فریم ورکز متحد API، بلٹ ان خلاصے ملٹی ماڈل ایپس، پیچیدہ ورک فلو سیکھنے کا منحنی خط، ممکنہ زیادہ خلاصہ

عملی طور پر فریم ورک کے فوائد

graph TD
    A[Your Application] --> B[AI Framework]
    B --> C[OpenAI GPT]
    B --> D[Anthropic Claude]
    B --> E[GitHub Models]
    B --> F[Local Models]
    
    B --> G[Built-in Tools]
    G --> H[Memory Management]
    G --> I[Conversation History]
    G --> J[Function Calling]
    G --> K[Error Handling]

فریم ورکز کیوں اہم ہیں:

  • متحد کرتا ہے متعدد اے آئی فراہم کنندگان کو ایک انٹرفیس کے تحت
  • خودکار طور پر سنبھالتا ہے گفتگو کی یادداشت
  • فراہم کرتا ہے عام کاموں جیسے ایمبیڈنگز اور فنکشن کالنگ کے لیے تیار ٹولز
  • خرابی ہینڈلنگ اور ریٹری لاجک کو منظم کرتا ہے
  • پیچیدہ ورک فلو کو قابلِ پڑھ طریقہ کار میں تبدیل کرتا ہے

💡 پرو ٹپ: جب مختلف اے آئی ماڈلز کے درمیان سوئچ کرنا ہو یا ایجنٹس، میموری، یا ٹول کالنگ جیسے پیچیدہ فیچرز بنانا ہو تو فریم ورکز کا استعمال کریں۔ بنیادی اصول سیکھنے یا سادہ، مرکوز ایپلیکیشنز بنانے کے لیے براہ راست APIs پر قائم رہیں۔

خلاصہ: جیسے کسی ماہر کاریگر کے مخصوص ٹولز اور مکمل ورکشاپ کے درمیان انتخاب کرنا، یہ کام کے مطابق ٹول کو منتخب کرنے کی بات ہے۔ فریم ورکز پیچیدہ، فیچر سے بھرپور ایپلیکیشنز کے لیے بہترین ہیں، جبکہ براہ راست APIs سادہ استعمال کے معاملات کے لیے اچھے ہیں۔

تعارف

اس سبق میں، ہم سیکھیں گے:

  • ایک عام اے آئی فریم ورک کا استعمال۔
  • عام مسائل جیسے چیٹ گفتگو، ٹول کا استعمال، میموری اور سیاق و سباق کو حل کرنا۔
  • اس کا فائدہ اٹھا کر اے آئی ایپلیکیشنز بنانا۔

آپ کا پہلا اے آئی پرامپٹ

آئیے بنیادی اصولوں سے شروع کرتے ہیں اور اپنی پہلی اے آئی ایپلیکیشن بناتے ہیں جو ایک سوال بھیجتی ہے اور جواب حاصل کرتی ہے۔ جیسے ارشمیدس نے اپنے غسل میں بے گھر ہونے کے اصول کو دریافت کیا، کبھی کبھی سب سے سادہ مشاہدات سب سے طاقتور بصیرت کی طرف لے جاتے ہیں - اور فریم ورکز ان بصیرتوں کو قابل رسائی بناتے ہیں۔

GitHub ماڈلز کے ساتھ LangChain سیٹ اپ کرنا

ہم LangChain کا استعمال کریں گے تاکہ GitHub ماڈلز سے جڑ سکیں، جو کافی زبردست ہے کیونکہ یہ آپ کو مختلف اے آئی ماڈلز تک مفت رسائی فراہم کرتا ہے۔ سب سے اچھی بات؟ شروع کرنے کے لیے آپ کو صرف چند سادہ کنفیگریشن پیرامیٹرز کی ضرورت ہے:

from langchain_openai import ChatOpenAI
import os

llm = ChatOpenAI(
    api_key=os.environ["GITHUB_TOKEN"],
    base_url="https://models.github.ai/inference",
    model="openai/gpt-4o-mini",
)

# Send a simple prompt
response = llm.invoke("What's the capital of France?")
print(response.content)

یہاں کیا ہو رہا ہے:

  • LangChain کلائنٹ بناتا ہے ChatOpenAI کلاس کا استعمال کرتے ہوئے - یہ آپ کا اے آئی کا گیٹ وے ہے!
  • GitHub ماڈلز کے ساتھ کنکشن کو ترتیب دیتا ہے آپ کے تصدیقی ٹوکن کے ساتھ
  • یہ بتاتا ہے کہ کون سا اے آئی ماڈل استعمال کرنا ہے (gpt-4o-mini) - اسے اپنا اے آئی اسسٹنٹ منتخب کرنے کے طور پر سوچیں
  • آپ کا سوال بھیجتا ہے invoke() طریقہ استعمال کرتے ہوئے - یہاں جادو ہوتا ہے
  • جواب نکالتا ہے اور دکھاتا ہے - اور voilà، آپ اے آئی کے ساتھ چیٹ کر رہے ہیں!

🔧 سیٹ اپ نوٹ: اگر آپ GitHub Codespaces استعمال کر رہے ہیں، تو آپ خوش قسمت ہیں - GITHUB_TOKEN پہلے ہی سیٹ اپ ہے! مقامی طور پر کام کر رہے ہیں؟ کوئی مسئلہ نہیں، آپ کو صرف صحیح اجازتوں کے ساتھ ایک ذاتی رسائی ٹوکن بنانا ہوگا۔

متوقع آؤٹ پٹ:

The capital of France is Paris.
sequenceDiagram
    participant App as Your Python App
    participant LC as LangChain
    participant GM as GitHub Models
    participant AI as GPT-4o-mini
    
    App->>LC: llm.invoke("What's the capital of France?")
    LC->>GM: HTTP request with prompt
    GM->>AI: Process prompt
    AI->>GM: Generated response
    GM->>LC: Return response
    LC->>App: response.content

گفتگو پر مبنی اے آئی بنانا

پہلی مثال بنیادی اصولوں کو ظاہر کرتی ہے، لیکن یہ صرف ایک واحد تبادلہ ہے - آپ سوال پوچھتے ہیں، جواب حاصل کرتے ہیں، اور بس۔ حقیقی ایپلیکیشنز میں، آپ چاہتے ہیں کہ آپ کا اے آئی یاد رکھے کہ آپ کیا بات کر رہے ہیں، جیسے Watson اور Holmes نے وقت کے ساتھ اپنی تحقیقی گفتگو بنائی۔

یہ وہ جگہ ہے جہاں LangChain خاص طور پر مفید ہو جاتا ہے۔ یہ مختلف پیغام کی اقسام فراہم کرتا ہے جو گفتگو کو منظم کرنے میں مدد کرتے ہیں اور آپ کو اپنے اے آئی کو ایک شخصیت دینے دیتے ہیں۔ آپ چیٹ کے تجربات بنائیں گے جو سیاق و سباق اور کردار کو برقرار رکھتے ہیں۔

پیغام کی اقسام کو سمجھنا

ان پیغام کی اقسام کو ان مختلف "ٹوپیوں" کے طور پر سوچیں جو گفتگو میں شرکاء پہنتے ہیں۔ LangChain مختلف پیغام کی کلاسز استعمال کرتا ہے تاکہ یہ معلوم ہو سکے کہ کون کیا کہہ رہا ہے:

پیغام کی قسم مقصد مثال استعمال کیس
SystemMessage اے آئی کی شخصیت اور رویے کی وضاحت کرتا ہے "آپ ایک مددگار کوڈنگ اسسٹنٹ ہیں"
HumanMessage صارف کی ان پٹ کی نمائندگی کرتا ہے "فنکشنز کیسے کام کرتے ہیں وضاحت کریں"
AIMessage اے آئی کے جوابات کو محفوظ کرتا ہے گفتگو میں پچھلے اے آئی جوابات

اپنی پہلی گفتگو بنانا

آئیے ایک گفتگو بناتے ہیں جہاں ہمارا اے آئی ایک مخصوص کردار اختیار کرے۔ ہم اسے کیپٹن پیکارڈ کا کردار دیں گے - ایک کردار جو اپنی سفارتی حکمت اور قیادت کے لیے جانا جاتا ہے:

messages = [
    SystemMessage(content="You are Captain Picard of the Starship Enterprise"),
    HumanMessage(content="Tell me about you"),
]

اس گفتگو کے سیٹ اپ کو توڑنا:

  • اے آئی کے کردار اور شخصیت کو قائم کرتا ہے SystemMessage کے ذریعے
  • ابتدائی صارف کی درخواست فراہم کرتا ہے HumanMessage کے ذریعے
  • ملٹی ٹرن گفتگو کے لیے بنیاد بناتا ہے

اس مثال کے لیے مکمل کوڈ کچھ اس طرح نظر آتا ہے:

from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
import os

llm = ChatOpenAI(
    api_key=os.environ["GITHUB_TOKEN"],
    base_url="https://models.github.ai/inference",
    model="openai/gpt-4o-mini",
)

messages = [
    SystemMessage(content="You are Captain Picard of the Starship Enterprise"),
    HumanMessage(content="Tell me about you"),
]


# works
response  = llm.invoke(messages)
print(response.content)

آپ کو ایک نتیجہ دیکھنا چاہیے جو اس طرح کا ہو:

I am Captain Jean-Luc Picard, the commanding officer of the USS Enterprise (NCC-1701-D), a starship in the United Federation of Planets. My primary mission is to explore new worlds, seek out new life and new civilizations, and boldly go where no one has gone before. 

I believe in the importance of diplomacy, reason, and the pursuit of knowledge. My crew is diverse and skilled, and we often face challenges that test our resolve, ethics, and ingenuity. Throughout my career, I have encountered numerous species, grappled with complex moral dilemmas, and have consistently sought peaceful solutions to conflicts.

I hold the ideals of the Federation close to my heart, believing in the importance of cooperation, understanding, and respect for all sentient beings. My experiences have shaped my leadership style, and I strive to be a thoughtful and just captain. How may I assist you further?

گفتگو کی تسلسل کو برقرار رکھنے کے لیے (ہر بار سیاق و سباق کو دوبارہ ترتیب دینے کے بجائے)، آپ کو اپنے پیغام کی فہرست میں جوابات شامل کرتے رہنا ہوگا۔ جیسے زبانی روایات نے نسلوں کے دوران کہانیاں محفوظ کیں، یہ طریقہ کار پائیدار یادداشت بناتا ہے:

from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
import os

llm = ChatOpenAI(
    api_key=os.environ["GITHUB_TOKEN"],
    base_url="https://models.github.ai/inference",
    model="openai/gpt-4o-mini",
)

messages = [
    SystemMessage(content="You are Captain Picard of the Starship Enterprise"),
    HumanMessage(content="Tell me about you"),
]


# works
response  = llm.invoke(messages)

print(response.content)

print("---- Next ----")

messages.append(response)
messages.append(HumanMessage(content="Now that I know about you, I'm Chris, can I be in your crew?"))

response  = llm.invoke(messages)

print(response.content)

کافی دلچسپ، ہے نا؟ یہاں جو ہو رہا ہے وہ یہ ہے کہ ہم LLM کو دو بار کال کر رہے ہیں - پہلے صرف ہمارے ابتدائی دو پیغامات کے ساتھ، لیکن پھر دوبارہ مکمل گفتگو کی تاریخ کے ساتھ۔ یہ ایسا ہے جیسے اے آئی واقعی ہماری چیٹ کے ساتھ چل رہا ہو!

جب آپ یہ کوڈ چلائیں گے، تو آپ کو دوسرا جواب ملے گا جو کچھ اس طرح کا لگتا ہے:

Welcome aboard, Chris! It's always a pleasure to meet those who share a passion for exploration and discovery. While I cannot formally offer you a position on the Enterprise right now, I encourage you to pursue your aspirations. We are always in need of talented individuals with diverse skills and backgrounds. 

If you are interested in space exploration, consider education and training in the sciences, engineering, or diplomacy. The values of curiosity, resilience, and teamwork are crucial in Starfleet. Should you ever find yourself on a starship, remember to uphold the principles of the Federation: peace, understanding, and respect for all beings. Your journey can lead you to remarkable adventures, whether in the stars or on the ground. Engage!

میں اسے شاید کے طور پر لوں گا ;)

اسٹریمنگ جوابات

کبھی نوٹ کیا کہ ChatGPT اپنے جوابات کو حقیقی وقت میں "ٹائپ" کرتا ہوا لگتا ہے؟ یہ اسٹریمنگ کی کارروائی ہے۔ جیسے کسی ماہر خطاط کو کام کرتے دیکھنا - کرداروں کو اسٹروک بہ اسٹروک ظاہر ہوتے دیکھنا بجائے اس کے کہ وہ فوراً ظاہر ہو جائیں - اسٹریمنگ تعامل کو زیادہ قدرتی محسوس کرتی ہے اور فوری فیڈبیک فراہم کرتی ہے۔

LangChain کے ساتھ اسٹریمنگ کو نافذ کرنا

from langchain_openai import ChatOpenAI
import os

llm = ChatOpenAI(
    api_key=os.environ["GITHUB_TOKEN"],
    base_url="https://models.github.ai/inference",
    model="openai/gpt-4o-mini",
    streaming=True
)

# Stream the response
for chunk in llm.stream("Write a short story about a robot learning to code"):
    print(chunk.content, end="", flush=True)

اسٹریمنگ کیوں زبردست ہے:

  • مواد دکھاتا ہے جیسے یہ تخلیق ہو رہا ہے - مزید عجیب انتظار نہیں!
  • صارفین کو محسوس کراتا ہے کہ کچھ واقعی ہو رہا ہے
  • تیز محسوس ہوتا ہے، حالانکہ یہ تکنیکی طور پر نہیں ہے
  • صارفین کو پڑھنے دیتا ہے جبکہ اے آئی ابھی "سوچ رہا ہے"

💡 صارف کے تجربے کا ٹپ: اسٹریمنگ واقعی چمکتی ہے جب آپ لمبے جوابات جیسے کوڈ وضاحتیں، تخلیقی تحریر، یا تفصیلی ٹیوٹوریلز سے نمٹ رہے ہوں۔ آپ کے صارفین پیش رفت دیکھنے کو پسند کریں گے بجائے خالی اسکرین کو گھورنے کے!

پرامپٹ ٹیمپلیٹس

پرامپٹ ٹیمپلیٹس کلاسیکل خطابت میں استعمال ہونے والے بیانیہ ڈھانچے کی طرح کام کرتے ہیں - سوچیں کہ کس طرح Cicero اپنے تقریری انداز کو مختلف سامعین کے لیے اپناتا تھا جبکہ ایک ہی قائل کرنے والے فریم ورک کو برقرار رکھتا تھا۔ یہ آپ کو دوبارہ استعمال کے قابل پرامپٹس بنانے دیتے ہیں جہاں آپ مختلف معلومات کے ٹکڑوں کو دوبارہ لکھے بغیر تبدیل کر سکتے ہیں۔ ایک بار جب آپ ٹیمپلیٹ سیٹ اپ کر لیتے ہیں، تو آپ صرف متغیرات کو مطلوبہ اقدار کے ساتھ بھر دیتے ہیں۔

دوبارہ استعمال کے قابل پرامپٹس بنانا

from langchain_core.prompts import ChatPromptTemplate

# Define a template for code explanations
template = ChatPromptTemplate.from_messages([
    ("system", "You are an expert programming instructor. Explain concepts clearly with examples."),
    ("human", "Explain {concept} in {language} with a practical example for {skill_level} developers")
])

# Use the template with different values
questions = [
    {"concept": "functions", "language": "JavaScript", "skill_level": "beginner"},
    {"concept": "classes", "language": "Python", "skill_level": "intermediate"},
    {"concept": "async/await", "language": "JavaScript", "skill_level": "advanced"}
]

for question in questions:
    prompt = template.format_messages(**question)
    response = llm.invoke(prompt)
    print(f"Topic: {question['concept']}\n{response.content}\n---\n")

آپ ٹیمپلیٹس استعمال کرنے سے کیوں محبت کریں گے:

  • آپ کے پرامپٹس کو آپ کی پوری ایپ میں مستقل رکھتا ہے
  • گندے اسٹرنگ کنکیٹینیشن کی ضرورت نہیں - صرف صاف، سادہ متغیرات
  • آپ کا اے آئی پیش گوئی کے قابل برتاؤ کرتا ہے کیونکہ ڈھانچہ وہی رہتا ہے
  • اپ ڈیٹس آسان ہیں - ٹیمپلیٹ کو ایک بار تبدیل کریں، اور یہ ہر جگہ ٹھیک ہو گیا

منظم آؤٹپٹ

کبھی اے آئی کے جوابات کو غیر منظم متن کے طور پر واپس کرنے کی کوشش کرتے ہوئے مایوس ہوئے؟ منظم آؤٹپٹ ایسا ہے جیسے آپ کے اے آئی کو سکھایا جائے کہ Linnaeus نے حیاتیاتی درجہ بندی کے لیے منظم طریقہ اختیار کیا - منظم، پیش گوئی کے قابل، اور کام کرنے میں آسان۔ آپ JSON، مخصوص ڈیٹا ڈھانچے، یا کسی بھی فارمیٹ کی درخواست کر سکتے ہیں جس کی آپ کو ضرورت ہو۔

آؤٹپٹ اسکیمز کی وضاحت

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from pydantic import BaseModel, Field

class CodeReview(BaseModel):
    score: int = Field(description="Code quality score from 1-10")
    strengths: list[str] = Field(description="List of code strengths")
    improvements: list[str] = Field(description="List of suggested improvements")
    overall_feedback: str = Field(description="Summary feedback")

# Set up the parser
parser = JsonOutputParser(pydantic_object=CodeReview)

# Create prompt with format instructions
prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a code reviewer. {format_instructions}"),
    ("human", "Review this code: {code}")
])

# Format the prompt with instructions
chain = prompt | llm | parser

# Get structured response
code_sample = """
def calculate_average(numbers):
    return sum(numbers) / len(numbers)
"""

result = chain.invoke({
    "code": code_sample,
    "format_instructions": parser.get_format_instructions()
})

print(f"Score: {result['score']}")
print(f"Strengths: {', '.join(result['strengths'])}")

منظم آؤٹپٹ کیوں گیم چینجر ہے:

  • اب مزید اندازہ لگانے کی ضرورت نہیں کہ آپ کو کون سا فارمیٹ واپس ملے گا - یہ ہر بار مستقل ہے
  • آپ کے ڈیٹا بیس اور APIs میں بغیر اضافی کام کے براہ راست پلگ کرتا ہے
  • عجیب اے آئی جوابات کو پکڑتا ہے اس سے پہلے کہ وہ آپ کی ایپ کو نقصان پہنچائیں
  • آپ کے کوڈ کو صاف کرتا ہے کیونکہ آپ بالکل جانتے ہیں کہ آپ کس کے ساتھ کام کر رہے ہیں

ٹول کالنگ

اب ہم ایک سب سے طاقتور فیچر پر پہنچتے ہیں: ٹولز۔ یہ وہ طریقہ ہے جس سے آپ اپنے اے آئی کو گفتگو سے آگے عملی صلاحیتیں دیتے ہیں۔ جیسے قرون وسطیٰ کے گلڈز نے مخصوص دستکاری کے لیے خصوصی ٹولز تیار کیے، آپ اپنے اے آئی کو مرکوز آلات سے لیس کر سکتے ہیں۔ آپ بیان کرتے ہیں کہ کون سے ٹولز دستیاب ہیں، اور جب کوئی ایسی چیز کی درخواست کرتا ہے جو میل کھاتی ہے، تو آپ کا اے آئی کارروائی کر سکتا ہے۔

Python کا استعمال

آئیے کچھ ٹولز شامل کرتے ہیں جیسے:

from typing_extensions import Annotated, TypedDict

class add(TypedDict):
    """Add two integers."""

    # Annotations must have the type and can optionally include a default value and description (in that order).
    a: Annotated[int, ..., "First integer"]
    b: Annotated[int, ..., "Second integer"]

tools = [add]

functions = {
    "add": lambda a, b: a + b
}

تو یہاں کیا ہو رہا ہے؟ ہم نے add نامی ایک ٹول کے لیے بلیو پرنٹ بنایا۔ TypedDict سے وراثت لے کر اور ان فینسی Annotated اقسام کو a اور b کے لیے استعمال کرتے ہوئے، ہم LLM کو واضح تصویر دے رہے ہیں کہ یہ ٹول کیا کرتا ہے اور اسے کیا ضرورت ہے۔ functions ڈکشنری ہماری ٹول باکس کی طرح ہے - یہ ہمارے کوڈ کو بالکل بتاتا ہے کہ جب اے آئی کسی مخصوص ٹول کو استعمال کرنے کا فیصلہ کرے تو کیا کرنا ہے۔

آئیے دیکھتے ہیں کہ ہم اگلے مرحلے میں اس ٹول کے ساتھ LLM کو کیسے کال کرتے ہیں:

llm = ChatOpenAI(
    api_key=os.environ["GITHUB_TOKEN"],
    base_url="https://models.github.ai/inference",
    model="openai/gpt-4o-mini",
)

llm_with_tools = llm.bind_tools(tools)

یہاں ہم bind_tools کو اپنے tools array کے ساتھ کال کرتے ہیں اور اس طرح LLM llm_with_tools اب اس ٹول کے بارے میں جانتا ہے۔

اس نئے LLM کو استعمال کرنے کے لیے، ہم درج ذیل کوڈ ٹائپ کر سکتے ہیں:

query = "What is 3 + 12?"

res = llm_with_tools.invoke(query)
if(res.tool_calls):
    for tool in res.tool_calls:
        print("TOOL CALL: ", functions[tool["name"]](../../../10-ai-framework-project/**tool["args"]))
print("CONTENT: ",res.content)

اب جب ہم اس نئے llm پر invoke کال کرتے ہیں، جس کے پاس ٹولز ہیں، تو شاید پراپرٹی tool_calls پاپولیٹ ہو جائے۔ اگر ایسا ہے، تو کوئی بھی شناخت شدہ ٹولز کے پاس name اور args پراپرٹی ہوتی ہے جو شناخت کرتی ہے کہ کون سا ٹول استعمال کیا جانا چاہیے اور کس دلائل کے ساتھ۔ مکمل کوڈ کچھ اس طرح نظر آتا ہے:

from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
import os
from typing_extensions import Annotated, TypedDict

class add(TypedDict):
    """Add two integers."""

    # Annotations must have the type and can optionally include a default value and description (in that order).
    a: Annotated[int, ..., "First integer"]
    b: Annotated[int, ..., "Second integer"]

tools = [add]

functions = {
    "add": lambda a, b: a + b
}

llm = ChatOpenAI(
    api_key=os.environ["GITHUB_TOKEN"],
    base_url="https://models.github.ai/inference",
    model="openai/gpt-4o-mini",
)

llm_with_tools = llm.bind_tools(tools)

query = "What is 3 + 12?"

res = llm_with_tools.invoke(query)
if(res.tool_calls):
    for tool in res.tool_calls:
        print("TOOL CALL: ", functions[tool["name"]](../../../10-ai-framework-project/**tool["args"]))
print("CONTENT: ",res.content)

اس کوڈ کو چلانے پر، آپ کو آؤٹپٹ کچھ اس طرح نظر آنا چاہیے:

TOOL CALL:  15
CONTENT: 

اے آئی نے "What is 3 + 12" کا جائزہ لیا اور اسے add ٹول کے لیے ایک کام کے طور پر پہچانا۔ جیسے ایک ماہر لائبریرین جانتا ہے کہ کس قسم کے سوال کے مطابق کون سا حوالہ مشورہ کرنا ہے، اس نے یہ تعین ٹول کے نام، وضاحت، اور فیلڈ کی وضاحتوں سے کیا۔ 15 کا نتیجہ ہمارے functions ڈکشنری سے ٹول کو انجام دینے سے آیا:

print("TOOL CALL: ", functions[tool["name"]](../../../10-ai-framework-project/**tool["args"]))

ایک زیادہ دلچسپ ٹول جو ویب API کو کال کرتا ہے

نمبرز کو شامل کرنا تصور کو ظاہر کرتا ہے، لیکن حقیقی ٹولز عام طور پر زیادہ پیچیدہ آپریشنز انجام دیتے ہیں، جیسے ویب APIs کو کال کرنا۔ آئیے اپنے مثال کو بڑھاتے ہیں تاکہ اے آئی انٹرنیٹ سے مواد حاصل کرے - جیسے ٹیلی گراف آپریٹرز نے کبھی دور دراز مقامات کو جوڑا:

class joke(TypedDict):
    """Tell a joke."""

    # Annotations must have the type and can optionally include a default value and description (in that order).
    category: Annotated[str, ..., "The joke category"]

def get_joke(category: str) -> str:
    response = requests.get(f"https://api.chucknorris.io/jokes/random?category={category}", headers={"Accept": "application/json"})
    if response.status_code == 200:
        return response.json().get("value", f"Here's a {category} joke!")
    return f"Here's a {category} joke!"

functions = {
    "add": lambda a, b: a + b,
    "joke": lambda category: get_joke(category)
}

query = "Tell me a joke about animals"

# the rest of the code is the same

اب اگر آپ یہ کوڈ چلائیں تو آپ کو ایک جواب ملے گا جو کچھ اس طرح کہتا ہے:

TOOL CALL:  Chuck Norris once rode a nine foot grizzly bear through an automatic car wash, instead of taking a shower.
CONTENT:  

یہاں مکمل کوڈ ہے:

from langchain_openai import ChatOpenAI
import requests
import os
from typing_extensions import Annotated, TypedDict

class add(TypedDict):
    """Add two integers."""

    # Annotations must have the type and can optionally include a default value and description (in that order).
    a: Annotated[int, ..., "First integer"]
    b: Annotated[int, ..., "Second integer"]

class joke(TypedDict):
    """Tell a joke."""

    # Annotations must have the type and can optionally include a default value and description (in that order).
    category: Annotated[str, ..., "The joke category"]

tools = [add, joke]

def get_joke(category: str) -> str:
    response = requests.get(f"https://api.chucknorris.io/jokes/random?category={category}", headers={"Accept": "application/json"})
    if response.status_code == 200:
        return response.json().get("value", f"Here's a {category} joke!")
    return f"Here's a {category} joke!"

functions = {
    "add": lambda a, b: a + b,
    "joke": lambda category: get_joke(category)
}

llm = ChatOpenAI(
    api_key=os.environ["GITHUB_TOKEN"],
    base_url="https://models.github.ai/inference",
    model="openai/gpt-4o-mini",
)

llm_with_tools = llm.bind_tools(tools)

query = "Tell me a joke about animals"

res = llm_with_tools.invoke(query)
if(res.tool_calls):
    for tool in res.tool_calls:
        # print("TOOL CALL: ", tool)
        print("TOOL CALL: ", functions[tool["name"]](../../../10-ai-framework-project/**tool["args"]))
print("CONTENT: ",res.content)

ایمبیڈنگز اور دستاویز پروسیسنگ

ایمبیڈنگز جدید اے آئی میں سب سے زیادہ خوبصورت حلوں میں سے ایک کی نمائندگی کرتی ہیں۔ تصور کریں کہ آپ کسی بھی متن کو لے سکتے ہیں اور اسے عددی نقاط میں تبدیل کر سکتے ہیں جو اس کے معنی کو ظاہر کرتے ہیں۔ یہی ایمبیڈنگز کرتی ہیں - وہ متن کو کثیر جہتی جگہ میں پوائنٹس میں تبدیل کرتی ہیں جہاں ملتے جلتے تصورات ایک ساتھ جمع ہوتے ہیں۔ یہ خیالات کے لیے ایک کوآرڈینیٹ سسٹم رکھنے جیسا ہے، جیسے Mendeleev نے ایٹمی خصوصیات کے ذریعے پیریوڈک ٹیبل کو منظم کیا۔

ایمبیڈنگز بنانا اور استعمال کرنا

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter

# Initialize embeddings
embeddings = OpenAIEmbeddings(
    api_key=os.environ["GITHUB_TOKEN"],
    base_url="https://models.github.ai/inference",
    model="text-embedding-3-small"
)

# Load and split documents
loader = TextLoader("documentation.txt")
documents = loader.load()

text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# Create vector store
vectorstore = FAISS.from_documents(texts, embeddings)

# Perform similarity search
query = "How do I handle user authentication?"
similar_docs = vectorstore.similarity_search(query, k=3)

for doc in similar_docs:
    print(f"Relevant content: {doc.page_content[:200]}...")

مختلف فارمیٹس کے لیے دستاویز لوڈرز

from langchain_community.document_loaders import (
    PyPDFLoader,
    CSVLoader,
    JSONLoader,
    WebBaseLoader
)

# Load different document types
pdf_loader = PyPDFLoader("manual.pdf")
csv_loader = CSVLoader("data.csv")
json_loader = JSONLoader("config.json")
web_loader = WebBaseLoader("https://example.com/docs")

# Process all documents
all_documents = []
for loader in [pdf_loader, csv_loader, json_loader, web_loader]:
    docs = loader.load()
    all_documents.extend(docs)

ایمبیڈنگز کے ساتھ آپ کیا کر سکتے ہیں:

  • ایسا سرچ بنائیں جو واقعی آپ کا مطلب سمجھتا ہو، صرف کی ورڈ میچنگ نہیں
  • ایسا اے آئی بنائیں جو آپ کے دستاویزات کے بارے میں سوالات کا جواب دے سکے
  • ایسی سفارشاتی نظام بنائیں جو واقعی متعلقہ مواد تجویز
  1. ذاتی تعلیم: مختلف مہارت کی سطحوں کے مطابق جوابات کو ڈھالنے کے لیے سسٹم پیغامات کا استعمال کریں
  2. جواب کی ترتیب: کوئز سوالات کے لیے منظم آؤٹ پٹ نافذ کریں

عمل درآمد کے مراحل

مرحلہ 1: اپنے ماحول کو ترتیب دیں

pip install langchain langchain-openai

مرحلہ 2: بنیادی چیٹ کی فعالیت

  • StudyAssistant کلاس بنائیں
  • گفتگو کی یادداشت کو نافذ کریں
  • تعلیمی مدد کے لیے شخصیت کی ترتیب شامل کریں

مرحلہ 3: تعلیمی ٹولز شامل کریں

  • کوڈ وضاحت کنندہ: کوڈ کو قابل فہم حصوں میں تقسیم کرتا ہے
  • کوئز جنریٹر: پروگرامنگ تصورات کے بارے میں سوالات تیار کرتا ہے
  • پیش رفت ٹریکر: کور کیے گئے موضوعات کا ریکارڈ رکھتا ہے

مرحلہ 4: بہتر خصوصیات (اختیاری)

  • بہتر صارف تجربے کے لیے اسٹریمنگ جوابات نافذ کریں
  • کورس مواد کو شامل کرنے کے لیے دستاویز لوڈنگ شامل کریں
  • مواد کی بازیافت کے لیے مماثلت پر مبنی ایمبیڈنگز بنائیں

تشخیصی معیار

خصوصیت بہترین (4) اچھا (3) تسلی بخش (2) مزید کام کی ضرورت (1)
گفتگو کا بہاؤ قدرتی، سیاق و سباق سے آگاہ جوابات اچھا سیاق و سباق برقرار رکھنا بنیادی گفتگو تبادلے کے درمیان کوئی یادداشت نہیں
ٹول انضمام متعدد مفید ٹولز بغیر کسی رکاوٹ کے کام کر رہے ہیں 2+ ٹولز درست طریقے سے نافذ کیے گئے 1-2 بنیادی ٹولز ٹولز کام نہیں کر رہے
کوڈ کا معیار صاف، اچھی طرح سے دستاویزی، غلطی کا انتظام اچھی ساخت، کچھ دستاویزات بنیادی فعالیت کام کرتی ہے خراب ساخت، کوئی غلطی کا انتظام نہیں
تعلیمی قدر سیکھنے کے لیے واقعی مددگار، موافقت پذیر اچھا تعلیمی تعاون بنیادی وضاحتیں محدود تعلیمی فائدہ

نمونہ کوڈ کی ساخت

class StudyAssistant:
    def __init__(self, skill_level="beginner"):
        # Initialize LLM, tools, and conversation memory
        pass
    
    def explain_code(self, code, language):
        # Tool: Explain how code works
        pass
    
    def generate_quiz(self, topic, difficulty):
        # Tool: Create practice questions
        pass
    
    def chat(self, user_input):
        # Main conversation interface
        pass

# Example usage
assistant = StudyAssistant(skill_level="intermediate")
response = assistant.chat("Explain how Python functions work")

اضافی چیلنجز:

  • آواز کی ان پٹ/آؤٹ پٹ صلاحیتیں شامل کریں
  • Streamlit یا Flask کا استعمال کرتے ہوئے ویب انٹرفیس نافذ کریں
  • ایمبیڈنگز کا استعمال کرتے ہوئے کورس مواد سے علم کا ذخیرہ بنائیں
  • پیش رفت کی ٹریکنگ اور ذاتی تعلیم کے راستے شامل کریں

خلاصہ

🎉 آپ نے اب AI فریم ورک کی ترقی کے بنیادی اصولوں میں مہارت حاصل کر لی ہے اور LangChain کا استعمال کرتے ہوئے جدید AI ایپلیکیشنز بنانے کا طریقہ سیکھ لیا ہے۔ جیسے ایک جامع تربیت مکمل کرنا، آپ نے مہارتوں کا ایک اہم ٹول کٹ حاصل کر لیا ہے۔ آئیے جائزہ لیتے ہیں کہ آپ نے کیا حاصل کیا ہے۔

آپ نے کیا سیکھا

بنیادی فریم ورک تصورات:

  • فریم ورک کے فوائد: براہ راست API کالز کے مقابلے میں فریم ورک کا انتخاب کب کرنا ہے
  • LangChain کی بنیادی باتیں: AI ماڈل کنکشنز کو ترتیب دینا اور تشکیل دینا
  • پیغام کی اقسام: SystemMessage, HumanMessage, اور AIMessage کا استعمال منظم گفتگو کے لیے

جدید خصوصیات:

  • ٹول کالنگ: AI صلاحیتوں کو بڑھانے کے لیے حسب ضرورت ٹولز بنانا اور انضمام کرنا
  • گفتگو کی یادداشت: متعدد گفتگو کے دوران سیاق و سباق کو برقرار رکھنا
  • اسٹریمنگ جوابات: حقیقی وقت میں جواب کی ترسیل کو نافذ کرنا
  • پرامپٹ ٹیمپلیٹس: دوبارہ قابل استعمال، متحرک پرامپٹس بنانا
  • منظم آؤٹ پٹ: مستقل، قابل تجزیہ AI جوابات کو یقینی بنانا
  • ایمبیڈنگز: سیمینٹک سرچ اور دستاویز پروسیسنگ کی صلاحیتیں بنانا

عملی اطلاقات:

  • مکمل ایپس بنانا: متعدد خصوصیات کو پروڈکشن کے لیے تیار ایپلیکیشنز میں یکجا کرنا
  • غلطی کا انتظام: مضبوط غلطی کے انتظام اور توثیق کو نافذ کرنا
  • ٹول انضمام: حسب ضرورت ٹولز بنانا جو AI صلاحیتوں کو بڑھاتے ہیں

اہم نکات

🎯 یاد رکھیں: LangChain جیسے AI فریم ورک بنیادی طور پر آپ کے پیچیدگی کو چھپانے والے، خصوصیات سے بھرے بہترین دوست ہیں۔ یہ کامل ہیں جب آپ کو گفتگو کی یادداشت، ٹول کالنگ، یا متعدد AI ماڈلز کے ساتھ کام کرنے کی ضرورت ہو بغیر اپنی ذہنی سکون کھونے کے۔

AI انضمام کے لیے فیصلہ سازی کا فریم ورک:

flowchart TD
    A[AI Integration Need] --> B{Simple single query?}
    B -->|Yes| C[Direct API calls]
    B -->|No| D{Need conversation memory?}
    D -->|No| E[SDK Integration]
    D -->|Yes| F{Need tools or complex features?}
    F -->|No| G[Framework with basic setup]
    F -->|Yes| H[Full framework implementation]
    
    C --> I[HTTP requests, minimal dependencies]
    E --> J[Provider SDK, model-specific]
    G --> K[LangChain basic chat]
    H --> L[LangChain with tools, memory, agents]

آگے کیا کریں؟

ابھی بنانا شروع کریں:

  • ان تصورات کو لے کر کچھ ایسا بنائیں جو آپ کو پرجوش کرے!
  • LangChain کے ذریعے مختلف AI ماڈلز کے ساتھ کھیلیں - یہ AI ماڈلز کا ایک کھیل کا میدان ہے
  • ایسے ٹولز بنائیں جو آپ کے کام یا منصوبوں میں آپ کو درپیش حقیقی مسائل کو حل کریں

اگلے درجے کے لیے تیار ہیں؟

  • AI ایجنٹس: AI سسٹمز بنائیں جو خود پیچیدہ کاموں کی منصوبہ بندی اور انجام دے سکیں
  • RAG (Retrieval-Augmented Generation): AI کو اپنے علم کے ذخیرے کے ساتھ جوڑیں تاکہ سپر پاورڈ ایپلیکیشنز بن سکیں
  • ملٹی موڈل AI: متن، تصاویر، اور آڈیو کے ساتھ ایک ساتھ کام کریں - امکانات لامحدود ہیں!
  • پروڈکشن ڈیپلائمنٹ: اپنی AI ایپس کو پیمانے اور حقیقی دنیا میں ان کی نگرانی کرنا سیکھیں

کمیونٹی میں شامل ہوں:

  • LangChain کمیونٹی بہترین ہے تازہ ترین رہنے اور بہترین طریقے سیکھنے کے لیے
  • GitHub Models آپ کو جدید AI صلاحیتوں تک رسائی فراہم کرتا ہے - تجربہ کرنے کے لیے بہترین
  • مختلف استعمال کے معاملات کے ساتھ مشق کرتے رہیں - ہر منصوبہ آپ کو کچھ نیا سکھائے گا

اب آپ کے پاس ذہین، گفتگو کرنے والی ایپلیکیشنز بنانے کا علم ہے جو لوگوں کو حقیقی مسائل حل کرنے میں مدد دے سکتی ہیں۔ جیسے نشاۃ ثانیہ کے کاریگر جو فنکارانہ وژن کو تکنیکی مہارت کے ساتھ جوڑتے تھے، آپ اب AI صلاحیتوں کو عملی اطلاق کے ساتھ جوڑ سکتے ہیں۔ سوال یہ ہے: آپ کیا بنائیں گے؟ 🚀

GitHub Copilot Agent Challenge 🚀

Agent mode کا استعمال کرتے ہوئے درج ذیل چیلنج مکمل کریں:

تفصیل: ایک جدید AI سے چلنے والا کوڈ ریویو اسسٹنٹ بنائیں جو متعدد LangChain خصوصیات کو یکجا کرے، بشمول ٹول کالنگ، منظم آؤٹ پٹ، اور گفتگو کی یادداشت، تاکہ کوڈ جمع کرانے پر جامع تاثرات فراہم کیے جا سکیں۔

پرامپٹ: ایک CodeReviewAssistant کلاس بنائیں جو نافذ کرے:

  1. کوڈ کی پیچیدگی کا تجزیہ کرنے اور بہتری کی تجاویز دینے کے لیے ایک ٹول
  2. بہترین طریقوں کے خلاف کوڈ کی جانچ کرنے کے لیے ایک ٹول
  3. منظم آؤٹ پٹ کے لیے Pydantic ماڈلز کا استعمال جو مستقل ریویو فارمیٹ فراہم کرے
  4. ریویو سیشنز کو ٹریک کرنے کے لیے گفتگو کی یادداشت
  5. ایک مرکزی چیٹ انٹرفیس جو کوڈ جمع کرانے کو سنبھال سکے اور تفصیلی، قابل عمل تاثرات فراہم کرے

اسسٹنٹ کو متعدد پروگرامنگ زبانوں میں کوڈ کا جائزہ لینے کے قابل ہونا چاہیے، ایک سیشن میں متعدد کوڈ جمع کرانے کے دوران سیاق و سباق کو برقرار رکھنا چاہیے، اور خلاصہ اسکورز اور تفصیلی بہتری کی تجاویز دونوں فراہم کرنا چاہیے۔

مزید جانیں agent mode یہاں۔


اعلانِ لاتعلقی:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کی بھرپور کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔