from openai import OpenAI
client = OpenAI(api_key='')
def find_product(sql_query):
# 쿼리 실행
results = [
{"name": "pen", "color": "blue", "price": 1.99},
{"name": "pen", "color": "red", "price": 1.78},
]
return results
sql_query데이터베이스에서 가격이 2.0미만의 제품을 조회하려고 한다.
1. 먼저 함수객체의 세부정보를 정의한다.
# 함수 객체 세부정보 정의
functions = [
{
"name": "find_product",
"description": "sql 쿼리에서 제품 목록 가져와",
# 함수 인자에 전달 될 매개변수 정의
"parameters": {
"type": "object",
"properties": {
"sql_query": {
"type": "string",
"description": "A SQL query",
}
},
"required": ["sql_query"],
},
}
]
함수객체의 이름은 find_product함수이고 설명에는 조회하려고 설명을 붙여났다. 파라미터는 sql_query에 타입이 객체이고 속성에 타입은 string을 정의하였다.
2. 조건을 붙여 질문을 해서 제품을 가져오고 싶으면
# 조건을 걸어서 질문
user_question = "2개의 제품중에 가격이 2.00미만인 제품을 골라서 색깔과 가격을 알려줘"
messages = [{"role": "user", "content": user_question}]
# client.chat.completions 엔드포인트를 함수 정의를 사용해 호출
response = client.chat.completions.create(
model="gpt-3.5-turbo-0613", messages=messages, functions=functions
)
response_message = response.choices[0].message
messages.append(response_message)
print(response_message)
최종결과를 호출하기 전 함수를 실행 해보면
3. 함수 응답을 호출하기 위한 과정
function_args = json.loads(
response_message.function_call.arguments
)
json.loads() 함수를 사용하여 response_message.function_call.arguments에서 함수객체의 세부정보가 담긴 JSON 형식의 문자열을 파이썬 객체(여기서는 딕셔너리(키-값))로 변환한다. 이는 이전 단계에서 함수에 전달된 인자 sql_query를 파싱하는 과정이다.
products = find_product(function_args.get("sql_query"))
find_product 함수를 호출하여, 변환된 딕셔너리에서 "sql_query" 키에 해당하는 값을 인자로 사용한다. 이 함수는 데이터베이스에서 제품을 찾는 데 사용되며, 반환된 결과는 products 변수에 저장된다.
messages.append(
{
"role":"function",
"name": "function_name",
"content": json.dumps(products)
}
)
함수의 결과(products)를 JSON 문자열로 변환하여 messages 리스트에 새 메시지로 추가한다. 이 메시지에는 역할(role), 함수 이름(name), 그리고 함수의 결과를 담은 내용(content)이 포함된다.
참고한 책
https://www.yes24.com/Product/Goods/124201115
'portfolio' 카테고리의 다른 글
장고(DRF) + 리액트 REACT.JS 포트폴리오 2 (0) | 2024.02.27 |
---|---|
장고(DRF) + 리액트 REACT.JS 포트폴리오 1 (0) | 2024.02.27 |
웹 보안 HTTPS 설정 (0) | 2024.02.24 |
리눅스 grep 명령어 , 파이프 라인 활용 (0) | 2024.01.29 |
mongoDB search INDEX (0) | 2024.01.22 |