🔶 fastAPI의 프롬프트만 변경해보자
프롬프트가 응답에 어떤 영향을 주는지 궁금해서 실험을 해보았다.

위의 사진은 LM Studio인데, 알고보니깐 LM Studio에서만 테스트할때 저 빨간색 동그라미에 프롬프트를 설정하는거고, fastAPI를 써서 LM Studio의 응답을 요청할때는 저 빨간칸에 프롬프트를 적을 필요가 없다.
그러면 어디에다가 명령어를 적느냐? 바로 fastAPI 서버 코드에 적는 것이다.
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from langchain_openai import ChatOpenAI
from langchain_core.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
app = FastAPI()
# CORS 설정
origins = [
"http://localhost", # 개발 중인 클라이언트 주소
"http://localhost:3000", # React 개발 서버 주소
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["POST"],
allow_headers=["Content-Type"],
)
llm = ChatOpenAI(
base_url="http://localhost:5000/v1", # LM Studio의 URL
api_key="lm-studio",
model="heegyu/EEVE-Korean-Instruct-10.8B-v1.0-GGUF",
streaming=True,
callbacks=[StreamingStdOutCallbackHandler()],
)
class Message(BaseModel):
question: str # 클라이언트에서 question 필드로 전송될 것으로 기대
@app.post("/chat")
async def chat_with_bot(message: Message):
try:
prompt = PromptTemplate.from_template(
"""You are an assistant, and you are 25 years old. Your favorite color is blue. Answers will be in Korean only.
#Question:
{question}
#Answer: """
)
chain = prompt | llm | StrOutputParser()
response = chain.invoke({"question": message.question}) # 클라이언트로부터 받은 질문 사용
return {"response": response} # JSON 형태로 응답
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
위의 코드가 fastAPI 서버 코드인데, 저 부분에서 prompt안에 You are 어쩌구 보이지? 그 부분에 프롬프트를 적으면 되는거다. PromptTemplate을 통해서 프롬프트 템플릿을 정의합니다. {question}이라는 부분에 클라이언트로부터 받은 질문이 삽입됩니다.
참고로, 저번 이슈글에서 실험해본 결과, model="heegyu/EEVE-Korean-Instruct-10.8B-v1.0-GGUF"이 가장 성능이 좋았어서 해당 모델을 사용하려고 한다. Q5버전으로 말이다. (=> 무슨소리인지 모르겠으면, 이전 이슈 참고)
🔸 프롬프트 (1)
You are an assistant, and your task is to answer only in Korean as if you were a visiting patient. The doctor is asking questions to better understand your symptoms. You answer the doctor's questions with simple and easy expressions.

🔸 프롬프트 (2)
You are an assistant, and you are 25 years old. Your favorite color is blue. Answers will be in Korean only.

🔸 프롬프트 (3)
You are the assistant, you are the school teacher. School teachers will deal with students. Teachers must answer students in simple expressions and informal language.

🔊 결론
음..어쨌든 프롬프트를 변경하면 다른 응답 결과들을 얻을 수 있다는 걸 확인했다.
🔶 해결해야 할 이슈들
1) 성능
3-7세의 아이 타깃일 때, 발음을 알아듣기 힘들때, 어떻게 받아들인건지..?
예를 들어 인공지능 인형 카티에서는 아이들이 뭐라도 말하는 거에서 단어라도 추출해서, 관련 문장을 만들어 되묻는다고 했는데, 이런식으로 이런 상황에 어떻게 대응할지 생각해봐야한다,
2) 어떤 놀이를 선택하느냐에 따라 다른 프롬프트 전달
이건 프론트, 백 연결의 문제인데 다음 이슈에서 시도해보겠다.
3) 프롬프트 엔지니어링
어떻게 프롬프트를 설계해야할까? 이 부분도 문제이다.
4) 만약에 아이의 대답이 없다면 어떻게 할것인가?
아이가 응답이 없다면, 인공지능이 먼저 말을 걸어야할까?
지금은 사용자 말 하나에 응답 하나 이렇게 1:1로 구성이 되어있는데,
만약에 아이가 말을 안하면 영원히 응답을 들을 수 없는 구조이다.
이 점은 어떻게 해결 할 것인가?
이런 이슈들을 고려해봐야할 것 같다. 다음 이슈에서는 2번을 고민해보겠다.
🔶 fastAPI의 프롬프트만 변경해보자
프롬프트가 응답에 어떤 영향을 주는지 궁금해서 실험을 해보았다.
위의 사진은 LM Studio인데, 알고보니깐 LM Studio에서만 테스트할때 저 빨간색 동그라미에 프롬프트를 설정하는거고, fastAPI를 써서 LM Studio의 응답을 요청할때는 저 빨간칸에 프롬프트를 적을 필요가 없다.
그러면 어디에다가 명령어를 적느냐? 바로 fastAPI 서버 코드에 적는 것이다.
위의 코드가 fastAPI 서버 코드인데, 저 부분에서
prompt안에You are 어쩌구보이지? 그 부분에 프롬프트를 적으면 되는거다. PromptTemplate을 통해서 프롬프트 템플릿을 정의합니다.{question}이라는 부분에 클라이언트로부터 받은 질문이 삽입됩니다.참고로, 저번 이슈글에서 실험해본 결과,
model="heegyu/EEVE-Korean-Instruct-10.8B-v1.0-GGUF"이 가장 성능이 좋았어서 해당 모델을 사용하려고 한다. Q5버전으로 말이다. (=> 무슨소리인지 모르겠으면, 이전 이슈 참고)🔸 프롬프트 (1)
🔸 프롬프트 (2)
🔸 프롬프트 (3)
🔊 결론
음..어쨌든 프롬프트를 변경하면 다른 응답 결과들을 얻을 수 있다는 걸 확인했다.
🔶 해결해야 할 이슈들
1) 성능
3-7세의 아이 타깃일 때, 발음을 알아듣기 힘들때, 어떻게 받아들인건지..?
예를 들어 인공지능 인형 카티에서는 아이들이 뭐라도 말하는 거에서 단어라도 추출해서, 관련 문장을 만들어 되묻는다고 했는데, 이런식으로 이런 상황에 어떻게 대응할지 생각해봐야한다,
2) 어떤 놀이를 선택하느냐에 따라 다른 프롬프트 전달
이건 프론트, 백 연결의 문제인데 다음 이슈에서 시도해보겠다.
3) 프롬프트 엔지니어링
어떻게 프롬프트를 설계해야할까? 이 부분도 문제이다.
4) 만약에 아이의 대답이 없다면 어떻게 할것인가?
아이가 응답이 없다면, 인공지능이 먼저 말을 걸어야할까?
지금은 사용자 말 하나에 응답 하나 이렇게 1:1로 구성이 되어있는데,
만약에 아이가 말을 안하면 영원히 응답을 들을 수 없는 구조이다.
이 점은 어떻게 해결 할 것인가?
이런 이슈들을 고려해봐야할 것 같다. 다음 이슈에서는 2번을 고민해보겠다.