openai의 gpt 모델 API를 활용해서 텍스트를 생성할때는 1회성입니다!!
이를 개선하기 위해서 langchain의 ConversationBufferMemory를 사용해보기도 헀었는데요!
2024.01.27 - [데이터&AI/langchain] - [langchain공부] ConversationBufferMemory (과거 프롬포트 내용 기억하기!!)
그럴필요 없이!! openai에서 제공하는 threads 기능을 통해서
하나의 객채를 만들고 이어서 대화를 진행할수 있습니다!!
오늘은 이에 대하여 알아보겠습니다!!
오늘의 컨셉은 다음과 같습니다
사용자 1: 수학을 질문하는학생. 질문은 1개당 500원의 비용을 받습니다!! 질문을 많이함
사용자 2: 같은 학생이지만 1개 질문만 함
agent 1 - 수학쌤 : 돈은 잘 모르고 그냥 질문에 답변만한다
agent2 - 돈받는사람 : 그동안 몇개 질문했는지 바탕으로 계산을한다
시작해봅시다!!!!
1. 학원 구성하기
컨셉에 맞게 수학썜과 돈받는사람(clerk)으로 구성된 학원을 구성합니다.
from openai import OpenAI
client = OpenAI()
teacher = client.beta.assistants.create(
name="수학쌤",
instructions="너는 개인 수학선생님이야. 수학답안을 해줘",
tools=[{"type": "code_interpreter"}],
model="gpt-4o",
)
clerk = client.beta.assistants.create(
name="결재원",
instructions="너는 학원에서 결재받는 점원. 총 질문에 500원씩 비용을 청구해",
model="gpt-4o",
)
2. 사용자등장
user1, user2 사용자가 등장합니다!!
user1 = client.beta.threads.create()
user2 = client.beta.threads.create()
3. 사용자1의 질문공세!!
user1이 수학질문을 시작합니다!!
message = client.beta.threads.messages.create(
thread_id=user1.id,
role="user",
content="X^2 -3x -4 - 0 의 해를 찾고싶어"
)
message
해당 질문을 넣어서 agent의 수학쌤에게 시작합니다!
run = client.beta.threads.runs.create_and_poll(
thread_id=user1.id,
assistant_id=teacher.id,
instructions="사용자는 일등박사야. 그는 VIP회원이야."
)
run
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=thread.id
)
print(messages)
else:
print(run.status)
그럼!! 수학쌤의 답변을 볼수있습니다!!
익숙하죠?? 그런데!! 만약 이해가 잘 안되었다면!?
기존 API와 다르게 그냥 이유를 설명해줘!! 라고 질문합니다!
message = client.beta.threads.messages.create(
thread_id=user1.id,
role="user",
content="그 이유를 소개해줘"
)
message
그리고 결과를 보면!!
run = client.beta.threads.runs.create_and_poll(
thread_id=user1.id,
assistant_id=teacher.id,
instructions="사용자는 일등박사야. 그는 VIP회원이야. "
)
run
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=user1.id
)
print(messages)
else:
print(run.status)
기존 내용을 기억해 두었다가 그 이유를 잘 설명해줍니다!!
그래서 과거 이력을 모두 프린트해보면!
for d in messages.data[::-1]:
print(d.content[0].text.value)
print('-'*20)
그동안의 모든 이력을 잘 저장하는것을 알 수 있지요~!
다른 수학질문을 해볼까요!!?
message = client.beta.threads.messages.create(
thread_id=user1.id,
role="user",
content="X^3 -1 = 0 의 해도 알고싶어"
)
message
run = client.beta.threads.runs.create_and_poll(
thread_id=user1.id,
assistant_id=teacher.id,
instructions="사용자는 일등박사야. 그는 VIP회원이야. 일등박사님 안녕하세요? 로 대화를 시작해"
)
run
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=user1.id
)
print(messages)
else:
print(run.status)
이번에도 물론!! 잘 답변해줍니다!!
4. 사용자2의 질문!!
이떄!! user2가 등장합니다!!
message = client.beta.threads.messages.create(
thread_id=user2.id,
role="user",
content="X^2 -3x -4 - 0 의 해를 찾고싶어"
)
message
run = client.beta.threads.runs.create_and_poll(
thread_id=user2.id,
assistant_id=teacher.id,
instructions="사용자는 일등박사야. 그는 VIP회원이야. 일등박사님 안녕하세요? 로 대화를 시작해"
)
run
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=user2.id
)
print(messages)
else:
print(run.status)
thread_id = user2.id로 하여!! 진행하면!
이번에는 새 대화가 진행됩니다! user1에서 진행하던것은 아에 모르지요~!
5. 결재의시간!!!
이번엔 assistant_id를 teacher에서 clert, 점원으로 바꾸어봅식다!@!
message = client.beta.threads.messages.create(
thread_id=user1.id,
role="user",
content="이제 얼마야!?"
)
message
run = client.beta.threads.runs.create_and_poll(
thread_id=user1.id,
assistant_id=clerk.id,
instructions="지금까지의 대화내용을 바탕으로 수학계산알려준것 * 500 해서 비용을 알려줘"
)
run
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=user1.id
)
print(messages)
else:
print(run.status)
결과를 본다면!! 과거의내용을 기억해서 잘 답변해주는것을 알 수있습니다!
마찬가지 방법으로!!! 사용자2의 비용도 계산할 수 있겠지요!?
다른부분은 그대로 두고 thread_id만 바꾸어주면 됩니다!!
message = client.beta.threads.messages.create(
thread_id=user2.id,
role="user",
content="이제 얼마야!?"
)
message
run = client.beta.threads.runs.create_and_poll(
thread_id=user2.id,
assistant_id=clerk.id,
instructions="지금까지의 대화내용을 바탕으로 수학계산알려준것 * 500 해서 비용을 알려줘"
)
run
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=user2.id
)
print(messages)
else:
print(run.status)
ㅁ 참고 : https://platform.openai.com/docs/assistants/deep-dive
'데이터&AI > LLM' 카테고리의 다른 글
Openai 패키지에서 원하는 결과를 output으로 받기(Structured outputs) (3) | 2024.11.04 |
---|---|
OpenAI Batch API 사용하기 (with Python + 간단한예시) (1) | 2024.11.03 |
reddit의 서브레딧(wallstreetbets) 데이터 모으고 분석하기!! (with python + GPT vision/text) (5) | 2024.11.01 |
GPT로 그림이미지 분석하기 with Python (gpt-4o, 4o-mini) (0) | 2024.10.31 |
Grok-2 beta의 API 활용해보기 (feat. python) (5) | 2024.10.28 |
댓글