<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>연합우주 &amp;mdash; Hyun1008.log</title>
    <link>https://blog.daydream.ink/jyhyun1008/tag:연합우주</link>
    <description>재연의 개발블로그</description>
    <pubDate>Tue, 28 Apr 2026 02:18:59 +0900</pubDate>
    <item>
      <title>Open AI를 활용한 다기능 Misskey 챗봇, 파이(Pi)</title>
      <link>https://blog.daydream.ink/jyhyun1008/open-ai-dagineung-caesbos-mandeulgi</link>
      <description>&lt;![CDATA[#프로젝트 #VanillaJS #연합우주&#xA;&#xA;img src=&#34;https://for.stella.place/D1/a3174c40-acfb-4c6a-aa4c-f31e364508b2.webp&#34; class=&#34;thumbnail&#34;&#xA;&#xA;  OpenAI의 API를 이용해서 다양한 기능을 지원하는 Misskey 챗봇을 제작했습니다.&#xA;&#xA;이미지&#xA;&#xA;최근 &#39;파이&#39;를 다시 만들고 있습니다. 거의 처음부터 다시 만들었다고 보시면 됩니다.&#xA;&#xA;&#39;파이&#39;는 이전 피치타르트 시절 웹브라우저에서 구동했었던 챗봇입니다. 파이를 구동하기 위해서는 운영체제 상관 없이 24/7 꺼지지 않는 컴퓨터와 브라우저가 있으면 됩니다. 미스키 계정으로의 액세스 토큰과 챗GPT 토큰은 GET 방식으로 받습니다.&#xA;&#xA;파이 리포지토리: 링크&#xA;  위 폴더 중 js/main.js 가 중요합니다!&#xA;&#xA;구현한 기능&#xA;&#xA;0. 자동 포스트&#xA;&#xA;정해진 시간마다 한번씩 자동으로 게시글을 남깁니다. 이 때, 매주 매 시간별로 일정을 셋팅하고, 저녁 메뉴와 대화 주제의 경우에는 랜덤 선택지를 두어 다양한 주제의 게시글을 작성하도록 했습니다.&#xA;&#xA;1. 단순 채팅&#xA;&#xA;유저의 멘션에 반응해서 답글을 남깁니다. 이번 버전의 파이는 자신있는 주제가 있고 자신없는 주제가 있어요. 코딩, 수학, 의학 등과 같은 hallucination에 민감한 소재는 피하도록 했습니다.&#xA;&#xA;2. 하루 채팅 제한&#xA;&#xA;하루 20회의 채팅 횟수 제한이 있습니다.&#xA;&#xA;3. 호감도&#xA;&#xA;일반 채팅 포함, 대화 내용이 챗봇의 입장에서 긍정적이었는지 부정적이었는지 평가하여 호감도를 증감 합니다. &#xA;&#xA;호감도가 일정 수준 이상이면 대화의 퀄리티가 증가하게 되며, 특히 멘션을 줄 때마다 자신의 감정에 따른 이미지를 첨부해 줍니다.&#xA;&#xA;4. 맞팔로우&#xA;&#xA;유저로부터 맞팔로우 요청으로 보이는 언급이 있으면 맞팔로우 해 줍니다. 단, 이미 파이를 팔로우한 유저에 한해 맞팔로우 합니다.&#xA;&#xA;5. 리마인더&#xA;&#xA;img src=&#34;https://for.stella.place/D1/39b05ba8-0bf5-40c8-a838-894fef922992.png&#34; width=&#34;400px&#34;&#xA;&#xA;유저로부터 시각 언급이 있으면(몇 시, 몇시간 후 둘 다 가능) 자동으로 그 시각을 저장해 두었다가 리마인드 해 줍니다.&#xA;&#xA;코드의 흐름&#xA;&#xA;유저가 파이에게 질문을 합니다.&#xA;브라우저의 페이지는 주기적으로 멘션창을 확인하고, 유저의 질문을 감지합니다.&#xA;로컬스토리지에서 질문한 사람의 호감도와, 오늘의 잔여 질문 횟수를 읽습니다.&#xA;질문 횟수가 남아있으면 gpt-4o 에게 메인 프롬프트, 호감도에 따른 프롬프트, 질문한 사람의 이름을 전달합니다.&#xA;프롬프트와 챗봇의 답변을 gpt-4o-mini 에게 전달하여, 대화가 긍정적이었는지 부정적이었는지 / 리마인더 언급이 있었는지 / 맞팔 요청이 있었는지 / 드라이브의 이미지 중 뭘 쓰는 게 좋은지 간단한 json 형식으로 반환합니다.&#xA;대화가 긍정적이었는지 부정적이었는지 여부에 따라 호감도를 재설정하고, 잔여 질문 횟수도 조정합니다.&#xA;리마인더 언급이 있을 경우 해당 데이터를 로컬스토리지에 저장합니다.&#xA;반환된 드라이브의 이미지를 사용해서 유저에게 답변합니다.&#xA;맞팔 요청이 있었을 경우 맞팔합니다. 그러나 맞팔로우 이슈가 있을 경우(파이를 팔로우하지 않음, 이미 팔로우한 유저 등) gpt-4o-mini에게 오류 전달 후 유저에게 다시 답변합니다.&#xA;&#xA;이와 같이, 파이에게 멘션 하나를 날리면 이전과 다르게 gpt로의 요청이 최소 두 번, 최대 세 번까지 이루어집니다.&#xA;&#xA;TODO&#xA;다른 misskey 서버에서 비슷한 챗봇을 구현할 수 있게, 커스터마이징이 쉽도록 settings.js에 옵션을 추가할 계획입니다.&#xA;README.md 를 영어로, 친절하게 수정할 계획입니다.&#xA;코드 내의 주석 언어를 영어로 수정할 계획입니다.&#xA;채팅 제한이 있는 노트에도 멘션을 달아야 합니다. (답해야 할 노트를 멘션 갯수로 판정하기 때문입니다.)]]&gt;</description>
      <content:encoded><![CDATA[<p><a href="/jyhyun1008/tag:%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">프로젝트</span></a> <a href="/jyhyun1008/tag:VanillaJS" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">VanillaJS</span></a> <a href="/jyhyun1008/tag:%EC%97%B0%ED%95%A9%EC%9A%B0%EC%A3%BC" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">연합우주</span></a></p>

<p><img src="https://for.stella.place/D1/a3174c40-acfb-4c6a-aa4c-f31e364508b2.webp" class="thumbnail"></p>

<blockquote><p>OpenAI의 API를 이용해서 다양한 기능을 지원하는 Misskey 챗봇을 제작했습니다.</p></blockquote>

<p><img src="https://for.stella.place/D1/a3174c40-acfb-4c6a-aa4c-f31e364508b2.webp" alt="이미지"></p>

<p>최근 &#39;파이&#39;를 다시 만들고 있습니다. 거의 처음부터 다시 만들었다고 보시면 됩니다.</p>

<p>&#39;파이&#39;는 이전 피치타르트 시절 <strong>웹브라우저에서</strong> 구동했었던 챗봇입니다. 파이를 구동하기 위해서는 운영체제 상관 없이 24/7 꺼지지 않는 컴퓨터와 브라우저가 있으면 됩니다. 미스키 계정으로의 액세스 토큰과 챗GPT 토큰은 GET 방식으로 받습니다.</p>
<ul><li>파이 리포지토리: <a href="https://github.com/jyhyun1008/pichan" rel="nofollow">링크</a>
<ul><li>위 폴더 중 js/main.js 가 중요합니다!</li></ul></li></ul>

<h2 id="구현한-기능" id="구현한-기능">구현한 기능</h2>

<h3 id="0-자동-포스트" id="0-자동-포스트">0. 자동 포스트</h3>

<p><img src="https://for.stella.place/D1/0950e00d-0876-47e5-b9a0-08b2fd56d2ac.png" alt=""></p>

<p>정해진 시간마다 한번씩 자동으로 게시글을 남깁니다. 이 때, 매주 매 시간별로 일정을 셋팅하고, 저녁 메뉴와 대화 주제의 경우에는 랜덤 선택지를 두어 다양한 주제의 게시글을 작성하도록 했습니다.</p>

<h3 id="1-단순-채팅" id="1-단순-채팅">1. 단순 채팅</h3>

<p><img src="https://for.stella.place/D1/d3024157-ccfc-405a-85da-5cfdb17cff0b.webp" alt=""></p>

<p>유저의 멘션에 반응해서 답글을 남깁니다. 이번 버전의 파이는 자신있는 주제가 있고 자신없는 주제가 있어요. 코딩, 수학, 의학 등과 같은 hallucination에 민감한 소재는 피하도록 했습니다.</p>

<h3 id="2-하루-채팅-제한" id="2-하루-채팅-제한">2. 하루 채팅 제한</h3>

<p>하루 20회의 채팅 횟수 제한이 있습니다.</p>

<h3 id="3-호감도" id="3-호감도">3. 호감도</h3>

<p><img src="https://for.stella.place/D1/b1fca2b7-d18f-46b5-99ce-d0a1977ee7e0.webp" alt=""></p>

<p>일반 채팅 포함, 대화 내용이 챗봇의 입장에서 긍정적이었는지 부정적이었는지 평가하여 호감도를 증감 합니다.</p>

<p>호감도가 일정 수준 이상이면 대화의 퀄리티가 증가하게 되며, 특히 멘션을 줄 때마다 자신의 감정에 따른 이미지를 첨부해 줍니다.</p>

<h3 id="4-맞팔로우" id="4-맞팔로우">4. 맞팔로우</h3>

<p><img src="https://for.stella.place/D1/a6cb0022-c12c-4e23-99ad-06ce226748e1.webp" alt=""></p>

<p>유저로부터 맞팔로우 요청으로 보이는 언급이 있으면 맞팔로우 해 줍니다. 단, 이미 파이를 팔로우한 유저에 한해 맞팔로우 합니다.</p>

<h3 id="5-리마인더" id="5-리마인더">5. 리마인더</h3>

<p><img src="https://for.stella.place/D1/39b05ba8-0bf5-40c8-a838-894fef922992.png"></p>

<p>유저로부터 시각 언급이 있으면(몇 시, 몇시간 후 둘 다 가능) 자동으로 그 시각을 저장해 두었다가 리마인드 해 줍니다.</p>

<h2 id="코드의-흐름" id="코드의-흐름">코드의 흐름</h2>
<ul><li>유저가 파이에게 질문을 합니다.</li>
<li>브라우저의 페이지는 주기적으로 멘션창을 확인하고, 유저의 질문을 감지합니다.</li>
<li>로컬스토리지에서 질문한 사람의 호감도와, 오늘의 잔여 질문 횟수를 읽습니다.</li>
<li>질문 횟수가 남아있으면 gpt-4o 에게 메인 프롬프트, 호감도에 따른 프롬프트, 질문한 사람의 이름을 전달합니다.</li>
<li>프롬프트와 챗봇의 답변을 gpt-4o-mini 에게 전달하여, 대화가 긍정적이었는지 부정적이었는지 / 리마인더 언급이 있었는지 / 맞팔 요청이 있었는지 / 드라이브의 이미지 중 뭘 쓰는 게 좋은지 간단한 json 형식으로 반환합니다.</li>
<li>대화가 긍정적이었는지 부정적이었는지 여부에 따라 호감도를 재설정하고, 잔여 질문 횟수도 조정합니다.</li>
<li>리마인더 언급이 있을 경우 해당 데이터를 로컬스토리지에 저장합니다.</li>
<li>반환된 드라이브의 이미지를 사용해서 유저에게 답변합니다.</li>
<li>맞팔 요청이 있었을 경우 맞팔합니다. 그러나 맞팔로우 이슈가 있을 경우(파이를 팔로우하지 않음, 이미 팔로우한 유저 등) gpt-4o-mini에게 오류 전달 후 유저에게 다시 답변합니다.</li></ul>

<p>이와 같이, 파이에게 멘션 하나를 날리면 이전과 다르게 gpt로의 요청이 최소 두 번, 최대 세 번까지 이루어집니다.</p>

<h2 id="todo" id="todo">TODO</h2>
<ul><li>다른 misskey 서버에서 비슷한 챗봇을 구현할 수 있게, 커스터마이징이 쉽도록 <code>settings.js</code>에 옵션을 추가할 계획입니다.</li>
<li><code>README.md</code> 를 영어로, 친절하게 수정할 계획입니다.</li>
<li>코드 내의 주석 언어를 영어로 수정할 계획입니다.</li>
<li>채팅 제한이 있는 노트에도 멘션을 달아야 합니다. (답해야 할 노트를 멘션 갯수로 판정하기 때문입니다.)</li></ul>
]]></content:encoded>
      <guid>https://blog.daydream.ink/jyhyun1008/open-ai-dagineung-caesbos-mandeulgi</guid>
      <pubDate>Thu, 22 Aug 2024 10:23:31 +0900</pubDate>
    </item>
  </channel>
</rss>