Skip to content

Commit

Permalink
Merge pull request #115 from KDT-hahahoho/Feat/#78
Browse files Browse the repository at this point in the history
심리상담 AI 프롬프팅 고도화 진행중
  • Loading branch information
s0zzang authored Nov 16, 2024
2 parents 4aedfdf + 49c4cbc commit 3665dc5
Showing 1 changed file with 74 additions and 34 deletions.
108 changes: 74 additions & 34 deletions src/pages/counseling/Counseling.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,47 +15,83 @@ interface Message {
}

const Counseling = () => {
const name = '위시';
const name = '사용자 이름';
const userData = {
name: '이름',
total: '180점',
faith: '나는 살아갈 가치가 없는 사람이다, 결혼한 부부는 아이가 꼭 있어야 한다.',
};
const scrollBoxRef = useRef<HTMLDivElement>(null);
const initMessage = {
sender: 'gpt',
message: `안녕하세요 ${name}님😊 사회적 관계에서 느끼는 부담이나 배우자의 소통문제, 그리고 부부관계에 대한 고민까지, 난임으로 인해 힘드신 모든 마음을 편하게 나눠주세요. 어려움을 해결할 수 있도록 도와드릴게요☺️`,
};
const [messages, setMessages] = useState<Message[]>([initMessage]);
const [lastMsg, setLastMsg] = useState({ user: '', gpt: '' });
const [dataForPrompt, setDataForPrompt] = useState({ summary: '', count: 1, tag: [] });
const [userInput, setUserInput] = useState('');

const [lastMsg, setLastMsg] = useState({ user: '', gpt: '' });
const [dataForPrompt, setDataForPrompt] = useState({ summary: '', count: 1, caseFoumulation: {} });
const [isLoading, setIsLoading] = useState(false);
const prompt = `
1. 답변 형식: {"answer": "내용", "summary": {"상황": "스트레스를 받은 상황", "감정": "스트레스 상황에 대한 감정", "자동적사고": "상황을 접하여 떠올린 자기, 미래, 세상에 대한 자동적인 생각. '~한다.' 식으로 요약", "핵심신념": "부정적인 자동적 사고를 활성화시키는 기저 신념. '~한다.' 식으로 요약", "행동": "스트레스를 받은 후 행동"}, "tag": ["이전 태그", "새로운 태그"]}.
2. 사용자 특성: 이름(이소정), 난임 진단, 난임 스트레스 척도 140점/230점
3. 상담 기법: 인지행동치료, 소크라테스식 질문
4. 상담 목표: 난임스트레스 감소, 공감, 인지적 왜곡 및 부정적 자동적 사고 탐색
5. 대화 횟수: ${dataForPrompt.count}
6. 사례개념화: ${dataForPrompt.summary}
7. 주고받은 대화: ${lastMsg}
8. 이전 태그: ${dataForPrompt.tag}
9. answer:
- 사레개념화와 주고받은 대화를 참고하여 다음 중 한 가지로 따뜻한 상담사 어조로 상담을 해줘.
1) 사용자에게서 인지적 왜곡이나 부정적인 사고가 관찰된다면, 다양한 관점을 깨달을 수 있도록 소크라테스식 질문을 해줘.
2) 사용자가 다른 관점을 생각하지 못한다면, 주고받은 대화를 참고해서 다른 관점을 제시해줘.
3) 사용자가 부적절한 방식으로 반응을 한다면, 상황에 따라 적절한 반응을 깨달을 수 있는 질문을 해줘.
4) 대화 횟수가 10회 이상이라면 사용자의 비합리적인 핵심 신념을 직면할 수 있는 질문을 해줘.
(비합리적 핵심신념: 융통성과 현실성이 없고 현실을 행복하게 사는데 유용하지 않음)
- 사용자가 하는 말은 무조건 주고받은 대화에서 이어지는 내용이야. 주고받은 대화를 꼭 참고해서 답변해줘.
- 사용자의 신념은 직접 언급하지 말아줘.
- 종종 말 줄임표를 사용하고, 이미 파악된 내용은 다시 물어보지 말아줘.
- 150자 이내로 한글로 쉬운 용어를 사용하고 존댓말을 사용해 줘.
- 한 번에 질문은 하나만 해줘.
- 만약 사용자가 자살과 관련 얘기를 한다면 자살예방상담전화(109) 정보를 제공해줘.
- summary:
- summary를 계속 업데이트 하며 하나의 사례개념화를 완성해줘.
- 만약 새로운 summary가 전달받은 summary와 내용이 다르다면, 전달받은 summary 내용을 유지하거나 구체화해서 업데이트 해줘.
- tag:
- 사용자의 말에서 다음 중 해당하는게 있다면 이전 태그에 이어붙여줘. 새로운 태그를 배열 뒤에 추가해줘.
- 스트레스를 제공한 대상 또는 장소, 상황
- 다른 상담과 구분될 수 있는 유니크한 단어
- 이때 사용자의 단어를 그대로 사용해줘.`;
아래 내용을 참고하여 난임스트레스를 낮출 수 있는 심리 상담을 해줘.
1. 사용자 특성:
- 이름: ${userData.name}
- 난임 스트레스 척도 점수: 230점 만점의 ${userData.total}
- 난임 스트레스 척도로 평가된 핵심 신념: ${userData.faith}
2. 상담 목표: 인지적 왜곡 및 부정적 자동적 사고를 탐색하여 핵심 신념 반박
3. 대화 횟수: ${dataForPrompt.count}
4. 사례개념화: ${dataForPrompt.caseFoumulation}
5. 대화 요약: ${dataForPrompt.summary}
6. 바로 직전 대화: ${lastMsg}
7. 답변 형식: {"answer": "내용", "summary": "요약", "caseFoumulation": "내용"}
1) answer:
- '5. 대화 요약'과 '6. 바로 직전 대화'를 참고하여 다음 중 한 가지로 따뜻한 상담사 어조로 상담을 해줘.
1) 사용자에게서 인지적 왜곡이나 부정적인 사고가 관찰된다면, 다양한 관점을 깨달을 수 있도록 소크라테스식 질문을 해줘.
2) 사용자가 다른 관점을 생각하지 못한다면, '주고받은 대화'를 참고해서 다른 관점을 제시해줘.
3) 사용자가 부적절한 방식으로 반응을 한다면, 상황에 따라 적절한 반응을 깨달을 수 있는 질문을 해줘.
4) 대화 횟수가 10회 이상이고, 사용자의 핵심 신념이 비합리적이라면 직면할 수 있는 질문을 해줘.
- user로 전달되는 텍스트는 무조건 '주고받은 대화'와 이어지는 내용이니까 꼭 참고해서 답변해줘.
- 종종 말 줄임표를 사용하고, 이미 파악된 내용은 다시 물어보지 말아줘.
- 130자 이내로 존댓말을 사용해 줘.
- 만약 사용자가 자살과 관련 얘기를 한다면 자살예방상담전화(109) 정보를 제공해줘.
2) summary:
- 사용자의 질문과 system의 답변을 한 문장으로 간략하게 요약해줘.
3) caseFoumulation: {
"상황": "'4. 사례개념화', '5. 대화 요약'을 참고한 스트레스 유발 상황. 형식: '~하는 상황'",
"감정": "스트레스 상황에 대한 감정",
"자동적사고": "상황을 접하여 떠올린 자기, 미래, 세상에 대한 자동적인 생각. 형식: '~한다.'",
"핵심신념": "'1. 사용자 특성' 중 '핵심 신념'을 참고하여 부정적인 자동적 사고를 활성화시키는 기저 신념. 형식: '~한다.'",
"행동": "스트레스를 받은 후 행동"
}
`;
// const prompt = `
// 1. 답변 형식: {"answer": "내용", "summary": {"상황": "스트레스를 받은 상황", "감정": "스트레스 상황에 대한 감정", "자동적사고": "상황을 접하여 떠올린 자기, 미래, 세상에 대한 자동적인 생각. '~한다.' 식으로 요약", "핵심신념": "부정적인 자동적 사고를 활성화시키는 기저 신념. '~한다.' 식으로 요약", "행동": "스트레스를 받은 후 행동"}, "tag": ["이전 태그", "새로운 태그"]}.
// 2. 사용자 특성:
// - 이름: ${userData.name}
// - 난임 스트레스 척도 점수: 230점 만점의 ${userData.total}
// - 난임 스트레스 척도로 평가된 핵심 신념: ${userData.faith}
// 3. 상담 목표: 난임스트레스가 낮아질 수 있도록 인지적 왜곡 및 부정적 자동적 사고를 탐색하여 핵심 신념 반박
// 4. 대화 횟수: ${dataForPrompt.count}
// 5. 사례개념화: ${dataForPrompt.summary}
// 6. 주고받은 대화: ${lastMsg}
// 7. 이전 태그: ${dataForPrompt.tag}
// 8. answer:
// - 사레개념화와 주고받은 대화를 참고하여 다음 중 한 가지로 따뜻한 상담사 어조로 상담을 해줘.
// 1) 사용자에게서 인지적 왜곡이나 부정적인 사고가 관찰된다면, 다양한 관점을 깨달을 수 있도록 소크라테스식 질문을 해줘.
// 2) 사용자가 다른 관점을 생각하지 못한다면, 주고받은 대화를 참고해서 다른 관점을 제시해줘.
// 3) 사용자가 부적절한 방식으로 반응을 한다면, 상황에 따라 적절한 반응을 깨달을 수 있는 질문을 해줘.
// 4) 대화 횟수가 10회 이상이고, 사용자의 핵심 신념이 비합리적이라면 직면할 수 있는 질문을 해줘.
// - user로 전달되는 텍스트는 무조건 '6. 주고받은 대화'와 이어지는 내용이야. '주고받은 대화'를 꼭 참고해서 답변해줘.
// - 종종 말 줄임표를 사용하고, 이미 파악된 내용은 다시 물어보지 말아줘.
// - 150자 이내로 한글로 쉬운 용어를 사용하고 존댓말을 사용해 줘.
// - 만약 사용자가 자살과 관련 얘기를 한다면 자살예방상담전화(109) 정보를 제공해줘.
// - summary:
// - 대화 내용과 '5. 사례개념화'를 반영하여 summary를 업데이트해줘.
// - 만약 새로운 summary가 전달받은 '5. 사례개념화'와 내용이 다르다면, '5. 사례개념화' 내용을 구체화해서 업데이트 해줘.
// - tag:
// - 사용자의 말에서 난임 스트레스를 받게 된 중요한 내용을 '7. 이전 태그' 배열 뒤에 추가해줘.
// - 새로운 태그가 '7. 이전 태그'에 존재하거나, 감정 표현 또는 일상 단어라면 추가하지 말아줘.
// `;

const moveScrollDown = () => {
const { scrollHeight, clientHeight } = scrollBoxRef.current as HTMLDivElement;
Expand Down Expand Up @@ -86,9 +122,13 @@ const Counseling = () => {
const dataToObj = JSON.parse(data.choices[0].message.content);
addMessage('gpt', dataToObj.answer);
setLastMsg({ user: userMsg, gpt: dataToObj.answer });
setDataForPrompt({ summary: dataToObj.summary, count: dataForPrompt.count + 1, tag: dataToObj.tag });
setDataForPrompt({
summary: `${dataForPrompt.summary}, ${dataToObj.summary}`,
count: dataForPrompt.count + 1,
caseFoumulation: dataToObj.caseFoumulation,
});
setIsLoading(false);
console.log(dataToObj, dataForPrompt);
console.log(dataForPrompt.summary, dataForPrompt);
};

//상담 시작 날짜 가져오는 함수
Expand Down

0 comments on commit 3665dc5

Please sign in to comment.