Skip to content

Latest commit

ย 

History

History
353 lines (296 loc) ยท 20.4 KB

File metadata and controls

353 lines (296 loc) ยท 20.4 KB

Kendra ๋ฅผ ์ด์šฉํ•œ RAG์˜ ๊ตฌํ˜„

์ •ํ™•๋„ ๊ฐœ์„  ๋ฐฉ์•ˆ

Kendra API

Kendra์—์„œ ๊ฒ€์ƒ‰ํ• ๋•Œ์— ์‚ฌ์šฉํ•˜๋Š” API์—๋Š” Retrieve API์™€ Query๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์š”์•ฝํ•˜์—ฌ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • Retrieve API๋Š” Query API๋ณด๋‹ค ๋งŽ์€ token์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐœ์ทŒ๋ฌธ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ๋ฐœ์ทŒ๋ฌธ์˜ ๊ธธ์ด๋Š” RAG์˜ ์ •ํ™•๋„์— ๋งค์šฐ ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Retrieve API์— ๋Œ€ํ•œ token ์ˆซ์ž๋Š” ๊ธฐ๋ณธ์ด 300์ธ๋ฐ, case๋ฅผ ํ†ตํ•ด ์ฆ๋Ÿ‰์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Query API๋กœ ํ•œ๊ธ€๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ์— token์ˆซ์ž์˜ ์ œํ•œ์œผ๋กœ ๋งŽ์€ ๊ฒฝ์šฐ์— ๋งŒ์กฑํ• ๋งŒํ•œ RAG์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰์˜ ์ •ํ™•๋„(score)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰์˜ ๋ฒ”์œ„๋ฅผ ์กฐ์ •ํ•˜๋ฉด RAG์˜ ์ •ํ™•๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, Retrieve๋Š” 2023๋…„ 11์›”(ํ˜„์žฌ)๊นŒ์ง€ ์˜์–ด(en)์— ๋Œ€ํ•ด์„œ๋งŒ score๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํ•œ๊ตญ์–ด(ko)๋Š” token์ˆ˜๊ฐ€ ์ ์€ Query API๋ฅผ ์ด์šฉํ• ๋•Œ๋งŒ score๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Kendra์˜ FAQ๋ฅผ ์ด์šฉํ•˜๋ฉด RAG์˜ ์ •ํ™•๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Query API๋กœ๋งŒ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Kendra์—์„œ๋Š” Retrieve API๋กœ ์กฐํšŒ์‹œ ๊ฒฐ๊ณผ๊ฐ€ ์—†์„๋•Œ์— Query API๋กœ fallback์„ best practice๋กœ ๊ฐ€์ด๋“œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, FAQ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, Retrive์™€ Query API๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

LangChain ํ™œ์šฉ ๋ฐฉ๋ฒ•

  • LangChain์€ Retrieve API๋กœ ๊ฒ€์ƒ‰ํ•˜์˜€์„๋Œ€์— ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด, Query๋กœ ํ•œ๋ฒˆ ๋” ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Kendra์—์„œ ํ•œ๊ตญ์–ด ๋ฌธ์„œ๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด retriever์˜ Language ์„ค์ •์„ "ko"๋กœ ์„ค์ •ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ •ํ™•๋„ ๊ฐœ์„  ๋ฐฉ์•ˆ

  • ํ•œ๊ธ€๋ฌธ์„œ์˜ ์–ธ์–ด์„ค์ •์„ "ko"๋กœํ•˜์—ฌ Kendra์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
  • LangChain์˜ Kendra Retriever๋กœ ์งˆ์˜์‹œ language๋ฅผ "ko"๋กœ ์„ค์ •ํ•˜์—ฌ์•ผ retriever api๋กœ ๋” ๋งŽ์€ token์„ ๊ฐ€์ง€๋Š” ๋ฐœ์ทŒ๋ฌธ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Kendra์˜ Retrieve/Query API๋กœ ์ง์ ‘ ์กฐํšŒํ•˜๋ฉด ์ข€๋” ์œ ์—ฐํ•˜๊ฒŒ RAG๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • FAQ๋ฌธ์„œ๊ฐ€ ์žˆ๋‹ค๋ฉด, Kendra์— ๋“ฑ๋กํ•˜์—ฌ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. FAQ ์‚ฌ์šฉ์‹œ Query API๋ฅผ ํ™œ์šฉํ•˜์—ฌํ•˜๋ฏ€๋กœ, ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋™์‹œ์— Retrieve/Query API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

API ๊ฐ€์ด๋“œ

Retrieve API

Retrieve๋Š” Default Quota ๊ธฐ์ค€์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฐœ์ทŒ๋ฌธ(passges)๋Š” 200๊ฐœ์˜ token์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๊ณ , ์ตœ๋Œ€ 100๊ฐœ(PageSize)๊นŒ์ง€ ์ด๋Ÿฐ ๋ฐœ์ทŒ๋ฌธ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 200 ๊ฐœ์˜ token์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐœ์ทŒ๋ฌธ(passage)๊ณผ ์ตœ๋Œ€ 100๊ฐœ์˜ ์˜๋ฏธ๋ก ์ ์œผ๋กœ ๊ด€๋ จ๋œ ๋ฐœ์ทŒ๋ฌธ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Query API์™€ ๋‹ค๋ฅด๊ฒŒ qustion/answer์™€ FAG๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Retrieve API๋Š” ์˜์–ด(en)๋งŒ score๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ feedback์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Query API

Query์˜ ๊ฒฐ๊ณผ๋Š” "DOCUMENT", "QUESTION_ANSWER", "ANSWER"์˜ Type์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ANSWER: ๊ด€๋ จ ์ œ์•ˆ๋œ ๋‹ต๋ณ€(Relevant suggested answers)์œผ๋กœ text๋‚˜ table์˜ ๋ฐœ์ทจ(excerpt)๋กœ์„œ ๊ฐ•์กฐ ํ‘œ์‹œ(highlight)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • QUESTION_ANSWER: ๊ด€๋ จ๋œ FAQ(Matching FAQs) ๋˜๋Š” FAQ ํŒŒ์ผ์—์„œ ์–ป์€ question-answer์ž…๋‹ˆ๋‹ค.
  • DOCUMENT: ๊ด€๋ จ๋œ ๋ฌธ์„œ(Relevant documents)๋กœ์„œ ๋ฌธ์„œ์˜ ๋ฐœ์ทจ(excerpt)์™€ title์„ ํฌํ•˜ํ•œ ๊ฒฐ๊ณ ๋กœ์„œ ๊ฐ•์กฐ ํ‘œ์‹œ(hightlight)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • QueryResultTypeFilter๋กœ type์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • PageSize: ๊ด€๋ จ๋œ ๋ฌธ์žฅ์„ ๋ช‡๊ฐœ๊นŒ์ง€ ๊ฐ€์ ธ์˜ฌ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • PageNumber: ๊ธฐ๋ณธ๊ฐ’์€ ๊ฒฐ๊ณผ์˜ ์ฒซํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค. ์ฒซํŽ˜์ด์ง€ ์ดํ›„์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ๋•Œ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ

def get_retrieve_using_Kendra(index_id, query, top_k):
    kendra_client = boto3.client(
        service_name='kendra', 
        region_name=kendra_region,
        config = Config(
            retries=dict(
                max_attempts=10
            )
        )
    )

    attributeFilter = {
        "AndAllFilters": [
            {
                "EqualsTo": {
                    "Key": '_language_code',
                    "Value": {
                        "StringValue": 'en',
                    },
                },
            },
        ],
    }

    try:
        resp =  kendra_client.query(
            IndexId = index_id,
            QueryText = query,
            PageSize = top_k,
            #PageNumber = page_number,
            #AttributeFilter = attributeFilter,
            #QueryResultTypeFilter = "DOCUMENT",  # 'QUESTION_ANSWER'
        )
    except Exception as ex:
        err_msg = traceback.format_exc()
        print('error message: ', err_msg)
        
        raise Exception ("Not able to retrieve to Kendra")        
    print('resp, ', resp)
    print('resp[ResultItems], ', resp['ResultItems'])
    
    for query_result in resp["ResultItems"]:
        print("-------------------")
        print("Type: " + str(query_result["Type"]))
            
        if query_result["Type"]=="ANSWER" or query_result["Type"]=="QUESTION_ANSWER":
            answer_text = query_result["DocumentExcerpt"]["Text"]
            print(answer_text)
    
        if query_result["Type"]=="DOCUMENT":
            if "DocumentTitle" in query_result:
                document_title = query_result["DocumentTitle"]["Text"]
                print("Title: " + document_title)
            document_text = query_result["DocumentExcerpt"]["Text"]
            print(document_text)
    
        print("------------------\n\n")      

Score

ScoreAttributes์™€ ๊ฐ™์ด "VERY_HIGH", "HIGH", "MEDIUM", "LOW", "NOT_AVAILABLE"๋กœ ๊ฒฐ๊ณผ์˜ ์‹ ๋ขฐ๋„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FAQ (Frequently asked questions)

FAQ-Kendra๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. kendra-faq-refresher๋ฅผ ์ฐธ์กฐํ•˜์—ฌ FAQ๋ฅผ Kendra ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” Kendra FAQ์™€ ๊ฐ™์ด Kendra์˜ Query API๋กœ FAQ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์œผ๋ฉด, ์งˆ๋ฌธ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ํ•จ๊ป˜ excerpt๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

Kendra ์„ฑ๋Šฅํ–ฅ์ƒ ๋ฐฉ๋ฒ•

Relevance tuning with Amazon Kendra

Submitting feedback for incremental learning

Tuning search relevance

User/Group๋ณ„ ํ™œ์šฉ

Document์— ๋Œ€ํ•œ ์ ‘๊ทผ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก UserContext๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, DataSourceGroup๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ทธ๋ฃน๋ณ„๋กœ ๊ฒ€์ƒ‰์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

response = client.query(
    IndexId='string',
    QueryText='string',
    UserContext={
        'Token': 'string',
        'UserId': 'string',
        'Groups': [
            'string',
        ],
        'DataSourceGroups': [
            {
                'GroupId': 'string',
                'DataSourceId': 'string'
            },
        ]
    },

Reference

Retrieve API

Enterprise Search with Amazon Kendra

Retrieve ์˜ˆ์ œ

{
   "QueryId":"4dcde662-831f-438d-8870-98d4fa27ded2",
   "ResultItems":[
      {
         "Id":"4dcde662-831f-438d-8870-98d4fa27ded2-acd1426d-9c78-49d8-9bab-fa826d443413",
         "DocumentId":"0bc8608c-aff6-4171-8ca2-0634d466adaf",
         "DocumentTitle":"fsi_faq_ko.csv",
         "Content":"Category\tInformation\ttype\tSource ์•„๋งˆ์กด ์€ํ–‰์˜ ํƒ€๊ธฐ๊ด€OTP ์ด์šฉ๋“ฑ๋ก๋ฐฉ๋ฒ• ์•Œ๋ ค์ฃผ์„ธ์š”\t์•„๋งˆ์กด ์€ํ–‰์˜ ํƒ€๊ธฐ๊ด€์—์„œ ๋ฐœ๊ธ‰๋ฐ›์œผ์‹  OTP๊ฐ€ ํ†ตํ•ฉOTP์นด๋“œ์ธ ๊ฒฝ์šฐ ๋‹นํ–‰์— ๋“ฑ๋กํ•˜์—ฌ ์ด์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. [๊ฒฝ๋กœ] - ์ธํ„ฐ๋„ท๋ฑ…ํ‚น ๋กœ๊ทธ์ธโ†’ ์‚ฌ์šฉ์ž๊ด€๋ฆฌโ†’์ธํ„ฐ๋„ท๋ฑ…ํ‚น๊ด€๋ฆฌโ†’OTP์ด์šฉ๋“ฑ๋ก - ์•„๋งˆ์กด์€ํ–‰ ๋ชจ๋ฐ”์ผ์•ฑ ๋กœ๊ทธ์ธโ†’ ์ „์ฒด๋ฉ”๋‰ดโ†’์„ค์ •/์ธ์ฆโ†’ ์ด์šฉ์ค‘์ธ ๋ณด์•ˆ๋งค์ฒด์„ ํƒโ†’   OTP์ด์šฉ๋“ฑ๋ก โ€ป OTP์ด์šฉ๋“ฑ๋กํ›„ ์žฌ๋กœ๊ทธ์ธ์„ ํ•˜์…”์•ผ ์ƒˆ๋กœ ๋“ฑ๋ก๋œ ๋ณด์•ˆ๋งค์ฒด๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐํƒ€ ๊ถ๊ธˆํ•˜์‹  ๋‚ด์šฉ์€ ์•„๋งˆ์กด ์€ํ–‰ ๊ณ ๊ฐ์„ผํ„ฐ 1599-9999๋กœ ๋ฌธ์˜ํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท๋ฑ…ํ‚น\t์•„๋งˆ์กด์€ํ–‰ ์•„๋งˆ์กด ๊ณต๋™์ธ์ฆ์„œ์™€ ๊ธˆ์œต์ธ์ฆ์„œ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€์š”? ๊ณต๋™์ธ์ฆ์„œ (๊ตฌ ๊ณต์ธ์ธ์ฆ์„œ)๋Š” ์šฉ๋„์— ๋”ฐ๋ผ ์€ํ–‰/์‹ ์šฉ์นด๋“œ/๋ณดํ—˜์šฉ ๋ฌด๋ฃŒ ์ธ์ฆ์„œ์™€ ์ „์ž๊ฑฐ๋ž˜๋ฒ”์šฉ(์ˆ˜์ˆ˜๋ฃŒ 4,400์›) ์ธ์ฆ์„œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์œ ํšจ๊ธฐ๊ฐ„์€ 1๋…„์ž…๋‹ˆ๋‹ค. โ€ป OTP์ด์šฉ๋“ฑ๋กํ›„ ์žฌ๋กœ๊ทธ์ธ์„ ํ•˜์…”์•ผ ์ƒˆ๋กœ ๋“ฑ๋ก๋œ ๋ณด์•ˆ๋งค์ฒด๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐํƒ€ ๊ถ๊ธˆํ•˜์‹  ๋‚ด์šฉ์€ ์•„๋งˆ์กด ์€ํ–‰ ๊ณ ๊ฐ์„ผํ„ฐ 1599-9999๋กœ ๋ฌธ์˜ํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท๋ฑ…ํ‚น\t์•„๋งˆ์กด์€ํ–‰ ์•„๋งˆ์กด ๊ณต๋™์ธ์ฆ์„œ์™€ ๊ธˆ์œต์ธ์ฆ์„œ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€์š”? ๊ณต๋™์ธ์ฆ์„œ (๊ตฌ ๊ณต์ธ์ธ์ฆ์„œ)๋Š” ์šฉ๋„์— ๋”ฐ๋ผ ์€ํ–‰/์‹ ์šฉ์นด๋“œ/๋ณดํ—˜์šฉ ๋ฌด๋ฃŒ ์ธ์ฆ์„œ์™€ ์ „์ž๊ฑฐ๋ž˜๋ฒ”์šฉ(์ˆ˜์ˆ˜๋ฃŒ 4,400์›) ์ธ์ฆ์„œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์œ ํšจ๊ธฐ๊ฐ„์€ 1๋…„์ž…๋‹ˆ๋‹ค. ์•„๋งˆ์กด ๊ณต๋™์ธ์ฆ์„œ๋Š” ํ•˜๋“œ๋””์Šคํฌ๋‚˜ ์ด๋™์‹๋””์Šคํฌ, ํœด๋Œ€ํฐ ๋“ฑ ์›ํ•˜์‹œ๋Š” ๊ธฐ๊ธฐ์— ์ €์žฅํ•ด์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋ฅผ ์ €์žฅํ•œ ๋งค์ฒด์—์„œ๋Š” ์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์—์„œ ์ด์šฉํ•˜๋ ค๋ฉด ๊ธฐ๊ธฐ๋งˆ๋‹ค ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ์ด๋™์‹๋””์Šคํฌ์— ์ €์žฅํ•ด์„œ ํœด๋Œ€ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ์กด ๊ธˆ์œต์ธ์ฆ์„œ๋Š” ๊ธˆ์œต์ธ์ฆ์„œ๋Š” ๊ธˆ์œต๊ฒฐ์ œ์›์˜ ํด๋ผ์šฐ๋“œ์— ์ €์žฅํ•˜์—ฌ ์ด์šฉํ•˜๋Š” ์ธ์ฆ์„œ๋กœ ๋ฐœ๊ธ‰/์ด์šฉ ์‹œ์— ํด๋ผ์šฐ๋“œ์— ์ ‘์†์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธˆ์œต๊ฒฐ์ œ์› ํด๋ผ์šฐ๋“œ์— ์—ฐ๊ฒฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์–ด๋””์„œ๋“  ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, PC๋‚˜ USB, ํœด๋Œ€ํฐ ๋“ฑ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ๋กœ ๋ณต์‚ฌ๋Š” ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. (์œ ํšจ๊ธฐ๊ฐ„ 3๋…„/๋ฐœ๊ธ‰ ์ˆ˜์ˆ˜๋ฃŒ ๋ฌด๋ฃŒ) โ€ป ํด๋ผ์šฐ๋“œ ๊ณ„์ • ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ํœด๋Œ€ํฐ์„ ํ†ตํ•œ ARS, SMS, ๋งˆ์ด์ธํฌ์•ฑ ์ธ์ฆ ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ\t์•„๋งˆ์กด์€ํ–‰ ๊ณต๋™์ธ์ฆ์„œ์™€ ๊ธˆ์œต์ธ์ฆ์„œ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€์š”? ๊ณต๋™์ธ์ฆ์„œ (๊ตฌ ๊ณต์ธ์ธ์ฆ์„œ)๋Š” ์šฉ๋„์— ๋”ฐ๋ผ ์€ํ–‰/์‹ ์šฉ์นด๋“œ/๋ณดํ—˜์šฉ ๋ฌด๋ฃŒ ์ธ์ฆ์„œ์™€ ์ „์ž๊ฑฐ๋ž˜๋ฒ”์šฉ(์ˆ˜์ˆ˜๋ฃŒ 4,400์›) ์ธ์ฆ์„œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์œ ํšจ๊ธฐ๊ฐ„์€ 1๋…„์ž…๋‹ˆ๋‹ค. ๊ณต๋™์ธ์ฆ์„œ๋Š” ํ•˜๋“œ๋””์Šคํฌ๋‚˜ ์ด๋™์‹๋””์Šคํฌ, ํœด๋Œ€ํฐ ๋“ฑ ์›ํ•˜์‹œ๋Š” ๊ธฐ๊ธฐ์— ์ €์žฅํ•ด์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋ฅผ ์ €์žฅํ•œ ๋งค์ฒด์—์„œ๋Š” ์ธ์ฆ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์—์„œ ์ด์šฉํ•˜๋ ค๋ฉด ๊ธฐ๊ธฐ๋งˆ๋‹ค ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ์ด๋™์‹๋””์Šคํฌ์— ์ €์žฅํ•ด์„œ ํœด๋Œ€ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธˆ์œต์ธ์ฆ์„œ๋Š” ๊ธˆ์œต์ธ์ฆ์„œ๋Š” ๊ธˆ์œต๊ฒฐ์ œ์›์˜ ํด๋ผ์šฐ๋“œ์— ์ €์žฅํ•˜์—ฌ ์ด์šฉํ•˜๋Š” ์ธ์ฆ์„œ๋กœ ๋ฐœ๊ธ‰/์ด์šฉ ์‹œ์— ํด๋ผ์šฐ๋“œ์— ์ ‘์†์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธˆ์œต๊ฒฐ์ œ์› ํด๋ผ์šฐ๋“œ์— ์—ฐ๊ฒฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์–ด๋””์„œ๋“  ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, PC๋‚˜ USB, ํœด๋Œ€ํฐ ๋“ฑ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ๋กœ ๋ณต์‚ฌ๋Š” ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. (์œ ํšจ๊ธฐ๊ฐ„ 3๋…„/๋ฐœ๊ธ‰ ์ˆ˜์ˆ˜๋ฃŒ ๋ฌด๋ฃŒ) โ€ป ํด๋ผ์šฐ๋“œ ๊ณ„์ • ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ํœด๋Œ€ํฐ์„ ํ†ตํ•œ ARS, SMS, ๋งˆ์ด์ธํฌ์•ฑ ์ธ์ฆ ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ\t์„œ์šธ์€ํ–‰ ํƒ€๊ธฐ๊ด€OTP ์ด์šฉ๋“ฑ๋ก๋ฐฉ๋ฒ• ์•Œ๋ ค์ฃผ์„ธ์š”\tํƒ€๊ธฐ๊ด€์—์„œ ๋ฐœ๊ธ‰๋ฐ›์œผ์‹  OTP๊ฐ€ ํ†ตํ•ฉOTP์นด๋“œ์ธ ๊ฒฝ์šฐ ๋‹นํ–‰์— ๋“ฑ๋กํ•˜์—ฌ ์ด์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. [๊ฒฝ๋กœ] - ์ธํ„ฐ๋„ท๋ฑ…ํ‚น ๋กœ๊ทธ์ธโ†’ ์‚ฌ์šฉ์ž๊ด€๋ฆฌโ†’์ธํ„ฐ๋„ท๋ฑ…ํ‚น๊ด€๋ฆฌโ†’OTP์ด์šฉ๋“ฑ๋ก - ์„œ์šธ ๋ชจ๋ฐ”์ผ์•ฑ ๋กœ๊ทธ์ธโ†’ ์ „์ฒด๋ฉ”๋‰ดโ†’์„ค์ •/์ธ์ฆโ†’ ์ด์šฉ์ค‘์ธ ๋ณด์•ˆ๋งค์ฒด์„ ํƒโ†’   OTP์ด์šฉ๋“ฑ๋ก โ€ป OTP์ด์šฉ๋“ฑ๋กํ›„ ์žฌ๋กœ๊ทธ์ธ์„ ํ•˜์…”์•ผ ์ƒˆ๋กœ ๋“ฑ๋ก๋œ ๋ณด์•ˆ๋งค์ฒด๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐํƒ€ ๊ถ๊ธˆํ•˜์‹  ๋‚ด์šฉ์€ ์„œ์šธ์€ํ–‰ ๊ณ ๊ฐ์„ผํ„ฐ 1599-8000๋กœ ๋ฌธ์˜ํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท๋ฑ…ํ‚น\t์„œ์šธ์€ํ–‰ ๊ณต๋™์ธ์ฆ์„œ์™€ ๊ธˆ์œต์ธ์ฆ์„œ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€์š”?",
         "DocumentURI":"https://d2me0ac2n5hgqe.cloudfront.net/docs/fsi_faq_ko.csv",
         "DocumentAttributes":[
            {
               "Key":"_source_uri",
               "Value":{
                  "StringValue":"https://d2me0ac2n5hgqe.cloudfront.net/docs/fsi_faq_ko.csv"
               }
            }
         ],
         "ScoreAttributes":{
            "ScoreConfidence":"NOT_AVAILABLE"
         }
      },      
   ],
   "ResponseMetadata":{
      "RequestId":"5dd6b3ea-1774-4b6c-b88e-c1cfbfeb0e9a",
      "HTTPStatusCode":200,
      "HTTPHeaders":{
         "x-amzn-requestid":"5dd6b3ea-1774-4b6c-b88e-c1cfbfeb0e9a",
         "content-type":"application/x-amz-json-1.1",
         "content-length":"45160",
         "date":"Mon, 20 Nov 2023 00:34:25 GMT"
      },
      "RetryAttempts":0
   }
}

QUESTION_ANSWER

[
   {
      "Id":"74719041-8126-473c-92f1-929fdc520138-188b319d-552f-4ff4-a7d5-8cbcd21dbea8",
      "Type":"QUESTION_ANSWER",
      "Format":"TEXT",
      "AdditionalAttributes":[
         {
            "Key":"QuestionText",
            "ValueType":"TEXT_WITH_HIGHLIGHTS_VALUE",
            "Value":{
               "TextWithHighlightsValue":{
                  "Text":"How many free clinics are in Spokane WA?",
                  "Highlights":[
                     {
                        "BeginOffset":4,
                        "EndOffset":8,
                        "TopAnswer":false,
                        "Type":"STANDARD"
                     },
                     {
                        "BeginOffset":9,
                        "EndOffset":13,
                        "TopAnswer":false,
                        "Type":"STANDARD"
                     },
                     {
                        "BeginOffset":14,
                        "EndOffset":21,
                        "TopAnswer":false,
                        "Type":"STANDARD"
                     },
                     {
                        "BeginOffset":29,
                        "EndOffset":36,
                        "TopAnswer":false,
                        "Type":"STANDARD"
                     },
                     {
                        "BeginOffset":37,
                        "EndOffset":39,
                        "TopAnswer":false,
                        "Type":"STANDARD"
                     }
                  ]
               }
            }
         },
         {
            "Key":"AnswerText",
            "ValueType":"TEXT_WITH_HIGHLIGHTS_VALUE",
            "Value":{
               "TextWithHighlightsValue":{
                  "Text":"13",
                  "Highlights":[
                     
                  ]
               }
            }
         }
      ],
      "DocumentId":"c24c0fe9cbdfa412ac58d1b5fc07dfd4afd21cbd0f71df499f305296d985a8c9a91f1b2c-e28b-4d13-8b01-8a33be5fc126",
      "DocumentTitle":{
         "Text":""
      },
      "DocumentExcerpt":{
         "Text":"13",
         "Highlights":[
            {
               "BeginOffset":0,
               "EndOffset":2,
               "TopAnswer":false,
               "Type":"STANDARD"
            }
         ]
      },
      "DocumentURI":"https://www.freeclinics.com/",
      "DocumentAttributes":[
         {
            "Key":"_source_uri",
            "Value":{
               "StringValue":"https://www.freeclinics.com/"
            }
         }
      ],
      "ScoreAttributes":{
         "ScoreConfidence":"VERY_HIGH"
      },
      "FeedbackToken":"AYADeN-jZ9DvGVP9n00b4d48LrsAXwABABVhd3MtY3J5cHRvLXB1YmxpYy1rZXkAREF6ajZZVkJ3M3B4dXZEMGRJZitQaEEzUWNVZkE3TDVBbjNEOCs1bE1aRm1hN1M3a0N3cjNiMzZRR2hPcTloeVJ1QT09AAEAB2F3cy1rbXMAS2Fybjphd3M6a21zOnVzLXdlc3QtMjoxNDk0MDA5NDM5NTk6a2V5LzUyN2YwMjRhLTUyMDktNDI4NC1iOTYwLTJhMjYxMzQxNWNkNgC4AQIBAHhoFIrDBc0sA_W0qqJvieboGJWYBK_hEm739PftPtfwZwEP6KAczOsL3xpUp6oizSAgAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMT_QgV_BMu5l49EZAAgEQgDuTOkP1QJbt85KZ4FDF438i0upluDZq_Rf3L8H9PqkLQOSgUAyyy9hqEmMOZUcGqvBNc_ekw4pbMRy5ZAIAAAAADAAAEAAAAAAAAAAAAAAAAAB3LYEFCQuAEb8NnKHSk1eT_____wAAAAEAAAAAAAAAAAAAAAEAAAF2QLnDNTO_Ma1EGreEOHC8YG5ijJ7jLblLE4CbyAY9ueJHKBTQ-Rf2A_pD9hpXTuyP6Ho84IIlScm7IhFUomBUSZMD_qrc0qnvlrCjgXwJ_AM0MJKmqBkMPNvivFnfZ9xl-dFyFX1sdzq0_LUE4KgLZpjQiSU0b_PFJw2zN8P6JSJb9Fz84fbWu1_nzrVrqCj5dDpMLDNLgC3f6pTS4IqmJqMsj6BbGcdsvLIzVA2XaAGYS8CNv9pu5Hz63yrh6hG4UHWJwdhIcPZG7z7BayFjravsKjw101PJnzUKSIfiZlRnoqm-Bbff-ieECV-vZ_1vtskbHhmsZ4WlKTcpD5QGMrElbk7WMbdPf8gmGQfC8SMrR-ixO7d856LIsoTx9i6VcN91GxEKcYtsXY4J0w6G4aL8-tj1iS7zwIsxHimIsuAHM4u5SmHmI_oJ25pR-7TA2K34GVv9VhYydG8JsBbjGV-mPpg6ORE4bNkhRL38f1pfHEXNlv79F9b8UP93MLfj6lZT25tPAGcwZQIxAK_GncCyOyt2NLdszY-Oc2Qchpo2CCTjj25a5wyzYv4JObw591oaxZeSVbA_Mq2v2gIwf6xq0c5vYGait9J9mnI2FMtEJ3rI2DRld30IRmWWNES54XOxciMd5J_YxJGkfghX.74719041-8126-473c-92f1-929fdc520138-188b319d-552f-4ff4-a7d5-8cbcd21dbea8"
   }
]

Document

{
   "QueryId":"cab6a783-5daf-40b6-a3d9-4df51f3ec812",
   "ResultItems":[
      {
         "Id":"0732b19c-333b-4f60-9724-323b54928f52-3f4bf464-5098-4463-b14d-eee05828fe0e",
         "Type":"DOCUMENT",
         "Format":"TEXT",
         "AdditionalAttributes":[
            
         ],
         "DocumentId":"e3f2af36-f76b-4775-a5ed-863910bc7a64",
         "DocumentTitle":{
            "Text":"book_smmdinlm239.pdf",
            "Highlights":[
               
            ]
         },
         "DocumentExcerpt":{
            "Text":"...์žˆ์œผ๋ฉฐ, ๊ฐ€์ž…์ž๋Š” ๊ฐ€์ž…์— ์•ž์„œ ์ด์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์„ค๋ช…์„ ๋ฐ›์œผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.\n\n\nโ€ข๊ฐ€์ž…ํ•  ๋•Œ ๋ณดํ—˜๊ณ„์•ฝ์˜ ๊ธฐ๋ณธ์‚ฌํ•ญ[๋ณดํ—˜์ƒํ’ˆ๋ช…, ๋ณดํ—˜๊ธฐ๊ฐ„, ๋‚ฉ์ž…๊ธฐ๊ฐ„, ํ”ผ๋ณดํ—˜์ž ๋“ฑ]์„ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.\n\n\nโ€ข ๋ณดํ—˜๊ณ„์•ฝ ์ฒญ์•ฝ์„œ์—์„œ ์งˆ๋ฌธํ•œ ์‚ฌํ•ญ(๊ณ„์•ฝ ์ „ ์•Œ๋ฆด ์˜๋ฌด ์‚ฌํ•ญ)์— ๋Œ€ํ•ด ๊ณ ์˜ ๋˜๋Š” ์ค‘๋Œ€ํ•œ ๊ณผ์‹ค๋กœ ์‚ฌ์‹ค๊ณผ ๋‹ค๋ฅด๊ฒŒ ์•Œ๋ฆฐ ๊ฒฝ์šฐ์—๋Š”  \n\n\n๋ณดํ—˜๊ณ„์•ฝ์ด ํ•ด์ง€๋˜๊ฑฐ๋‚˜ ๋ณด์žฅ์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...",
            "Highlights":[
               
            ]
         },
         "DocumentURI":"",
         "DocumentAttributes":[
            {
               "Key":"_excerpt_page_number",
               "Value":{
                  "LongValue":5
               }
            }
         ],
         "ScoreAttributes":{
            "ScoreConfidence":"MEDIUM"
         },
         "FeedbackToken":"AYADeOHYuP8KBBZVDtqxvB8JoHoAXwABABVhd3MtY3J5cHRvLXB1YmxpYy1rZXkAREF6K2JUSmJlM0hHU2Y2SktqdXhwaDNsOFEyTWdtYjRzQ2UvTElvdDZ3dElaczFDV21sc1dZYzhhSDdwaitNQmF0dz09AAEAB2F3cy1rbXMAS2Fybjphd3M6a21zOnVzLXdlc3QtMjoxNDk0MDA5NDM5NTk6a2V5LzUyN2YwMjRhLTUyMDktNDI4NC1iOTYwLTJhMjYxMzQxNWNkNgC4AQIBAHhoFIrDBc0sA_W0qqJvieboGJWYBK_hEm739PftPtfwZwHTuiBoobRJuvQ0u6-6abBiAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMYJMTvVwth6_ptw6pAgEQgDsrzR_f7IbDgqT5XrW3v5Da-aTNFw2v7fpcIra8PD02pQ5feUAw_JkXR81MXrqrbQ7fKsEexQPdTsx3JAIAAAAADAAAEAAAAAAAAAAAAAAAAACbC35XEBh-MXfq3LU5gDvR_____wAAAAEAAAAAAAAAAAAAAAEAAAF2PUZ0ZVJdz40rYWthpb1aYMLWCD1h3sVB6aXfhcUKwnKyilNtQ6Sr-yq_B0Daajd5P7PEwDeuPRmwAh164ukTXwP9qJIiaADhiCYTD0BZrtCC_JdH9wudYz0ximAEWA4pi1A0NSucA6RxmJRK16VXfYLxp7JIooWL4SLyoCxmRIM1ZwNs38YmnwEh5XA-crpcaQBTBgjkVejsmCCbNh1RVylDpmkMUxzYZZh2uIOYFAmjocr9IbFJKQz1IQNktcq-_uUdaO6jvNNUTUsCoJMMM4A4H4yczVD3RpJGNzatYHYRq8zhhmF6B9PGaVbDD26FrH9uyryyY9XhdL4GMBm1C4DPCDmWBEqfD9dCgfn32784tSJklA8xp9C_46hq_UyYy8uSWjbmJYNu0rRoueGJrkmcRV1sA9gUDbriYr4Ij249GahhRsF8nsDWtkmOzZbBU0CXsmklH4A7K7MBnBBsEcFDQE9Wxi-VNPHcgjmAL-ilMHNY6B0IYiDB_w9lNp6eebc8LZ4bAGcwZQIxAPRf5aJNC67fcRlu61G66HRAQ6m-rvg3eWw4GqrZ4WvtBuZ_GTxDvve-CYWpGtedpwIwLJHMr9WZLpByNqsyLhQk3ztG4eIA830nRg4rz9Odzp9mVlD2-bh8aOHx-r0JXz23.0732b19c-333b-4f60-9724-323b54928f52-3f4bf464-5098-4463-b14d-eee05828fe0e"
      }
   ],
   "FacetResults":[
      
   ],
   "TotalNumberOfResults":4,
   "ResponseMetadata":{
      "RequestId":"52b5d039-a600-4ed8-90b1-d1fa46c5e1c7",
      "HTTPStatusCode":200,
      "HTTPHeaders":{
         "x-amzn-requestid":"52b5d039-a600-4ed8-90b1-d1fa46c5e1c7",
         "content-type":"application/x-amz-json-1.1",
         "content-length":"9569",
         "date":"Fri, 17 Nov 2023 06:55:10 GMT"
      },
      "RetryAttempts":0
   }
}