paint-brush
100日間のAI、18日目: Microsoft Semantic Kernelを使用したRAGの開発@sindamnataraj
1,589 測定値
1,589 測定値

100日間のAI、18日目: Microsoft Semantic Kernelを使用したRAGの開発

Nataraj5m2024/04/05
Read on Terminal Reader

長すぎる; 読むには

この投稿では、Microsoft のセマンティック カーネルを使用して RAG を作成する方法について説明します。
featured image - 100日間のAI、18日目: Microsoft Semantic Kernelを使用したRAGの開発
Nataraj HackerNoon profile picture

こんにちは、みなさん! 私はナタラジですそしてあなたと同じように、私は人工知能の最近の進歩に魅了されてきました。起こっているすべての開発に遅れないようにする必要があることに気づき、私は個人的な学習の旅に乗り出すことにしました。 AIの100日間誕生しました!このシリーズでは、LLMについて学び、ブログ投稿を通じてアイデア、実験、意見、トレンド、学習を共有します。HackerNoonで旅を追うことができます。ここまたは私の個人ウェブサイトここ本日の記事では、Microsoft の Semantic Kernel を使用して RAG を開発する方法について説明します。

検索拡張生成 (RAG) は、さまざまな LLM を使用して開発されている最も一般的なアプリケーションの 1 つです。 langchainを使用して RAG を開発する方法については、以前に説明しました。 この投稿では、Microsoft の Semantic Kernelを使用して RAG を作成します。


この手順を実行するには、Open AI API が必要です。

ステップ1: セマンティックカーネルを初期化する

最初のステップは、セマンティック カーネルを初期化し、Open AI のチャット補完と、後で埋め込みを作成するために使用する Open AI の埋め込みモデルを使用することをカーネルに指示することです。また、この場合は Chroma DB となるメモリ ストアを使用することをカーネルに指示します。このメモリ ストアは永続的である必要があることもカーネルに指示していることに注意してください。


 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.")

ステップ2 – 埋め込みを作成する

この例では、ピザ ビジネス用に作成した SWOT 分析に関する質問に答えることができる RAG を作成しています。そのためには、SWOT 分析を取得してその埋め込みを取得し、最後の手順で作成した永続データストア内の「SWOT」というコレクションに対応する埋め込みを保存します。


 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")

ステップ3 – 質問をする

データの埋め込みが Chrome ベクター ストアに保存されたので、ピザ ビジネスに関連する質問をして、回答を得ることができます。


 #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())


これは、Semantic Kernel を使用して RAG を作成する方法を大幅に簡略化したものです。現在、LLM を使用して構築するフレームワークとして最も人気があるのは langchain であり、langchain を使用して RAG を構築する方法については以前に説明しました。ツールを構築する企業が増えるにつれて Langchain の人気が高まっていますが、今後はより洗練されたツールが登場し、Semantic Kernel には際立ったいくつかの特別な機能があることがわかりました。


100 Days of AI の 18 日目はこれで終わりです。


私は「Above Average」というニュースレターを執筆しており、大手テクノロジー企業で起きているあらゆる出来事の背後にある二次的な洞察について語っています。テクノロジー業界に携わっていて、平均的になりたくない方は、ぜひ購読してください


100 日間の AI に関する最新情報を入手するには、 TwitterLinkedIn 、またはHackerNoonで私をフォローするか、このページをブックマークしてください。技術関係の方は、ここにある私の技術専門家のコミュニティに参加することに興味があるかもしれません。