콘텐츠로 이동

상품정보 DB 조회하기

실행 준비

!pip install openai
!pip install gradio

상품정보 조회 쿼리 확인하기

import sqlite3

conn = sqlite3.connect('products.db')
cursor = conn.cursor()

# 데이터 조회
cursor.execute('SELECT prod_name, prod_price, desc, ref FROM products where prod_type = "세탁기"')

# 결과 출력
rows = cursor.fetchall()
for row in rows:
    print(row)

# 데이터베이스 연결 종료
conn.close()

DB 조회 기능 추가하기

import gradio as gr
from openai import OpenAI
import json

client = OpenAI()

# 쿼리를 실행하는 함수 정의
def product_inquiry(prod_type, prompt_text):

    sql_results = select_query(prod_type)

    # 쿼리 결과를 프롬프트에 추가
    results_str = "\n".join([str(row) for row in sql_results])
    system_prompt = f"다음은 DB에서 가져온 쿼리 결과야:\n{results_str}\n이 정보를 바탕으로 아래의 질문에 답변해줘."

    return system_prompt


# 특정 상품 정보를 DB로 부터 가져오는 함수
def select_query(prod_type):

    conn = sqlite3.connect('products.db')
    cursor = conn.cursor()

    query = f"SELECT prod_name, prod_price, desc, ref FROM products where prod_type ='{prod_type}'";

    # 데이터 조회
    cursor.execute(query)

    # 결과 가져오기
    rows = cursor.fetchall()

    # 연결 종료
    conn.close()

    return rows


tools = [
  {
      "type": "function",
      "function": {
          "name": "product_inquiry",
          "description": "상품에 대한 문의사항을 처리하는 함수",
          "parameters": {
              "type": "object",
              "properties": {
                  "prod_type": {
                     "type": "string",
                     "description": "상품 유형으로서 상품을 표현하는 일반적인 용어가 사용되며, '세탁기', '냉장고', 'TV' 중에서 하나를 선택해줘",
                  },
              },
              "required": ["prod_type"]
          },
      },
  },
]

def generate_response(prompt_text, history):
    completion = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "상품에 대한 문의사항을 받았을 경우, product_inquiry 함수를 호출해줘."},
            {"role": "user", "content": prompt_text}
        ],
        tools=tools,
    )

    response = completion.choices[0].message;

    if response.tool_calls:
        tool_call = response.tool_calls[0]

        arguments = tool_call.function.arguments
        function_name = tool_call.function.name

        arguments_json = json.loads(arguments)

        if function_name == "product_inquiry":  
           prod_type = arguments_json.get('prod_type')

           # 데이터 조회 함수 실행
           query_res = product_inquiry(prod_type, prompt_text)
           return query_res           

        else:
           return "정의되지 않은 함수입니다."        

    elif response.function_call:
        return response.function_call

    else:
        return response.content

gr.ChatInterface(
    generate_response,
    chatbot=gr.Chatbot(height=300, label='AI 상품상담 에이전트 입니다.'),
    textbox=gr.Textbox(placeholder="질문을 입력해 주세요", container=False, scale=7),
    title="AI 상품상담 에이전트",
).launch()