ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Llama3] Ollama와 Llama-Index로 Llama3 쉽게 시작하기(ubuntu)
    Data & ML & AI/LLM 2024. 6. 29. 15:59
    반응형

     

    1. 사전 세팅

    1) Ollama 준비

    # ollama 설치
    curl -fsSL https://ollama.com/install.sh | sh
    
    # ollama app 실행
    ollama serve

    이렇게 돌아가고 있다면 잘 작동하고 있는 것 입니다.

    # 정상 작동여부 확인 (새 터미널에서)
    ollama run llama3

    정상적으로 작동하는 모습을 볼 수 있습니다.

    • 모델을 처음 돌릴 때는 해당 모델 설치를 진행합니다.
    • 8B외, 타 모델을 돌리고 싶다면 ollama run llama3:70b와 같이 입력하면 됩니다.

    모델 및 명령어 확인: https://ollama.com/library/llama3

     

     

    2) llama-index 설치

    pip install llama-index

     

     

     

    2. Llama3 사용하기

    • Ollama app 실행상태(Ollama serve) 상태여야 합니다.

    1) 단순 1회성 대화

    from llama_index.llms.ollama import Ollama
    
    llm = Ollama(model="llama3:70b")  # 모델설정
    
    # 단순 1회성 대화
    response = llm.complete("안녕, 넌 누구니?")
    print(response.text)

    끗말잇기처럼 이어지는 대화는 따로 작업을 해줘야합니다.

     

    2) 단순 1회성 프롬프트 템플릿 설정 및 대화: PromptTemplate

    from llama_index.llms.ollama import Ollama
    from llama_index.core import PromptTemplate
    
    llm = Ollama(model="llama3:70b")  # 모델설정
    
    # template
    template = (
        "We have provided context information below. \n"
        "---------------------\n"
        "{context_str}"
        "\n---------------------\n"
        "Given this information, please answer the question: {query_str}\n"
        "Please answer Korean.\n"
    )
    qa_template = PromptTemplate(template)
    
    # context
    with open("context.txt","r",encoding='utf-8') as f:
        context = f.read()  # 위키백과 [세종대왕] 문서 텍스트로 테스트
    # question
    query = "세종대왕이 누구야?"
    
    # 단순 1회성 프롬프트 템플릿 설정 및 대화
    prompt = qa_template.format(context_str=context, query_str=query)
    response = llm.complete(prompt)
    print(response.text)

     

     

    3) 연속성 있는 프롬프트 설정 및 대화: ChatPromptTemplate

    from llama_index.llms.ollama import Ollama
    from llama_index.core.llms import ChatMessage, MessageRole
    from llama_index.core import ChatPromptTemplate
    
    llm = Ollama(model="llama3:70b")  # 모델설정
    
    messages = [
        ChatMessage(role=MessageRole.SYSTEM, content="당신은 한국어로만 말하는 친절한 어시스턴트 입니다."),
    ]
    
    
    # chat 함수
    def chat(messages, query):
        # messages copy
        dummy_messages = messages.copy()
    
        # 유저의 쿼리 -> message
        new_message = ChatMessage(role=MessageRole.USER, content="{query}")
        dummy_messages.append(new_message)
    
        # messages -> prompt template
        custom_chat_prompt = ChatPromptTemplate.from_messages(dummy_messages)
        formatted_prompt = custom_chat_prompt.format(query=query)
        
        # assistant 응답 결과
        response = llm.complete(prompt=formatted_prompt)
        print(response.text) 
        
        # 응답 결과 -> message
        response_message = ChatMessage(role=MessageRole.ASSISTANT, content=response.text)
        dummy_messages.append(response_message)
        
        return dummy_messages
    
    
    query = "안녕, 나랑 끝말잇기 하자"
    messages = chat(query)

    예의도 없고 끝말잇기도 못하지만 암튼 대화에 연속성이 생겼습니다.

     


    반응형

    댓글

Designed by Tistory.