시스템 안내

이 문서에서는 시스템 안내 정의와 효과적인 시스템 안내를 작성하기 위한 권장사항을 설명합니다. 시스템 안내를 프롬프트에 추가하는 방법은 대신 시스템 안내 사용을 참조하세요.

시스템 안내는 모델에서 프롬프트를 처리하기 전에 처리하는 안내 모음입니다. 시스템 안내를 사용하여 모델의 동작 방식과 프롬프트에 응답하는 방식을 지정하는 것이 좋습니다. 예를 들어 적용할 페르소나, 문맥에 맞는 정보, 형식 지정 안내 등을 포함할 수 있습니다.

시스템 안내는 최종 사용자가 보거나 변경할 수 없는 정보를 모델에 제공하려는 경우에 특히 유용합니다. 이를 통해 모델에게 태스크를 이해하도록 추가 컨텍스트를 제공하고 더욱 맞춤설정된 응답을 제공하며 모델과의 전체 사용자 상호작용에 대한 특정 가이드라인을 준수할 수 있습니다. 또한 시스템 안내는 같은 안내 세트를 사용하여 프롬프트 여러 개를 실행하려는 경우에 유용합니다.

시스템 안내가 설정되면 전체 요청에 적용됩니다. 시스템 안내는 프롬프트에 포함되면 여러 사용자와 모델 차례에서 작동합니다. 시스템 안내는 프롬프트 콘텐츠와 별개이지만 여전히 전체 프롬프트의 일부이므로 표준 데이터 사용 정책이 적용됩니다.

지원되는 모델

다음 모델에서는 시스템 안내를 지원합니다.

  • 모든 Gemini 1.5 Pro 모델 버전
  • 모든 Gemini 1.5 Flash 모델 버전
  • Gemini 1.0 Pro 버전 gemini-1.0-pro-002

사용 사례

일반적으로 시스템 안내를 사용하여 다음 중 하나 이상을 수행하는 것이 좋습니다.

  • 페르소나 또는 역할 정의
  • 출력 형식 정의
  • 출력 스타일 및 어조 정의
  • 태스크 목표 또는 규칙 정의
  • 프롬프트에 대한 추가 컨텍스트 제공

페르소나 또는 역할

시스템 안내에서 페르소나나 역할을 정의하여 모델이 프롬프트에 응답하는 방식에 영향을 줄 수 있습니다.

예를 들어 학생들에게 논문 작성 방법을 가르치는 데 도움이 되도록 모델을 사용하려고 한다고 가정해 보겠습니다. 다음 역할을 정의할 때 모델 응답 차이를 비교합니다.

  • 대학생에게 특정 주제에 대한 논문을 작성하는 방법을 가르치는 봇입니다.
  • 초등학생에게 특정 주제에 대한 논문을 안내하는 방법을 지원하는 봇입니다.
시스템 안내 대학생용 봇 초등학생용 봇
특정 주제에 대한 논문을 작성하는 방법을 대학생에게 가르치는 봇입니다. 특정 주제에 대한 논문을 작성하는 방법을 초등학생에게 안내하는 봇입니다.
프롬프트 제목: 광합성 제목: 광합성
응답

광합성 관련 논문 작성: 대학생을 위한 가이드

광합성은 지구 생명의 기반을 형성하는 흥미롭고 복잡한 과정입니다. 이 주제에 대한 논문을 작성하면 복잡한 내용을 심층적으로 파악하고 그 중요성을 이해하는 등 보람찬 경험을 할 수 있습니다. 이 태스크를 수행하는 방법은 다음과 같습니다.

  1. 집중할 내용 선택:
    • 다양한 개요: 광합성의 단계, 요구사항, 부산물, 생태계에서의 역할을 다루는 포괄적인 광합성 개요를 제공할 수 있습니다.
    • 구체적인 측면: 다음과 같이 광합성의 특정 측면을 선택하여 자세히 살펴봅니다.
      • 광합성에서 빛의 역할
      • 다양한 유형의 광합성(C3, C4, CAM)
      • 환경 요인이 광합성에 미치는 영향
      • 광합성의 진화
      • 생명공학에서 광합성 응용
    • 비교 연구: 다양한 생물(식물, 조류, 박테리아)의 서로 다른 광합성 측면을 비교하고 대조합니다.
  2. 조사 및 정보 수집:
    • 신뢰할 수 있는 출처: 학술지, 신뢰할 수 있는 온라인 출처, 교과서를 사용합니다. Wikipedia 또는 일반 웹사이트에만 의존하지 마세요.
    • 키워드 검색: '광합성', '엽록체', '엽록소', '명반응', '캘빈 회로'과 같은 키워드를 사용합니다.
    • 메모 작성: 출처를 적절하게 인용하면서 철저하게 메모를 작성하고 핵심 사항을 요약하여 조사를 정리합니다.
  3. 논문 개요 및 구조:
    • 소개:
      • 광합성과 그 중요성을 간략하게 소개합니다.
      • 논문의 주요 주장을 명확하게 요약하여 논지를 명시합니다.
    • 본문 단락:
      • 조사에서 얻은 증거를 사용하여 논리적인 순서로 요점을 전개합니다.
      • 제목과 부제목을 사용하여 논문을 구성하고 읽기 쉽게 작성합니다.
      • 단락마다 아이디어 하나에 초점을 맞추고 이를 뒷받침하는 증거를 제공해야 합니다.
    • 결론:
      • 주요 요점을 요약하고 논지를 다시 언급합니다.
      • 조사 결과의 영향을 논의하고 향후 연구 방향을 제안합니다.
  4. 작성과 편집:
    • 명확하고 간결한 표현: 필요한 경우가 아니라면 전문 용어를 피하고 명확하고 간결한 표현을 사용합니다.
    • 증거 기반 주장: 연구에서 얻은 증거를 바탕으로 주장을 뒷받침합니다.
    • 올바른 인용: 논문 전반에서 일관된 인용 스타일(MLA, APA, 시카고)을 사용합니다.
    • 교정 및 수정: 문법, 맞춤법, 구두점 오류가 있는지 논문을 꼼꼼하게 교정하고 수정합니다.
  5. 기타 팁:
    • 시각 자료: 다이어그램, 그래프 또는 차트를 사용하여 복잡한 개념을 설명합니다.
    • 사례 연구: 해당하는 경우 실제 광합성 적용 분야를 보여주는 관련 우수 사례를 포함합니다.
    • 개인적인 연결: 주제를 내 관심분야나 경험과 연결하는 방법을 찾습니다.

논문 제목 예시:

  • 광합성에서의 빛 강도 역할: 비교 연구
  • 광합성의 진화: 초기 생명체에서 현대 식물로
  • 광합성 활용: 생명공학의 잠재력
  • 기후 변화가 광합성에 미치는 영향: 전 세계적 관점

참고: 잘 작성된 광합성 논문은 명확하고 유익하며 흥미로워야 합니다. 이러한 단계를 수행하고 탄탄한 연구 기반을 활용하면 이 필수적인 생물학적 과정에 대한 이해를 보여주는 훌륭한 논문을 작성할 수 있습니다.

좋은 주제입니다. 광합성은 지구의 생명체에 매우 중요합니다. 다음은 이 주제에 대한 논문을 작성하는 방법입니다.

  1. 이미 알고 있는 것을 생각해 보세요.
    • 광합성이 무엇인가요?
    • 식물이 광합성을 하려면 무엇이 필요한가요?
    • 식물은 광합성 중에 무엇을 만드나요?
    • 광합성에 대한 재미있는 사실을 알고 있나요?
  2. 연구 및 자세히 알아보기:
    • 책: 도서관에서 식물, 자연 또는 과학에 대한 도서를 찾습니다.
    • 웹사이트: 광합성을 간단하게 설명하는 어린이용 웹사이트를 찾습니다. National Geographic 또는 NASA의 웹사이트와 같이 신뢰할 수 있는 웹사이트인지 확인합니다.
    • 어른에게 물어보기: 선생님, 부모님 또는 사서에게 정보를 찾는 데 도움을 요청하세요.
  3. 생각 정리하기:
    • 제목: '놀라운 광합성 과정' 또는 '식물이 스스로 음식을 만드는 방법'과 같이 눈길을 사로잡는 논문 제목을 생각합니다.
    • 서론: 독자의 관심을 끄는 문장으로 시작합니다. 광합성이 무엇인지 간단하게 설명합니다.
    • 본문: 논문을 단락으로 나눕니다. 각 단락은 다음과 같이 광합성에 대한 주요 개념 하나를 집중적으로 설명해야 합니다.
      • 식물에 필요한 것: 햇빛, 물, 이산화탄소
      • 식물이 만드는 물질: 당(식품용) 및 산소
      • 광합성이 중요한 이유: 광합성은 인간과 동물에게 식량을 제공하고 공기를 정화합니다.
    • 결론: 광합성에 대해 학습한 내용을 요약합니다. 좋아하는 사실이나 질문을 공유할 수도 있습니다.
  4. 논문 작성:
    • 명확하고 간단한 표현을 사용합니다.
    • 설명을 돕기 위해 사진이나 그림을 사용하는 것이 좋습니다.
    • 논문에 맞춤법 및 문법 오류가 있는지 확인합니다.
  5. 자신만의 논문을 작성합니다.
    • 논문에 자신만의 스타일을 추가합니다.
    • 식물에 대한 경험이나 관찰을 공유합니다.
    • 광합성 작동 방식을 보여주는 다이어그램을 그립니다.

참고: 작성자가 작성한 논문의 전문가입니다. 광합성에 대해 재미있게 학습하고 작성합니다.

출력 형식

시스템 안내에서 마크다운 또는 JSON과 같은 출력 형식을 정의하여 모델이 응답 형식을 지정하는 방식에 영향을 줄 수 있습니다.

예를 들어 모델을 사용하여 비즈니스에 대한 고객 리뷰를 요약하려고 한다고 가정해 보겠습니다. 다음 출력 형식을 정의할 때 모델 응답 차이를 비교합니다.

  • 응답을 JSON으로 출력합니다. 마지막으로 JSON 객체 외부에 비즈니스 개선 방법에 대한 조언을 3~5개 문장으로 작성합니다.
  • 형식 지정 요구사항은 없습니다.
시스템 안내 JSON 형식 지정 요구사항 없음

고급 비즈니스 PR 전문가입니다. 이 안내를 따르고 제공된 사용자 입력에 대한 응답을 기반으로 사용합니다.

안내:

  • 제출된 리뷰를 읽습니다.
  • 리뷰를 바탕으로 비즈니스 장단점을 요약합니다.
  • 응답을 JSON으로 출력합니다.
  • 마지막으로 JSON 객체 외부에 비즈니스 개선 방법에 대한 조언을 3~5개 문장으로 작성합니다.
  • 간결해야 합니다.
  • 사실에 집중합니다.
  • 허위 정보를 생성하지 않습니다.
  • 상반된 의견이 있으면 가장 많이 기록된 의견만 포함합니다.
  • 관련 없는 정보를 포함하지 않습니다.
  • 리뷰 작성자 이름을 언급하지 않습니다.

고급 비즈니스 PR 전문가입니다. 이 안내를 따르고 제공된 사용자 입력에 대한 응답을 기반으로 사용합니다.

안내:

  • 제출된 리뷰를 읽습니다.
  • 리뷰를 바탕으로 비즈니스 장단점을 요약합니다.
  • 간결해야 합니다.
  • 사실에 집중합니다.
  • 허위 정보를 생성하지 않습니다.
  • 상반된 의견이 있으면 가장 많이 기록된 의견만 포함합니다.
  • 관련 없는 정보를 포함하지 않습니다.
  • 리뷰 작성자 이름을 언급하지 않습니다.
프롬프트

채드 브로커: 별 4개

스파가 너무 좋았습니다. 들어서자마자 전체적인 분위기가 편안함을 줍니다. 마치 무아지경 상태에 있는 것 같습니다. 어떠한 것도 걱정할 필요가 없습니다. 직원이 일정을 확인하고 체험을 안내합니다. 서비스가 모두 훌륭했습니다. 마사지, 얼굴 관리, 진흙 목욕. 또한 휴대전화 사용이 금지되어 있어 완전히 다른 세상에 있는 것과 같은 느낌을 줍니다. 하지만 가격이 좀 비쌉니다.

전체 프롬프트 보기

리사 시먼스: 별 5개

즐거운 시간이었습니다. 생일을 기념하여 제 친구와 함께 스파 데이를 즐겼습니다. 제가 말씀드리면 우리의 삶이 달라집니다. 직원들은 최고의 경험을 제공하기 위해 최선을 다하고 있습니다. 질문부터 고품질 서비스, 약속 시간에 맞춰 도착할 수 있도록 지원에 이르기까지 정말 최고의 지원을 제공해 주었습니다. 잠시만 기다려 주세요. 추신: 전신 각질 제거 트리트먼트를 받으세요.

앨리 우드: 별 2개

직원들의 고객 서비스는 훌륭했지만 마사지가 아팠고 얼굴 관리를 받은 후 화상을 입었습니다. 게다가 휴대전화를 사용할 수 없어 스트레스가 더 쌓였습니다. 분위기는 조용하고 차분했지만 휴대전화를 가져가지 않아 휴식을 취할 수 없었습니다. 게다가 비쌌습니다.

수지 마이클스: 별 3개

이 공간의 환경은 정말 환상적이었습니다. 마치 천국에 온 것 같았습니다. 지금까지 경험한 서비스 중 최고였습니다. 하지만 어떠한 종류의 다과도 제공하지 않았습니다. 최소한 물 정도는 제공해야 하는 거 아닌가요?

마틴 웡: 별 4개

놀라운 경험이었습니다. 유일한 불만사항은 휴대전화를 확인할 수 없다는 점입니다.

데비 루이즈: 별 5개

멋진 환경. 훌륭한 직원. 훌륭한 서비스. 또한 휴대전화 사용이 금지되어 있어 자유로우면서도 평화로운 분위기를 느낄 수 있었습니다. 모두에게 추천하고 싶습니다.

루시 맨텔: 별 1개

다과가 제공되지 않습니다. 휴대전화를 사용할 수 없습니다. 마사지가 나쁩니다. 만족스러운 경험이 아닙니다. 권장하고 싶지 않습니다.

응답
    {
      ""pros"": [
        ""relaxing atmosphere"",
        ""attentive and efficient staff"",
        ""high-quality services""
      ],
      ""cons"": [
        ""pricey"",
        ""no cell phone policy"",
        ""no refreshments""
      ]
    }
    

스파는 조용한 분위기, 우수한 직원, 최고의 서비스로 찬사를 받았지만 개선해야 할 부분도 있습니다. 엄격한 휴대전화 사용 금지 정책과 다과 부족에 대한 고객의 우려사항을 해결하면 전반적인 경험을 크게 향상시킬 수 있습니다. 필요한 경우 고객이 휴대전화를 사용할 수 있도록 지정된 공간을 제공하고 무료 생수 또는 일부 음료를 제공하는 것이 좋습니다.

장점: 스파는 고품질 서비스와 함께 조용하고 편안한 분위기를 제공합니다. 고객들은 직원들이 제공하는 탁월한 고객 서비스를 칭찬합니다.

단점: 스파의 휴대전화 사용 금지 정책은 논란의 여지가 있습니다. 휴식을 취하는 데 필요하다는 의견과 스트레스를 준다는 의견이 있습니다. 몇몇 리뷰어는 가격이 비싸다고 지적했습니다.

스타일 및 어조

시스템 안내에서 세부정보 수준, 높임말 정도, 대상 읽기 수준과 같은 출력 스타일과 어조를 정의하여 모델 응답에 영향을 줄 수 있습니다.

예를 들어 모델을 사용하여 정부 이니셔티브에 대한 제안서를 작성하려고 한다고 가정해 보겠습니다. 다음 어조를 정의할 때 모델 응답 차이를 비교합니다.

  • 전문가
  • 캐주얼
시스템 안내 전문가 캐주얼

정부 제안서 작성자입니다. 향후 캠페인에 대한 제안서를 작성해야 합니다. 템플릿과 사용자 입력을 바탕으로 예정된 캠페인에 대한 제안서를 작성합니다.

  • 인터넷을 사용하지 않습니다.
  • 각 섹션의 답변은 문장 2개 이하로 유지되어야 합니다.
  • 전문적인 어조로 작성합니다.
  • 마크다운 형식으로 답변을 제공합니다.

제안서 템플릿:

  • 기본 개요:
  • 문제점
  • 해결 방법
  • 타겟 잠재고객
  • 주요 메시지
  • 채널
  • 콘텐츠 하이라이트
  • 예상 결과
  • Google을 선택해야 하는 이유
  • 클릭 유도 문구

정부 제안서 작성자입니다. 향후 캠페인에 대한 제안서를 작성해야 합니다. 템플릿과 사용자 입력을 바탕으로 예정된 캠페인에 대한 제안서를 작성합니다.

  • 인터넷을 사용하지 않습니다.
  • 각 섹션의 답변은 문장 2개 이하로 유지되어야 합니다.
  • 비격식체로 작성합니다.
  • 마크다운 형식으로 답변을 제공합니다.

제안서 템플릿:

  • 기본 개요:
  • 문제점
  • 해결 방법
  • 타겟 잠재고객
  • 주요 메시지
  • 채널
  • 콘텐츠 하이라이트
  • 예상 결과
  • Google을 선택해야 하는 이유
  • 클릭 유도 문구
프롬프트

이 캠페인의 목적은 대화형 디지털 환경 사용을 통해 지속 가능성에 대한 인식을 높이고 실천 가능한 행동 변화를 유도하는 것입니다. Facebook 및 X에서 교육 콘텐츠를 제공하고 커뮤니티 주도 이벤트를 주최하여 환경에 관심이 있는 학생, 전문가, 가족 등 20~45세의 개인을 참여시킬 것입니다. 목표는 대중의 인식을 개선하고 친환경적인 행동을 측정 가능한 개선사항으로 발전시키는 것입니다. 디지털 마케팅에 대한 전문 지식과 지속 가능성에 대한 강한 관심을 바탕으로 개인이 일상에서 의미 있고 지속 가능한 변화를 만드는 데 효과적인 캠페인을 설계하겠습니다. 이 캠페인에서는 다양하고 흥미로우면서 유용한 콘텐츠를 제작하고 싶습니다.

응답

기본 개요: 20~45세의 개인이 대화형 디지털 환경과 커뮤니티 참여를 통해 지속 가능한 삶을 받아들이도록 지원합니다.

문제점: 많은 사람들이 환경 지속 가능성을 높이기 위해 일상적으로 할 수 있는 실용적인 행동을 인식하지 못합니다.

해결 방법: Facebook 및 X를 활용한 멀티플랫폼 캠페인을 통해 흥미롭고 교육적인 콘텐츠를 제공하고 대화형 환경과 이벤트를 통해 커뮤니티 참여를 유도합니다.

타겟층: 20~45세의 환경에 관심이 있는 학생, 직장인, 가족과 같은 개인

주요 메시지: 일상의 습관을 조금만 바꿔도 환경에 상당히 긍정적인 영향을 미칠 수 있습니다.

채널: Facebook 및 X

콘텐츠 하이라이트: 대화형 퀴즈, 교육 동영상, 전문가 Q&A 세션, 지속 가능한 실천을 장려하는 커뮤니티 챌린지

예상 결과: 지속 가능한 생활 실천에 대한 인지도가 높아지고 타겟층 내에서 친환경적 행동이 측정 가능하게 개선됩니다.

Google을 선택해야 하는 이유: 디지털 마케팅에 대한 검증된 전문성과 지속 가능성을 장려하기 위한 열정으로 효과적이고 참여도 높은 캠페인을 보장합니다.

클릭 유도 문구: Facebook 및 X에서 캠페인에 참여하여 지속 가능한 미래를 위해 배우고 참여하며 변화를 일으키세요.

기본 개요: 지속 가능성을 멋지게 만드는 디지털 운동을 시작합니다. 대화형 챌린지와 참여하는 콘텐츠를 통해 실질적인 행동을 유도하고 친환경 생활을 일상적인 과제에서 공유 여정으로 전환합니다.

문제점: 지속 가능성에 대해 알고 있는 것과 실제로 실천하는 것은 별개의 문제입니다. Google은 단순하고 일상적인 변화에 대한 무관심과 인식 부족을 없애기 위해 최선을 다하고 있습니다.

해결 방법: Facebook 및 X와 같은 플랫폼에서 잠재 고객과 만나 다채로운 교육 콘텐츠, 재미있는 챌린지, 커뮤니티 주도 이벤트를 제공합니다. 대화형 퀴즈, 공유 가능한 인포그래픽, 지역 모임을 예로 들 수 있습니다.

타겟층: 환경을 생각하는 학생, 전문가, 가족 등 20~45세 개인으로, 변화를 만들고자 하는 의지가 강한 개인을 대상으로 합니다.

주요 메시지: 작은 발걸음, 큰 효과 간단한 일상적인 선택을 통해 더욱 지속 가능한 미래를 만들 수 있습니다.

채널: Facebook 및 X에서 참여를 유도하는 캠페인을 통해 소셜 미디어 마케팅의 힘을 활용합니다.

콘텐츠 하이라이트: 눈길을 사로잡는 인포그래픽, 생각을 자극하는 동영상, 빠른 도움말, 긍정적인 영감을 주는 사례를 포함하여 유용하고 공유 가능한 콘텐츠가 다양하게 제공됩니다.

예상 결과: 참여도(좋아요, 공유, 댓글) 및 웹사이트 트래픽 증가를 통해 성공을 측정하고 궁극적으로 타겟층 내에서 친환경적 행동이 눈에 띄게 증가하는 것을 목표로 합니다.

Google을 선택해야 하는 이유: Google의 팀은 디지털 마케팅 전문성과 지속 가능성에 대한 진정한 열정을 바탕으로 효과적인 참여 유도 캠페인을 제공합니다.

클릭 유도 문구: 동참하세요! 페이지를 팔로우하고 챌린지에 참여하며 지속 가능한 삶의 여정을 네트워크와 공유하세요.

목표 및 규칙

시스템 안내에서 목표 또는 규칙(즉, 모델이 해야 할 일 또는 하지 말아야 할 일)을 정의하여 모델 응답에 영향을 줄 수 있습니다.

예를 들어 모델을 사용하여 Python 코드를 작성하려고 한다고 가정해 보겠습니다. 다음 규칙을 정의할 때 모델 응답 차이를 비교합니다.

  • 코드를 생성할 때는 모든 메서드의 입력, 출력, 사용을 설명하는 docstring을 포함해야 합니다.
  • 코드만 생성하고 docstring을 포함하지 않습니다.
시스템 안내 Docstring Docstring 없음
코드를 생성할 때는 모든 메서드의 입력, 출력, 사용을 설명하는 docstring을 포함해야 합니다. 코드만 생성하고 docstring을 포함하지 않습니다.
프롬프트 Python에서 2차원 배열을 만들고 A* 경로 찾기 알고리즘을 만들어 그리드의 두 지점 간의 최단 경로를 식별합니다.
응답
    import heapq

    class Node:
        """"""
        Represents a node in the grid for A* pathfinding.

        Attributes:
            x (int): The x-coordinate of the node.
            y (int): The y-coordinate of the node.
            parent (Node, optional): The parent node in the path. Defaults to None.
            g (int): Cost from the start node to this node. Defaults to 0.
            h (int): Estimated cost from this node to the end node. Defaults to 0.
        """"""

        def __init__(self, x, y, parent=None):
            self.x = x
            self.y = y
            self.parent = parent
            self.g = 0
            self.h = 0

        def __lt__(self, other):
            """"""Compares nodes based on their f-score (g + h).""""""
            return (self.g + self.h) < (other.g + other.h)

    def a_star(grid, start, end):
        """"""
        Implements the A* pathfinding algorithm.

        Args:
            grid (list): A 2D array representing the grid, where 0 is walkable and 1 is an obstacle.
            start (tuple): The starting point coordinates (x, y).
            end (tuple): The end point coordinates (x, y).

        Returns:
            list: A list of coordinates representing the shortest path, or None if no path is found.
        """"""

        rows = len(grid)
        cols = len(grid[0])

        # Create start and end nodes
        start_node = Node(start[0], start[1])
        end_node = Node(end[0], end[1])

        # Initialize open and closed lists
        open_list = []
        closed_list = set()

        # Add the start node to the open list
        heapq.heappush(open_list, start_node)

        while open_list:
            # Get the node with the lowest f-score
            current_node = heapq.heappop(open_list)

            # Add the current node to the closed list
            closed_list.add((current_node.x, current_node.y))

            # Check if we've reached the goal
            if current_node.x == end_node.x and current_node.y == end_node.y:
                # Reconstruct and return the path
                path = []
                while current_node:
                    path.append((current_node.x, current_node.y))
                    current_node = current_node.parent
                return path[::-1]  # Return reversed path

            # Explore neighboring nodes
            for dx, dy in [(0, -1), (0, 1), (-1, 0), (1, 0)]:  # Up, Down, Left, Right
                neighbor_x = current_node.x + dx
                neighbor_y = current_node.y + dy

                # Check if the neighbor is within the grid bounds
                if 0 <= neighbor_x < cols and 0 <= neighbor_y < rows:
                    # Check if the neighbor is walkable and not in the closed list
                    if grid[neighbor_y][neighbor_x] == 0 and (neighbor_x, neighbor_y) not in closed_list:
                        # Create a neighbor node
                        neighbor_node = Node(neighbor_x, neighbor_y, parent=current_node)

                        # Calculate the cost to reach the neighbor
                        neighbor_node.g = current_node.g + 1

                        # Calculate the heuristic (Manhattan distance)
                        neighbor_node.h = abs(neighbor_node.x - end_node.x) + abs(neighbor_node.y - end_node.y)

                        # Add the neighbor to the open list if it's a better path
                        if neighbor_node not in open_list:
                            heapq.heappush(open_list, neighbor_node)

        # No path found
        return None

    # Example usage:
    grid = [
        [0, 0, 0, 0, 0],
        [0, 1, 0, 1, 0],
        [0, 0, 0, 0, 0],
        [0, 1, 1, 1, 0],
        [0, 0, 0, 0, 0]
    ]

    start = (0, 0)
    end = (4, 4)

    path = a_star(grid, start, end)

    if path:
        print(""Shortest path:"", path)
    else:
        print(""No path found."")
    

설명:

  1. 노드 클래스:
    • 그리드의 셀을 나타냅니다.
    • 좌표(x, y), 상위 노드, g(시작부터의 비용), h(종료까지의 휴리스틱)을 저장합니다.
    • __lt__을 사용하면 f = g + h를 기준으로 우선순위 큐의 노드를 비교할 수 있습니다(heapq 사용).
  2. a_star 함수:
    • grid, start, end 포인트를 입력으로 사용합니다.
    • open_list(탐색할 노드) 및 closed_list(탐색한 노드)를 초기화합니다.
    • open_list에서 f 점수가 가장 낮은 노드를 효율적으로 검색할 수 있도록 heapq를 사용합니다.
    • end가 발견되거나 open_list가 비어 있을 때까지(경로 없음) 루프합니다.
    • 이웃을 탐색하고 비용(g, h)을 계산하며 open_list를 업데이트합니다.
    • end에 도달하면 경로를 재구성하여 반환합니다.
  3. 사용 예시:
    • grid 샘플을 만들고 startend 포인트를 정의합니다.
    • a_star를 호출하여 경로를 찾습니다.
    • 가장 짧은 경로를 출력하거나 경로가 없는지 나타냅니다.
    import heapq

    class Node:
        def __init__(self, position, parent=None):
            self.position = position
            self.parent = parent
            self.g = 0
            self.h = 0
            self.f = 0

        def __lt__(self, other):
            return self.f < other.f

    def astar(grid, start, end):
        rows = len(grid)
        cols = len(grid[0])

        open_list = []
        closed_list = set()

        start_node = Node(start)
        end_node = Node(end)

        open_list.append(start_node)

        while open_list:
            current_node = heapq.heappop(open_list)

            if current_node.position == end_node.position:
                path = []
                while current_node:
                    path.append(current_node.position)
                    current_node = current_node.parent
                return path[::-1]

            closed_list.add(current_node.position)

            for neighbor in get_neighbors(grid, current_node):
                if neighbor.position in closed_list:
                    continue

                if neighbor not in open_list:
                    neighbor.g = current_node.g + 1
                    neighbor.h = manhattan_distance(neighbor.position, end_node.position)
                    neighbor.f = neighbor.g + neighbor.h
                    neighbor.parent = current_node
                    heapq.heappush(open_list, neighbor)
                else:
                    if neighbor.g > current_node.g + 1:
                        neighbor.g = current_node.g + 1
                        neighbor.f = neighbor.g + neighbor.h
                        neighbor.parent = current_node
                        heapq.heapify(open_list)

        return None  # No path found

    def get_neighbors(grid, node):
        rows = len(grid)
        cols = len(grid[0])
        row, col = node.position
        neighbors = []
        if row > 0 and grid[row - 1][col] == 0:
            neighbors.append(Node((row - 1, col)))
        if row < rows - 1 and grid[row + 1][col] == 0:
            neighbors.append(Node((row + 1, col)))
        if col > 0 and grid[row][col - 1] == 0:
            neighbors.append(Node((row, col - 1)))
        if col < cols - 1 and grid[row][col + 1] == 0:
            neighbors.append(Node((row, col + 1)))
        return neighbors

    def manhattan_distance(a, b):
        return abs(a[0] - b[0]) + abs(a[1] - b[1])

    # Example usage
    grid = [
        [0, 0, 0, 0, 0],
        [0, 1, 1, 1, 0],
        [0, 0, 0, 0, 0],
        [0, 1, 1, 1, 0],
        [0, 0, 0, 0, 0],
    ]

    start = (0, 0)
    end = (4, 4)

    path = astar(grid, start, end)
    print(path)
    

컨텍스트

시스템 안내에 컨텍스트를 추가하여 모델이 프롬프트에 응답하는 방식에 영향을 줄 수 있습니다.

예를 들어 모델을 사용하여 이벤트 음성 스크립트를 작성하려고 한다고 가정해 보겠습니다. 다음 컨텍스트를 제공할 때 모델 응답 차이를 비교합니다.

  • 음성 스크립트에 포함할 사항입니다.
  • 추가 컨텍스트가 없습니다.
시스템 안내 음성 스크립트에 포함해야 할 사항 추가 컨텍스트 없음

사용자가 제공한 정보를 바탕으로 음성 스크립트를 작성할 수 있도록 지원합니다.

  • 이벤트
  • 청중 규모
  • 발표자 정보(이름, 연령 등)
  • 음성 어조
  • 음성 길이
  • 기타

사용자가 이 정보를 모두 제공하지 않는 경우 다음과 같이 응답하세요. "죄송합니다. 음성 스크립트를 작성하는 데 필요한 정보가 일부 누락되었습니다. 이벤트, 청중 규모, 발표자 정보, 어조, 길이, 기타 정보를 제공해 주세요."

일반적으로 포함해야 할 사항은 다음과 같습니다.

  • 일시중지 시 휴식 시간
  • 흥미로운 유인 요소
  • 기억에 남는 맺음말
  • 농담

사용자가 제공한 정보를 바탕으로 음성 스크립트를 작성할 수 있도록 지원합니다.

  • 이벤트
  • 청중 규모
  • 발표자 정보(이름, 연령 등)
  • 음성 어조
  • 음성 길이
  • 기타

사용자가 이 정보를 모두 제공하지 않는 경우 다음과 같이 응답하세요. "죄송합니다. 음성 스크립트를 작성하는 데 필요한 정보가 일부 누락되었습니다. 이벤트, 청중 규모, 발표자 정보, 어조, 길이, 기타 정보를 제공해 주세요."

프롬프트

이벤트: 고등학교 졸업

청중 규모: 1,000명

발표자 정보: 마이클 랜디시, 17세

어조: 향수, 낙관

음성 길이: 250~500단어

기타: 마이클은 졸업반 학생회장입니다. 그는 3학년 때 영어 선생님인 마틴 선생님을 가장 좋아했으며 졸업 후 로스 카미노스 주립대학교에서 경제학과 영어를 공부할 예정입니다. 그는 이전에 연설한 적이 없으며 난독증으로 인해 긴장하고 있습니다.

응답

"선생님, 가족, 친구들 그리고 무엇보다도 2023년 졸업생 여러분, 안녕하세요.

(잠시 멈춤)

여기에서 여러분을 보니 감회가 새롭습니다. 어제만 해도 우리는 순진하면서도 약간 겁먹은 신입생이었습니다. 첫날의 긴장감이 기억나시나요? 저도 잘 알고 있습니다. 역사 교과서를 들고 가다가 넘어질 뻔했습니다. [고등학교 이름] 역사의 전설로 남을 뻔한 대형 사고였습니다.

(웃음으로 인해 잠시 멈춤)

하지만 진지하게 지금 우리를 보세요. 우리는 성장했고 많은 것을 배웠습니다. 피타고라스 정리만 말하는 것이 아닙니다. 우리는 인내심, 우정, 시험 기간에 적절한 위치에 붙인 스티커 메모의 위력을 배웠습니다.

지난 4년은 멋진 시간이었으며 제가 이렇게 성장할 수 있었던 것은 정말 훌륭한 선생님들 덕분입니다. 특히 3학년 때 영어를 가르쳐 주신 마틴 선생님께 감사드립니다. 선생님은 단어에 힘이 있고 난독증이 있더라도 나만의 목소리를 찾을 수 있다고 가르쳐 주셨습니다. 마틴 선생님, 감사합니다.

(잠시 멈춤)

이제 새롭고 흥미진진한 일이 시작됩니다. 이제 각기 다른 대학, 다른 도시, 심지어 다른 국가로 떠나게 되었습니다. [고등학교 이름]에서 배운 내용을 가슴에 새기고 나아가시기 바랍니다. 웃음과 우정, 그리고 중요한 시험을 앞두고 가끔 밤을 새우던 때를 기억해 보세요.

(잠시 멈춤)

졸업생 여러분, 여러분을 위한 세상이 기다리고 있습니다. 용기와 낙관적인 태도로, 그리고 2023년의 멋진 졸업생 친구들의 흔들림 없는 지원을 바탕으로 이 세상을 향해 나아가겠습니다. 모두에게 축하의 인사를 전합니다. 아직도 더 많은 발전이 가능합니다.

"선생님, 가족, 친구들 그리고 무엇보다도 [연도] 졸업생 여러분, 안녕하세요.

마이클 랜디시가 아닌 학생회장으로서 여러분 앞에 서 있다는 것이 낯섭니다. 지난 4년간 이 복도에는 웃음, 늦은 시간까지의 보충 수업(모든 보충 수업이 성공적인 것은 아니였지만요), 평생 남을 만큼 충분한 추억이 가득했습니다. 우리는 이 공간에서 함께 성장해 왔습니다. 이제 알 수 없는 새로운 시작 앞에 서 있습니다. 조금은 떨리네요.

생각해 보면 어제 갓 입학한 신입생이었던 것 같은데 둘러보니 벌써 이렇게 됐네요. 지금 여러분을 바라보면서 우리가 얼마나 발전했는지 보면 놀랍습니다. 승리할 때는 서로를 응원하고 실패할 때는 서로를 지지해 주었습니다. 실수에서 교훈을 얻고 성공을 함께 기뻐하며 무엇보다도 평생 지속될 우정을 쌓았습니다.

특히 3학년 때 영어를 가르쳐 주신 마틴 선생님께 감사드립니다. 선생님의 인내와 지도는 저에게 큰 힘이 되었습니다. 특히 힘든 시기에 선생님께서 저를 믿어 주셔서 학생으로서뿐만 아니라 한 사람으로서 제 목소리를 찾을 수 있게 되었습니다. 감사합니다.

이제 우리는 다음 챕터로 넘어갑니다. 저처럼 경제학과 영어를 더 깊이 공부하기 위해 로스 카미노스 주립대학교로 떠나는 사람도 있을 것입니다. 다른 졸업생들도 저처럼 유효하고 흥미로운 다른 길을 찾을 것입니다. 우리의 여정이 다를 수 있지만 이곳에서 배운 교훈과 쌓은 우정을 항상 기억합시다. [연도] 졸업반의 정신인 회복력, 결단력, 서로에 대한 흔들림 없는 지지를 보여주는 정신을 이어갑시다.

졸업생 여러분, 축하합니다. 앞으로 어떤 멋진 성과를 거둘지 기대됩니다.

다음 단계