Yapay zeka (YZ) ajanları sayesinde işletmeler, manuel iş yüklerini azaltabilir ve süreçlerini daha verimli hale getirebilir. Büyük dil modelleri (LLM) ile desteklenen bu ajanlar, çok aşamalı ve yinelemeli akıl yürütme kullanarak sorunları analiz eder, çözümler geliştirir ve çeşitli araçlar aracılığıyla görevleri yerine getirir. Geleneksel sohbet botlarının aksine, LLM destekli ajanlar karmaşık görevleri otomatikleştirir; bu yüzden insan gözetimi sağlamak, otonom YZ ajanlarıyla çalışırken önemli bir unsurdur.
Bu yazıda, NVIDIA NIM mikroservisleri kullanarak insan döngüsünde YZ ajanı nasıl inşa edileceğini öğreneceksiniz. Makale, bu çok yönlü YZ ajanlarının nasıl karmaşık görevleri kolayca yerine getirebileceğini göstermek için bir sosyal medya kullanım örneği içermektedir. NIM mikroservisleri sayesinde, gelişmiş LLM’leri iş akışlarınıza sorunsuz bir şekilde entegre edebilir, YZ tabanlı görevler için gerekli ölçeklenebilirliği ve esnekliği sağlayabilirsiniz. İster tanıtım içeriği oluşturuyor olun, ister karmaşık iş akışlarını otomatikleştiriyor olun, bu eğitim süreci hız kazandırmak için tasarlandı.
Bir demo izlemek için NVIDIA NIM ile 5 Dakikada Basit Bir YZ Ajanı Nasıl Oluşturulur? başlıklı videoyu izleyebilirsiniz.
Özelleştirilmiş Sosyal Medya İçeriği İçin YZ Ajanı Oluşturma
Pazarlamacıların karşılaştığı en büyük zorluklardan biri, platformlar arasında yüksek kaliteli ve yaratıcı tanıtım içeriği üretmektir. Amaç, sosyal medyaya yayınlanacak çeşitli tanıtım mesajları ve sanat eserleri oluşturmaktır.
Geleneksel olarak, bir proje lideri bu görevleri içerik yazarları ve dijital sanatçılar gibi uzmanlara atar. Ancak, YZ ajanları bu süreci daha verimli hale getirebilir mi?
Bu kullanım örneği, Tanıtım İçerik Oluşturucu Ajanı ve Dijital Sanatçı Ajanı olmak üzere iki YZ ajanını içermektedir. Bu ajanlar, tanıtım içeriği üretecek ve bunu nihai onay için insan karar vericisine sunacak; bu sayede yaratıcı süreçte insan kontrolü ön planda tutulmuş olacaktır.
İnsan-Ajan Karar Alma İş Akışının Mimarisi
Bu insan döngüsünde sistem oluşturma süreci, YZ ajanlarının belirli görevlerde yardımcı olduğu, insanların ise son karar verme işlemini gerçekleştirdiği bilişsel bir iş akışı yaratmayı içerir. Şekil 1, insan karar vericisi ile ajanlar arasındaki etkileşimi özetlemektedir.
Tanınan İçerik Oluşturucu Ajan, Llama 3.1 405B modeli ile çalışır ve NVIDIA LLM NIM mikroservisleri tarafından hızlandırılır. ChatNVIDIA ile yapılandırılmış sonuçlar, düzenli ve güvenilir sonuçlar sağlayarak, LangChain ile entegre edilir. LangChain ise NVIDIA NIM ile kolay bağlantı kurmayı sağlayan açık kaynaklı bir Python kütüphanesidir.
Tanıtım İçerik Oluşturucu Ajanın Oluşturulması
Öncelikle Tanıtım İçerik Oluşturucu Ajanı inşa ederek başlayın. Bu ajan, belirli formatlama yönergelerine uyarak tanıtım mesajları oluşturacaktır. Bunun için NVIDIA API katalogu önizleme API uç noktalarını kullanabilirsiniz. NVIDIA AI Enterprise müşterileri de NIM uç noktalarını yerel olarak indirip çalıştırabilir.
Başlamak için aşağıdaki Python kodunu kullanabilirsiniz:
from langchain_nvidia_ai_endpoints import ChatNVIDIA
from langchain import prompts, chat_models, hub
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field, validator
from typing import Optional, List
## 1. sistem istemini oluşturun ---------
prompt_template = """
### [INST]
Siz bir sosyal medya içerik oluşturma uzmanının.
Göreviniz, aşağıdaki ürün açıklaması ile birlikte
farklı bir tanıtım mesajı oluşturmaktır.
------
{product_desc}
------
Üretilecek tanıtım mesajı AŞAĞIDAKİ biçimi kullanmalıdır:
'''
Başlık: bu ürünün ne hakkında olduğunu tarif eden güçlü, kısa bir mesaj
Mesaj: tanıtım mesajı için yaratıcı olun, fakat kısa ve sosyal medya akışlarına uygun olsun.
Etiketler: sosyal medyada genellikle kullanılan hashtag'ler
'''
Başlayın!
[/INST]
"""
prompt = PromptTemplate(
input_variables=['produce_desc'],
template=prompt_template,
)
## 2. ürün açıklaması metni ekleyin
product_desc="NVIDIA'nın hızlandırdığı API ile topluluk tarafından oluşturulan en son YZ modellerini keşfedin, ardından NVIDIA NIM™ çıkarım mikroservisleri ile her yerde dağıtın."
## 3. yapılandırılmış çıktıyı kullanma
class StructureOutput(BaseModel):
Title: str = Field(description="Tanıtım mesajının başlığı")
Message : str = Field(description="Gerçek tanıtım mesajı")
Tags: List[str] = Field(description="Genellikle # ile başlayan sosyal medya hashtag'leri")
## 4. Güçlü bir YZ modeli
llm_with_output_structure=ChatNVIDIA(model="meta/llama-3.1-405b-instruct").with_structured_output(StructureOutput)
## içerik oluşturucu ajanı oluştur
content_creator = ( prompt | llm_with_output_structure )
out=content_creator.invoke({"product_desc":product_desc})
Dijital Sanatçı Ajanının Kullanımı
Sonrasında, tanıtım metnini yaratıcı görsellere dönüştüren Dijital Sanatçı Ajanını tanıtıyoruz. Bu ajan, tanıtım başlıklarını yeniden yazarak ve sosyal medya tanıtım kampanyaları için yüksek kaliteli görseller üreterek çalışır. Aşağıdaki kod örneği, ajanın nasıl entegre edileceğini göstermektedir:
import requests
import base64, io
from PIL import Image
import requests, json
def generate_image(prompt :str) -> str :
"""
metinden görsel oluştur
Args:
prompt: giriş metni
"""
## girdi tanıtım başlığını uygun görsel_oluşturma istemine dönüştürmek
gen_prompt=llm_rewrite_to_image_prompts(prompt)
print("oluşturma için görsel oluşturma istem ile başladım:", gen_prompt)
invoke_url = "https://ai.api.nvidia.com/v1/genai/stabilityai/sdxl-turbo"
headers = {
"Authorization": f"Bearer {nvapi_key}",
"Accept": "application/json",
}
payload = {
"text_prompts": [{"text": gen_prompt}],
"seed": 0,
"sampler": "K_EULER_ANCESTRAL",
"steps": 2
}
response = requests.post(invoke_url, headers=headers, json=payload)
response.raise_for_status()
response_body = response.json()
## numpy dizisine yükleniyor
print(response_body['artifacts'][0].keys())
imgdata = base64.b64decode(response_body["artifacts"][0]["base64"])
filename = 'output.jpg'
with open(filename, 'wb') as f:
f.write(imgdata)
im = Image.open(filename)
img_location=f"oluşturulan görsel bu yol altında saklanacaktır: {filename}"
return img_location
Kullanıcı girişi sorgularını görsel oluşturma istemlerine dönüştürmek için aşağıdaki Python betiğini kullanabilirsiniz:
from langchain_nvidia_ai_endpoints import ChatNVIDIA
from langchain import prompts, chat_models, hub
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, PromptTemplate
def llm_rewrite_to_image_prompts(user_query):
prompt = prompts.ChatPromptTemplate.from_messages(
[
(
"system",
"Aşağıdaki kullanıcı sorgusunu bir cümlelik görsel oluşturma teması olarak özetleyin, şu formatı izlemelidir: İkonik, geleceğe dair bir görüntü, metin yok, kesilme yok, yüz yok, parlak, canlı.",
),
("user", "{input}"),
]
)
model = ChatNVIDIA(model="mistralai/mixtral-8x7b-instruct-v0.1")
chain = ( prompt | model | StrOutputParser() )
out= chain.invoke({"input":user_query})
return out
Görsel oluşturma işlevini seçilen LLM ile bağlayın ve onu LCEL’e sararak Dijital Sanatçı Ajanı oluşturun:
## görsel oluşturma aracı olarak llm'yi bağlayın
llm=ChatNVIDIA(model="meta/llama-3.1-405b-instruct")
llm_with_img_gen_tool=llm.bind_tools([generate_image],tool_choice="generate_image")
## Dijital Sanatçı Ajanı oluşturmak için LCEL'i kullanın
digital_artist = (
llm_with_img_gen_tool
| output_to_invoke_tools
)
İnsan Dönüşünde Karar Verme Sürecinin Entegrasyonu
İnsan gözetimini sağlamak için, ajanlar çıktılarını nihai onay almak üzere paylaşmalıdır. Bir insan karar vericisi, içerik oluşturucu ajanın ürettiği metni ve dijital sanatçı ajanın ürettiği sanatı gözden geçirecektir.
Bu etkileşim, her iki tanıtım mesajının ve görselin de özenle gözden geçirilerek son haline getirilmesini sağlamak için çoklu yinelemelere olanak tanır. Ajanik mantık, insanları karar vericiler olarak merkezde tutarak her görev için uygun ajanları atar. LangGraph, ajansik bilişsel mimariyi düzenlemek için kullanılır.
Bu, insan girdisini talep eden bir işlev içermektedir:
# Aracı doğrudan oluşturabilirsiniz
from langchain_community.tools import HumanInputRun
from langchain.agents import AgentType, load_tools
from langchain.agents import AgentType, initialize_agent, load_tools
def get_human_input() -> str:
""" İnsanları karar verici olarak koyar; bu nedenle hangi ajanın göreve en uygun olduğunu belirleyecektir."""
print("2 ajan verildi. Lütfen aşağıdaki 2 ajandan sadece BİR tanesini seçip durumu onaylayın.")
print("""Mevcut ajanlar: n
1 İçerik Oluşturucu n
2 Dijital Sanatçı n
1 veya 2 yazın""")
contents = []
while True:
try:
line = input()
if line=='1':
tool="İçerik Oluşturucu"
line=tool
elif line=='2':
tool="Dijital Sanatçı"
line=tool
else:
pass
except EOFError:
break
if line == "y":
print(f"seçilen araç: {tool} ")
break
contents.append(line)
return "n".join(contents)
# Aracı yüklerken aracı değiştirebilirsiniz
ask_human = HumanInputRun(input_func=get_human_input)
Sonrasında, LangGraph’ın bir iş akışı içerisindeki adımları veya işlemleri temsil etmek için kullanılan iki ek Python işlevi oluşturun. Bu düğümler, ajanın belirli görevleri sırasıyla veya paralel olarak gerçekleştirmesine olanak tanır ve esnek ve yapılandırılmış bir süreç oluşturur.
from langgraph.graph import END, StateGraph
from langgraph.prebuilt import ToolInvocation
from colorama import Fore, Style
# Gerekli fonksiyonları tanımlayın
def human_assign_to_agent(state):
# orijinal istem kullanılmasını sağlamak için
inputs = state["input"]
input_to_agent = state["input_to_agent"]
concatenate_str = Fore.BLUE + inputs + ' : ' + Fore.CYAN + input_to_agent + Fore.RESET
print(concatenate_str)
print("---"*10)
agent_choice = ask_human.invoke(concatenate_str)
print(Fore.CYAN + "seçilen ajan: " + agent_choice + Fore.RESET)
return {"agent_choice": agent_choice}
def agent_execute_task(state):
inputs = state["input"]
input_to_agent = state["input_to_agent"]
print(Fore.CYAN + input_to_agent + Fore.RESET)
# seçilen ajan görevi gerçekleştirecek
chosen_agent = state['agent_choice']
if chosen_agent == 'İçerik Oluşturucu':
structured_respond = content_creator.invoke({"product_desc": input_to_agent})
respond = 'n'.join([structured_respond.Title, structured_respond.Message, ''.join(structured_respond.Tags)])
elif chosen_agent == "Dijital Sanatçı":
respond = digital_artist.invoke(input_to_agent)
else:
respond = "lütfen ajanı yeniden seçiniz; mevcut olanlar: 1.İçerik Oluşturucu veya 2.Dijital Sanatçı"
print(Fore.CYAN + "ajan çıktısı: n" + respond + Fore.RESET)
return {"agent_use_tool_respond": respond}
Son olarak, düğüm ve kenarları birleştirerek insan döngüsünde çoklu ajan iş akışını oluşturun. Grafik derlendiğinde, devam etmek için hazır olacaksınız:
from langgraph.graph import END, StateGraph
# Yeni bir grafik tanımlayın
workflow = StateGraph(State)
# İki düğümü tanımlayın
workflow.add_node("start", human_assign_to_agent)
workflow.add_node("end", agent_execute_task)
# Bu, çağrılan ilk düğüm olduğu anlamına gelir
workflow.set_entry_point("start")
workflow.add_edge("start", "end")
workflow.add_edge("end", END)
# Nihayet derliyoruz!
# Bu, LangChain Runnable'a derlenmiş demektir.
# Yani, bunu diğer runnable'lar gibi kullanabilirsiniz
app = workflow.compile()
İnsan-Ajan İş Akışının Başlatılması
Artık uygulamayı başlatma zamanı. Size belirli bir görev için mevcut olan ajanlardan birini atamanız için bir yönlendirme yapacaktır.
Tanıtım Metni Yazma İçin Bir İstem
Öncelikle, içerik oluşturucu ajana tanıtım metni yazdırmak için sorgulayın. Bu metin başlık, mesaj ve sosyal medya hashtag’lerini içermelidir (Şekil 2). Çıktıdan memnun kalana kadar işlemi tekrarlayın.
Bir Python kod örneği:
my_query="sosyal tanıtım etkinlikleri için iyi bir tanıtım mesajı oluşturun"
product_desc="NVIDIA NIM mikroservisleri GenAI iş akışını destekliyor"
respond=app.invoke({"input":my_query, "input_to_agent":product_desc})
İnsan, görev için 1 = İçerik Oluşturucu Ajanını seçecektir. Ajan çalışır ve agent_output
döner (Şekil 3).
Görsellerin Oluşturulması İçin Bir İstem
Sonuçlardan memnun kaldıysanız, anlamlı grafikler oluşturmak üzere Dijital Sanatçı Ajanına yönlendirme yapın (Şekil 4).
Aşağıdaki Python kodu, İçerik Oluşturucu Ajanından elde edilen başlığı, görsel istemi için giriş olarak kullanır:
## İçerik Oluşturucu Ajanından alınan başlıktan yararlanarak
prompt_for_image=respond['agent_use_tool_respond'].split('n')[0].split(':')[-1].strip()
## İnsan karar verici, ajan iş akışı uygulamasına talimat verir
input_query="aşağıdaki tanıtım mesajından bir görsel oluştur"
respond2=app.invoke({"input":input_query, "input_to_agent":prompt_for_image})
Oluşturulan görsel output.jpg olarak kaydedilmektedir.
Yüksek Kaliteli Sonuçlar İçin Tekrar Gözden Geçirme
Farklı sanat eserleri elde etmek için üretilen görseller üzerinde yineleme yaparak istediğiniz sonuçları elde edebilirsiniz (Şekil 6). İçerik Oluşturucu Ajanından alınan giriş istemini biraz değiştirerek Dijital Sanatçı Ajanından çeşitli görseller elde edebilirsiniz.
Son Ürünün İyileştirilmesi
Son olarak, her iki ajandan elde edilen çıktıları bir araya getirerek şekillendirme yapın ve son görsel inceleme için Markdown formatına getirin (Şekil 7).
NVIDIA NIM Mikroservisleri ve YZ Araçları ile YZ Ajanınızı Geliştirin
Bu yazıda, NVIDIA NIM mikroservisleri ve LangChain’in LangGraph kullanarak insan döngüsünde YZ ajanı nasıl gelişmiş bir şekilde inşa edileceğini öğrendiniz. YZ ajanlarını iş akışınıza dahil ederek, içerik üretimini hızlandırabilir, manuel çabayı azaltabilir ve yaratıcı süreçte tam kontrol sağlayabilirsiniz.
NVIDIA NIM mikroservisleri, YZ destekli görevlerinizi verimlilik ve esneklikle ölçeklendirme imkanı sunar. İster tanıtım mesajları oluşturun, ister görsel tasarlayın, insan döngüsünde YZ ajanları, iş akışlarınızı optimize etme ve üretkenliği artırma konusunda güçlü bir çözümdür.
Daha fazla model, YZ aracı ve en iyi uygulamalar hakkında daha fazla bilgi edinmek için NVIDIA NIM Mikroservisleri ile YZ Ajanları Oluşturma başlıklı makaleyi inceleyin, Llama 3.1 405B NIM mikroservisi‘ni keşfedin ve LangGraph Kullanarak İnsan Döngüsünde Ajanik Mantık isimli not defterine dalın.