시스템 안내

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

시스템 안내는 모델이 프롬프트를 처리하기 전에 처리하는 안내 모음입니다. 시스템 안내를 사용하여 모델의 동작 방식과 프롬프트에 응답하는 방식을 지정하는 것이 좋습니다. 예를 들어 채택할 캐릭터, 맥락 정보, 형식 지정 안내 등을 포함할 수 있습니다.

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

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

지원되는 모델

다음 모델은 시스템 안내를 지원합니다.

  • 모든 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 세션, 지속 가능한 관행을 장려하는 커뮤니티 챌린지

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

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

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

핵심 아이디어: 지속 가능성을 멋지게 만드는 디지털 운동을 시작합니다. YouTube는 양방향 챌린지와 참여를 유도하는 콘텐츠를 통해 실질적인 행동을 유도하고 친환경 생활을 일상적인 과제에서 공유하는 여정으로 전환할 것입니다.

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

해결 방법: Facebook 및 X와 같은 플랫폼에서 시청자가 있는 곳으로 찾아가 교육 콘텐츠, 재미있는 챌린지, 커뮤니티 주도 이벤트를 다채롭게 제공합니다. 대화형 퀴즈, 공유 가능한 인포그래픽, 지역 모임을 생각해 보세요.

타겟층: 20~45세의 환경을 생각하는 개인(학생, 직장인, 가족)으로, 변화를 만들고자 하는 의지가 강한 사용자를 타겟팅합니다.

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

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

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

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

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

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

목표 및 규칙

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

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

  • 코드를 생성할 때는 모든 메서드의 입력, 출력, 사용을 설명하는 문서 문자열을 포함해야 합니다.
  • 코드만 생성하고 문자열 문서는 포함하지 않습니다.
시스템 안내 문서 문자열 문서 문자열 없음
코드를 생성할 때는 모든 메서드의 입력, 출력, 사용을 설명하는 문자열 문서를 포함해야 합니다. 코드만 생성하고 문자열 문서는 포함하지 않습니다.
프롬프트 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년간 이 복도에는 웃음과 밤늦은 시간의 공부 (일부 과정은 다른 과정보다 성공적이었음), 평생 남을 만큼 충분한 추억이 가득했습니다. YouTube는 이 공간에서 함께 성장해 왔습니다. 이제 알 수 없는 새로운 시작을 앞두고 있으니 다소 부담스러울 수 있습니다.

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

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

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

졸업생 여러분, 축하합니다. 함께 어떤 멋진 일을 해낼지 기대됩니다.

다음 단계