การสร้างเครื่องมือแนะนำยานพาหนะที่ขับเคลื่อนด้วย GPT
การใช้ OpenAI GPT, Python, LangChain และ Azure Cognitive Search เพื่อสร้างเครื่องมือแนะนำ

ในกรณีที่คุณไม่มีเนื้อหาที่ใช้ AI ให้อ่าน นี่เป็นอีกเนื้อหาหนึ่งสำหรับรายการของคุณ ฉันได้เพิ่มแผนที่เรื่องราวน่ารักกับแมว (ใช่ CatGPT) ลงในโพสต์นี้เพื่อพยายามทำให้โดดเด่นกว่าที่อื่น
คลั่งไคล้และสิ้นหวัง? อาจจะ…
(ป.ล. การใช้แมวบวกกับ generative AI ไม่ใช่ของดั้งเดิมทั้งหมด ฉันต้องสารภาพตามที่เห็นจากhttps://cat-gpt.com/.)
แอปพลิเคชัน
แอปที่เราจะแกะกล่องคือ Chatbot แนะนำรถมือสองที่ส่งคืนรายการรถที่แนะนำตามสิ่งที่คุณระบุ (อย่างไม่เป็นทางการ) ว่าคุณชอบอะไร ผลลัพธ์จะเต็มไปด้วยรายละเอียดข้อมูลเกี่ยวกับรถแต่ละคันและเหตุผลว่าเหตุใดจึงแนะนำ
ขั้นตอนการสนทนาดำเนินไปดังต่อไปนี้ด้วยการโต้ตอบระหว่างผู้ใช้, Chatbot, GPT (หรือ LLM ที่คุณเลือก) และเครื่องมือค้นหายานพาหนะ
ขั้นตอนที่ 1: ผู้ใช้เขียนการตั้งค่าลงในข้อความแจ้งการแชท
เครื่องมือแนะนำรถมักจะกำหนดให้ผู้ใช้ตั้งค่ากำหนดอย่างชัดเจน ซึ่งจะใช้เพื่อค้นหารถที่ตรงกัน แนวคิดนี้คือการอนุญาตให้ผู้ใช้มีอิสระในการบอกแชทบอทว่าพวกเขากำลังทำอะไรอยู่ในรูปแบบส่วนตัว และใช้ความมหัศจรรย์ของโมเดล GPT เพื่อเปลี่ยนสิ่งนั้นให้เป็นสิ่งที่ใช้งานได้โดย API การค้นหาดาวน์สตรีม

ขั้นตอนที่ 2: Chatbot ขอให้ GPT สร้างคำค้นหาที่มีโครงสร้างโดยใช้ค่ากำหนดที่มีให้
Chatbot จะสร้าง GPT Prompt เพื่อขอคำค้นหาตามค่ากำหนดที่ป้อนลงใน Chatbot และรายการฟิลด์ที่ระบุซึ่งเครื่องมือค้นหาสามารถค้นหาได้ ข้อความแจ้งนี้ถูกส่งไปยัง GPT ซึ่งใช้เวทมนตร์และแปลภาษามนุษย์ที่คลุมเครือเป็นข้อความค้นหาที่มีโครงสร้างพร้อมค่าที่ตีความสำหรับพารามิเตอร์ข้อความค้นหา

ขั้นตอนที่ 3: Chatbot สืบค้นเครื่องมือค้นหาโดยใช้ข้อความค้นหาที่สร้างโดย GPT
ด้วยคำค้นหาที่มีโครงสร้างที่ดี Chatbot จะส่งสิ่งนั้นไปยังเครื่องมือค้นหาและรับรายการผลลัพธ์ยานพาหนะที่ตรงกันกลับมา

ขั้นตอนที่ 4: Chatbot ขอให้ GPT เปลี่ยนผลการค้นหาเป็นสิ่งที่มีความหมายสำหรับมนุษย์
ด้วยรายการยานพาหนะที่ตรงกับเกณฑ์การค้นหาที่เราให้ไว้ เราใช้ GPT อีกครั้งเพื่อแปลข้อมูลที่มีโครงสร้างเป็นข้อความที่เขียนอย่างดี คนอ่านได้ เพิ่มคุณค่าเนื้อหาด้วยข้อเท็จจริงที่น่าสนใจเกี่ยวกับยานพาหนะ และเหตุใดจึงได้รับการแนะนำตามความต้องการของผู้ใช้

ขั้นตอนที่ 5:
แชทบอทส่งคืนเนื้อหาไปยังผู้ใช้ที่พอใจ การแชทสามารถดำเนินต่อไปได้ด้วยการปรับแต่งค่ากำหนด และให้ Chatbot ทำงานร่วมกับ GPT และ Search ในรูปแบบเดียวกัน


เทคโนโลยี
แอปนี้ได้รับการพัฒนาโดยใช้ Python และไลบรารี่เด่นๆ ได้แก่:
- streamlit: Streamlit เป็นไลบรารี Python ที่ใช้สร้างเว็บแอปพลิเคชันอย่างรวดเร็ว ในรหัสนี้ ใช้เพื่อสร้างอินเทอร์เฟซผู้ใช้สำหรับเครื่องมือแนะนำรถ
- langchain: แพ็คเกจแบบกำหนดเองที่มีชุดเครื่องมือสำหรับสร้างโมเดลภาษาธรรมชาติ มีโมดูลย่อยหลายโมดูลรวมถึง llms ซึ่งเชื่อมต่อคุณกับ LLM เช่น OpenAPIs GPT
- azure.search.documents: จัดเตรียมคลาส SearchClient ซึ่งใช้ในการโต้ตอบกับบริการ Azure Search เพื่อทำการค้นหาและจัดการผลลัพธ์การค้นหา
ใช้ OpenAI GPT API ผมเลือกรุ่น Turbo 3.5
รหัส
นี่คือแนวทางรหัสของ App.py
นำเข้าไลบรารีที่จำเป็น
import os
import json
import streamlit as st
from apikey import apikey
from searchhelper import azure_cognitive_search
from searchhelper import json_data
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, SequentialChain
from langchain.memory import ConversationBufferMemory
from langchain.utilities import WikipediaAPIWrapper
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClientApp Framework: Streamlit is used to set up the main components of the web application, including the title and user input area for vehicle preferences.
# Get OpenAI API Key
os.environ['OPENAI_API_KEY'] = apikey
# app framework
st.title('Vehicle Recommendation Engine')
prompt = st.text_area('Tell us what you are looking for in a car')
#prompt templates
title_template = PromptTemplate(
input_variables= ['preferences', 'vehicle_schema'],
template='based on the following user provided vehicle preferences : {preferences} and on the following JSON Schema of Vehicle Attributes: {vehicle_schema}, create a lucence search query that best fits the prefferences'
)
script_template = PromptTemplate(
input_variables= ['preferences', 'vehicle_results_json'],
template='write a description and five interesting facts about each vehicle returned in the following list: {vehicle_results_json}. Each paragraph must belong to its own bullet point. Add a final summary after the recommended vechiles for why these choices are a good match for these preferences provided: {preferences}'
)
# Memory
title_memory = ConversationBufferMemory(input_key='preferences', memory_key='chat_history')
script_memory = ConversationBufferMemory(input_key='vehicle_results_json', memory_key='chat_history')
#LLMs
llm = OpenAI(temperature=0.9, max_tokens = 2056)
title_chain = LLMChain(llm=llm, prompt=title_template, verbose=True, output_key='lucence_query', memory=title_memory)
script_chain = LLMChain(llm=llm, prompt=script_template, verbose=True, output_key='vehicle_recommendations_full', memory=script_memory)
if prompt:
title= title_chain.run(preferences=prompt, vehicle_schema=json_data)
vehicle_results = azure_cognitive_search(prompt)
script = script_chain.run(preferences=prompt, vehicle_results_json=vehicle_results)
st.write(script)
with st.expander('Query History'):
st.info(title_memory.buffer)
ฟังก์ชั่นการค้นหา:
def azure_cognitive_search(query: str) -> dict:
# Get elastic search keys
service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT")
index_name = os.getenv("AZURE_SEARCH_INDEX_NAME")
key = os.getenv("AZURE_SEARCH_API_KEY")
# Initialise search client
client = SearchClient(service_endpoint, index_name, AzureKeyCredential(key))
# Perform a search with the Lucene query
results = client.search(query, top=3)
# Construct a JSON object from the search results
vehicles = []
for item in results:
content = item['content']
vehicle = {
'BRAND': content['BRAND'],
'MODEL': content['MODEL'],
'VARIANT': content['VARIANT']
# a lot more fields removed for brevities sake
}
vehicles.append(vehicle)
return json.dumps(vehicles)
json_data = {
"content": {
"DOORS": 5,
"COLOUR": "Grey",
"VARIANT": "GALAXY 2.0 TDCi 180 Titanium X 5dr MPV",
"BODY_STYLE": "MPV",
"MILEAGE": 23744,
"YEAR": 2013,
"MODEL_DESCRIPTION": "GALAXY",
"CAPACITY": 1997,
"LIST_PRICE": 19275,
"TRANSMISSION": "MANUAL",
}
}
ด้านล่างนี้เป็นตัวอย่างของข้อความแจ้งและ GPT ตีความผลลัพธ์กลับมาให้ฉัน

