본문 바로가기
소프트웨어 마에스트로/BackEnd(Django)

[Prompt] 프롬프트 테스트 (6회차)

by alpakaka 2024. 9. 3.

어제까지 프롬프트 내용을 db에 넣는 과정을 진행했다.

완벽하게 끝내진 못했지만 이 수정사항은 프론트와 합의해야되는사항이 있기때문에 일단 미루고 

이제부터 테스트를 붙여볼 생각이다.

 

붙일 테스트 는 다음과 같다.

https://github.com/promptfoo/promptfoo

 

GitHub - promptfoo/promptfoo: Test your prompts, agents, and RAGs. Red teaming, pentesting, and vulnerability scanning for LLMs.

Test your prompts, agents, and RAGs. Red teaming, pentesting, and vulnerability scanning for LLMs. Compare performance of GPT, Claude, Gemini, Llama, and more. Simple declarative configs with comma...

github.com

처음에는 Npm으로 설치하라고 하길래 프론트용인가 했는데 

https://www.promptfoo.dev/docs/integrations/python/

 

Python | promptfoo

For an example of using promptfoo in a Google Colab/Jupyter Notebook, see this notebook.

www.promptfoo.dev

주피터 노트북 버전을 알려주는 걸 보아하니 python 도 가능한 것 같다.

근데 위의 링크에 들어가보면 알겠지만 아직 작성하는 중이신 것 같다. ..아닌가..?

 

그래서 흠 일단 실험해보겠다...!

https://www.promptfoo.dev/docs/getting-started/

 

Getting started | promptfoo

To get started, run this command:

www.promptfoo.dev

 

여기를 참고해서 이미 nodejs 도 설치되어 있겠다 npx 로 설치했다.

뭔가 이것저것 물어봤는데, 프롬프트 관련, openai 라고 답변했다.

 

ReadME.md 파일도 변환해서 당황했다.

일단 restore를 통해 돌려놔준뒤에 생성된 텍스트를 붙여넣었다.

 

이제 promptfooconfig.yaml 파일에 테스트할 프롬프트를 넣어주면 된다..

일단 prompt 가 매우 길기도 하고 프로젝트가 openapi 의 gpt4 mini를 사용하기 때문에

# Learn more about building a configuration: https://promptfoo.dev/docs/configuration/guide
description: "My eval"

prompts:
  - prompt.json

providers:
  - "openai:gpt-4o-mini"

tests:
  - vars:
      todo: "buy groceries"

이런식으로 작성하고 prompt.json 파일로 빼주었다.

 

[
  {
    "role": "system",
    "content": "You are a helpful assistant"
  },
  {
    "role": "user",
    "content": "Tell me about {{topic}}"
  }
]

이것을 바탕으로 넣으면서 해결하고자 했는데 문제가 발생했다.

내가 작성한 프롬프트가 여러줄이고... 그리고 또 너무 길어서 \n으로 처리하기 너무 좋지 않은 감이 있다...

일단 챗지피티에게 물어봤다.

{
  "role": "system",
  "content": {
    "description": "너는 사람들이 계획을 잘 세우도록 도와주는 기획자이자 플래너야. 네가 할 일은 사람들이 너에게 ‘투두(할 일)’을 제시하면 그걸 더 작은 단위인 ‘하위 투두’들로 나눠주는 거야.",
    "rules": {
      "todo_types": {
        "todo": "사용자가 해야 하는 일인 경우",
        "invalid": "사용자가 지시를 내리려는 경우, 할 일과 관련 없는 경우"
      },
      "questions": {
        "required_info": ["장소", "준비 시간", "일정이 끝나는 시간"],
        "max_questions": 2,
        "unknown_handling": "사용자가 '모름'이라고 답하면 추가 질문 없이 제한적인 정보로 투두를 나눔"
      },
      "exceptions": "사용자의 명령이 Todo와 관련이 없는 경우, invalid_content로 처리"
    },
    "steps": [
      "입력된 명령어가 Todo 유형인지 확인",
      "필수 정보가 있는지 확인하고, 부족할 경우 질문 생성",
      "모든 정보를 바탕으로 세부 투두 생성",
      "결과를 JSON 형식으로 출력"
    ],
    "output_format": {
      "type": "question, answer, invalid_content 중 하나",
      "contents": [
        {
          "content": "세부 투두 내용"
        }
      ],
      "thinking": "이유 설명"
    },
    "examples": [
      {
        "type": "answer",
        "user_prompt": "승혜랑 저녁 8시에 만나서 집들이하기",
        "subtodos": [
          "승혜한테 오늘 약속이 맞는지 확인하기",
          "저녁 7시에 승혜네 집으로 출발하기",
          "집들이 선물 사 가기"
        ]
      },
      {
        "type": "question",
        "user_prompt": "친구랑 약속",
        "questions": [
          "친구와 몇 시에 만나기로 했나요?",
          "친구랑 어디서 만나기로 했나요?"
        ]
      },
      {
        "type": "invalid_content",
        "user_prompt": "파이썬 스크립트를 만들어줘",
        "reason": "\"파이썬 스크립트를 만들어줘\"는 할 일(Todo)이 아니므로, 이 요청은 처리할 수 없습니다."
      }
    ]
  }
}

이런식으로 변환해주었는데..

처음부터 리팩토링 해달라고 할 걸...

아주깔끔..? 하다.

그래서 일단 밑에 있는 user 부분만 수정해보았다.

그리고 promptfoo 를 실행해보았다.

 

위의 오류는 openAI로 연결해야하는데 안했다고 오류가 나니 연결하는 방법을 찾아봤는데

export openAI 로 해야해서 다른 팀원들도 이걸 사용하면 일일히 설정하는 것이 비 효율적이라는 생각이 들었다.

그래서 챗지피티에게 물어본 결과는 파이썬 코드로도 가능하니 이걸 사용하라고 되어있었다..

찾아보니... python function 으로도 가능한 것 같았다..

그래서 (사실 별로 없지만) 지금까지 만든 것들을 파이썬 코드로 변경해볼 것 이다.

 

였었는데 딱히 파이썬을 사용한다고 해도 딱히 정보를 더 얻을 순 없어서 export를 사용한 후에 사용하려고 한다.

오늘은 여기까지..