Günümüz iş dünyasında, iletişim ve verimli iş akışları başarı için kritik öneme sahiptir. Bu dinamik ortamda, yapay zeka destekli çözümler rekabet avantajı sağlamaktadır.
Yapay zeka ajanları, gelişmiş büyük dil modelleri (LLM) üzerinde inşa edilmiştir ve NVIDIA NIM tarafından güçlendirilmektedir. Bu yapı, üretkenliği ve bilgi akışını artırmak için sorunsuz bir yol sunmaktadır. NIM, NVIDIA AI Enterprise paketinin bir parçası olarak, bulutlar, veri merkezleri ve iş istasyonları arasında yüksek performansa sahip AI model çıkarımı için kolay kullanımlı mikro hizmetler sunmaktadır.
NIM mikro hizmetlerinden yararlanan işletmeler, API Kataloğu üzerinden modelleri hızlı bir şekilde entegre ederek, yalnızca basit otomasyondan çok daha fazlasını sunan Slackbot’lar oluşturabilirler. Bu durum, API Kataloğu’nun üretim dağıtımları için kullanılabileceğini önermektedir. Bu Slackbot’lar, temel sorgulardan karmaşık sorunları çözmeye ve yaratıcı içerik üretmeye kadar geniş bir görev yelpazesini üstlenebilen değerli sanal asistanlar haline gelmektedir. Bu da zamandan ve kaynaklardan tasarruf sağlamanın yanı sıra daha işbirlikçi ve verimli bir çalışma ortamını teşvik etmektedir.
Bu yazıda, NVIDIA NIM ve LangChain kullanarak belirli kullanım senaryolarına uygun özel bir Slackbot ajanı oluşturma sürecini adım adım anlatacağım.
Slackbot’ın Yetkinlikleri ve Mimarisi
Slackbot’ın ilk implementasyonu, Slack kanalları, ileti dizileri ve kişisel sohbet mesajları aracılığıyla etkileşimleri desteklemektedir. Bu etkileşimleri destekleyen ana model llama-3_1-405b-instruct olup, daha iyi yanıtlar için dış araçlara erişim sağlamaktadır. Bu araçlar, dış uç noktaları çağırmayı ve ön işlemeyi içermektedir.
Slackbot’ın temel özellikleri şunlardır:
- Multi-kanal desteği: Slackbot, herhangi bir kanala davet edilebilir ve o kanalın içeriğine uygun yanıtlar verebilir.
- Etiketleme ile etkileşim: Kullanıcılar sohbeti başlatmak için botu etiketleyip kapsamlı bir soru sorarlar. Bot yanıtını, aynı kanalda kullanıcıyı etiketleyerek ileti dizisi içinde verir.
- Özelleştirilebilir yanıtlar: Slackbot, takip soruları sorabilir veya yanıtlarını üretmek için dış araçlar kullanabilir. Ayrıca özel mesajları da desteklemektedir.
Slackbot’ın mimarisi (Şekil 1), proje için ana host olarak Amazon EC2’yi, insan-AI Slack etkileşimlerini izlemek için ise Amazon Aurora PostgreSQL veritabanını kullanmaktadır. Microsoft Azure veya Google Cloud gibi diğer bulut hizmet sağlayıcıları alternatif olarak kullanılabilir.
Hafıza yönetimi için, DynamoDB, önceki kullanıcı etkileşimlerini takip etmek üzere LangChain’in DynamoDBChatMessageHistory ile birleştirilmiştir.
Slackbot Ajanı Oluşturma Adım Adım Rehberi
Slackbot’ı AWS üzerinde dağıtmak için gereken adımlar şunlardır:
- Gerekli kütüphaneleri kurun.
- Ana ajanı tanımlayın.
- Hafıza yönetimi için DynamoDB’yi ayarlayın.
- Konuşma hafızasını yapılandırın.
- Anahtar kelime tabanlı araç kullanımını tanımlayın.
- Ajana son şekli verin.
- Amazon Aurora PostgreSQL’de etkileşimleri kaydedin.
Ön Gereksinimler
Slackbot’ı oluşturmaya başlamadan önce şunları yapmalısınız:
- Slack’ı kurun.
- LangChain ve ajanlar hakkında bilgi edinin.
Gerekli kütüphaneler şunlardır:
openai
boto3
slack_bolt
slack-sdk
langchain
python-dotenv
langchain-community
langchain-nvidia-ai-endpoints
langchainhub
Ayrıca ihtiyaç duyacağınız kaynaklar:
- NVIDIA API Kataloğu‘ndan bir API anahtarı.
- AWS hesabı (Amazon EC2, Amazon Aurora, Amazon DynamoDB, Amazon ElastiCache vb. için) ya da benzeri bulut hizmetleri.
- Başlangıç testleri için bir Jupyter Lab defteri.
Gerekli Kütüphanelerin Kurulumu
Ajana önceden gerekli kütüphaneleri kurun, LangChain, LangChain NVIDIA AI uç noktaları, Slack SDK’ları vb. gibi:
pip install openai boto3 slack_bolt slack-sdk langchain python-dotenv langchain-community langchain-nvidia-ai-endpoints langchainhub
Ana Ajanı Tanımlama
Sonraki adımda, kullanıcı etkileşimleri için temel Slack özelliklerini belirleyin ve NIM modelini ana ajan olarak entegre edin:
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
from dotenv import load_dotenv
from langchain.agents import AgentExecutor, create_react_agent
from langchain.memory import ConversationBufferWindowMemory
from langchain_core.prompts import PromptTemplate
from langchain_nvidia_ai_endpoints import ChatNVIDIA
def agent(user_id, thread_id, channel_name, message_text):
try:
llm = ChatNVIDIA(
model="meta/llama-3.1-405b-instruct",
temperature=0.1,
top_p=1,
max_tokens=2000,
)
Meta’nın Llama-3 modeli, ajan görevlerini desteklemektedir. Aynı fonksiyonda, ajan araçlarını tanımlayarak, AI ajanlarının kendi yeteneklerinin ötesindeki görevleri yerine getirmesini sağlayan dış kaynakları belirleyin. Bu araçlar, çalışır bir API uç noktasına sahip olduğu sürece farklı kapsamda olabilir:
tools = [
CalculatorTool(),
CopilotTool(),
BrowsingTool(),
... # Diğer Araçlar
]
DynamoDB’yi Hafıza Yönetimi için Ayarlama
Ajans etkileşimlerini takip etmek için DynamoDB tablosunu başlatın ve oturum hafızasını yapılandırın:
# Tablo oluşturulacak bölgeyi belirtin
boto3.setup_default_session(region_name='us-east-2')
# DynamoDBChatMessageHistory'yi başlat
session_id = channel_name # Kanal adını oturum kimliği olarak kullanın
history = DynamoDBChatMessageHistory(table_name="SessionTable", session_id=session_id)
Konuşma Hafızasını Yapılandırma
Chat mesaj geçmişini ajanın konuşma belleğine entegre edin:
conversational_memory = ConversationBufferWindowMemory(
memory_key='chat_history',
k=10,
return_messages=True,
input_key='input',
output_key='output',
chat_memory=history
)
Anahtar Kelime Tabanlı Araç Kullanımını Tanımlama
Araçları kullanmaları için botu harekete geçirmek amacıyla anahtar kelime tetikleyicileri ekleyebilirsiniz:
# Belirli etiketler kontrol edin ve karşılık gelen aracı kullanın
if "%intro" in message_text.lower():
result = INTRO_MESSAGE
elif "%gtc24" in message_text.lower():
selected_tool = GTCFAQTool()
result = selected_tool._run(message_text)
...
else:
# prompt.txt dosyasından şablonu okuyun
with open('prompt.txt', 'r') as file:
template = file.read()
prompt = PromptTemplate.from_template(template)
Özel kullanım senaryanız için uygun bir şekilde teşvik etmek amacıyla LangChain Hub‘ı kontrol edin.
Ajana Son Şeklini Verme
ReACT, LLM’lerin akıl yürütme ile eylemleri birleştirdiği bir çerçevedir. Verilen örneklere dayalı olarak görevleri çözmek için bunu kullanın. ReACT ajanını ve önceden tanımlanmış değişkenlerle ajan yürütücüsünü oluşturun:
# LLM, ReACT istemi ve tanımlı araçlarla NIM ajanıdır.
react_agent = create_react_agent(
llm=llm,
tools=tools,
prompt=prompt
)
# Hafıza için DB'ye bağlanın, reakt ajanı ekleyin ve Slack için uygun yürütmeyi sağlayın
agent_executor = AgentExecutor(
agent=react_agent,
tools=tools,
verbose=True,
handle_parsing_errors=True,
return_intermediate_steps=True,
memory=conversational_memory
)
Etkileşimleri Amazon Aurora PostgreSQL’de Kaydetme
Etkileşimleri Amazon Aurora PostgreSQL veritabanında kaydetmek için önceden tanımlanmış bir fonksiyon kullanın:
save_conversation(user_id, thread_id, channel_name, message_text, result)
return result
Ajan akışınıza uygun olarak çeşitli hata yönetim mekanizmaları ekleyebilirsiniz:
- Araçlar başarısız olduğunda özel mesaj için bir istisna yöneticisi ekleyin.
- Aracın beklemesi gereken zaman için bir zaman aşımı mesajı.
- Aracın başarısız olduğunu kullanıcıya bildiren bir hata mesajı.
Slack Etkileşimlerini Yapılandırma
Gerekli izinleri ayarladıktan ve kütüphaneleri yükledikten sonra, ortam değişkenlerini yükleyin ve Slack uygulamasını başlatın:
# Ortam değişkenlerini yükleyin
load_dotenv(".env")
# Slack uygulamasını başlatın
app = App(token=os.getenv('SLACK_BOT_TOKEN'))
Herhangi bir önceden tanımlanmış mesaj, sabitler ve uzun istemler için dosyaları metin formatında ekleyin ve ayrı olarak çağırın:
# Örnek sabitler
MAX_BLOCK_CHARS = 3000 # Slack karakter limiti
MESSAGE_FOLDER = "messages"
def load_message(file_name):
file_path = os.path.join(MESSAGE_FOLDER, file_name)
with open(file_path, 'r') as file:
return file.read()
# Örnek olarak otomatik mesajı yükleme
INTRO_MESSAGE = load_message('greeting_message.txt')
Mesajların yönetimi birkaç yol içerir; uygulama belirti olayları, Slack’a mesaj gönderme ve mekanizmaları aşan mesajları birden fazla bloğa ayırma gibi özelleştirilmiş olaylar ile desteklenebilir.
Ajanın özel mesajları ele alabilmesi için bir etkinlik dinleyicisi kurun:
# Doğrudan mesaj etkinlikleri için etkinlik dinleyici ekleyin
@app.event("message")
def handle_direct_message_events(body, say, logger):
event = body['event']
if event.get('channel_type') == 'im':
user_id = event['user']
thread_id = event.get('ts')
channel_name = event['channel'] # Kullanıcı ID'sini kanal adı olarak kullan
text = event['text'].strip()
response = agent_with_timeout(user_id, thread_id, channel_name, text)
if response is not None:
post_message_to_slack(channel_name, response, thread_id, user_id)
Ajana Özel Araçlar Oluşturma
Özel araçlar eklemek için, LangChain BaseTool
sınıfını genişletin ve her araç için net bir isim ve açıklama sağlayın:
class CustomTool(BaseTool):
name = "Özel Araç"
description = """
Bilgi almak için kullanılan araç
...
"""
Açıklamanın kapsamlı olduğundan ve kullanım için bir örnek içerdiğinden emin olun. Ardından, aracı ajanın araç setine ekleyin.
Farklı senaryolar için araç davranışlarını özelleştirebilir, örneğin Slack arayüz düzenini eşleştirmek için regex desenleri kullanabilirsiniz. Bu yaklaşım, her aracın belirli ihtiyaçlara uygun olarak geliştirilmesini sağlar.
Ajan Etkileşimlerini ve Hafızasını Yönetme
Ajan-kullanıcı etkileşimlerini depolamak için Amazon Aurora PostgreSQL veritabanı örneğine bağlanın:
DB_NAME = os.getenv('DB_NAME')
DB_USER = os.getenv('DB_USER')
DB_PASSWORD = os.getenv('DB_PASSWORD')
DB_HOST = os.getenv('DB_HOST')
DB_PORT = os.getenv('DB_PORT')
Veritabanı işlevselliğini yönetmek için birkaç temel fonksiyon bulunmaktadır. Veritabanını manuel oluşturarak ya da bir betik kullanarak otomatikleştirebilirsiniz. Aşağıda, ajanın insanlarla yaptığı konuşmaları kaydeden bir fonksiyon örneği verilmiştir:
# Konuşmayı kaydetme fonksiyonu
def save_conversation(user_id, thread_id, channel_name, message_text, response):
try:
conn = psycopg2.connect(
dbname=DB_NAME,
user=DB_USER,
password=DB_PASSWORD,
host=DB_HOST,
port=DB_PORT
)
c = conn.cursor()
c.execute("""INSERT INTO history (user_id, thread_id, channel_name, message_text, response)
VALUES (%s, %s, %s, %s, %s)""",
(user_id, thread_id, channel_name, message_text, response))
conn.commit()
conn.close()
print("Konuşma başarıyla kaydedildi.")
except psycopg2.Error as e:
print("Konuşmayı kaydederken hata:", e)
Bu fonksiyonda, kullanıcı ID’leri, kanal adları ve mesajlar gibi önemli etkileşim detayları gelecekte referans için veritabanında saklanmaktadır.
Hafıza yönetimi için, DynamoDB’yi konuşma oturumlarını izlemek ve bağlamı korumak amacıyla kullanın:
# IAM rolü kimlik bilgilerini kullanarak DynamoDB kaynaklarını başlatın
dynamodb = boto3.resource('dynamodb', region_name='us-east-2')
# DynamoDB tablosunu oluşturun
table = dynamodb.create_table(
TableName='SessionTable',
KeySchema=[
{
'AttributeName': 'SessionId',
'KeyType': 'HASH' # Bölüm anahtar
}
],
AttributeDefinitions=[
{
'AttributeName': 'SessionId',
'AttributeType': 'S'
}
],
BillingMode='PAY_PER_REQUEST'
)
Gelecek Adımlar ve Geliştirmeler
Slackbot’u daha da optimize etmek için aşağıdaki geliştirmeleri göz önünde bulundurun:
- Güvenlik ekleyin:NVIDIA NeMo Koruma Demirbaşları ile güvenlik ve kontrolü artırın.
- NIM’i indirin ve dağıtın:NVIDIA NIM ile Üretken AI Dağıtımına Basit Bir Kılavuz.
- Ajan performansını izleyin:pgAdmin ile ajanın performansını izleyin ve Tableau veya PowerBI gibi veri görselleştirme araçlarıyla bağlantı kurun.
- Slackbot’un yeteneklerini genişletin: SSS’ler veya forumlar gibi ek araçlar ve veri kaynakları ekleyin.
- Önbellekleme ekleyin: Yanıt sürelerini ve verimliliği artırmak için ElastiCache kullanın.
- Kaydetme ve izleme ekleyin:Amazon CloudWatch veya LangSmith kullanarak gelişmiş izleme ve hata ayıklama ekleyin.
Özel Slackbotların Ötesinde Keşfe Devam Edin
Yapay zeka ajanları, görevleri otomatikleştirerek, süreçleri optimize ederek ve verimliliği artırarak işletme uygulamalarını dönüştürmektedir. NVIDIA NIM mikro hizmetleri, birden fazla ajan ve aracı entegre etmenin sorunsuz bir yolunu sunarak işletmelerin özel AI çözümleri oluşturmasına olanak tanımaktadır.
Bu yazıda, NIM AI uç noktaları kullanarak baştan sona bir Slackbot ajanı oluşturma yöntemini gösterdim. Bu çözüm, basit bir Slack arayüzünü geliştirdi ve daha karmaşık görevleri yönetebilmesini sağladı.
Daha fazla örnek için resmi /NVIDIA/GenerativeAIExamples GitHub deposunu keşfedin. NIM mikro hizmetleri ve LangChain ile ilgili daha fazla bilgi için NVIDIA AI LangChain uç noktalarına göz atın.