የተዘጋጀ በ ሴፕቴ 25 ፣ 2025
8 ደቂቀ ምርት
# pip install langchain langchain-openaifrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplate# 1) Modelllm = ChatOpenAI(model="gpt-4o-mini", temperature=0)# 2) Promptprompt = ChatPromptTemplate.from_messages( and streaming guide.---## እንደተጠቀሙበት 80% የሚውሰዱ መጠንቀቅ እና የሚያደርጉ እቃዎች### 1) ማሰናጃና ውጤት አቀማመጥ- ለተቀደሰ ማሰናጃ እንደ `ChatPromptTemplate` ይጠቀሙ።- ውጤቶችን `StrOutputParser` ወይም JSON ፓርሰሮችን በተጠቃሚ ቅጽ ለመተንተን ይጠቀሙ።```pythonfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIllm = ChatOpenAI(model="gpt-4o-mini")prompt = ChatPromptTemplate.from_template("""ከሚከተለው ጽሑፍ በ3 ነጥቦች ማጠቃለያ ያድርጉ:---{text}""")parser = StrOutputParserchain = prompt | llm | parsersummary = chain.invoke({"text": "LangChain ለRAG እና መሣሪያዎች LLM መተግበሪያዎችን ለማሰራት እንደሚረዳ ነው."})print(summary)# pip install faiss-cpu tiktokenfrom langchain_openai import OpenAIEmbeddings, ChatOpenAIfrom langchain_community.vectorstores import FAISSfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_core.prompts import ChatPromptTemplate# ሰነዶችን ዝግጅትtexts = .---## ከአንደኛ እስከ መፍትሄ: የእድገት እገዛ እቅድ### መስፈርቱ 1: የተጠቃሚው ታሪክ መግለጽ- ተጠቃሚው ማን ነው? የሚደረገው ሥራ ምንድን ነው?- ምሳሌ፥ “የውስጥ ሰነዶችና አዳዲስ ትኬቶች መሠረት ለምርት ጥያቄዎች የሚሰጥ የድጋፍ ኤጅንት።”### መስፈርቱ 2: አንደኛው የሚገባ ስታክ መምረጥ- ሞዴል: ዋጋ በሚገባ የተከለ እና ታማኝ ሞዴል ይምረጡ (ለምሳሌ፥ GPT-4o-mini ወይም አንደኛው ክፍተት ክፍተት ሞዴል). - መረጃ፥ ኢከና ለRAG ስለሚያስፈልግ ይወስኑ። ከፍተኛ I/O እንዲሆን LCEL አጠቃቀም እና የተለያዩ ኮድ ኮድ አትጠቀሙ።- I/O: አድርጉ፣ አልመስለውም ለመፈጠር。### መስፈርቱ 3: ጥሩ የRAG ክለብ ማድረግ- ሰነዶችን በትክክል አካፋፈል።- እቃዎችን እንደ አውጭ አደርጉ።- ከውስጥ ማግኘትና ምንጮች ጋር መሰረት ልክ አድርጉ።- ሲማላይኔሽን መከላከያ ለማድረግ መከላከያ ያክሉ።```pythonfrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.prompts import ChatPromptTemplateqa_prompt = ChatPromptTemplate.from_template("""በተካተተው ሁኔታ ብቻ ጥያቄውን መልስ። ከሆነ መልስ ካልተገኘ እንደ "አላውቅም" ንገር። የሰነድ መታወቂያዎችን አካቶ ያስገቡ።CONTEXT:{context}QUESTION: {question}""")parser = StrOutputParserrag_chain = (RunnableParallel(context=retriever, question=RunnableLambda(lambda x: x.### መስፈርቱ 5: የተካተተ ውጤቶች እና ማረጋገጫ- ለAPI እንዲቀጥሉ `PydanticOutputParser` ወይም JSON ስኬማ ይጠቀሙ።- መረጃዎችን ይሙከሩ ሞዴል ሲመቀም እንዳይቀር።### መስፈርቱ 6: እርስዎ ስራዎችን ለመፈጸም መሣሪያዎችን እና ፋንክሽኖችን ጥሪ- መሣሪያዎችን በትክክል አስገባብሰው።- ተለመዱ መሣሪያዎች፡ ካልኩሌተር፣ ድረገፅ ፍለጋ፣ SQL ጥያቄ አስኪያጅ፣ ኮድ አሳሽ።- መሣሪያዎችን ከመለያ በቅርጸ ጽሑፍ በኩል ይግለጹ።### መስፈርቱ 7: ጠነኛ መሆን- የተጠናከረ እና ተደጋጋሚ ልምዶችን ልዩ ያደርጉ።- ጊዜ የሚወስድ እና ማቋረጫ መጠበቂያዎች።- የደህንነት ፊልተሮችና የይዘት ምርመራዎች።### መስፈርቱ 8: ግምገማና ቀጣይ ማሻሻያ- በወርሃዊ ውጤቶች (አውጭ → የተጠበቀ ውጤት) ሙከራዎች ያድርጉ።- ታማኝነትን፣ የመልስ ተሟላነትና የምንጭ ትክክለኛነትን ይገምግሙ።- የማግኘት ደረጃና ጊዜ ያሰናበት መጠን ይመልከቱ።---## የሚታወቁ ፍርምርሞችና ጉዳዮች- ቀላል ጀምሩ: ከኤጀንትዎች በፊት ቅርንጫፎችን ያስተካክሉ። ይህ እይታ ተስማሚነትና ዝቅተኛት ወጪ ያሳያል።- ስለሚያስፈልገው ቅርንጫፍ መጠን/ትርጉም ውስጥ ጥራት ከሞዴሉ አዲስ ለውጥ በላይ ይለዋዋጣል።- የማሰረት ብረት: በስርዓተ ሥርዓት ማሰናጃና እየተጠቀሙ ሁሉንም አትሞሉ፤ ትክክለኛ ቁጥር አሳስቢት።- የትክክለኛነት ማሰተባበሪያ፡ ዋጋውን ለማስመልከት `temperature=0` ያዘጋጁ።- ከተንሳፋፊ ግንኙነት: ሲስተሙ ተመልከት እንደሚወሰድ በእንቁላል ውስጥ ተላልፎ ይሰጣል።- የተቀደሰ ውጤቶች: ማዘጋጃ ተቋማት ለቀጣዮች እና ለሌሎች አካላት ምንም እንዳያስቸግር በፓርሰሮች ይተግብሩ።---## በሙሉ አንድ ትንሽ ፕሮጀክት: በሰነዶች እና ምንጮች ጥያቄና መልስ ከተካተተውይህ ምሳሌ ሁሉንም ያገናኝ: እንከተት፣ RAG፣ መልስ ፍጠራና ተንሳፋፊነት።```python# pip install langchain langchain-openai faiss-cpu tiktokenfrom langchain_openai import ChatOpenAI, OpenAIEmbeddingsfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_community.vectorstores import FAISSfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParserfrom langchain_core.runnables import RunnableParallel, RunnableLambda# 1) መቀበያcorpus = {"pricing": "የPro እቅድ 1M የማህበረሰብ ቦታ ቶክኖችን ይደግፋል፣ እና የቅድሚያ ድጋፍ አለው።","limits": "የAPI የመጠን አገዛዝ ለPro ተጠቃሚዎች በደቂቃ 60 ጥያቄዎች ነው።","security": "እኛ ሎጎችን ለ30 ቀናት እንቀመጣለን ካልተቋረጠ በአድሚን።",}splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=50)all_chunks, ids = [], []for doc_id, text in corpus.items:for i, chunk in enumerate(splitter.split_text(text)):all_chunks.append(chunk)ids.append(f"{doc_id}-{i}")# 2) መመዝገቢያdb = FAISS.from_texts(all_chunks, OpenAIEmbeddings)retriever = db.as_retriever(k=4)# 3) ማሰናጃprompt = ChatPromptTemplate.from_template("""እርዳታ አገልጋይ ነህ። ለመልስ ከታች ባለው CONTEXT ጥቅም አድርግ።ካልታሰረብስ ከሆነ "አላውቅም" ብለህ ንገር። የምንጮች መታወቂያዎችን አካቶ ያስገቡ።CONTEXT:{context}QUESTION: {question}""")# 4) ሞዴል እና ፓርሰርllm = ChatOpenAI(model="gpt-4o-mini", temperature=0)parser = StrOutputParser# 5) ሰንሰለት ማዋቀርrag = (RunnableParallel(context=retriever,question=RunnableLambda(lambda x: x["question"]) # በኰር እና ማሳያ)| prompt| llm| parser)# 6) ጥያቄ ማቅረብfor chunk in rag.stream({"question": "የPro ደረጃ ገደቦች እና የሎግ አሰበሰበ ስለምንድን ናቸው?"}):print(chunk, end="", flush=True)batch ላይ በስትሪሚንግ ላይ የሚሰሩ ስብስቦች እና አቀፍ ስራዎች።prompt | llm ሰንሰለት እንደ ገና እንዲወጣ ያደርጉ፤ በ.invoke ወይም .stream ተምሩ። በመምሪያ መምሪያዎች ቀላል ውይይት፣ RAG እና ኤጀንትስ ከመስጀም እስከ መጨረሻ ይመራሉ።Runnable ሰንሰለቶች .stream እና .astream አገልግሎቶችን ይደግፋሉ፣ እንደነሱም የሚያገጥሙትን ክፍል ተከትሎ ይሰጣል። ተንሳፋፊነት መምሪያዎች ይዘው ይገኛሉ።