paint-brush
Kod Oluşturmayla Chatbot'u İyileştirme: Yayınlar için Bağlama Duyarlı Bir Chatbot Oluşturmaile@shanglun
1,178 okumalar
1,178 okumalar

Kod Oluşturmayla Chatbot'u İyileştirme: Yayınlar için Bağlama Duyarlı Bir Chatbot Oluşturma

ile Shanglun Wang19m2023/11/05
Read on Terminal Reader

Çok uzun; Okumak

GPT tabanlı sistemler bilgi yönetiminde büyük bir etki yaratacak şekilde kullanılmaktadır, ancak mevcut en gelişmiş uygulamaların meta verilere dayalı arama yetenekleri sınırlıdır. Bugün, hem semantik hem de meta veri araması yapabilen, erişimle artırılmış üretim sisteminin yeteneklerini büyük ölçüde geliştiren bir sistem kuruyoruz.
featured image - Kod Oluşturmayla Chatbot'u İyileştirme: Yayınlar için Bağlama Duyarlı Bir Chatbot Oluşturma
Shanglun Wang HackerNoon profile picture

giriiş

ChatGPT, 2023'ün başlarında halkın ilgisini çektiğinden beri, büyük dil modeli tabanlı uygulamaların ticarileştirilmesine yönelik ilgide bir patlama yaşandı. En ilginç uygulamalardan biri, özel bir bilgi tabanından oluşan bir veri tabanından doğal dil sorgularını yanıtlayabilen uzman sohbet sistemlerinin oluşturulması olmuştur.


Bu alandaki en popüler tekniklerden biri, oluşturmak için büyük bir dil modeli kullanmadan önce kullanıcı sorgusuyla ilgili öğeleri bulmak için belge yerleştirmeleri kullanan [geri almayla artırılmış nesil](https://retrieval-artırılmış nesil aws) veya RAG'dir. Bir cevap.


Bu teknik, son derece ucuz ve hızlı aramalara izin verdiği, bilgi tabanının zaman içinde değişip gelişmesi için olağanüstü esneklik sağladığı ve halüsinasyonları ve hataları büyük ölçüde azaltan son derece bilgili ve doğru yanıtlar sağladığı için son derece güçlüdür.


RAG sistemlerinin daha derinlemesine analizi ve nasıl uygulanacağı hakkında önceki makalemi buradan okuyabilirsiniz.


RAG sistemleri ne kadar güçlü olursa olsun, mimaride bazı ciddi sınırlamalar vardır. Önceki makalemde bazı sınırlamaları araştırdık ve mimariyi iyileştirmenin yollarını önerdik.


Bugün, gömme tabanlı mimariyle ilgili başka bir sınırlamayı keşfedeceğiz ve mimarinin sınırlamalarını aşmanın bir yolunu önereceğiz.

Sorun bildirimi

Gömme Tabanlı RAG'ın Sınırlamaları

Okuyucuların ve müşterilerin soru sormasına olanak tanıyan bir sohbet arayüzü oluşturmak isteyen bir yayın olduğumuzu varsayalım.


Elbette “X hakkındaki fikriniz nedir?” gibi sorulara da cevap verebileceğiz. veya “Y hakkında ne söyledin?” Basit bir RAG uygulamasıyla ancak “2021'de X hakkında ne söylediniz?” gibi sorularla uğraştığınızda RAG mimarisi gerçekten zorlanmaya başlıyor. veya "Y kapsamınız 2021 ile 2023 arasında nasıl değişti?"


Gömme tabanlı RAG'ın zorluklarından biri, yerleştirme modellerinin genellikle meta verileri sistematik bir şekilde kodlayamaması ve bu nedenle yayın tarihi veya yazar adı gibi bilgilerin bilinmesini gerektiren herhangi bir aramanın, RAG sisteminize oldukça büyük sorun çıkarmasıdır. .


Bu sorunu, büyük dil modellerinin en heyecan verici özelliklerinden biri olan kod oluşturmadan yararlanarak çözebiliriz. Gerçek dünyadaki bir yayına bakacağız, RAG mimarisini geliştiren LLM tabanlı bir algoritma tasarlayacağız ve algoritmayı temel alan bir sohbet robotu oluşturacağız.

İş Sorunu

Bugün, startupları ve teknolojiyi kapsayan popüler bir günlük haber bülteni olan CB Insights Haber Bültenine bakacağız. CB Insights'ta eski bir tam kapsamlı geliştirici olarak, iş gününün sonunda kurucunun benzersiz zeka ve içgörü markasını sıklıkla sabırsızlıkla bekliyordum.


Bugün, meta veri tabanlı doğal dil sorgularını sıradan Embeddings tabanlı RAG uygulamasından daha üstün bir şekilde yanıtlayabilen bir sohbet robotu oluşturmak için CB Insights haber bülteni arşivini temel veri olarak kullanacağız.


Özellikle, chatbotun aşağıdaki gibi soruları yanıtlayabilmesini istiyoruz:


  • 2020 yılında Uber hakkında neler söylediniz?


  • Airbnb'nin kaderi 2016-2019 arasında nasıl değişti?


  • 2020'lerde Hindistan'dan bazı dikkate değer tek boynuzlu at girişimleri nelerdir?


Hadi hadi bakalım!

Kullanılan Teknolojiler

Bu görevi gerçekleştirmek için aşağıdaki teknolojileri kullanacağız:

Python

Diğer makalelerimi takip ettiyseniz bu makaledeki kodların çoğunda Python kullanacağıma şaşırmamalısınız. Python mükemmel bir web kazıma, veri işleme ve OpenAI entegrasyonuna sahiptir ve bunların hepsinden bugün projemiz için yararlanacağız.

SQL

SQL, kullanıcıların SQLite, MySQL, PostgreSQL ve SQL Server dahil olmak üzere birçok önemli ilişkisel veri tabanıyla etkileşime girmesine olanak tanıyan sorgu dilidir. Dil, kullanıcıya geri gönderilmeden önce verilerin nasıl alınacağı, birleştirileceği ve değiştirileceği konusunda veritabanına verilen bir dizi talimattır.

Yüksek Lisans Kodu Oluşturma

LLM kod oluşturma, GPT 3.5, GPT 4 ve LLaMa 2 gibi çeşitli temel modellerin doğal dil sorgularına yanıt olarak şaşırtıcı karmaşıklıkta kod üretme yeteneğini göstermesi nedeniyle son birkaç ayda yoğun ilgi gören bir tekniktir.


GitHub'un Copilot'u gibi özel olarak eğitilmiş ve ayarlanmış sistemler, özellikle kod oluşturmak için tasarlanmış modelleri kullanarak olağanüstü derecede akıllı kod yazabilir, ancak uygun şekilde yönlendirilen genel amaçlı bir GPT modeli, kod yazma konusunda zaten olağanüstü yeteneklere sahiptir.

Anlamsal Gömme

Anlamsal yerleştirme çoğu RAG uygulamasının omurgasıdır. Bir dizi doğal dil tekniği kullanarak, doğal dil metnini, metnin içeriğini anlamsal bir vektör uzayı içinde temsil eden bir sayı vektörüne dönüştürebiliriz.


Daha sonra bu yerleştirmeleri işlemek için vektör cebiri kullanabiliriz, böylece matematiksel yöntemler kullanarak iki metin bütünü arasındaki ilişkiyi belirleyebiliriz.

GPT-3.5 ve GPT-4

1,7 trilyon parametreyle GPT-4, bugün piyasada bulunan en güçlü transformatör tabanlı geniş dil modelidir. GPT-4, büyük metinleri, karmaşık akıl yürütmeyi ve zor yönlendirmelere yanıt olarak uzun ikna edici yanıtlar üretmeyi anlama yeteneğine sahiptir.


GPT-4'ün çok daha küçük kuzeni olan GPT-3.5, dünyayı kasıp kavurduğunda ChatGPT'ye güç veren modeldir. İnanılmaz derecede karmaşık istemleri işleme kapasitesine sahiptir ve saf muhakeme yeteneğindeki eksikliğini hız ve maliyet tasarrufuyla telafi eder.


Daha basit görevler için GPT3.5, performans ve doğruluk arasındaki dengeyi kurar.

Chatbot Arka Uçunu Kurma

Veritabanını Kurma

Yapay zekamızı oluşturmadan önce verileri almamız gerekiyor. Bunu yapmak için, geçmiş haber bültenlerinin bir koleksiyonunu içeren CB Insights'ın haber bülteni arşiv sayfasını [ https://www.cbinsights.com/newsletter/ ] kullanabiliriz.


Tüm bağlantılara ulaşmak için Python'un isteklerini ve güzel çorba kütüphanesini şu şekilde kullanabiliriz:

 import requests from bs4 import BeautifulSoup res = requests.get('https://www.cbinsights.com/newsletter/') soup = BeautifulSoup(res.text) article_links = [[i.text, i['href']] for i in soup.find_all('a') if 'campaign-archive' in i['href'] ]


Bağlantıları aldıktan sonra bağlantıların her birine gidebilir ve makale HTML'sini indirebiliriz. Python'un liste anlayışıyla bunu tek satırda yapabiliriz:


 article_soups = [BeautifulSoup(requests.get(link[1]).text) for link in article_links]


Bu biraz zaman alacak, ancak sonunda tüm bağlantıların kazınması gerekecek.


Artık ilgili bölümleri çıkarmak için BeautifulSoup'u kullanabiliriz:


 import re # SEO optimizations cause some articles to appear twice so we dedupe them. # We also remove some multiple newlines and unicode characters. def get_deduped_article_tables(article_table): new_article_tables = [] for i in article_table: text_content = re.sub(r'\n{2,}', '\n', i.replace('\xa0', '').strip()) if text_content not in new_article_tables or text_content == '': new_article_tables.append(text_content) return new_article_tables result_json = {} for soup_meta, soup_art in zip(article_links, article_soups): article_tables = [] cur_article = [] for table in soup_art.find_all('table'): if table.attrs.get('mc:variant') == 'Section_Divider': article_tables.append(get_deduped_article_tables(cur_article)) cur_article = [] else: cur_article.append(table.text) article_tables.append(get_deduped_article_tables(cur_article)) result_json[soup_meta[0]] = article_tables


Biraz daha işlem yapalım ve onu bir DataFrame'e dönüştürelim:


 import pandas as pd result_rows = [] for article_name, article_json in result_json.items(): article_date = article_json[0][1] for idx, tbl in enumerate(article_json[1:]): txt = '\n'.join(tbl).strip() if txt != '': result_rows.append({ 'article_name': article_name, 'article_date': article_date, 'idx': idx, 'text': txt, }) df = apd.DataFrame(result_rows)


Veri çerçevesini incelerseniz aşağıdakine benzer bir şey görmelisiniz:



Elimizde veriler varken, makaleler için yerleştirmeleri de oluşturalım. OpenAI'nin ada yerleştirme modeliyle bu oldukça kolaydır.


 import openai EMBEDDING_MODEL = "text-embedding-ada-002" openai.api_key = [YOUR KEY] df['embedding'] = df['text'].map(lambda txt: openai.Embedding.create(model=EMBEDDING_MODEL, input=[txt])['data'][0]['embedding'])


Artık bu alıştırma için kullandığımız verilere sahip olduğumuza göre, verileri bir veritabanına yükleyelim. Bu alıştırma için Python ile birlikte gelen hafif, kendi kendine yeten bir veritabanı sistemi olan SQLite'ı kullanacağız.


Üretim ortamında, burada kullandığımız SQL'de küçük değişiklikler yaparak MySQL veya PostgreSQL gibi uygun bir veritabanı örneğini kullanmak isteyeceğinizi, ancak genel tekniğin aynı kalacağını lütfen unutmayın.


Veritabanını başlatmak ve yüklemek için Python'da aşağıdakini çalıştırmanız yeterlidir. Makale metni ve yerleştirmelerin yanı sıra bazı meta verileri de, yani yayın tarihini kaydettiğimizi unutmayın.


Ayrıca SQLite3'ün, diğer çoğu SQL veritabanından farklı olarak dinamik bir yazma sistemi kullandığını, dolayısıyla oluşturma sorgusunda veri türlerini belirtmemize gerek olmadığını unutmayın.


 import sqlite3 import json con = sqlite3.connect("./cbi_article.db") cur = con.cursor() cur.execute("CREATE TABLE article(name, date, idx, content, embedding_json)") con.commit() rows = [] for _, row in df.iterrows(): rows.append([row['article_name'], row['article_date'], row['idx'], row['text'], json.dumps(row['embedding'])]) cur.executemany("INSERT INTO article VALUES (?, ?, ?, ?, ?)", rows) con.commit()


Ve verileri sorgulamayı deneyelim.


 res = cur.execute(""" SELECT name, date, idx FROM article WHERE date >= DATE('now', '-2 years'); """) res.fetchall()


Şöyle bir şey vermeli:




Oldukça iyi görünüyorsun!


Meta Veri Arama için Kod Oluşturucu Oluşturma

Verileri SQLite veritabanına yüklediğimize göre artık bir sonraki aşamaya geçebiliriz. Yalnızca yerleştirme RAG uygulamasının zorluklarından birinin esnek meta veri arama özelliklerinin eksikliği olduğunu unutmayın.


Ancak artık meta verileri bir SQL veritabanına yüklediğimize göre, esnek meta veri aramaları gerçekleştirmek için GPT'nin kod oluşturma yeteneklerini kullanabiliriz.


SQL kodu oluşturmak için bazı basit istem mühendisliğini kullanabiliriz.


 response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a SQL query writer that can construct queries based on incoming questions. Answer with only the SQL query."}, {"role": "user", "content": """ Suppose we have the SQLite database table called "article" with the following columns, which contains newsletter articles from a publication: name, date, idx, content, embedding_json Write a question that would retrieve the rows necessary to answer the following user question. Only filter on date. Do not filter on any other column. Make sure the query returns every row in the table by name. Reply only with the SQL query. User question: What did you say about the future of the fintech industry in summer of 2022? """}, ] )


Aşağıdaki istem mühendisliğine dikkat edin 1) veritabanı şemasını veriyoruz ancak basit tutuyoruz. 2) Dönüş sütunlarını belirliyoruz. 3) Filtrelemeye uygun sütunları belirliyoruz. 4) SQL lezzetini belirliyoruz. Bu istem aşağıdakine benzer bir SQL kodu oluşturmalıdır:


 SELECT * FROM article WHERE date BETWEEN '2022-06-01' AND '2022-08-31'


Şimdi, dönüş değeri deterministik olmadığından, bazen oluşturulan kodunuzda kendine has özelliklerle karşılaşabilirsiniz. Bu koşulları ele almak için, verileri denemek ve yeniden oluşturmak için basitçe bir try-catch döngüsüne sahip olabiliriz. Elbette bunu sonsuza kadar yapmak istemiyoruz, bu nedenle üç denemede uygun bir SQL oluşturamazsak, çıkıp vanilya RAG'a geri döneceğiz.


Filtreyi şu şekilde uygulayabiliriz:


 res = [] for i in range(3): response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a SQL query writer that can construct queries based on incoming questions. Answer with only the SQL query."}, {"role": "user", "content": """ Suppose we have the SQLite database table called "article" with the following columns, which contains newsletter articles from a publication: name, date, idx, content, embedding_json Write a question that would retrieve the rows necessary to answer the following user question. Only filter on date. Do not filter on any other column. Make sure the query returns every row in the table by name. Reply only with the SQL query. User question: What did you say about the future of the fintech industry in summer of 2022? """}, ] ) generated_query = response.choices[0].message['content'] is_query_safe = True for no_use_word in {'DELETE', 'UPDATE', 'DROP'}: if no_use_word in generated_query.upper(): is_query_safe = False if not is_query_safe: break # the user input is likely malicious. Try to answer the question with vanilla RAG res = cur.execute(generated_query).fetchall() if len(res) > 0: break if len(res) == 0: # vanilla RAG in memory. Use a vector DB in production please. res = cur.execute('''SELECT * FROM articles''').fetchall()


Bu nispeten kaba bir filtredir, dolayısıyla üretim kullanım durumlarında, muhtemelen alaka ve SQL doğruluğu için daha fazla kontrol çalıştırmak isteyeceksiniz, ancak bu bizim örneğimiz için yeterlidir.


Yapay zeka güvenliğine ilişkin kısa bir not : Yapay zekadan döndürülen kodu çalıştırırken, özellikle de istemin bir parçası olarak kullanıcı girişi kullanıldıysa dikkatli olmalıyız.


Çıktıyı sterilize etmezsek, kullanıcının yapay zekayı güncelleme veya silme ifadeleri oluşturması için manipüle etmeye çalıştığı istem mühendisliği saldırılarına karşı kendimizi savunmasız bırakırız.


Bu nedenle, kodu bilgisayarımızda çalıştırmadan önce çıktının beklediğimiz gibi olduğundan emin olmak için her zaman kontrol etmeliyiz.


Alınan sonucu görmek için aşağıdaki kodu çalıştırın:


 df = pd.DataFrame([{c[0]: v for c, v in zip(cur.description, row)} for row in res])


Ve şimdi aşağıdaki sonucu görmelisiniz:



Sonuçla Standart RAG Çalıştırma

Artık meta veri aramasının sonucunu aldığımıza göre gerisi basit. Alınan tüm sonuçlar için kosinüs benzerliğini şu şekilde hesaplıyoruz:


 from openai.embeddings_utils import cosine_similarity q_embed = openai.Embedding.create(model=EMBEDDING_MODEL, input=[user_question])['data'][0]['embedding'] df['cosine_similarity'] = df['embedding_json'].map(lambda js: cosine_similarity(json.loads(js), q_embed))


Artık en iyi 10 haber bültenini alıp soruyu yanıtlamak için hızlı mühendisliği kullanabiliriz. Burada 10'u seçtik çünkü her haber bülteni alıntısı nispeten kısa.


Daha uzun makalelerle çalışıyorsanız, muhtemelen daha az makale kullanmak veya bonus bölümünde anlatılan tekniği kullanmak isteyeceksiniz.


 answer_prompt = ''' Consider the following newsletter excerpts from the following dates: ''' for _, row in df.sort_values('cosine_similarity', ascending=False).iloc[:10].iterrows(): answer_prompt += """ ======= Date: %s ==== %s ===================== """ % (row['date'], row['content']) answer_prompt += """ Answer the following question: %s """ % user_question response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a tech analyst that can summarize the content of newsletters"}, {"role": "user", "content": answer_prompt}, ] )


Bu size aşağıdakine benzer bir sonuç vermelidir:


Fintech'in Geleceği, 2022 yazında çeşitli haber bültenlerinde tartışıldı. 2021'deki yüksek seviyenin ardından 2'22'nin ikinci çeyreğindeki finansman 2020 seviyelerine doğru düşerken, Fintech'te kayda değer bir yavaşlama yaşandı. 2'22'nin 2. Çeyreği Raporu, küresel fintech yatırımlarındaki düşüşe dikkat çekti. .


Bununla birlikte, özellikle ödemeler alanında erken aşamadaki girişimlere doğru önemli bir değişim fark edildiğinden fintech'in geleceği umut verici görünüyordu. Ödemeler sektöründeki küresel yatırım, finansmanın 2021'deki zirvelerin ardından normale dönmesi nedeniyle 1'22'den 2'22'ye göre %43 düşerek 5,1 milyar dolara geriledi.


Bu alana yeni girenler, 2022'de şu ana kadar daha yüksek bir anlaşma payı (%63) elde etti; bu da yatırımcıların start-up'lara ilgisinin göstergesi oldu. Ayrıca Fintech'in perakende bankalar arasında artan rekabete neden olduğu ve onları temel hizmetlerin dijitalleştirilmesine öncelik vermeye zorladığı da bildirildi.


Bankacılık sektörü, sohbet robotları ve müşteri analiz platformları gibi teknolojileri kullanarak, özellikle Mobil Bankacılık olmak üzere müşteri deneyimini iyileştirmeye odaklanarak yanıt verdi. Bütün bunlar önümüzdeki dönemde canlı ve rekabetçi bir FinTech endüstrisine işaret ediyor.


Bu oldukça iyi! Cevap istemine bakarak cevabın doğruluğunu kontrol ederseniz istatistiklerin tamamının kaynak materyalden geldiğini fark edeceksiniz. Ayrıca kaynak materyalde GPT4'ün görmezden gelebildiği bazı kendine özgü biçimlendirmelerin olduğunu da fark edeceksiniz. Bu, Yüksek Lisans'ların veri özetleme sistemlerindeki esnekliğini gösterir.

Bonus: Özetleme Ara Yazılımı

Bu süreçte karşılaşabileceğiniz sorunlardan biri de derlem çok büyük olduğunda son istemin çok büyük olabilmesidir. GPT-4 kullanıyorsanız bu maliyetli olabilir, ancak çok uzun bir istemin de modeli karıştırma şansı vardır.


Bunu çözmek için, son adımda GPT-4'e gönderdiğimiz son istemi sıkıştırarak tek tek makaleleri GPT-3.5 ile önceden işleyebiliriz.


 summarization_prompt = ''' Summarize the following passage and extract only portions that are relevant to answering the user question. Passage: ======= %s ======= User Questions: %s ''' (row['content'], user_question) response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a summarizer of tech industry reports"}, {"role": "user", "content": summarization_prompt}, ] )


Daha sonra özetleri istemin içine koyabiliriz ve saf makaleyi son istemin içine yerleştirmeye kıyasla önemli ölçüde tasarruf sağlarız.

Basit Bir Ön Uç Oluşturma

Artık Python kodunu yazdığımıza göre bunu basit bir web uygulaması olarak paketleyelim.

Arka uç API'si

Kodu Flask ile arka uç API'si olarak paketlemek nispeten basittir. Basitçe bir işlev oluşturun ve onu Flask'a şu şekilde bağlayın:


 import requests from bs4 import BeautifulSoup import re import pandas as pd import sqlite3 import json import openai from openai.embeddings_utils import cosine_similarity from flask import Flask, request, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app) EMBEDDING_MODEL = "text-embedding-ada-002" openai.api_key = [Your OpenAI Key] db_location = [Location of your SQLite DB] def process_user_query(user_question): con = sqlite3.connect(db_location) cur = con.cursor() user_question = 'What did you say about the future of the fintech industry in summer of 2022?' res = [] for i in range(3): response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a SQL query writer that can construct queries based on incoming questions. Answer with only the SQL query."}, {"role": "user", "content": """ Suppose we have the SQLite database table called "article" with the following columns, which contains newsletter articles from a publication: name, date, idx, content, embedding_json Write a question that would retrieve the rows necessary to answer the following user question. Only filter on date. Do not filter on any other column. Make sure the query returns every row in the table by name. Reply only with the SQL query. User question: What did you say about the future of the fintech industry in summer of 2022? """}, ] ) generated_query = response.choices[0].message['content'] is_query_safe = True for no_use_word in {'DELETE', 'UPDATE', 'DROP'}: if no_use_word in generated_query.upper(): is_query_safe = False if not is_query_safe: break # the user input is likely malicious. Try to answer the question with vanilla RAG res = cur.execute(generated_query).fetchall() if len(res) > 0: break if len(res) == 0: # vanilla RAG in memory. Use a vector DB in production please. res = cur.execute('''SELECT * FROM articles''').fetchall() df = pd.DataFrame([{c[0]: v for c, v in zip(cur.description, row)} for row in res]) q_embed = openai.Embedding.create(model=EMBEDDING_MODEL, input=[user_question])['data'][0]['embedding'] df['cosine_similarity'] = df['embedding_json'].map(lambda js: cosine_similarity(json.loads(js), q_embed)) answer_prompt = ''' Consider the following newsletter excerpts from the following dates: ''' for _, row in df.sort_values('cosine_similarity', ascending=False).iloc[:10].iterrows(): answer_prompt += """ ======= Date: %s ==== %s ===================== """ % (row['date'], row['content']) answer_prompt += """ Answer the following question: %s """ % user_question response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a tech analyst that can summarize the content of newsletters"}, {"role": "user", "content": answer_prompt}, ] ) return response.choices[0].message['content'] @app.route('/process_user_question', methods=["POST"]) def process_user_question(): return jsonify({ 'status': 'success', 'result': process_user_query(request.json['user_question']) }) app.run()

Ve aslında arka uç için yapmamız gereken tek şey bu!

Ön Uç Kodu

Yalnızca tek bir uç noktamız olduğundan ve uygulamamızda çok fazla duruma ihtiyaç duymadığımızdan, ön uç kodunun oldukça basit olması gerekir. Geçmiş bir makalede , bileşenleri belirli rotalarda oluşturmamıza olanak tanıyan yönlendirmeli bir React uygulaması kurduğumuzu unutmayın.


Bir React.JS projesi oluşturmak için bu makaledeki talimatları uygulamanız ve aşağıdaki bileşeni seçtiğiniz bir rotaya eklemeniz yeterlidir:


 import React, {useState, useEffect} from 'react'; import axios from 'axios'; const HNArticle = () => { const [result, setResult] = useState(''); const [message, setMessage] = useState(''); const [question, setQuestion] = useState(''); const askQuestion = () => { axios.post("http://127.0.0.1:5000/process_user_question", {user_question: question}) .then(r => r.data) .then(d => { console.log(d); setResult(d.result); }); } return <div className="row" style={{marginTop: '15px'}}> <div className="col-md-12" style={{marginBottom: '15px'}}> <center> <h5>Hackernoon CB Insights Demo</h5> </center> </div> <div className="col-md-10 offset-md-1 col-sm-12 col-lg-8 offset-lg-2" style={{marginBottom: '15px'}}> <ul className="list-group"> <li className="list-group-item"> <h6>Your Question</h6> <p><input className="form-control" placeholder="Question" value={question} onChange={e => setQuestion(e.target.value)} /></p> <p>{message}</p> <p> <button className="btn btn-primary" onClick={askQuestion}>Ask</button> </p> </li> {result? <li className="list-group-item"> <h6>Response</h6> {result.split("\n").map((p, i) => <p key={i}>{p}</p>)} </li>: ''} </ul> </div> </div>; } export default HNArticle;


Kodu çalıştırdığınızda şöyle bir arayüz görmelisiniz:




Bir soru sorun ve kısa bir süre sonra çıktıyı görmelisiniz:


Ve işte! Sıradan bir RAG sisteminin ötesinde gelişmiş sorgulama yeteneklerine sahip bir sohbet robotunu başarıyla oluşturduk!

Çözüm

Bugünkü yazımızda güçlü kod oluşturma yeteneklerine sahip bir chatbot geliştirdik. Bu, uzman bilgi birikimine sahip üretken yapay zeka sistemleri oluşturmak için verilerden, programlama dillerinden ve doğal dil kavrayışından yararlanabilen, birçok yapay zeka öncüsü tarafından şu anda geliştirilmekte olan yeni bir LLM uygulamaları sınıfının bir örneğidir.


Bu uzman sistemler, OpenAI ve Anthropic gibi platform sağlayıcılarından doğrudan elde edilebilenin ötesinde değer sağlamayı amaçlayan LLM uygulamaları için ticari uygulanabilirliğin kilidini açmanın anahtarıdır.


Kod oluşturma, ticari olarak mevcut olan yeni nesil büyük dil modellerinin mümkün kıldığı tekniklerden sadece bir tanesidir.


Yüksek Lisans'ların nasıl ticarileştirilebileceğine dair fikirleriniz varsa veya yapay zeka hakkında konuşmak istiyorsanız lütfen LinkedIn veya GitHub üzerinden iletişime geçmekten çekinmeyin. Geçtiğimiz yıl boyunca okuyucularla pek çok anlayışlı sohbet gerçekleştirdim ve daha fazlasını sabırsızlıkla bekliyorum!