Obsidian에서 Quick Add 플러그인으로 프롬프트 체이닝 하는법

Obsidian에서 Quick Add 플러그인으로 프롬프트 체이닝 하는법

tags
obsidian
프롬프트
Tool
AI
옵시디언
Published
Nov 22, 2024 06:00 AM
Created Date
Nov 22, 2024
Social Image
category
Random
Description
Font
keywords
Date
author
UJ
처음에는 buttons를 이용해보려했으나 현재 내 테마에서 모달창이 작아 가려지는 내용들이 있어 사용이 불가하다. Quick Add 플러그인은 템플릿, Capture, AI 어시스턴트 등을 이용해 자동화를 도와주는 플러그인이다.
우선 내가 원하는 것은 이러했다.
  • 현재: Copilot을 이용해 AI 글을 생성하는 단계 - 수정하는 단계에서 글을 내려받기 위한 버튼 1개를 클릭함. 이후 속성이 들어간 템플릿을 다시 추가해야함.
  • 기대하는것: 명령 한번으로 템플릿에 맞춰 자동으로 글을 추가함
AI assistant 기능을 우선적으로 사용해봤는데, LLM기능을 제공하는 Provider는 기본적으로 OpenAI가 설정되어 있고 해당 모델들이 추가되어 있었지만, 이전 플러그인에서와 마찬가지로 나는 무료티어를 제공하는 provider를 원했다. 그래서 직접 provider를 추가하려 했는데, 공식문서를 확인해보니 '가능한것으로 알려져있다'고 한 provider가 많지는 않았다. 나는 빠르게 테스트해보길 원했기때문에 일단 그중 하나인 Groq을 추가했다.
AI Assistant는 자체적으로 Advanced Setting을 할 수있는데, advanced 설정을 하지않고 테스트해봤을때의 경험은 아래와 같다.
notion image
Groq이 무료 지원중인 모델 중 위 모델들을 추가했는데, 이중에서는 llama-3.1-70b-versatile이 그나마 나은가 싶었지만 그마저도 중국어나 다른나라 언어가 한두번씩 글에 섞여 나왔다. 영어로 출력은 꽤 괜찮다고 느껴서 생성 후 번역기를 돌려야하나하고 생각했다. copilot에서는 한국어 포스트 생성이 나름 괜찮았다고 생각하는 command-r-plus는 에러가 발생하여 몇번 시도하다 그만두었고, claude도 마찬가지였다. 급하게 하느라 설정을 잘못한 것인지 모르겠지만 일단 무료 티어로 설정하려고 했을때 잘 되지않아서 더 이상 시도해보지 않았다.
나중을 위해 적자면 크게 두가지 방법으로 시도를 해봤는데, 다음과 같다.
  1. 제목, 콘텐츠, 태그 각각 나누어 생성하기
  1. 제목, 태그 속성, 글을 한번에 생성하기

1. 제목, 콘텐츠, 태그 각각 프롬프트 요청

첫번째 방법은 Quick Add 플러그인에서만 가능한 방법인데, 결과에 변수를 지정하여 다음 명령으로 프롬프트체이닝 할 수 있기때문에 첫 프롬프트에서 글을 생성해 {{value:content}}에 저장되면 이를 기반으로 제목 {{value:title}}과 태그 {{value:tags}} 또는 {{value:tag1}}, {{value:tag2}}. {{value:tag3}} 까지 총 프롬프트를 3번 입력하도록 자동화했다.
notion image

프롬프트 준비

  1. Write dev post content
아래 내용을 기반으로 개발자 블로그 글을 작성해. 제목은 제외하고. 소제목은 2-5개 작성해. 문장 끝은 '있다', '한다' 등으로 끝맺고, 글의 문맥은 자연스럽게, 내용의 세부사항 생략 없이 과장 혹은 추측 없이 작성해. 문단은 적절히 정렬하며, 결론도 추가해. 결과는 블로그 글만 출력해. {{value:input}}
  • '입니다, 습니다. 말고' 를 넣기도 했는데, 부정문이어서인지 넣는 것의 모델별 결과 차이가 있었다.
  • copilot플러그인에서 command-r-plus로 무난하게 작동하던 프롬프트를 기반으로 했다.
  1. Create dev blog title
다음 개발자 블로그글의 제목을 구글seo에 맞게 1개 출력해. 제목의 길이는 알파벳은 글자당 1자, 한글은 글자당 2자로 쳐서 총 30자이내로. 마크다운 형식 없이 간결하게 제목 결과만 출력해. {{value:content}}
  1. Create tags
다음 개발자 블로그 글의 태그 최대 3개를 제안해줘. 태그에는 '.' 같은 특수문자를 넣을수 없어. ","로 구분하고 간결하게 태그 결과만 출력해. 예시: tag1, tag2, tag3 {{value:content}}
이렇게 작성하면 새 프롬프트가 자동으로 실행되고 첫 프롬프트인 Write dev post content 다음에만 input 창에 노트한 자료를 입력하면 되며, 그 결과를 content변수에 저장한다. 이후 프롬프트에서는 이전 결과인 content를 사용한다.

템플릿 작성. Template or Capture 선택

그 다음 세가지 결과물을 가지고 Template또는 Capture 기능으로 파일을 생성하는데, 나는 아래와 같이 템플릿을 생성했다.
write-dev-post-v1
--- title: "{{value:title}}" tags: "{{value:tags}}" --- {{value:content}}
" "가 없으면 속성에서 값을 제대로 입력하지 않아서 위와 같이 넣었다. 위 처럼 입력이 안되면 [tag1, tag2, tag3] 같은 방법도 있는데, 프롬프트 결과를 변수 하나로 받아야해서 하나씩 쪼개는 추가 과정이 필요할듯 하다.
템플릿 기능으로는 새 파일을 생성하는데, 아쉬운 점은 제목을 {{value:title}}로 할 수 없다는 것이었다. 옵시디언에서는 파일명에 :, /, \를 넣을수 없다. 노션에 업데이트 할때는 title 속성에 제목을 지정해주어도 되어서 문제는 없지만 옵시디언에서 관리할때는 파일 제목으로 내용을 구분하기 때문에 그 점이 불편했다.
대신 제목을 {{Date}}-1 로 설정하고, 이미 존재하는 파일일경우 숫자가 증가(increment)하도록 설정해 두었다. 이게 Capture가 아닌 Template을 사용한 결정적인 이유였다.
Capture에는 제목 숫자 increment 기능이 없지만 템플릿 파일을 이용하지 않고도 설정에 직접 위 내용을 넣을 수 있으며, 기존파일이 있을때 특정 문자열 다음에 내용 추가를 가능하게 하고, 내용을 task로 추가하는 등 다른 케이스에서 유용하게 사용 할 수 있다.

2. 제목, 태그, 글 한번에 생성

첫번째 방식과 비슷하지만 프롬프트 한번에 제목, 본문, 태그까지 처리하는 방법이다.
프롬프트
아래 내용을 기반으로 한글로만 된 개발자 블로그 글을 작성해줘. 가장 상단에는 아래 처럼 obsidian property가 들어가야해. --- title: 구글seo에 맞게 1개 출력해. 제목의 길이는 알파벳은 글자당 1자, 한글은 글자당 2자로 쳐서 총 60자이내로. tags: 태그에는 '.' 같은 특수문자는 사용할수 없어. 태그는 최대 3개이며 ","로 구분해. AI-generated: false --- 본문에는 제목을 넣지마. 소제목은 2-5개 작성해. 본문의 문장은 '~ㅂ니다'가 아닌 '있다.', '한다.', '이다.' 등으로 끝맺어야하고, 문장 사이 적절한 접속사를 넣을수 있어. 문맥상 자연스럽게하고, 내용의 세부사항의 축약이나 생략 없이 작성하며, 과장이나 추측이 없어야해. 문단 정렬도 하고, 결론도 추가해. 추가설명없이 결과만 출력해.` {{value:input}}
템플릿
{{value:output}}
프롬프트 결과만 출력할 때 공통적으로 이용 가능하다.

비교

두 방식의 결과 차이는 크지 않다. 첫번째 방식은 프롬프트를 3번 요청하면서 시간이 약간(1,2초 정도) 더 걸리지만 결과가 좀 더 정확히 나오는 편이다. 처음에는 한번에 요청할때와 비교해 더 나은 결과가 나온다고 보기 어려웠으나 프롬프트를 좀 더 개선하면서 일관된 결과가 나오기 시작했다. 두번째 방식은 설정이 좀 더 간편하고 쉬우며 프롬프트 한번의 시간이 걸린다. (약 3,4초) 그러나 여러번 시도해봤을때 태그에 '.'을 사용하는 빈도가 더 높았다. 한 모델에서 같은 소스를 가지고 되풀이한 결과라 비교는 어렵지만 두번째 방식도 프롬프트를 개선하면 좀 더 나은 결과를 얻을지도 모른다.
 

개선할 점과 추가 설명

여러 명령을 연속적으로 실행하는것을 가능하게 한다는 점에서 존재함이 감사한 플러그인이지만(심지어 복사도 가능하다) 위에서 설명한 제목에 특정변수를 넣을 수 없다는 점 외에도 아쉬운 점이 조금 있었다. 그리고 플러그인 사용에 도움이 되는 추가 설명을 덧붙인다.
코파일럿이나 다른 LLM이용시에는 결과가 잘못되면 추가 프롬프트를 작성하여 피드백 후 재요구할 수 있지만 quick add의 AI assistant는 실행이 잘못되면 그걸로 끝이다. (딥하게 사용해보지 않았지만 text generator 플러그인도 마찬가지일듯 하다.)
연속적인 것을 자동화하길 원해서 가장 많이 이용한 기능은 Macro., 그런데 이 Macro 생성후 Choice로 추가를 해줘야 Run QuickAdd 커맨드 목록에 활성화되어서 사용이 복잡하게 느껴진다. Manage Macro에서 생성하기보다 이름 입력후 Macro선택하여 Add choice 한 후 매크로 설정을 해야 헷갈리지 않았다. Choice 옆에 번개표시를 클릭하면 커맨드 목록에서 바로 해당 커맨드만 따로 볼수 있다.
Multi를 추가하면 Multi하위에 있는 Choice 중 선택하여 실행할 수 있다. 이 기능으로 노션 템플릿을 열때 Split Down해서 여느냐, 새로운 Tab에 여느냐를 선택해서 실행할 수 있게했다. New notion in daily note 라는 커맨드인데, 데일리 노트 내에서 생성될 수 있도록 해두었다. 커맨드는 정확성보다는 검색이 잘 되도록 이름 붙이는 것이 좋다. 물론 Hotkey에서 단축키 설정도 해두었지만.
나는 quick add의 프롬프트를 quickadd-prompts 폴더에 저장중이며, 템플릿은 설정에서 직접 지정하거나 templates/quickadd 폴더를 이용중이다. AI Assistant 설정에서 프롬프트 폴더 설정이 가능하지만 템플릿 폴더를 일괄 변경하는 기능은 없어서 추가한 템플릿 별로 경로를 지정해주어야 한다.
{{value:input}} 을 통한 입력말고 글을 드래그하여 선택한 상태에서도 가능한데, {{selected}}를 이용하면 된다.

결론

이렇게 저렇게 테스트는 해보았지만 현재 이 방식을 사용하지 않는데, 이유는 Copilot플러그인 사용시 더 일관적인 형식의 글을 생성했기 때문이다. Qwen 등 다른 모델을 추가해보거나 Advanced 설정 후 다시 이용해보면 좋을것 같다. 혹은 지난번 가볍게 사용해보고 커스텀 해보지 않은 Text generator플러그인을 다시 사용해볼 수도 있겠다. 글 작성 용도 외에는 스크립트 실행 커맨드 생성시에도 유용하게 이용할 것 같다.
이로써 상위에 검색되는 옵시디언 AI 플러그인을 총 4개 사용해보았다. AI 기능이 있는 플러그인이 아마 더 있겠지만 오픈소스인 커뮤니티 플러그인 특성상 실 사용에는 아주 약간의 진입장벽이 있어 기능이 개선되고 사용성이 좋아지면 사용하는 것이 시간 낭비를 줄일 것 같다. 다만 Copilot 플러그인에 플러스 기능이 나오는것으로 알고 있는데, 곧 사용해보는것을 기대중이다.
 
관심 주제를 선택해주세요. 선택하지 않으면 모든 글을 구독합니다.