지난 약 2주동안 그냥 계속 뭔가를 만들기만 했지 돌아보는 시간이 없었던거 같아서 며칠 동안은 배운 것을 끄적여 보는 시간을 가지려고 한다.
기존에 사용하던 ollama 를 사용했다.
from langchain_ollama import ChatOllama
from modules.environment.loadenv import setLoadDotEnv
# .env 파일에서 환경 변수를 로드
setLoadDotEnv()
# LLM
llm = ChatOllama(model="llama3.1:8b")
# LLM 실행
llm.invoke("하루는 몇시간이야?")
# 결과
content='하루 24시간이 있습니다.' additional_kwargs={} response_metadata={'model': 'llama3.1:8b', 'created_at': '2025-04-04T14:38:56.598274Z', 'done': True, 'done_reason': 'stop', 'total_duration': 4638442292, 'load_duration': 45476458, 'prompt_eval_count': 17, 'prompt_eval_duration': 3431177250, 'eval_count': 9, 'eval_duration': 1153758625, 'message': Message(role='assistant', content='', images=None, tool_calls=None)} id='run-ff9a7ab5-6e47-43e9-9933-a41800249b53-0' usage_metadata={'input_tokens': 17, 'output_tokens': 9, 'total_tokens': 26}
from langchain_ollama import ChatOllama
from modules.environment.loadenv import setLoadDotEnv
from langchain_core.prompts import ChatPromptTemplate
# .env 파일에서 환경 변수를 로드
setLoadDotEnv()
# LLM
llm = ChatOllama(model="llama3.1:8b")
# 프롬프트 템플릿 작성
# 사용자의 질문을 {input} 으로 전달받는다.
prompt = ChatPromptTemplate.from_template
("You are an expert in astronomy. Answer the question. <Question>: {input}")
# 프롬프트 객체 확인
# input_variables 가 input 이다. 프롬프트에서 지정한 변수명으로 받게 된다.
# input_variables=['input'] input_types={} partial_variables={} messages=[HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=['input'], input_types={}, partial_variables={}, template='You are an expert in astronomy. Answer the question. <Question>: {input}'), additional_kwargs={})]
# 체인 생성 (프롬프트와 LLM 을 연결한다)
chain = prompt | llm
# 체인 실행
# 프롬프트에 필요한 question을 파라미터로 넘기면 llm 이 받아서 말해준다.
# 프롬프트에 당신은 천문학 전문가라고 지시한 상태.
result = chain.invoke({"input": "하루는 몇시간이야?"})
content='하루는 지구가 일주를 하면서 태양을 circumnavigate 한 때 간격입니다. 지구의 자전 주기가 24 시간이기 때문에, 하루는 24시간이라고 할 수 있습니다.\n\n하루에 여러 시간대가 있습니다: 오전(AM), 오후(PM)으로 나누고 12시로 나눕니다. 그리고 각 시간대는 세부분으로 나뉘어 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 시로 나눕니다.\n\n그리고 반올림 기법을 사용하여, 각 시간대는 15분 간격으로 나누어 1, 2, 3, ..., 59, 0분으로 나뉘어집니다.'..........
from langchain_ollama import ChatOllama
from modules.environment.loadenv import setLoadDotEnv
from langchain_core.prompts import ChatPromptTemplate
# .env 파일에서 환경 변수를 로드
setLoadDotEnv()
# LLM
llm = ChatOllama(model="llama3.1:8b")
# 프롬프트 템플릿 작성
# 사용자의 질문을 {expert}, {question} 으로 전달받는다.
prompt = ChatPromptTemplate.from_template
("You are an expert in {expert}. Answer the question. <Question>: {question}")
# 체인 생성 (프롬프트와 LLM 을 연결한다)
chain = prompt | llm
# 체인 실행
# expert 에 전문가 그룹, question 에 질문을 넣으면 전문가 그룹에 걸맞는 대답을 받을 수 있다.
result = chain.invoke({"expert": "survival", "question" : "계란에 대해 설명해줘."})
content='계란! 그거는 살아남는 데 정말 중요한 재료 중 하나야.\n\n계란을 사용하는 방법은 여러 가지 있지만, 기본적으로는 다음과 같은 순서로 하자:\n\n1. 계란의 윗부분부터 깨트리기: 계란을 깨지 말고, 윗 부분부터 조금씩 깨트려서 열린다. 이게 중요해! 왜냐하면, 계란 속의 공기가 빠져나가야하는데, 그 전에 윗부분부터 깨어주면 쉽게 열린다.\n2. 계란의 흉부를 찾기: 계란을 깨트린 후, 계란의 중심을 향해 손바닥으로 만지면서 흉부(heart) 부분을 찾아라.'
OutputParser that paeses LLMResult into the top likely string
LLMResult를 가장 가능성이 높은 문자열로 분류 - OutputParser
from langchain_ollama import ChatOllama
from modules.environment.loadenv import setLoadDotEnv
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# .env 파일에서 환경 변수를 로드
setLoadDotEnv()
# LLM
llm = ChatOllama(model="llama3.1:8b")
# 프롬프트 템플릿 작성
prompt = ChatPromptTemplate.from_template("You are an expert in {expert}. Answer the question. <Question>: {question}")
# 문자열의 형태로 파싱
output_parser = StrOutputParser()
# 체인 생성 (프롬프트 > LLM > output_parser)
chain = prompt | llm | output_parser
# 체인 실행
result = chain.invoke({"expert": "survival", "question": "계란에 대해 설명해줘"})
print(result)
계란! 그것은 생존자에게 매우 중요한 음식 물질입니다.
계란은 단백질과 에너지가 풍부한 자연의 최고 재료 중 하나입니다. 그것은 쉽게 저장할 수 있고, 오랜 기간 동안 먹을 수 있기 때문에 생존자에게 매우 유용합니다.
계란을 잘 처리하고 보관하는 방법에 대해서는 아래와 같이 설명할 수 있습니다:
1. **계란을 깨지 않도록 주의**하세요. 이것은 간단한 일입니다. 계란을 다루다가 깨지면, 그 속의 에그훅(흰자)과 아포크라틴이 오염되어 먹기 곤란해집니다.
2. **계란을 냉장 보관**하세요. 계란은 холодиль 속에 넣는 것이 좋습니다. 이것으로 계란의 수명이 연장되고, 더 오래 동안 안전하게 저장할 수 있습니다.
3. **계란을 익히기 전에 깨끗하게** 씻어주세요. 이로써 오염물질이 없도록 합니다.
4. **계란을 익힐 때는 조심**하세요. 계란을 너무 많이 가열하면 맛과 영양소가 손실될 수 있으므로 조리할 때 주의하십시오.
계란은 다양한 방법으로 먹을 수 있습니다. 예를 들어, 그것을 삶아서 기름에 구워 먹거나, 샌드위치에 넣거나, 오믈렛처럼 연속된 계란과 다른 재료를 혼합한 요리를 만들 수도 있습니다.
그리고 마지막으로, 계란은 생존자에게 특히 유용합니다. 그것은 매우 가볍고, 에너지를 많이 가지고 있으며, 오랜 기간 동안 먹을 수 있기 때문에 wilderness에서 살아남는 데 도움이 됩니다.
앞으로 한동안 복습과 응용을 같이 할거 같다. 자료를 계속 모으면서 정리해 보겠다.
끗!