Skip to content

Commit

Permalink
streaming 출력 업데이트
Browse files Browse the repository at this point in the history
  • Loading branch information
teddylee777 committed Sep 7, 2024
1 parent dc344e0 commit c458b00
Showing 1 changed file with 137 additions and 51 deletions.
188 changes: 137 additions & 51 deletions 22-OpenAI/01-OpenAI-Assistant-V2.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -32,7 +32,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -94,37 +94,37 @@
"- `_DEFAULT_RAG_INSTRUCTIONS` 는 RAG 의 instruction 입니다. 프롬프트를 자유롭게 수정하여 테스트해 보세요.\n",
"- `OPENAI_API_KEY` 는 발급받은 OPENAI API KEY 를 입력해 주세요.\n",
"- `PROJECT_NAME` 은 프로젝트 이름을 입력해 주세요.\n",
"- `model_name` 은 사용할 모델을 입력해 주세요. (예, `gpt-4o`, `gpt-4o-mini`, ...)\n"
"- `model_name` 은 사용할 모델을 입력해 주세요. (예, `gpt-4o`, `gpt-4o-mini`, ...)\n",
"- `chunk_size` 는 청크 크기를 입력해 주세요.\n",
"- `chunk_overlap` 는 청크 중복 크기를 입력해 주세요."
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from langchain_teddynote.models import OpenAIAssistant\n",
"\n",
"\n",
"# RAG 시스템 프롬프트 입력\n",
"_DEFAULT_RAG_INSTRUCTIONS = \"\"\"You are an assistant for question-answering tasks. \n",
"Use the following pieces of retrieved context to answer the question. \n",
"If you don't know the answer, just say that you don't know. \n",
"Answer in Korean.\"\"\"\n",
"\n",
"\n",
"# 설정(configs)\n",
"configs = {\n",
" \"OPENAI_API_KEY\": openai_api_key, # OpenAI API 키\n",
" \"instructions\": _DEFAULT_RAG_INSTRUCTIONS, # RAG 시스템 프롬프트\n",
" \"PROJECT_NAME\": \"PDF-RAG-TEST\", # 프로젝트 이름(자유롭게 설정)\n",
" \"model_name\": \"gpt-4o\", # 사용할 OpenAI 모델 이름(gpt-4o, gpt-4o-mini, ...)\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from langchain_teddynote.models import OpenAIAssistant\n",
" \"chunk_size\": 1000, # 청크 크기\n",
" \"chunk_overlap\": 100, # 청크 중복 크기\n",
"}\n",
"\n",
"\n",
"# 인스턴스 생성\n",
"assistant = OpenAIAssistant(configs)"
Expand All @@ -151,7 +151,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -175,7 +175,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
Expand Down Expand Up @@ -207,8 +207,8 @@
"metadata": {},
"outputs": [],
"source": [
"# assistant_id = \"asst_465H6MZzEs6yabcsdfdfdl\"\n",
"# vector_id = \"vs_jVBYPLHVrxTvQsdfsgsfsf\"\n",
"# assistant_id = \"asst_TdJbouMO7gU.........\"\n",
"# vector_id = \"vs_ibSoSSErFDnS9........\"\n",
"\n",
"# # 어시스턴트 설정\n",
"# assistant.setup_assistant(assistant_id)\n",
Expand All @@ -221,19 +221,80 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## STEP 4) 대화"
"## STEP 4) 대화\n",
"\n",
"- `stream()` 스트리밍 기능을 지원합니다.\n",
"- `invoke()` 는 일반 출력입니다. 답변 생성이 끝날때까지 기다렸다가 한 번에 출력합니다."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`stream()` 스트리밍 기능을 지원합니다."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"삼성전자가 개발한 생성형 AI의 이름은 '삼성 가우스'입니다【4:0†source】."
]
}
],
"source": [
"for token in assistant.stream(\"삼성전자가 개발한 생성형 AI의 이름은?\"):\n",
" print(token, end=\"\", flush=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"아래는 좀 더 편리하게 스트리밍 출력을 해줍니다. (단, 직접 토큰을 받아서 화면에 뿌려야 하는 경우에는 이전 코드가 더 유용합니다.)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The name of the generative AI developed by Samsung Electronics is \"Samsung GAUSS\"【4:0†source】."
]
}
],
"source": [
"from langchain_teddynote.messages import stream_response\n",
"\n",
"stream_response(assistant.stream(\"이전 답변을 영어로\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`invoke()` 는 일반 출력입니다. 답변 생성이 끝날때까지 기다렸다가 한 번에 출력합니다."
]
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"삼성전자가 개발한 생성형 AI의 이름은 '삼성 가우스'입니다 .\n"
"삼성전자가 개발한 생성형 AI의 이름은 \"삼성 가우스\"입니다【4:0†source】.\n"
]
}
],
Expand All @@ -244,14 +305,14 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"삼성전자가 개발한 생성형 AI의 이름은 '삼성 가우스'입니다【8:0†source】.\n"
"출처는 `SPRI_AI_Brief_2023년12월호_F.pdf` 문서의 10페이지입니다【12:0†source】.\n"
]
}
],
Expand All @@ -260,22 +321,36 @@
"print(assistant.invoke(\"이전의 답변에 대한 출처(페이지)를 알려줘\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"대화 목록을 조회합니다."
]
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'content': '삼성전자가 개발한 생성형 AI의 이름은?', 'role': 'user'},\n",
" {'content': \"삼성전자가 개발한 생성형 AI의 이름은 '삼성 가우스'입니다 .\", 'role': 'assistant'},\n",
" {'content': \"삼성전자가 개발한 생성형 AI의 이름은 '삼성 가우스'입니다【4:0†source】.\",\n",
" 'role': 'assistant'},\n",
" {'content': '이전 답변을 영어로', 'role': 'user'},\n",
" {'content': 'The name of the generative AI developed by Samsung Electronics is \"Samsung GAUSS\"【4:0†source】.',\n",
" 'role': 'assistant'},\n",
" {'content': '삼성전자가 개발한 생성형 AI의 이름은?', 'role': 'user'},\n",
" {'content': '삼성전자가 개발한 생성형 AI의 이름은 \"삼성 가우스\"입니다【4:0†source】.',\n",
" 'role': 'assistant'},\n",
" {'content': '이전의 답변에 대한 출처(페이지)를 알려줘', 'role': 'user'},\n",
" {'content': \"삼성전자가 개발한 생성형 AI의 이름은 '삼성 가우스'입니다【8:0†source】.\",\n",
" {'content': '출처는 `SPRI_AI_Brief_2023년12월호_F.pdf` 문서의 10페이지입니다【12:0†source】.',\n",
" 'role': 'assistant'}]"
]
},
"execution_count": 9,
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -294,86 +369,97 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"# 대화 초기화\n",
"assistant.clear_chat_history()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"새로운 주제의 대화를 시작합니다."
]
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"구글은 2023년 10월 27일에 앤쓰로픽에 최대 20억 달러를 투자하기로 합의했습니다. 이 중 5억 달러를 우선 투자하였으며, 나머지 15억 달러는 향후에 투자할 예정입니다. 또한, 구글은 앤쓰로픽과의 클라우드 서비스 사용 계약도 체결하여, 앤쓰로픽은 4년간 30억 달러 규모의 구글 클라우드 서비스를 사용하게 됩니다【4:0†source】.\n"
"구글이 앤쓰로픽에 대한 투자 계획을 발표했습니다. 구글은 2023년 10월 27일 최대 20억 달러를 앤쓰로픽에 투자하기로 합의하였으며, 이 중 5억 달러를 우선 투자했습니다. 또한 앤쓰로픽은 구글의 클라우드 서비스를 사용하기 위해 4년간 30억 달러 규모의 계약도 체결했습니다. 구글은 이미 2023년 2월에 앤쓰로픽에 5억 5천만 달러를 투자한 바 있으며, 이번 투자로 앤쓰로픽과의 협력을 강화할 계획입니다【4:0†source】."
]
}
],
"source": [
"# 질문\n",
"print(assistant.invoke(\"구글이 앤쓰로픽에 투자 계획을 발표했습니다. 이에 대해 알려줘\"))"
"stream_response(\n",
" assistant.stream(\"구글이 앤쓰로픽에 투자 계획을 발표했습니다. 이에 대해 알려줘\")\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"## 보고서: 구글의 앤쓰로픽 투자 계획\n",
"### 구글과 앤쓰로픽의 투자 계획 보고서\n",
"\n",
"---\n",
"\n",
"### 개요\n",
"이 보고서는 구글이 인공지능 연구기업 앤쓰로픽(Anthropic)에 대한 투자 계획을 발표한 내용을 다룹니다. 해당 투자는 구글의 AI 및 클라우드 서비스 분야에서의 전략적 협력을 강화하며, 양사간의 긴밀한 협력 관계를 형성하는데 목적이 있습니다.\n",
"#### 1. 투자 발표 개요\n",
"2023년 10월 27일, 구글은 인공지능(AI) 연구 및 개발 회사인 앤쓰로픽에 대한 대규모 투자 계획을 발표했습니다.\n",
"\n",
"### 투자 합의 내용\n",
"구글은 앤쓰로픽에 최대 20억 달러를 투자하기로 합의했습니다. 투자 계획은 두 단계로 진행됩니다:\n",
"1. **1단계**: 구글은 초기 투자로 5억 달러를 앤쓰로픽에 투자하였습니다.\n",
"2. **2단계**: 추가적으로 구글은 향후 15억 달러를 앤쓰로픽에 투자할 계획입니다.\n",
"#### 2. 투자 세부 내용\n",
"- **총 투자 금액**: 최대 20억 달러\n",
" - 이 중 5억 달러는 즉시 투자 진행\n",
"- **클라우드 서비스 계약**: 앤쓰로픽은 구글의 클라우드 서비스를 이용하기 위해 4년간 30억 달러 규모의 계약을 체결\n",
"\n",
"### 클라우드 서비스 계약\n",
"투자 외에도 구글과 앤쓰로픽은 클라우드 서비스 사용 계약을 체결했습니다. 앤쓰로픽은 앞으로 4년간 구글 클라우드(Google Cloud) 서비스를 사용하며, 이 계약의 규모는 30억 달러에 달합니다. 이를 통해 앤쓰로픽은 구글의 최첨단 클라우드 인프라를 활용할 수 있게 되며, 구글 클라우드는 안정적인 수익을 확보하게 됩니다.\n",
"#### 3. 배경 및 맥락\n",
"이미 2023년 2월, 구글은 앤쓰로픽에 5억 5천만 달러를 투자한 바 있습니다. 이번 추가 투자로 인해 구글과 앤쓰로픽 간의 협력은 더욱 강화될 것으로 기대됩니다.\n",
"\n",
"### 기대 효과와 전망\n",
"이번 투자는 구글이 인공지능 분야에서 지배적인 위치를 더욱 공고히 하는 계기가 될 것으로 보입니다. 뿐만 아니라, 구글 클라우드 서비스를 통해 앤쓰로픽의 AI 연구 및 개발이 가속화될 전망입니다. 양사 간의 협력은 기술 혁신과 시장 경쟁력 강화에 크게 기여할 것으로 기대됩니다.\n",
"#### 4. 전략적 의미\n",
"이번 투자 및 계약을 통해 구글은 자사의 클라우드 서비스 이용을 촉진함과 동시에, 급변하는 AI 기술 분야에서의 입지를 공고히 하고자 하는 전략적 목표를 가지고 있습니다.\n",
"\n",
"### 결론\n",
"구글의 앤쓰로픽에 대한 투자와 클라우드 서비스 계약 체결은 AI와 클라우드 컴퓨팅 분야에서의 긴밀한 협력으로 이어질 것입니다. 이는 양사 모두에게 중요한 전략적 결정으로, 향후 기술 발전과 시장에서의 유리한 입지 확보에 기여할 것으로 보입니다.\n",
"---\n",
"\n",
"출처: 구글 2023년 10월 27일 발표【4:0†source】.\n"
"#### 참고 문헌\n",
"- Source: 구글과 앤쓰로픽의 투자 계획 발표 관련 문서【4:0†source】\n"
]
}
],
"source": [
"# 추가 질문\n",
"print(assistant.invoke(\"이전의 답변을 보고서 양식으로 작성해 주세요\"))"
"stream_response(assistant.stream(\"이전의 답변을 보고서 양식으로 작성해 주세요\"))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'content': '구글이 앤쓰로픽에 투자 계획을 발표했습니다. 이에 대해 알려줘', 'role': 'user'},\n",
" {'content': '구글은 2023년 10월 27일에 앤쓰로픽에 최대 20억 달러를 투자하기로 합의했습니다. 이 중 5억 달러를 우선 투자하였으며, 나머지 15억 달러는 향후에 투자할 예정입니다. 또한, 구글은 앤쓰로픽과의 클라우드 서비스 사용 계약도 체결하여, 앤쓰로픽은 4년간 30억 달러 규모의 구글 클라우드 서비스를 사용하게 됩니다【4:0†source】.',\n",
" {'content': '구글이 앤쓰로픽에 대한 투자 계획을 발표했습니다. 구글은 2023년 10월 27일 최대 20억 달러를 앤쓰로픽에 투자하기로 합의하였으며, 이 중 5억 달러를 우선 투자했습니다. 또한 앤쓰로픽은 구글의 클라우드 서비스를 사용하기 위해 4년간 30억 달러 규모의 계약도 체결했습니다. 구글은 이미 2023년 2월에 앤쓰로픽에 5억 5천만 달러를 투자한 바 있으며, 이번 투자로 앤쓰로픽과의 협력을 강화할 계획입니다【4:0†source】.',\n",
" 'role': 'assistant'},\n",
" {'content': '이전의 답변을 보고서 양식으로 작성해 주세요', 'role': 'user'},\n",
" {'content': '## 보고서: 구글의 앤쓰로픽 투자 계획\\n\\n### 개요\\n이 보고서는 구글이 인공지능 연구기업 앤쓰로픽(Anthropic)에 대한 투자 계획을 발표한 내용을 다룹니다. 해당 투자는 구글의 AI 및 클라우드 서비스 분야에서의 전략적 협력을 강화하며, 양사간의 긴밀한 협력 관계를 형성하는데 목적이 있습니다.\\n\\n### 투자 합의 내용\\n구글은 앤쓰로픽에 최대 20억 달러를 투자하기로 합의했습니다. 투자 계획은 두 단계로 진행됩니다:\\n1. **1단계**: 구글은 초기 투자로 5억 달러를 앤쓰로픽에 투자하였습니다.\\n2. **2단계**: 추가적으로 구글은 향후 15억 달러를 앤쓰로픽에 투자할 계획입니다.\\n\\n### 클라우드 서비스 계약\\n투자 외에도 구글과 앤쓰로픽은 클라우드 서비스 사용 계약을 체결했습니다. 앤쓰로픽은 앞으로 4년간 구글 클라우드(Google Cloud) 서비스를 사용하며, 이 계약의 규모는 30억 달러에 달합니다. 이를 통해 앤쓰로픽은 구글의 최첨단 클라우드 인프라를 활용할 수 있게 되며, 구글 클라우드는 안정적인 수익을 확보하게 됩니다.\\n\\n### 기대 효과와 전망\\n이번 투자는 구글이 인공지능 분야에서 지배적인 위치를 더욱 공고히 하는 계기가 될 것으로 보입니다. 뿐만 아니라, 구글 클라우드 서비스를 통해 앤쓰로픽의 AI 연구 및 개발이 가속화될 전망입니다. 양사 간의 협력은 기술 혁신과 시장 경쟁력 강화에 크게 기여할 것으로 기대됩니다.\\n\\n### 결론\\n구글의 앤쓰로픽에 대한 투자와 클라우드 서비스 계약 체결은 AI와 클라우드 컴퓨팅 분야에서의 긴밀한 협력으로 이어질 것입니다. 이는 양사 모두에게 중요한 전략적 결정으로, 향후 기술 발전과 시장에서의 유리한 입지 확보에 기여할 것으로 보입니다.\\n\\n출처: 구글 2023년 10월 27일 발표【4:0†source】.',\n",
" {'content': '### 구글과 앤쓰로픽의 투자 계획 보고서\\n\\n---\\n\\n#### 1. 투자 발표 개요\\n2023년 10월 27일, 구글은 인공지능(AI) 연구 및 개발 회사인 앤쓰로픽에 대한 대규모 투자 계획을 발표했습니다.\\n\\n#### 2. 투자 세부 내용\\n- **총 투자 금액**: 최대 20억 달러\\n - 이 중 5억 달러는 즉시 투자 진행\\n- **클라우드 서비스 계약**: 앤쓰로픽은 구글의 클라우드 서비스를 이용하기 위해 4년간 30억 달러 규모의 계약을 체결\\n\\n#### 3. 배경 및 맥락\\n이미 2023년 2월, 구글은 앤쓰로픽에 5억 5천만 달러를 투자한 바 있습니다. 이번 추가 투자로 인해 구글과 앤쓰로픽 간의 협력은 더욱 강화될 것으로 기대됩니다.\\n\\n#### 4. 전략적 의미\\n이번 투자 및 계약을 통해 구글은 자사의 클라우드 서비스 이용을 촉진함과 동시에, 급변하는 AI 기술 분야에서의 입지를 공고히 하고자 하는 전략적 목표를 가지고 있습니다.\\n\\n---\\n\\n#### 참고 문헌\\n- Source: 구글과 앤쓰로픽의 투자 계획 발표 관련 문서【4:0†source】\\n',\n",
" 'role': 'assistant'}]"
]
},
"execution_count": 13,
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
Expand Down

0 comments on commit c458b00

Please sign in to comment.