paint-brush
100 Tage KI, Tag 18: Entwicklung eines RAG mit Microsoft Semantic Kernelvon@sindamnataraj
1,589 Lesungen
1,589 Lesungen

100 Tage KI, Tag 18: Entwicklung eines RAG mit Microsoft Semantic Kernel

von Nataraj5m2024/04/05
Read on Terminal Reader

Zu lang; Lesen

In diesem Beitrag betrachten wir die Erstellung eines RAG mit dem Semantic Kernel von Microsoft.
featured image - 100 Tage KI, Tag 18: Entwicklung eines RAG mit Microsoft Semantic Kernel
Nataraj HackerNoon profile picture

Hallo alle miteinander! Ich bin Nataraj , und genau wie Sie bin ich fasziniert von den jüngsten Fortschritten der künstlichen Intelligenz. Als mir klar wurde, dass ich mit allen Entwicklungen auf dem Laufenden bleiben musste, beschloss ich, mich auf eine persönliche Lernreise zu begeben. 100 Tage KI wurde geboren! Mit dieser Serie werde ich mehr über LLMs erfahren und in meinen Blogbeiträgen Ideen, Experimente, Meinungen, Trends und Erkenntnisse teilen. Sie können die Reise auf HackerNoon verfolgen. Hier oder meine persönliche Website Hier . Im heutigen Artikel schauen wir uns an, wie man mit dem Semantic Kernel von Microsoft einen RAG entwickelt.

Retrieval Augmented Generation (RAG) ist eine der am häufigsten verwendeten Anwendungen, die mit verschiedenen LLMs entwickelt werden. Wir haben bereits untersucht, wie man mit langchain ein RAG entwickelt. In diesem Beitrag erstellen wir ein RAG mit dem Semantic Kernel von Microsoft .


Um weitermachen zu können, benötigen Sie die Open AI API.

Schritt 1: Semantischen Kernel initialisieren

Der erste Schritt besteht darin, den semantischen Kernel zu initialisieren und dem Kernel mitzuteilen, dass wir die Chat-Vervollständigung von Open AI und das Einbettungsmodell von Open AI verwenden möchten, das wir später zum Erstellen von Einbettungen verwenden werden. Wir werden dem Kernel auch mitteilen, dass wir einen Speicher verwenden möchten, der in unserem Fall Chroma DB sein wird. Beachten Sie, dass wir dem Kernel auch mitteilen, dass dieser Speicher persistent sein muss.


 kernel = sk.Kernel() kernel.add_text_completion_service("openai", OpenAIChatCompletion("gpt-4",api_key)) kernel.add_text_embedding_generation_service("openai-embedding", OpenAITextEmbedding("text-embedding-ada-002", api_key)) # chrome db kernel.register_memory_store(memory_store=ChromaMemoryStore(persist_directory='mymemories2')) print("Made two new services attached to the kernel and made a Chroma memory store that's persistent.")

Schritt 2 – Einbettungen erstellen

In diesem Beispiel erstellen wir einen RAG, der Fragen zu einer SWOT-Analyse beantworten kann, die wir für ein Pizzageschäft erstellt haben. Dazu nehmen wir die SWOT-Analyse, holen die Einbettungen dafür und speichern die entsprechenden Einbettungen in einer Sammlung namens „SWOT“ im persistenten Datenspeicher, den wir im letzten Schritt erstellt haben.


 strength_questions = ["What unique recipes or ingredients does the pizza shop use?","What are the skills and experience of the staff?","Does the pizza shop have a strong reputation in the local area?","Are there any unique features of the shop or its location that attract customers?", "Does the pizza shop have a strong reputation in the local area?", "Are there any unique features of the shop or its location that attract customers?"] weakness_questions = ["What are the operational challenges of the pizza shop? (eg, slow service, high staff turnover)","Are there financial constraints that limit growth or improvements?","Are there any gaps in the product offering?","Are there customer complaints or negative reviews that need to be addressed?"] opportunities_questions = ["Is there potential for new products or services (eg, catering, delivery)?","Are there under-served customer segments or market areas?","Can new technologies or systems enhance the business operations?","Are there partnerships or local events that can be leveraged for marketing?"] threats_questions = ["Who are the major competitors and what are they offering?","Are there potential negative impacts due to changes in the local area (eg, construction, closure of nearby businesses)?","Are there economic or industry trends that could impact the business negatively (eg, increased ingredient costs)?","Is there any risk due to changes in regulations or legislation (eg, health and safety, employment)?"] strengths = [ "Unique garlic pizza recipe that wins top awards","Owner trained in Sicily at some of the best pizzerias","Strong local reputation","Prime location on university campus" ] weaknesses = [ "High staff turnover","Floods in the area damaged the seating areas that are in need of repair","Absence of popular calzones from menu","Negative reviews from younger demographic for lack of hip ingredients" ] opportunities = [ "Untapped catering potential","Growing local tech startup community","Unexplored online presence and order capabilities","Upcoming annual food fair" ] threats = [ "Competition from cheaper pizza businesses nearby","There's nearby street construction that will impact foot traffic","Rising cost of cheese will increase the cost of pizzas","No immediate local regulatory changes but it's election season" ] print("✅ SWOT analysis for the pizza shop is resident in native memory") memoryCollectionName = "SWOT" # lets put these in memory / vector store async def run_storeinmemory_async(): for i in range(len(strengths)): await kernel.memory.save_information_async(memoryCollectionName, id=f"strength-{i}", text=f"Internal business strength (S in SWOT) that makes customers happy and satisfied Q&A: Q: {strength_questions[i]} A: {strengths[i]}") for i in range(len(weaknesses)): await kernel.memory.save_information_async(memoryCollectionName, id=f"weakness-{i}", text=f"Internal business weakness (W in SWOT) that makes customers unhappy and dissatisfied Q&A: Q: {weakness_questions[i]} A: {weaknesses[i]}") for i in range(len(opportunities)): await kernel.memory.save_information_async(memoryCollectionName, id=f"opportunity-{i}", text=f"External opportunity (O in SWOT) for the business to gain entirely new customers Q&A: Q: {opportunities_questions[i]} A: {opportunities[i]}") for i in range(len(threats)): await kernel.memory.save_information_async(memoryCollectionName, id=f"threat-{i}", text=f"External threat (T in SWOT) to the business that impacts its survival Q&A: Q: {threats_questions[i]} A: {threats[i]}") asyncio.run(run_storeinmemory_async()) print("😶‍🌫️ Embeddings for SWOT have been generated and stored in vector db")

Schritt 3 – Stellen Sie Ihre Frage

Nachdem wir nun die Einbettungen unserer Daten im Chrome-Vektorspeicher gespeichert haben, können wir Fragen zum Pizzageschäft stellen und eine Antwort erhalten.


 #ask questions on swot potential_question = "What are the easiest ways to make more money?" counter = 0 async def run_askquestions_async(): memories = await kernel.memory.search_async(memoryCollectionName, potential_question, limit=5, min_relevance_score=0.5) display(f"### ❓ Potential question: {potential_question}") for memory in memories: if counter == 0: related_memory = memory.text counter += 1 print(f" > 🧲 Similarity result {counter}:\n >> ID: {memory.id}\n Text: {memory.text} Relevance: {memory.relevance}\n") asyncio.run(run_askquestions_async())


Dies ist eine stark vereinfachte Version davon, wie ein RAG mit Semantic Kernel erstellt werden kann. Das derzeit beliebteste Framework zum Erstellen mit LLMs ist Langchain, und wir haben bereits gesehen, wie man mit Langchain ein RAG erstellt. Obwohl Langchain beliebter wird, da immer mehr Unternehmen Tools erstellen, wird es immer ausgefeiltere Tools geben, und ich habe festgestellt, dass Semantic Kernel einige besondere Funktionen hat, die es hervorstechen lassen.


Das war Tag 18 von 100 Tagen KI.


Ich schreibe einen Newsletter namens „Above Average“, in dem ich über die Erkenntnisse zweiter Ordnung hinter allem spreche, was in der Big Tech-Branche passiert. Wenn Sie in der Technologiebranche tätig sind und nicht durchschnittlich sein wollen, abonnieren Sie ihn .


Folgen Sie mir auf Twitter , LinkedIn oder HackerNoon , um die neuesten Updates zu 100 Tagen KI zu erhalten, oder setzen Sie ein Lesezeichen für diese Seite . Wenn Sie im Technikbereich tätig sind, könnten Sie daran interessiert sein, meiner Community von Technikexperten hier beizutreten.