■ 라마 인덱스에서 질의 응답을 사용하는 방법을 보여준다.
※ 첨부 파일 data.zip 파일을 다운로드 받아 적당한 위치에 압축을 풀고 main.py의 SimpleDirectoryReader 객체를 생성하는 부분에서 input_dir 인자에 적절한 디렉토리 경로를 설정한다.
▶ main.py
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 |
import os import logging import sys from llama_index.core import SimpleDirectoryReader, GPTVectorStoreIndex os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEY>" logging.basicConfig(stream = sys.stdout, level = logging.DEBUG, force = True) simpleDirectoryReader = SimpleDirectoryReader(input_dir = "/home/king/data") documentList = simpleDirectoryReader.load_data() vectorStoreIndex = GPTVectorStoreIndex.from_documents(documentList, model = "gpt-3.5-instruct") retrieverQueryEngine = vectorStoreIndex.as_query_engine() answer1 = retrieverQueryEngine.query("미코의 소꿉친구 이름은?" ) answer2 = retrieverQueryEngine.query("울프 코퍼레이션의 CEO 이름은?") answer3 = retrieverQueryEngine.query("미코의 성격은?" ) print(f"미코의 소꿉친구 이름 : {answer1}") print(f"울프 코퍼레이션 CEO 이름 : {answer2}") print(f"미코의 성격은 :\n{answer3}") |
▶ 실행 결과
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
DEBUG:llama_index.core.readers.file.base:> [SimpleDirectoryReader] Total files added: 7 DEBUG:fsspec.local:open file: /home/king/data/akazukin1.txt DEBUG:fsspec.local:open file: /home/king/data/akazukin2.txt DEBUG:fsspec.local:open file: /home/king/data/akazukin3.txt DEBUG:fsspec.local:open file: /home/king/data/akazukin4.txt DEBUG:fsspec.local:open file: /home/king/data/akazukin5.txt DEBUG:fsspec.local:open file: /home/king/data/akazukin6.txt DEBUG:fsspec.local:open file: /home/king/data/akazukin7.txt DEBUG:llama_index.core.node_parser.node_utils:> Adding chunk: 제1장: 데이터 프론트 밤이 되면 반짝이는 네오 도쿄. 고층 빌딩이 늘어서고, 네온... DEBUG:llama_index.core.node_parser.node_utils:> Adding chunk: 제2장: 울프 코퍼레이션의 함정 미코는 목적지인 술집 '할머니의 집'으로 향하는 길... DEBUG:llama_index.core.node_parser.node_utils:> Adding chunk: 제3장: 배신과 재회 술집 '할머니의 집'에서 미코는 데이터를 받을 사람인 료를 기... DEBUG:llama_index.core.node_parser.node_utils:> Adding chunk: 제4장: 울프 코퍼레이션의 붕괴 미코와 료는 해커 집단과 함께 울프 코퍼레이션에 대... DEBUG:llama_index.core.node_parser.node_utils:> Adding chunk: 제5장: 결전의 순간 미코와 료는 마침내 울프 코퍼레이션의 최상층에 도착해 CEO인... DEBUG:llama_index.core.node_parser.node_utils:> Adding chunk: 제6장: 진실의 해방 미코는 울프 박사의 약점을 파고들어 그를 쓰러뜨리는데 성공한다... DEBUG:llama_index.core.node_parser.node_utils:> Adding chunk: 제7장: 새로운 시작 울프 코퍼레이션이 무너진 후, 미코와 료는 서로의 과거를 용서... DEBUG:httpx:load_ssl_context verify=True cert=None trust_env=True http2=False DEBUG:httpx:load_verify_locations cafile='/home/king/testproject/env/lib/python3.10/site-packages/certifi/cacert.pem' DEBUG:openai._base_client:Request options: {'method': 'post', 'url': '/embeddings', 'files': None, 'post_parser': <function Embeddings.create.<locals>.parser at 0x7ffae06c4790>, 'json_data': {'input': ["file_path: /home/king/data/akazukin1.txt 제1장: 데이터 프론트 밤이 되면 반짝이는 네오 도쿄. 고층 빌딩이 늘어서고, 네온사인이 거리를 수놓는다. 그 거리에서 빨간 두건을 쓴 소녀 미코는 불법 데이터 카우리아를 운반하는 배달원으로 일하고 있었다. 그녀는 어머니가 병에 걸려 치료비를 벌기 위해 데이터카우리아에 몸을 던지고 있었다. 그러던 어느 날, 미코는 중요한 데이터를 운반하는 임무를 맡게 된다. 그 데이터에는 거대 기업 '울프 코퍼레이션'의 시민에 대한 악랄한 지배를 폭로하는 정보가 담겨 있었다. 그녀는 데이터를 받아 목적지로 향한다.", "file_path: /home/king/data/akazukin2.txt 제2장: 울프 코퍼레이션의 함정 미코는 목적지인 술집 '할머니의 집'으로 향하는 길에 울프 코퍼레이션의 요원들에게 쫓기게 된다. 그들은 '빨간 망토'라는 데이터 카우리아에 대한 소문을 듣고 데이터를 탈취하려 했다. 미코는 교묘하게 요원들을 흩뿌리고 술집에 도착한다.", "file_path: /home/king/data/akazukin3.txt 제3장: 배신과 재회 술집 '할머니의 집'에서 미코는 데이터를 받을 사람인 료를 기다리고 있었다. 료는 그녀의 어릴 적 친구이자 그 역시 울프 코퍼레이션과 싸우는 해커 집단의 일원이었다. 하지만 료는 미코에게 배신감을 느꼈고, 그녀가 데이터 카우리아에 몸을 던진 것에 화가 났다. 그럼에도 불구하고 미코는 료에게 데이터를 건네며 울프 코퍼레이션에 대한 반격을 믿기로 한다. 두 사람은 함께 울프 코퍼레이션의 음모를 밝혀내고 시민들을 구하기로 결심한다.", 'file_path: /home/king/data/akazukin4.txt 제4장: 울프 코퍼레이션의 붕괴 미코와 료는 해커 집단과 함께 울프 코퍼레이션에 대한 최후의 결전을 벌인다. 능숙한 해킹 기술과 신체 능력으로 그들은 울프 코퍼레이션의 보안을 차례로 뚫어 나간다. 그 과정에서 미코는 울프 코퍼레이션이 어머니의 병에 관여하고 있다는 사실을 알게 된다. 그녀는 분노에 휩싸여 울프코퍼레이션에 대한 복수를 다짐한다.', 'file_path: /home/king/data/akazukin5.txt 제5장: 결전의 순간 미코와 료는 마침내 울프 코퍼레이션의 최상층에 도착해 CEO인 교활한 울프 박사와 대면한다. 울프 박사는 시민을 지배하려는 사악한 야망을 드러내며 자신의 압도적인 힘을 과시한다. 하지만 미코와 료는 서로를 도와가며 울프 박사와 싸우고 그의 약점을 찾아낸다.', 'file_path: /home/king/data/akazukin6.txt 제6장: 진실의 해방 미코는 울프 박사의 약점을 파고들어 그를 쓰러뜨리는데 성공한다. 그리고 해커 집단과 함께 울프 코퍼레이션의 악행을 세상에 공개하고 시민들을 해방시킨다. 이 승리로 미코의 어머니의 치료법도 찾아내고, 그녀의 병은 완치된다.', 'file_path: /home/king/data/akazukin7.txt 제7장: 새로운 시작 울프 코퍼레이션이 무너진 후, 미코와 료는 서로의 과거를 용서하고 다시 우정을 회복한다. 미코는 데이터카우리아를 그만두고 료와 함께 새로운 길을 걷기 시작한다. 그들은 스스로의 힘으로 미래의 네오 도쿄를 더 나은 도시로 바꾸어 나갈 것을 다짐한다. 이것은 미코와 료, 그리고 전뇌 빨간 망토의 새로운 모험의 시작이었다.'], 'model': 'text-embedding-ada-002', 'encoding_format': 'base64'}} DEBUG:openai._base_client:Sending HTTP Request: POST https://api.openai.com/v1/embeddings DEBUG:httpcore.connection:connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=60.0 socket_options=None DEBUG:httpcore.connection:connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7ffae04d4ac0> DEBUG:httpcore.connection:start_tls.started ssl_context=<ssl.SSLContext object at 0x7ffae2e25440> server_hostname='api.openai.com' timeout=60.0 DEBUG:httpcore.connection:start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7ffae04d4a90> DEBUG:httpcore.http11:send_request_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_headers.complete DEBUG:httpcore.http11:send_request_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_body.complete DEBUG:httpcore.http11:receive_response_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Fri, 07 Jun 2024 02:54:45 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-allow-origin', b'*'), (b'openai-model', b'text-embedding-ada-002'), (b'openai-organization', b'user-89spyw5fyioq1wqsb6pwacpu'), (b'openai-processing-ms', b'41'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'3000'), (b'x-ratelimit-limit-tokens', b'1000000'), (b'x-ratelimit-remaining-requests', b'2999'), (b'x-ratelimit-remaining-tokens', b'999097'), (b'x-ratelimit-reset-requests', b'20ms'), (b'x-ratelimit-reset-tokens', b'54ms'), (b'x-request-id', b'req_69ae67ca9eb238d4290727dc246eb1f8'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=HD7fyfpryufa87pTS77MC0uuMfb0UcEmq8K0O.Vacnk-1717728885-1.0.1.1-PNnYdmy4UrqLrRSUvE_2vJd4OFDyEoHbskNosMCbbBN4n01Hl0HpBeUEbcIne2vTWTdUJHrSTrAebE6IcEQ2Uw; path=/; expires=Fri, 07-Jun-24 03:24:45 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Set-Cookie', b'_cfuvid=JyE.5uLPlGecdHlPeuz53OXELVrDeCslUnl1mwTJH78-1717728885669-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'88fd5bfdd948aa7e-ICN'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete DEBUG:openai._base_client:HTTP Response: POST https://api.openai.com/v1/embeddings "200 OK" Headers([('date', 'Fri, 07 Jun 2024 02:54:45 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('access-control-allow-origin', '*'), ('openai-model', 'text-embedding-ada-002'), ('openai-organization', 'user-89spyw5fyioq1wqsb6pwacpu'), ('openai-processing-ms', '41'), ('openai-version', '2020-10-01'), ('strict-transport-security', 'max-age=15724800; includeSubDomains'), ('x-ratelimit-limit-requests', '3000'), ('x-ratelimit-limit-tokens', '1000000'), ('x-ratelimit-remaining-requests', '2999'), ('x-ratelimit-remaining-tokens', '999097'), ('x-ratelimit-reset-requests', '20ms'), ('x-ratelimit-reset-tokens', '54ms'), ('x-request-id', 'req_69ae67ca9eb238d4290727dc246eb1f8'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=HD7fyfpryufa87pTS77MC0uuMfb0UcEmq8K0O.Vacnk-1717728885-1.0.1.1-PNnYdmy4UrqLrRSUvE_2vJd4OFDyEoHbskNosMCbbBN4n01Hl0HpBeUEbcIne2vTWTdUJHrSTrAebE6IcEQ2Uw; path=/; expires=Fri, 07-Jun-24 03:24:45 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('set-cookie', '_cfuvid=JyE.5uLPlGecdHlPeuz53OXELVrDeCslUnl1mwTJH78-1717728885669-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '88fd5bfdd948aa7e-ICN'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) DEBUG:openai._base_client:request_id: req_69ae67ca9eb238d4290727dc246eb1f8 DEBUG:openai._base_client:Request options: {'method': 'post', 'url': '/embeddings', 'files': None, 'post_parser': <function Embeddings.create.<locals>.parser at 0x7ffae048f640>, 'json_data': {'input': ['미코의 소꿉친구 이름은?'], 'model': 'text-embedding-ada-002', 'encoding_format': 'base64'}} DEBUG:openai._base_client:Sending HTTP Request: POST https://api.openai.com/v1/embeddings DEBUG:httpcore.http11:send_request_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_headers.complete DEBUG:httpcore.http11:send_request_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_body.complete DEBUG:httpcore.http11:receive_response_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Fri, 07 Jun 2024 02:54:46 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-allow-origin', b'*'), (b'openai-model', b'text-embedding-ada-002'), (b'openai-organization', b'user-89spyw5fyioq1wqsb6pwacpu'), (b'openai-processing-ms', b'19'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'3000'), (b'x-ratelimit-limit-tokens', b'1000000'), (b'x-ratelimit-remaining-requests', b'2999'), (b'x-ratelimit-remaining-tokens', b'999992'), (b'x-ratelimit-reset-requests', b'20ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_e6b1e59a044cca0adaaab31e82d85880'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'CF-RAY', b'88fd5c01ae8daa7e-ICN'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete DEBUG:openai._base_client:HTTP Response: POST https://api.openai.com/v1/embeddings "200 OK" Headers({'date': 'Fri, 07 Jun 2024 02:54:46 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'access-control-allow-origin': '*', 'openai-model': 'text-embedding-ada-002', 'openai-organization': 'user-89spyw5fyioq1wqsb6pwacpu', 'openai-processing-ms': '19', 'openai-version': '2020-10-01', 'strict-transport-security': 'max-age=15724800; includeSubDomains', 'x-ratelimit-limit-requests': '3000', 'x-ratelimit-limit-tokens': '1000000', 'x-ratelimit-remaining-requests': '2999', 'x-ratelimit-remaining-tokens': '999992', 'x-ratelimit-reset-requests': '20ms', 'x-ratelimit-reset-tokens': '0s', 'x-request-id': 'req_e6b1e59a044cca0adaaab31e82d85880', 'cf-cache-status': 'DYNAMIC', 'server': 'cloudflare', 'cf-ray': '88fd5c01ae8daa7e-ICN', 'content-encoding': 'gzip', 'alt-svc': 'h3=":443"; ma=86400'}) DEBUG:openai._base_client:request_id: req_e6b1e59a044cca0adaaab31e82d85880 DEBUG:llama_index.core.indices.utils:> Top 2 nodes: > [Node 9a7592ab-0198-4e74-a4d2-65c38bd7afe5] [Similarity score: 0.826677] 제5장: 결전의 순간 미코와 료는 마침내 울프 코퍼레이션의 최상층에 도착해 CEO인 교활한 울프 박사와 대면한다. 울프 박사는 시민을 지배하려는 사악한 야망을 드러내며 자신... > [Node e4b9a4c8-86a0-4e1d-8097-e05df703030a] [Similarity score: 0.825153] 제3장: 배신과 재회 술집 '할머니의 집'에서 미코는 데이터를 받을 사람인 료를 기다리고 있었다. 료는 그녀의 어릴 적 친구이자 그 역시 울프 코퍼레이션과 싸우는 해커 집단... DEBUG:httpx:load_ssl_context verify=True cert=None trust_env=True http2=False DEBUG:httpx:load_verify_locations cafile='/home/king/testproject/env/lib/python3.10/site-packages/certifi/cacert.pem' DEBUG:openai._base_client:Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'system', 'content': "You are an expert Q&A system that is trusted around the world.\nAlways answer the query using the provided context information, and not prior knowledge.\nSome rules to follow:\n1. Never directly reference the given context in your answer.\n2. Avoid statements like 'Based on the context, ...' or 'The context information ...' or anything along those lines."}, {'role': 'user', 'content': "Context information is below.\n---------------------\nfile_path: /home/king/data/akazukin5.txt\n\n제5장: 결전의 순간\n\n미코와 료는 마침내 울프 코퍼레이션의 최상층에 도착해 CEO인 교활한 울프 박사와 대면한다. 울프 박사는 시민을 지배하려는 사악한 야망을 드러내며 자신의 압도적인 힘을 과시한다. 하지만 미코와 료는 서로를 도와가며 울프 박사와 싸우고 그의 약점을 찾아낸다.\n\nfile_path: /home/king/data/akazukin3.txt\n\n제3장: 배신과 재회\n\n술집 '할머니의 집'에서 미코는 데이터를 받을 사람인 료를 기다리고 있었다. 료는 그녀의 어릴 적 친구이자 그 역시 울프 코퍼레이션과 싸우는 해커 집단의 일원이었다. 하지만 료는 미코에게 배신감을 느꼈고, 그녀가 데이터 카우리아에 몸을 던진 것에 화가 났다.\n\n그럼에도 불구하고 미코는 료에게 데이터를 건네며 울프 코퍼레이션에 대한 반격을 믿기로 한다. 두 사람은 함께 울프 코퍼레이션의 음모를 밝혀내고 시민들을 구하기로 결심한다.\n---------------------\nGiven the context information and not prior knowledge, answer the query.\nQuery: 미코의 소꿉친구 이름은?\nAnswer: "}], 'model': 'gpt-3.5-turbo', 'stream': False, 'temperature': 0.1}} DEBUG:openai._base_client:Sending HTTP Request: POST https://api.openai.com/v1/chat/completions DEBUG:httpcore.connection:connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=60.0 socket_options=None DEBUG:httpcore.connection:connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7ffae030a7d0> DEBUG:httpcore.connection:start_tls.started ssl_context=<ssl.SSLContext object at 0x7ffae468ed40> server_hostname='api.openai.com' timeout=60.0 DEBUG:httpcore.connection:start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7ffae030a7a0> DEBUG:httpcore.http11:send_request_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_headers.complete DEBUG:httpcore.http11:send_request_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_body.complete DEBUG:httpcore.http11:receive_response_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Fri, 07 Jun 2024 02:54:46 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'openai-organization', b'user-89spyw5fyioq1wqsb6pwacpu'), (b'openai-processing-ms', b'301'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'10000'), (b'x-ratelimit-limit-tokens', b'60000'), (b'x-ratelimit-remaining-requests', b'9999'), (b'x-ratelimit-remaining-tokens', b'59574'), (b'x-ratelimit-reset-requests', b'8.64s'), (b'x-ratelimit-reset-tokens', b'426ms'), (b'x-request-id', b'req_4511e4c3b819bb3ba40cfb13e25f46a4'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=xEohQtU5nBjS8CzwYxgVg9dPbI4y2wlxjmCR5nXmQ84-1717728886-1.0.1.1-L9x0iQO8tNUIeMFhKB0PRSu3Ys8n5ofpRiKzQHiRJJOVT.FD4UFAPNL7PoAnltUZm_vkxbgUEdxSsBRgN72VPQ; path=/; expires=Fri, 07-Jun-24 03:24:46 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Set-Cookie', b'_cfuvid=AppiUseC0b8gs12mrIeUGZJ9LWHeOhnUFlH27Nag21Y-1717728886842-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'88fd5c03780c30a9-ICN'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete DEBUG:openai._base_client:HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers([('date', 'Fri, 07 Jun 2024 02:54:46 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('openai-organization', 'user-89spyw5fyioq1wqsb6pwacpu'), ('openai-processing-ms', '301'), ('openai-version', '2020-10-01'), ('strict-transport-security', 'max-age=15724800; includeSubDomains'), ('x-ratelimit-limit-requests', '10000'), ('x-ratelimit-limit-tokens', '60000'), ('x-ratelimit-remaining-requests', '9999'), ('x-ratelimit-remaining-tokens', '59574'), ('x-ratelimit-reset-requests', '8.64s'), ('x-ratelimit-reset-tokens', '426ms'), ('x-request-id', 'req_4511e4c3b819bb3ba40cfb13e25f46a4'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=xEohQtU5nBjS8CzwYxgVg9dPbI4y2wlxjmCR5nXmQ84-1717728886-1.0.1.1-L9x0iQO8tNUIeMFhKB0PRSu3Ys8n5ofpRiKzQHiRJJOVT.FD4UFAPNL7PoAnltUZm_vkxbgUEdxSsBRgN72VPQ; path=/; expires=Fri, 07-Jun-24 03:24:46 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('set-cookie', '_cfuvid=AppiUseC0b8gs12mrIeUGZJ9LWHeOhnUFlH27Nag21Y-1717728886842-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '88fd5c03780c30a9-ICN'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) DEBUG:openai._base_client:request_id: req_4511e4c3b819bb3ba40cfb13e25f46a4 DEBUG:openai._base_client:Request options: {'method': 'post', 'url': '/embeddings', 'files': None, 'post_parser': <function Embeddings.create.<locals>.parser at 0x7ffae02d5480>, 'json_data': {'input': ['울프 코퍼레이션의 CEO 이름은?'], 'model': 'text-embedding-ada-002', 'encoding_format': 'base64'}} DEBUG:openai._base_client:Sending HTTP Request: POST https://api.openai.com/v1/embeddings DEBUG:httpcore.http11:send_request_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_headers.complete DEBUG:httpcore.http11:send_request_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_body.complete DEBUG:httpcore.http11:receive_response_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Fri, 07 Jun 2024 02:54:47 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-allow-origin', b'*'), (b'openai-model', b'text-embedding-ada-002'), (b'openai-organization', b'user-89spyw5fyioq1wqsb6pwacpu'), (b'openai-processing-ms', b'26'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'3000'), (b'x-ratelimit-limit-tokens', b'1000000'), (b'x-ratelimit-remaining-requests', b'2999'), (b'x-ratelimit-remaining-tokens', b'999989'), (b'x-ratelimit-reset-requests', b'20ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_0b39d7a975e90b8fd39abc6a8f61df33'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'CF-RAY', b'88fd5c06cd5caa7e-ICN'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete DEBUG:openai._base_client:HTTP Response: POST https://api.openai.com/v1/embeddings "200 OK" Headers({'date': 'Fri, 07 Jun 2024 02:54:47 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'access-control-allow-origin': '*', 'openai-model': 'text-embedding-ada-002', 'openai-organization': 'user-89spyw5fyioq1wqsb6pwacpu', 'openai-processing-ms': '26', 'openai-version': '2020-10-01', 'strict-transport-security': 'max-age=15724800; includeSubDomains', 'x-ratelimit-limit-requests': '3000', 'x-ratelimit-limit-tokens': '1000000', 'x-ratelimit-remaining-requests': '2999', 'x-ratelimit-remaining-tokens': '999989', 'x-ratelimit-reset-requests': '20ms', 'x-ratelimit-reset-tokens': '0s', 'x-request-id': 'req_0b39d7a975e90b8fd39abc6a8f61df33', 'cf-cache-status': 'DYNAMIC', 'server': 'cloudflare', 'cf-ray': '88fd5c06cd5caa7e-ICN', 'content-encoding': 'gzip', 'alt-svc': 'h3=":443"; ma=86400'}) DEBUG:openai._base_client:request_id: req_0b39d7a975e90b8fd39abc6a8f61df33 DEBUG:llama_index.core.indices.utils:> Top 2 nodes: > [Node 9a7592ab-0198-4e74-a4d2-65c38bd7afe5] [Similarity score: 0.83732] 제5장: 결전의 순간 미코와 료는 마침내 울프 코퍼레이션의 최상층에 도착해 CEO인 교활한 울프 박사와 대면한다. 울프 박사는 시민을 지배하려는 사악한 야망을 드러내며 자신... > [Node a4aac553-4a1a-4f2b-b9c7-d8afff610be9] [Similarity score: 0.803833] 제7장: 새로운 시작 울프 코퍼레이션이 무너진 후, 미코와 료는 서로의 과거를 용서하고 다시 우정을 회복한다. 미코는 데이터카우리아를 그만두고 료와 함께 새로운 길을 걷기 ... DEBUG:openai._base_client:Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'system', 'content': "You are an expert Q&A system that is trusted around the world.\nAlways answer the query using the provided context information, and not prior knowledge.\nSome rules to follow:\n1. Never directly reference the given context in your answer.\n2. Avoid statements like 'Based on the context, ...' or 'The context information ...' or anything along those lines."}, {'role': 'user', 'content': 'Context information is below.\n---------------------\nfile_path: /home/king/data/akazukin5.txt\n\n제5장: 결전의 순간\n\n미코와 료는 마침내 울프 코퍼레이션의 최상층에 도착해 CEO인 교활한 울프 박사와 대면한다. 울프 박사는 시민을 지배하려는 사악한 야망을 드러내며 자신의 압도적인 힘을 과시한다. 하지만 미코와 료는 서로를 도와가며 울프 박사와 싸우고 그의 약점을 찾아낸다.\n\nfile_path: /home/king/data/akazukin7.txt\n\n제7장: 새로운 시작\n\n울프 코퍼레이션이 무너진 후, 미코와 료는 서로의 과거를 용서하고 다시 우정을 회복한다. 미코는 데이터카우리아를 그만두고 료와 함께 새로운 길을 걷기 시작한다. 그들은 스스로의 힘으로 미래의 네오 도쿄를 더 나은 도시로 바꾸어 나갈 것을 다짐한다. 이것은 미코와 료, 그리고 전뇌 빨간 망토의 새로운 모험의 시작이었다.\n---------------------\nGiven the context information and not prior knowledge, answer the query.\nQuery: 울프 코퍼레이션의 CEO 이름은?\nAnswer: '}], 'model': 'gpt-3.5-turbo', 'stream': False, 'temperature': 0.1}} DEBUG:openai._base_client:Sending HTTP Request: POST https://api.openai.com/v1/chat/completions DEBUG:httpcore.http11:send_request_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_headers.complete DEBUG:httpcore.http11:send_request_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_body.complete DEBUG:httpcore.http11:receive_response_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Fri, 07 Jun 2024 02:54:48 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'openai-organization', b'user-89spyw5fyioq1wqsb6pwacpu'), (b'openai-processing-ms', b'743'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'10000'), (b'x-ratelimit-limit-tokens', b'60000'), (b'x-ratelimit-remaining-requests', b'9998'), (b'x-ratelimit-remaining-tokens', b'59611'), (b'x-ratelimit-reset-requests', b'16.525s'), (b'x-ratelimit-reset-tokens', b'389ms'), (b'x-request-id', b'req_2c3a04848c1441ddbdffdeaac32b868b'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'CF-RAY', b'88fd5c082dc030a9-ICN'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete DEBUG:openai._base_client:HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers({'date': 'Fri, 07 Jun 2024 02:54:48 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'openai-organization': 'user-89spyw5fyioq1wqsb6pwacpu', 'openai-processing-ms': '743', 'openai-version': '2020-10-01', 'strict-transport-security': 'max-age=15724800; includeSubDomains', 'x-ratelimit-limit-requests': '10000', 'x-ratelimit-limit-tokens': '60000', 'x-ratelimit-remaining-requests': '9998', 'x-ratelimit-remaining-tokens': '59611', 'x-ratelimit-reset-requests': '16.525s', 'x-ratelimit-reset-tokens': '389ms', 'x-request-id': 'req_2c3a04848c1441ddbdffdeaac32b868b', 'cf-cache-status': 'DYNAMIC', 'server': 'cloudflare', 'cf-ray': '88fd5c082dc030a9-ICN', 'content-encoding': 'gzip', 'alt-svc': 'h3=":443"; ma=86400'}) DEBUG:openai._base_client:request_id: req_2c3a04848c1441ddbdffdeaac32b868b DEBUG:openai._base_client:Request options: {'method': 'post', 'url': '/embeddings', 'files': None, 'post_parser': <function Embeddings.create.<locals>.parser at 0x7ffae02d7d90>, 'json_data': {'input': ['미코의 성격은?'], 'model': 'text-embedding-ada-002', 'encoding_format': 'base64'}} DEBUG:openai._base_client:Sending HTTP Request: POST https://api.openai.com/v1/embeddings DEBUG:httpcore.http11:send_request_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_headers.complete DEBUG:httpcore.http11:send_request_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_body.complete DEBUG:httpcore.http11:receive_response_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Fri, 07 Jun 2024 02:54:48 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-allow-origin', b'*'), (b'openai-model', b'text-embedding-ada-002'), (b'openai-organization', b'user-89spyw5fyioq1wqsb6pwacpu'), (b'openai-processing-ms', b'21'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'3000'), (b'x-ratelimit-limit-tokens', b'1000000'), (b'x-ratelimit-remaining-requests', b'2999'), (b'x-ratelimit-remaining-tokens', b'999994'), (b'x-ratelimit-reset-requests', b'20ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_a4e9831dc020fba3dd5a478fdaffe015'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'CF-RAY', b'88fd5c0ecf9aaa7e-ICN'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete DEBUG:openai._base_client:HTTP Response: POST https://api.openai.com/v1/embeddings "200 OK" Headers({'date': 'Fri, 07 Jun 2024 02:54:48 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'access-control-allow-origin': '*', 'openai-model': 'text-embedding-ada-002', 'openai-organization': 'user-89spyw5fyioq1wqsb6pwacpu', 'openai-processing-ms': '21', 'openai-version': '2020-10-01', 'strict-transport-security': 'max-age=15724800; includeSubDomains', 'x-ratelimit-limit-requests': '3000', 'x-ratelimit-limit-tokens': '1000000', 'x-ratelimit-remaining-requests': '2999', 'x-ratelimit-remaining-tokens': '999994', 'x-ratelimit-reset-requests': '20ms', 'x-ratelimit-reset-tokens': '0s', 'x-request-id': 'req_a4e9831dc020fba3dd5a478fdaffe015', 'cf-cache-status': 'DYNAMIC', 'server': 'cloudflare', 'cf-ray': '88fd5c0ecf9aaa7e-ICN', 'content-encoding': 'gzip', 'alt-svc': 'h3=":443"; ma=86400'}) DEBUG:openai._base_client:request_id: req_a4e9831dc020fba3dd5a478fdaffe015 DEBUG:llama_index.core.indices.utils:> Top 2 nodes: > [Node 9a7592ab-0198-4e74-a4d2-65c38bd7afe5] [Similarity score: 0.825045] 제5장: 결전의 순간 미코와 료는 마침내 울프 코퍼레이션의 최상층에 도착해 CEO인 교활한 울프 박사와 대면한다. 울프 박사는 시민을 지배하려는 사악한 야망을 드러내며 자신... > [Node a4aac553-4a1a-4f2b-b9c7-d8afff610be9] [Similarity score: 0.818595] 제7장: 새로운 시작 울프 코퍼레이션이 무너진 후, 미코와 료는 서로의 과거를 용서하고 다시 우정을 회복한다. 미코는 데이터카우리아를 그만두고 료와 함께 새로운 길을 걷기 ... DEBUG:openai._base_client:Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'system', 'content': "You are an expert Q&A system that is trusted around the world.\nAlways answer the query using the provided context information, and not prior knowledge.\nSome rules to follow:\n1. Never directly reference the given context in your answer.\n2. Avoid statements like 'Based on the context, ...' or 'The context information ...' or anything along those lines."}, {'role': 'user', 'content': 'Context information is below.\n---------------------\nfile_path: /home/king/data/akazukin5.txt\n\n제5장: 결전의 순간\n\n미코와 료는 마침내 울프 코퍼레이션의 최상층에 도착해 CEO인 교활한 울프 박사와 대면한다. 울프 박사는 시민을 지배하려는 사악한 야망을 드러내며 자신의 압도적인 힘을 과시한다. 하지만 미코와 료는 서로를 도와가며 울프 박사와 싸우고 그의 약점을 찾아낸다.\n\nfile_path: /home/king/data/akazukin7.txt\n\n제7장: 새로운 시작\n\n울프 코퍼레이션이 무너진 후, 미코와 료는 서로의 과거를 용서하고 다시 우정을 회복한다. 미코는 데이터카우리아를 그만두고 료와 함께 새로운 길을 걷기 시작한다. 그들은 스스로의 힘으로 미래의 네오 도쿄를 더 나은 도시로 바꾸어 나갈 것을 다짐한다. 이것은 미코와 료, 그리고 전뇌 빨간 망토의 새로운 모험의 시작이었다.\n---------------------\nGiven the context information and not prior knowledge, answer the query.\nQuery: 미코의 성격은?\nAnswer: '}], 'model': 'gpt-3.5-turbo', 'stream': False, 'temperature': 0.1}} DEBUG:openai._base_client:Sending HTTP Request: POST https://api.openai.com/v1/chat/completions DEBUG:httpcore.http11:send_request_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_headers.complete DEBUG:httpcore.http11:send_request_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_body.complete DEBUG:httpcore.http11:receive_response_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Fri, 07 Jun 2024 02:54:50 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'openai-organization', b'user-89spyw5fyioq1wqsb6pwacpu'), (b'openai-processing-ms', b'1565'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'10000'), (b'x-ratelimit-limit-tokens', b'60000'), (b'x-ratelimit-remaining-requests', b'9997'), (b'x-ratelimit-remaining-tokens', b'59616'), (b'x-ratelimit-reset-requests', b'23.811s'), (b'x-ratelimit-reset-tokens', b'384ms'), (b'x-request-id', b'req_2e40c1066673dc9ff6b372bf43c3c9e5'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Server', b'cloudflare'), (b'CF-RAY', b'88fd5c10694830a9-ICN'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete DEBUG:openai._base_client:HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers({'date': 'Fri, 07 Jun 2024 02:54:50 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'openai-organization': 'user-89spyw5fyioq1wqsb6pwacpu', 'openai-processing-ms': '1565', 'openai-version': '2020-10-01', 'strict-transport-security': 'max-age=15724800; includeSubDomains', 'x-ratelimit-limit-requests': '10000', 'x-ratelimit-limit-tokens': '60000', 'x-ratelimit-remaining-requests': '9997', 'x-ratelimit-remaining-tokens': '59616', 'x-ratelimit-reset-requests': '23.811s', 'x-ratelimit-reset-tokens': '384ms', 'x-request-id': 'req_2e40c1066673dc9ff6b372bf43c3c9e5', 'cf-cache-status': 'DYNAMIC', 'server': 'cloudflare', 'cf-ray': '88fd5c10694830a9-ICN', 'content-encoding': 'gzip', 'alt-svc': 'h3=":443"; ma=86400'}) DEBUG:openai._base_client:request_id: req_2e40c1066673dc9ff6b372bf43c3c9e5 미코의 소꿉친구 이름 : 료 울프 코퍼레이션 CEO 이름 : 울프 코퍼레이션의 CEO 이름은 교활한 울프 박사입니다. 미코의 성격은 : 미코는 울프 박사와의 결전에서 용감하고 결의가 강한 모습을 보여주며, 료와의 우정을 통해 과거를 용서하고 새로운 시작을 함께 하려는 성숙한 모습을 보여준다. |
▶ requirements.txt
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 32 33 34 35 36 37 38 39 40 |
aiohttp==3.9.5 aiosignal==1.3.1 async-timeout==4.0.3 attrs==23.2.0 certifi==2024.6.2 charset-normalizer==3.3.2 dataclasses-json==0.5.14 frozenlist==1.4.1 fsspec==2024.6.0 greenlet==3.0.3 idna==3.7 langchain==0.0.181 llama-index==0.6.12 marshmallow==3.21.3 multidict==6.0.5 mypy-extensions==1.0.0 numexpr==2.10.0 numpy==1.26.4 openai==0.28.0 openapi-schema-pydantic==1.2.4 packaging==24.0 pandas==2.2.2 pydantic==1.10.15 python-dateutil==2.9.0.post0 pytz==2024.1 PyYAML==6.0.1 regex==2024.5.15 requests==2.32.3 six==1.16.0 SQLAlchemy==2.0.24 tenacity==8.3.0 tiktoken==0.7.0 tqdm==4.66.4 typing-inspect==0.8.0 typing_extensions==4.5.0 tzdata==2024.1 urllib3==1.26.18 yarl==1.9.4 |