Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- langchain
- 크로마DB
- comfyui
- 랭체인 툴
- 리액트 네이티브 오류
- react
- 상태관리
- 리액트 네이티브
- 이미지처리
- expo go 오류
- vllmmcp
- langgraph mcp
- expo 버전 오류
- AI
- langchain react agent
- expo 51 버전
- 타입스크립트상태관리
- expo 아이폰
- nestjs시큐리티
- langchain tools
- expo 안드로이드
- rnn gnsfus
- jotai
- 네스트시큐리티
- expo 아이폰 오류
- 스프링 공부
- 자바공부
- langgraph
- VectorDB
- expo 51 오류
Archives
- Today
- Total
영리의 테크블로그
Vector DB (Chroma DB)을 활용한 LLM 페르소나 부여하기 본문
페르소나 부여
OPENAI 의 언어 모델과 임베딩 모델 을 활용할거임
임베딩은 Chroma DB 넣어 각 페르소나의 기억에 더할 예정
개요
- OpenAI의 LLM을 활용하여 다양한 페르소나를 가진 AI 캐릭터를 만들기
- 각 페르소나의 성격과 말투에 맞는 대화 스타일 구현
- Chroma Vector DB를 활용해 대화 내역을 임베딩하여 저장하고, 이를 바탕으로 이전 대화와의 연속성을 유지
- 각자의 페르소나가 다른 생각을 가지고 있게 하기
작동 예시

OpenAI API로 응답 생성
페르소나에 맞는 대화 생성
def generate_response(persona_name, user_input):
persona = personas[persona_name]
prompt = f"{persona_name}의 관점에서, {persona['description']} 사용자에게 {persona['tone']}로 응답하세요.\\\\n\\\\n사용자: {user_input}\\\\n{persona_name}:"
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=150,
temperature=0.7,
)
return response.choices[0].text.strip()
- generate_response : persona_name과 user_input을 인자로 받아, 사용자가 선택한 페르소나에 따라 응답 생성.
- prompt : 페르소나의 설명과 말투를 기반으로 사용자 질문에 맞는 대답을 생성하도록 유도.
- temperature: 창의성 조정한다는데 잘 모르겠음.
- max_tokens: 출력 토큰 조절.
Chroma Vector DB 활용
임베딩 저장
Chroma Vector DB를 사용하여 대화 내역을 벡터화하고 저장할 수 있음.
이를 통해 내가 한말들과 포스팅을 기억할 수 있게 됨
def store_embedding(text):
embedding = openai.Embedding.create(
input=text,
engine="text-embedding-ada-002"
)['data'][0]['embedding']
collection.add(documents=[text], embeddings=[embedding])
- 임베딩 생성: OpenAI의 text-embedding-ada-002 모델을 사용하여 입력된 텍스트의 임베딩을 생성함. 임베딩은 텍스트를 벡터화한 값으로, 이를 통해 텍스트 간의 유사도를 계산 가능.
- 데이터 저장: 생성된 임베딩은 Chroma Vector DB에 저장됨. 저장된 임베딩 데이터는 나중에 유사한 문맥을 검색하는 데 사용됨.
대화 함수
def chat_with_persona(persona_name):
print(f"{persona_name}와 대화를 시작합니다. 'exit'을 입력하면 종료됩니다.")
while True:
user_input = input("당신: ")
if user_input.lower() == 'exit':
break
response = generate_response(persona_name, user_input)
print(f"{persona_name}: {response}")
store_embedding(user_input)
store_embedding(response)
메인
def main():
print("사용 가능한 페르소나:")
for persona in personas.keys():
print(f"- {persona}")
selected_persona = input("대화할 페르소나를 선택하세요: ")
if selected_persona in personas:
chat_with_persona(selected_persona)
else:
print("선택한 페르소나가 존재하지 않습니다.")
if __name__ == "__main__":
main()
구현하며 느낀점
결국 핵심은 프롬포트 엔지니어링 임. 더욱 정밀하게 작성할 필요 매우 강력하게 느낌
Vector화 된 DB Test 도 많이 해봐야겠음
추후개발사항
이미지와 prompt 의 유기적 연결
flow :
이미지 분석 모델 사용
이미지 분석 collection 을 생성하여 이미지 분석 모델 사용 예정
입력 : 사용자 사진 등록 ⇒ 이미지 분석모델 ⇒ 임베딩 ⇒ Vector DB 에 값넣기
출력 : prompt ⇒ 임베딩 ⇒ 출력

'dev > AI' 카테고리의 다른 글
| Vector DB (Chroma DB), OPENAI 을 활용한 일기 시스템 구현 (5) | 2024.10.10 |
|---|---|
| Stable Diffusion ComfyUI/Web UI fastapi CORS 설정 방법 (0) | 2024.10.01 |
| ComfyUI API 사용법 구축 (FAST api) (1) | 2024.09.28 |