안녕 모두들!
검색 증강 생성(RAG)은 다양한 LLM을 사용하여 개발되는 가장 일반적인 응용 프로그램 중 하나입니다. 우리는 이전에 langchain을 사용하여 RAG를 개발하는 방법을 살펴보았습니다. 이 게시물에서는 Microsoft의 Semantic Kernel을 사용하여 RAG를 생성합니다.
따라가려면 Open AI API가 필요합니다.
첫 번째 단계는 시맨틱 커널을 초기화하고 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.")
이 예에서는 피자 사업을 위해 만든 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")
이제 크롬 벡터 저장소에 데이터 임베딩이 저장되었으므로 피자 사업과 관련된 질문을 하고 답변을 얻을 수 있습니다.
#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에는 이를 눈에 띄게 만드는 몇 가지 특별한 기능이 있다는 것을 발견했습니다.
이것이 AI 100일 중 18일차입니다.
나는 대형 기술 분야에서 일어나는 모든 일 뒤에 숨어 있는 2차 통찰력에 대해 이야기하는 Above Average라는 뉴스레터를 작성합니다. 기술 분야에 종사하고 평범해지고 싶지 않다면 구독하세요 .
Twitter , LinkedIn 또는 HackerNoon 에서 나를 팔로우하여 100일 AI에 대한 최신 업데이트를 확인하거나 이 페이지를 북마크에 추가하세요 . 기술 분야에 종사하는 분이라면 여기에서 제 기술 전문가 커뮤니티에 가입하는 데 관심이 있으실 것입니다.