langchain 공부

langchain 퓨샷 프롬프트(prompt)

필만이 2024. 8. 4. 21:17

퓨샷 프롬프트(FewShotPromptTemplate)

  • 모델이 수행해야 하는 작업이 복잡하거나 구조화된 경우, 몇 가지 예제를 제공함으로써 모델이 그 패턴을 학습하고 더 정확하게 응답할 수 있도록 도움을 줌
  • 일반적인 NLP 태스크(번역, 텍스트 생성 등)에서 Few-Shot Learning을 적용하기 위해 사용
# 결과를 실시간 스트리밍 출력 하는법, langchain_teddynote 모듈 설치
from langchain_teddynote.messages import stream_response

# 질의내용
question = "문재인에 대해 알려줘"

# 질의
answer = llm.stream(question)
stream_response(answer)
문재인은 2017년부터 2022년까지 대한민국의 제19대 대통령을 지낸 정치인이다. 그는 민주평통, 새정치국민회의, 더불어민주당에서 활동한 경력을 가지고 있으며, 2017년 대선에서 승리하여 대통령직에 취임하였다.

문재인은 1953년 12월 24일 전라남도 해남군에서 태어났다. 그는 1975년에 서울대학교 법과대학을 졸업하고, 1980년대 초반부터 정치 활동을 시작했다. 그는 민주당의 당원으로 활동했으며, 1991년 국회 의원 선거에 출마하여 당선되었다.

문재인은 2004년 새정치국민회의 창당에 참여하였고, 2007년 대선에서 문희상과 함께 공동대표를 맡았다. 그는 2012년 대선에서 안철수와의 경쟁을 벌였지만, 패배하였다. 그러나 2017년 대선에서는 승리하여 대통령직에 취임하였다.

문재인은 대통령으로 재직할 때, 경제 성장과 사회 공정성, 교육 및 연구 개발, 환경 보호 등 다양한 정책들을 추진했다. 그는 또한 북한과의 관계 개선과 평화적 해결을 위해 노력했으며, 2018년 평창 동계 올림픽의 성공적인 개최를 위한 노력을 기울였다.

문재인은 2022년 5월 9일에 대통령직에서 물러나고, 더불어민주당 대표로 재직 중이다.
from langchain_core.prompts.few_shot import FewShotPromptTemplate
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser


examples = [
    {
        "question": "스티브 잡스와 아인슈타인 중 누가 더 오래 살았나요?",
        "answer": """이 질문에 추가 질문이 필요한가요: 예.
추가 질문: 스티브 잡스는 몇 살에 사망했나요?
중간 답변: 스티브 잡스는 56세에 사망했습니다.
추가 질문: 아인슈타인은 몇 살에 사망했나요?
중간 답변: 아인슈타인은 76세에 사망했습니다.
최종 답변은: 아인슈타인
""",
    },
    {
        "question": "네이버의 창립자는 언제 태어났나요?",
        "answer": """이 질문에 추가 질문이 필요한가요: 예.
추가 질문: 네이버의 창립자는 누구인가요?
중간 답변: 네이버는 이해진에 의해 창립되었습니다.
추가 질문: 이해진은 언제 태어났나요?
중간 답변: 이해진은 1967년 6월 22일에 태어났습니다.
최종 답변은: 1967년 6월 22일
""",
    },
    {
        "question": "율곡 이이의 어머니가 태어난 해의 통치하던 왕은 누구인가요?",
        "answer": """이 질문에 추가 질문이 필요한가요: 예.
추가 질문: 율곡 이이의 어머니는 누구인가요?
중간 답변: 율곡 이이의 어머니는 신사임당입니다.
추가 질문: 신사임당은 언제 태어났나요?
중간 답변: 신사임당은 1504년에 태어났습니다.
추가 질문: 1504년에 조선을 통치한 왕은 누구인가요?
중간 답변: 1504년에 조선을 통치한 왕은 연산군입니다.
최종 답변은: 연산군
""",
    },
    {
        "question": "올드보이와 기생충의 감독이 같은 나라 출신인가요?",
        "answer": """이 질문에 추가 질문이 필요한가요: 예.
추가 질문: 올드보이의 감독은 누구인가요?
중간 답변: 올드보이의 감독은 박찬욱입니다.
추가 질문: 박찬욱은 어느 나라 출신인가요?
중간 답변: 박찬욱은 대한민국 출신입니다.
추가 질문: 기생충의 감독은 누구인가요?
중간 답변: 기생충의 감독은 봉준호입니다.
추가 질문: 봉준호는 어느 나라 출신인가요?
중간 답변: 봉준호는 대한민국 출신입니다.
최종 답변은: 예
""",
    },
]

example_prompt = PromptTemplate.from_template(
    "Question:\n{question}\nAnswer:\n{answer}"
)

example_prompt.format(**examples[0])
'Question:\n스티브 잡스와 아인슈타인 중 누가 더 오래 살았나요?\nAnswer:\n이 질문에 추가 질문이 필요한가요: 예.\n추가 질문: 스티브 잡스는 몇 살에 사망했나요?\n중간 답변: 스티브 잡스는 56세에 사망했습니다.\n추가 질문: 아인슈타인은 몇 살에 사망했나요?\n중간 답변: 아인슈타인은 76세에 사망했습니다.\n최종 답변은: 아인슈타인\n'
prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="Question:\n{question}\nAnswer:",
    input_variables=["question"],
)

question = "Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?"
final_prompt = prompt.format(question=question)
final_prompt
'Question:\n스티브 잡스와 아인슈타인 중 누가 더 오래 살았나요?\nAnswer:\n이 질문에 추가 질문이 필요한가요: 예.\n추가 질문: 스티브 잡스는 몇 살에 사망했나요?\n중간 답변: 스티브 잡스는 56세에 사망했습니다.\n추가 질문: 아인슈타인은 몇 살에 사망했나요?\n중간 답변: 아인슈타인은 76세에 사망했습니다.\n최종 답변은: 아인슈타인\n\n\nQuestion:\n네이버의 창립자는 언제 태어났나요?\nAnswer:\n이 질문에 추가 질문이 필요한가요: 예.\n추가 질문: 네이버의 창립자는 누구인가요?\n중간 답변: 네이버는 이해진에 의해 창립되었습니다.\n추가 질문: 이해진은 언제 태어났나요?\n중간 답변: 이해진은 1967년 6월 22일에 태어났습니다.\n최종 답변은: 1967년 6월 22일\n\n\nQuestion:\n율곡 이이의 어머니가 태어난 해의 통치하던 왕은 누구인가요?\nAnswer:\n이 질문에 추가 질문이 필요한가요: 예.\n추가 질문: 율곡 이이의 어머니는 누구인가요?\n중간 답변: 율곡 이이의 어머니는 신사임당입니다.\n추가 질문: 신사임당은 언제 태어났나요?\n중간 답변: 신사임당은 1504년에 태어났습니다.\n추가 질문: 1504년에 조선을 통치한 왕은 누구인가요?\n중간 답변: 1504년에 조선을 통치한 왕은 연산군입니다.\n최종 답변은: 연산군\n\n\nQuestion:\n올드보이와 기생충의 감독이 같은 나라 출신인가요?\nAnswer:\n이 질문에 추가 질문이 필요한가요: 예.\n추가 질문: 올드보이의 감독은 누구인가요?\n중간 답변: 올드보이의 감독은 박찬욱입니다.\n추가 질문: 박찬욱은 어느 나라 출신인가요?\n중간 답변: 박찬욱은 대한민국 출신입니다.\n추가 질문: 기생충의 감독은 누구인가요?\n중간 답변: 기생충의 감독은 봉준호입니다.\n추가 질문: 봉준호는 어느 나라 출신인가요?\n중간 답변: 봉준호는 대한민국 출신입니다.\n최종 답변은: 예\n\n\nQuestion:\nGoogle이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?\nAnswer:'
# 결과 출력
answer = llm.stream(final_prompt)
stream_response(answer)
이 질문에 추가 질문이 필요한가요: 예.
추가 질문: Google이 창립된 연도는 언제인가요?
중간 답변: Google은 1998년에 창립되었습니다.
추가 질문: Bill Gates의 나이는 몇 살인가요? (1998년)
중간 답변: Bill Gates는 1998년 10월에 태어났습니다. 따라서, 1998년이 되면 0세입니다.
최종 답변은: 0
prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="Question:\n{question}\nAnswer:",
    input_variables=["question"],
)

# chain 생성
chain = prompt | llm | StrOutputParser()

# 결과 출력
answer = chain.stream(
    {"question": "Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?"}
)
stream_response(answer)
이 질문에 추가 질문이 필요한가요: 예.
추가 질문: Google이 창립된 연도는 언제인가요?
중간 답변: Google은 1998년에 창립되었습니다.
추가 질문: Bill Gates의 나이는 몇 살인가요? (1998년)
중간 답변: Bill Gates는 1998년 10월에 태어났습니다. 따라서, 1998년이 되면 0살입니다.
최종 답변은: 0

Example Selector

  • 예제가 많은 경우 프롬프트에 포함할 예제를 선택해야 할 수도 있다.
  • 여러 유형의 예시 중 유사성이 높은 예시를 선택
from langchain_core.example_selectors import (
    MaxMarginalRelevanceExampleSelector,
    SemanticSimilarityExampleSelector,
)

from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.embeddings import CacheBackedEmbeddings

embeddings = HuggingFaceEmbeddings(
            model_name='jhgan/ko-sroberta-nli',
            model_kwargs={'device': 'cpu'},
            encode_kwargs={'normalize_embeddings': True},
        )
vectorstore = Chroma.from_texts("example_selector", embeddings)

# Vector DB 생성 (저장소 이름, 임베딩 클래스)
chroma = Chroma("example_selector", embeddings)

example_selector = SemanticSimilarityExampleSelector.from_examples(
    # 여기에는 선택 가능한 예시 목록이 있습니다.
    examples,
    # 여기에는 의미적 유사성을 측정하는 데 사용되는 임베딩을 생성하는 임베딩 클래스가 있습니다.
    embeddings,
    # 여기에는 임베딩을 저장하고 유사성 검색을 수행하는 데 사용되는 VectorStore 클래스가 있습니다.
    vectorstore,
    # 이것은 생성할 예시의 수입니다.
    k=1,
)

# 입력과 가장 유사한 예시를 선택합니다.
selected_examples = example_selector.select_examples({"question": question})

question = "Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?"

# 입력에 가까운 예시의 질문을 추출
print(f"입력에 가장 유사한 예시:\n{question}\n")

# 그 질문의 내용들을 출력
for example in selected_examples:
    print(f'question:\n{example["question"]}')
    print(f'answer:\n{example["answer"]}')
c:\Users\weare\pro-ollama\pdf-rag\.venv\Lib\site-packages\tqdm\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm


입력에 가장 유사한 예시:
Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?

question:
네이버의 창립자는 언제 태어났나요?
answer:
이 질문에 추가 질문이 필요한가요: 예.
추가 질문: 네이버의 창립자는 누구인가요?
중간 답변: 네이버는 이해진에 의해 창립되었습니다.
추가 질문: 이해진은 언제 태어났나요?
중간 답변: 이해진은 1967년 6월 22일에 태어났습니다.
최종 답변은: 1967년 6월 22일
# 예시를 선정했으니, 질문을 삽입해서 프롬트를 전부 출력해봄

prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
    suffix="Question:\n{question}\nAnswer:",
    input_variables=["question"],
)

question = "Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?"
example_selector_prompt = prompt.format(question=question)
print(example_selector_prompt)
Question:
네이버의 창립자는 언제 태어났나요?
Answer:
이 질문에 추가 질문이 필요한가요: 예.
추가 질문: 네이버의 창립자는 누구인가요?
중간 답변: 네이버는 이해진에 의해 창립되었습니다.
추가 질문: 이해진은 언제 태어났나요?
중간 답변: 이해진은 1967년 6월 22일에 태어났습니다.
최종 답변은: 1967년 6월 22일


Question:
Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?
Answer:
# 체인 생성
chain = prompt | llm
chain
FewShotPromptTemplate(input_variables=['question'], example_selector=SemanticSimilarityExampleSelector(vectorstore=<langchain_community.vectorstores.chroma.Chroma object at 0x0000029FCAC7F010>, k=1, example_keys=None, input_keys=None, vectorstore_kwargs=None), example_prompt=PromptTemplate(input_variables=['answer', 'question'], template='Question:\n{question}\nAnswer:\n{answer}'), suffix='Question:\n{question}\nAnswer:')
| ChatOllama(model='llama3.1', temperature=0.0)
# 이제 체인을 다 만들었으니 결과를 출력 해보자
answer = chain.stream(
    {"question": "Google이 창립된 연도에 Bill Gates의 나이는 몇 살인가요?"}
)
stream_response(answer)
Bill Gates가 Google을 창립한 것은 아닙니다. Google의 창립자는 Larry Page와 Sergey Brin입니다.

Bill Gates는 Microsoft를 창립했습니다.

Bill Gates는 1955년 10월 28일에 태어났습니다.

Google이 창립된 연도는 1998년입니다.

1998년 Bill Gates의 나이는 43살입니다.

FewShotChatMessagePromptTemplate

  • FewShotPromptTemplate는 일반적인 NLP 태스크(번역, 텍스트 생성 등)에서 Few-Shot Learning을 적용하기 위해 사용
  • FewShotChatMessagePromptTemplate는 대화형 AI 모델(챗봇 등)에서 Few-Shot Learning을 적용하기 위해 사용
examples = [
    {
        "instruction": "당신은 회의록 작성 전문가 입니다. 주어진 정보를 바탕으로 회의록을 작성해 주세요",
        "input": "2023년 12월 25일, XYZ 회사의 마케팅 전략 회의가 오후 3시에 시작되었다. 회의에는 마케팅 팀장인 김수진, 디지털 마케팅 담당자인 박지민, 소셜 미디어 관리자인 이준호가 참석했다. 회의의 주요 목적은 2024년 상반기 마케팅 전략을 수립하고, 새로운 소셜 미디어 캠페인에 대한 아이디어를 논의하는 것이었다. 팀장인 김수진은 최근 시장 동향에 대한 간략한 개요를 제공했으며, 이어서 각 팀원이 자신의 분야에서의 전략적 아이디어를 발표했다.",
        "answer": """
        회의록: XYZ 회사 마케팅 전략 회의
        일시: 2023년 12월 25일
        장소: XYZ 회사 회의실
        참석자: 김수진 (마케팅 팀장), 박지민 (디지털 마케팅 담당자), 이준호 (소셜 미디어 관리자)

        1. 개회
        - 회의는 김수진 팀장의 개회사로 시작됨.
        - 회의의 목적은 2024년 상반기 마케팅 전략 수립 및 새로운 소셜 미디어 캠페인 아이디어 논의.

        2. 시장 동향 개요 (김수진)
        - 김수진 팀장은 최근 시장 동향에 대한 분석을 제시.
        - 소비자 행동 변화와 경쟁사 전략에 대한 통찰 공유.

        3. 디지털 마케팅 전략 (박지민)
        - 박지민은 디지털 마케팅 전략에 대해 발표.
        - 온라인 광고와 SEO 최적화 방안에 중점을 둠.

        4. 소셜 미디어 캠페인 (이준호)
        - 이준호는 새로운 소셜 미디어 캠페인에 대한 아이디어를 제안.
        - 인플루언서 마케팅과 콘텐츠 전략에 대한 계획을 설명함.

        5. 종합 논의
        - 팀원들 간의 아이디어 공유 및 토론.
        - 각 전략에 대한 예산 및 자원 배분에 대해 논의.

        6. 마무리
        - 다음 회의 날짜 및 시간 확정.
        - 회의록 정리 및 배포는 박지민 담당.
        """,
    },
    {
        "instruction": "당신은 요약 전문가 입니다. 다음 주어진 정보를 바탕으로 내용을 요약해 주세요",
        "input": "이 문서는 '지속 가능한 도시 개발을 위한 전략'에 대한 20페이지 분량의 보고서입니다. 보고서는 지속 가능한 도시 개발의 중요성, 현재 도시화의 문제점, 그리고 도시 개발을 지속 가능하게 만들기 위한 다양한 전략을 포괄적으로 다루고 있습니다. 이 보고서는 또한 성공적인 지속 가능한 도시 개발 사례를 여러 국가에서 소개하고, 이러한 사례들을 통해 얻은 교훈을 요약하고 있습니다.",
        "answer": """
문서 요약: 지속 가능한 도시 개발을 위한 전략 보고서

- 중요성: 지속 가능한 도시 개발이 필수적인 이유와 그에 따른 사회적, 경제적, 환경적 이익을 강조.
- 현 문제점: 현재의 도시화 과정에서 발생하는 주요 문제점들, 예를 들어 환경 오염, 자원 고갈, 불평등 증가 등을 분석.
- 전략: 지속 가능한 도시 개발을 달성하기 위한 다양한 전략 제시. 이에는 친환경 건축, 대중교통 개선, 에너지 효율성 증대, 지역사회 참여 강화 등이 포함됨.
- 사례 연구: 전 세계 여러 도시의 성공적인 지속 가능한 개발 사례를 소개. 예를 들어, 덴마크의 코펜하겐, 일본의 요코하마 등의 사례를 통해 실현 가능한 전략들을 설명.
- 교훈: 이러한 사례들에서 얻은 주요 교훈을 요약. 강조된 교훈에는 다각적 접근의 중요성, 지역사회와의 협력, 장기적 계획의 필요성 등이 포함됨.

이 보고서는 지속 가능한 도시 개발이 어떻게 현실적이고 효과적인 형태로 이루어질 수 있는지에 대한 심도 있는 분석을 제공합니다.
""",
    },
    {
        "instruction": "당신은 문장 교정 전문가 입니다. 다음 주어진 문장을 교정해 주세요",
        "input": "우리 회사는 새로운 마케팅 전략을 도입하려고 한다. 이를 통해 고객과의 소통이 더 효과적이 될 것이다.",
        "answer": "본 회사는 새로운 마케팅 전략을 도입함으로써, 고객과의 소통을 보다 효과적으로 개선할 수 있을 것으로 기대된다.",
    },
]

from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
from langchain_core.example_selectors import (
    SemanticSimilarityExampleSelector,
)
from langchain_community.vectorstores import Chroma


embeddings = HuggingFaceEmbeddings(
            model_name='jhgan/ko-sroberta-nli',
            model_kwargs={'device': 'cuda'},
            encode_kwargs={'normalize_embeddings': True},
        )
vectorstore = Chroma.from_texts("example_selector", embeddings)

# Vector DB 생성 (저장소 이름, 임베딩 클래스)
chroma = Chroma("example_selector", embeddings)



example_prompt = ChatPromptTemplate.from_messages(
    [
        ("human", "{instruction}:\n{input}"),
        ("ai", "{answer}"),
    ]
)

example_selector = SemanticSimilarityExampleSelector.from_examples(
    # 여기에는 선택 가능한 예시 목록이 있습니다.
    examples,
    # 여기에는 의미적 유사성을 측정하는 데 사용되는 임베딩을 생성하는 임베딩 클래스가 있습니다.
    embeddings,
    # 여기에는 임베딩을 저장하고 유사성 검색을 수행하는 데 사용되는 VectorStore 클래스가 있습니다.
    vectorstore,
    # 이것은 생성할 예시의 수입니다.
    k=1,
)

few_shot_prompt = FewShotChatMessagePromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
)
# 질문 작성
question = {
    "instruction": "회의록을 작성해 주세요",
    "input": "2023년 12월 26일, ABC 기술 회사의 제품 개발 팀은 새로운 모바일 애플리케이션 프로젝트에 대한 주간 진행 상황 회의를 가졌다. 이 회의에는 프로젝트 매니저인 최현수, 주요 개발자인 황지연, UI/UX 디자이너인 김태영이 참석했다. 회의의 주요 목적은 프로젝트의 현재 진행 상황을 검토하고, 다가오는 마일스톤에 대한 계획을 수립하는 것이었다. 각 팀원은 자신의 작업 영역에 대한 업데이트를 제공했고, 팀은 다음 주까지의 목표를 설정했다.",
}

# 질문과 유사한 예제 선택
example_selector.select_examples(question)
[{'answer': '\n회의록: XYZ 회사 마케팅 전략 회의\n일시: 2023년 12월 25일\n장소: XYZ 회사 회의실\n참석자: 김수진 (마케팅 팀장), 박지민 (디지털 마케팅 담당자), 이준호 (소셜 미디어 관리자)\n\n1. 개회\n   - 회의는 김수진 팀장의 개회사로 시작됨.\n   - 회의의 목적은 2024년 상반기 마케팅 전략 수립 및 새로운 소셜 미디어 캠페인 아이디어 논의.\n\n2. 시장 동향 개요 (김수진)\n   - 김수진 팀장은 최근 시장 동향에 대한 분석을 제시.\n   - 소비자 행동 변화와 경쟁사 전략에 대한 통찰 공유.\n\n3. 디지털 마케팅 전략 (박지민)\n   - 박지민은 디지털 마케팅 전략에 대해 발표.\n   - 온라인 광고와 SEO 최적화 방안에 중점을 둠.\n\n4. 소셜 미디어 캠페인 (이준호)\n   - 이준호는 새로운 소셜 미디어 캠페인에 대한 아이디어를 제안.\n   - 인플루언서 마케팅과 콘텐츠 전략에 대한 계획을 설명함.\n\n5. 종합 논의\n   - 팀원들 간의 아이디어 공유 및 토론.\n   - 각 전략에 대한 예산 및 자원 배분에 대해 논의.\n\n6. 마무리\n   - 다음 회의 날짜 및 시간 확정.\n   - 회의록 정리 및 배포는 박지민 담당.\n',
  'input': '2023년 12월 25일, XYZ 회사의 마케팅 전략 회의가 오후 3시에 시작되었다. 회의에는 마케팅 팀장인 김수진, 디지털 마케팅 담당자인 박지민, 소셜 미디어 관리자인 이준호가 참석했다. 회의의 주요 목적은 2024년 상반기 마케팅 전략을 수립하고, 새로운 소셜 미디어 캠페인에 대한 아이디어를 논의하는 것이었다. 팀장인 김수진은 최근 시장 동향에 대한 간략한 개요를 제공했으며, 이어서 각 팀원이 자신의 분야에서의 전략적 아이디어를 발표했다.',
  'instruction': '당신은 회의록 작성 전문가 입니다. 주어진 정보를 바탕으로 회의록을 작성해 주세요'}]

final_prompt = ChatPromptTemplate.from_messages(
    [
        # 모델에게 주어진 역할이나 태스크를 명시적으로 지시
        (
            "system",
            "You are a helpful assistant.",
        ),
        # 적절한 예시 선택기
        few_shot_prompt,
        # 대화의 주체가 인간 사용자인 경우를 나타냅니다. 이는 모델이 응답을 생성할 때 해당 발화가 
        # 사용자로부터 온 것임을 명확히 알 수 있게 함. "ai" 또는 "assistant"라면 모델의 응답을 나타냄. 
        # 이것으로 인해 모델이 생성한 응답임을 명확히 구분할수 있다.
        ("human", "{instruction}\n{input}"),
    ]
)

# chain 생성
chain = final_prompt | llm

# 실행 및 결과 출력
answer = chain.stream(question)
stream_response(answer)
회의록: ABC 기술 회사의 제품 개발 팀 주간 진행 상황 회의
일시: 2023년 12월 26일
장소: ABC 기술 회사 회의실
참석자: 최현수 (프로젝트 매니저), 황지연 (주요 개발자), 김태영 (UI/UX 디자이너)

1. 개회
   - 회의는 최현수 프로젝트 매니저의 개회사로 시작됨.
   - 회의의 목적은 새로운 모바일 애플리케이션 프로젝트의 현재 진행 상황을 검토하고, 다가오는 마일스톤에 대한 계획 수립.

2. 프로젝트 진행 상황 (최현수)
   - 최현수는 프로젝트의 현재 진행 상황에 대해 보고.
   - 개발 단계, 테스트 단계 및 출시 준비에 대한 업데이트를 공유.

3. 개발 업데이트 (황지연)
   - 황지연은 개발 작업에 대한 업데이트를 제공.
   - 주요 기능 구현과 버그 수정에 대한 진행 상황을 설명.

4. UI/UX 디자인 업데이트 (김태영)
   - 김태영은 UI/UX 디자인 작업에 대한 업데이트를 공유.
   - 사용자 경험 향상과 인터페이스 디자인에 대한 계획을 설명.

5. 다음 주 목표 설정
   - 팀원들 간의 토론 및 협의 후, 다음 주까지의 목표를 설정.
   - 주요 개발 완료, UI/UX 디자인 최종화, 테스트 준비 등에 중점을 둠.

6. 마무리
   - 다음 회의 날짜 및 시간 확정.
   - 회의록 정리 및 배포는 황지연 담당.
   - 팀원들 간의 협력과 의사소통을 강조.

Example Selector 의 유사도 검색 문제 해결

  • 기존의 Example Selector는 유사도 계산 시 주로 instruction만을 사용합니다. 이로 인해 적절한 예제를 선택하지 못하는 문제가 발생할 수 있습니다.
  • instruction뿐만 아니라 input도 함께 사용하여 유사도를 계산합니다. 이 접근 방식을 통해 더 정확한 예제 선택이 가능