(Bofya picha hapo juu kutazama video ya somo hili)
Zana ni za kuvutia kwa sababu zinawapa mawakala wa AI uwezo mpana zaidi. Badala ya wakala kuwa na seti ndogo ya vitendo anavyoweza kufanya, kwa kuongeza zana, wakala sasa anaweza kufanya vitendo mbalimbali. Katika sura hii, tutaangalia Muundo wa Matumizi ya Zana, ambao unaelezea jinsi mawakala wa AI wanavyoweza kutumia zana maalum kufanikisha malengo yao.
Katika somo hili, tunatafuta kujibu maswali yafuatayo:
Baada ya kukamilisha somo hili, utaweza:
Muundo wa Matumizi ya Zana unalenga kuwapa LLMs uwezo wa kuingiliana na zana za nje ili kufanikisha malengo maalum. Zana ni msimbo unaoweza kutekelezwa na wakala ili kufanya vitendo. Zana inaweza kuwa kazi rahisi kama kikokotoo, au API inayopiga huduma ya mtu wa tatu kama kutafuta bei za hisa au utabiri wa hali ya hewa. Katika muktadha wa mawakala wa AI, zana zimeundwa kutekelezwa na mawakala kwa kujibu miito ya kazi iliyotengenezwa na modeli.
Mawakala wa AI wanaweza kutumia zana kukamilisha kazi ngumu, kupata taarifa, au kufanya maamuzi. Muundo wa matumizi ya zana mara nyingi hutumika katika hali zinazohitaji mwingiliano wa nguvu na mifumo ya nje, kama vile hifadhidata, huduma za wavuti, au wakalimani wa msimbo. Uwezo huu ni muhimu kwa matukio mbalimbali ya matumizi ikiwa ni pamoja na:
Vipengele hivi vinamwezesha wakala wa AI kufanya kazi mbalimbali. Hebu tuangalie vipengele muhimu vinavyohitajika kutekeleza Muundo wa Matumizi ya Zana:
Sasa, hebu tuangalie kwa undani zaidi kuhusu Kuitwa kwa Kazi/Zana.
Kuitwa kwa kazi ni njia kuu tunayotumia kuwezesha LLMs kuingiliana na zana. Mara nyingi utaona ‘Kazi’ na ‘Zana’ zikitumika kwa kubadilishana kwa sababu ‘kazi’ (vipande vya msimbo vinavyoweza kutumika tena) ni ‘zana’ ambazo mawakala hutumia kutekeleza kazi. Ili msimbo wa kazi utekelezwe, LLM lazima ilinganishe ombi la mtumiaji na maelezo ya kazi. Ili kufanya hivyo, mfumo unaoelezea kazi zote zinazopatikana hutumwa kwa LLM. LLM kisha huchagua kazi inayofaa zaidi kwa kazi hiyo na kurudisha jina lake na vigezo. Kazi iliyochaguliwa inatekelezwa, jibu lake linatumwa tena kwa LLM, ambayo hutumia taarifa hiyo kujibu ombi la mtumiaji.
Ili watengenezaji kutekeleza kuitwa kwa kazi kwa mawakala, utahitaji:
Hebu tuchukue mfano wa kupata muda wa sasa katika jiji fulani ili kufafanua:
Anzisha LLM inayounga mkono kuitwa kwa kazi:
Si kila modeli inayoauni kuitwa kwa kazi, kwa hivyo ni muhimu kuhakikisha kuwa LLM unayotumia inafanya hivyo. Azure OpenAI inaunga mkono kuitwa kwa kazi. Tunaweza kuanza kwa kuanzisha mteja wa Azure OpenAI.
# Initialize the Azure OpenAI client
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-05-01-preview"
)
Unda Mfumo wa Kazi:
Kisha tutaelezea mfumo wa JSON unaojumuisha jina la kazi, maelezo ya kazi hiyo, na majina na maelezo ya vigezo vya kazi. Tutachukua mfumo huu na kuupitisha kwa mteja aliyeundwa hapo awali, pamoja na ombi la mtumiaji la kupata muda wa San Francisco. Jambo muhimu la kuzingatia ni kwamba kile kinachorudishwa ni mwito wa zana, sio jibu la mwisho la swali. Kama ilivyotajwa awali, LLM inarudisha jina la kazi iliyochaguliwa kwa kazi hiyo, na vigezo vitakavyopitishwa kwake.
# Function description for the model to read
tools = [
{
"type": "function",
"function": {
"name": "get_current_time",
"description": "Get the current time in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco",
},
},
"required": ["location"],
},
}
}
]
# Initial user message
messages = [{"role": "user", "content": "What's the current time in San Francisco"}]
# First API call: Ask the model to use the function
response = client.chat.completions.create(
model=deployment_name,
messages=messages,
tools=tools,
tool_choice="auto",
)
# Process the model's response
response_message = response.choices[0].message
messages.append(response_message)
print("Model's response:")
print(response_message)
Model's response:
ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_pOsKdUlqvdyttYB67MOj434b', function=Function(arguments='{"location":"San Francisco"}', name='get_current_time'), type='function')])
Msimbo wa kazi unaohitajika kutekeleza kazi:
Sasa kwa kuwa LLM imechagua kazi gani inahitaji kutekelezwa, msimbo unaotekeleza kazi hiyo unahitaji kuandikwa na kutekelezwa. Tunaweza kuandika msimbo wa kupata muda wa sasa kwa Python. Pia tutahitaji kuandika msimbo wa kutoa jina na vigezo kutoka kwa response_message ili kupata matokeo ya mwisho.
def get_current_time(location):
"""Get the current time for a given location"""
print(f"get_current_time called with location: {location}")
location_lower = location.lower()
for key, timezone in TIMEZONE_DATA.items():
if key in location_lower:
print(f"Timezone found for {key}")
current_time = datetime.now(ZoneInfo(timezone)).strftime("%I:%M %p")
return json.dumps({
"location": location,
"current_time": current_time
})
print(f"No timezone data found for {location_lower}")
return json.dumps({"location": location, "current_time": "unknown"})
# Handle function calls
if response_message.tool_calls:
for tool_call in response_message.tool_calls:
if tool_call.function.name == "get_current_time":
function_args = json.loads(tool_call.function.arguments)
time_response = get_current_time(
location=function_args.get("location")
)
messages.append({
"tool_call_id": tool_call.id,
"role": "tool",
"name": "get_current_time",
"content": time_response,
})
else:
print("No tool calls were made by the model.")
# Second API call: Get the final response from the model
final_response = client.chat.completions.create(
model=deployment_name,
messages=messages,
)
return final_response.choices[0].message.content
get_current_time called with location: San Francisco
Timezone found for san francisco
The current time in San Francisco is 09:24 AM.
Kuitwa kwa Kazi ni msingi wa muundo wa matumizi ya zana kwa mawakala, hata hivyo kutekeleza kutoka mwanzo kunaweza kuwa changamoto wakati mwingine. Kama tulivyojifunza katika Somo la 2, mifumo ya mawakala hutupatia vipengele vilivyojengwa tayari kutekeleza matumizi ya zana.
Hapa kuna mifano ya jinsi unavyoweza kutekeleza Muundo wa Matumizi ya Zana kwa kutumia mifumo tofauti ya mawakala:
Semantic Kernel ni mfumo wa AI wa chanzo huria kwa watengenezaji wa .NET, Python, na Java wanaofanya kazi na LLMs. Unarahisisha mchakato wa kutumia kuitwa kwa kazi kwa kuelezea moja kwa moja kazi zako na vigezo vyake kwa modeli kupitia mchakato unaoitwa serialization. Pia hushughulikia mawasiliano ya kurudi na kurudi kati ya modeli na msimbo wako. Faida nyingine ya kutumia mfumo wa mawakala kama Semantic Kernel ni kwamba hukuruhusu kufikia zana zilizojengwa tayari kama File Search na Code Interpreter.
Mchoro ufuatao unaonyesha mchakato wa kuitwa kwa kazi na Semantic Kernel:
Katika Semantic Kernel kazi/zana huitwa Plugins. Tunaweza kubadilisha kazi ya get_current_time
tuliyoiona awali kuwa plugin kwa kuibadilisha kuwa darasa lenye kazi ndani yake. Tunaweza pia kuingiza kipambo cha kernel_function
, ambacho kinachukua maelezo ya kazi. Unapounda kernel na GetCurrentTimePlugin, kernel itaserialize moja kwa moja kazi na vigezo vyake, ikitengeneza mfumo wa kutuma kwa LLM katika mchakato huo.
from semantic_kernel.functions import kernel_function
class GetCurrentTimePlugin:
async def __init__(self, location):
self.location = location
@kernel_function(
description="Get the current time for a given location"
)
def get_current_time(location: str = ""):
...
from semantic_kernel import Kernel
# Create the kernel
kernel = Kernel()
# Create the plugin
get_current_time_plugin = GetCurrentTimePlugin(location)
# Add the plugin to the kernel
kernel.add_plugin(get_current_time_plugin)
Huduma ya Mawakala ya Azure AI ni mfumo mpya wa mawakala ulioundwa kuwawezesha watengenezaji kujenga, kupeleka, na kupanua mawakala wa AI wa hali ya juu na wa kupanuka bila hitaji la kusimamia rasilimali za msingi za kompyuta na hifadhi. Ni muhimu hasa kwa matumizi ya biashara kwa kuwa ni huduma inayosimamiwa kikamilifu yenye usalama wa kiwango cha biashara.
Ikilinganishwa na kuendeleza moja kwa moja na API ya LLM, Huduma ya Mawakala ya Azure AI inatoa faida kadhaa, ikiwa ni pamoja na:
Zana zinazopatikana katika Huduma ya Mawakala ya Azure AI zinaweza kugawanywa katika makundi mawili:
Huduma ya Mawakala inatuwezesha kutumia zana hizi pamoja kama toolset
. Pia hutumia threads
ambazo hufuatilia historia ya ujumbe kutoka kwa mazungumzo fulani.
Fikiria wewe ni wakala wa mauzo katika kampuni inayoitwa Contoso. Unataka kuunda wakala wa mazungumzo anayeweza kujibu maswali kuhusu data yako ya mauzo.
Picha ifuatayo inaonyesha jinsi unavyoweza kutumia Huduma ya Mawakala ya Azure AI kuchambua data yako ya mauzo:
Ili kutumia zana yoyote na huduma hii, tunaweza kuunda mteja na kufafanua zana au seti ya zana. Ili kutekeleza hili kwa vitendo, tunaweza kutumia msimbo wa Python ufuatao. LLM itaweza kuangalia seti ya zana na kuamua kutumia kazi iliyoundwa na mtumiaji, fetch_sales_data_using_sqlite_query
, au Code Interpreter iliyojengwa tayari kulingana na ombi la mtumiaji.
import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from fetch_sales_data_functions import fetch_sales_data_using_sqlite_query # fetch_sales_data_using_sqlite_query function which can be found in a fetch_sales_data_functions.py file.
from azure.ai.projects.models import ToolSet, FunctionTool, CodeInterpreterTool
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)
# Initialize function calling agent with the fetch_sales_data_using_sqlite_query function and adding it to the toolset
fetch_data_function = FunctionTool(fetch_sales_data_using_sqlite_query)
toolset = ToolSet()
toolset.add(fetch_data_function)
# Initialize Code Interpreter tool and adding it to the toolset.
code_interpreter = code_interpreter = CodeInterpreterTool()
toolset = ToolSet()
toolset.add(code_interpreter)
agent = project_client.agents.create_agent(
model="gpt-4o-mini", name="my-agent", instructions="You are helpful agent",
toolset=toolset
)
Shida ya kawaida na SQL inayotengenezwa kwa nguvu na LLMs ni usalama, hasa hatari ya sindano ya SQL au vitendo vya uharibifu, kama kufuta au kuharibu hifadhidata. Ingawa wasiwasi huu ni halali, unaweza kupunguzwa kwa ufanisi kwa kusanidi vibali vya ufikiaji wa hifadhidata ipasavyo. Kwa hifadhidata nyingi, hii inahusisha kusanidi hifadhidata kama ya kusoma tu. Kwa huduma za hifadhidata kama PostgreSQL au Azure SQL, programu inapaswa kupewa jukumu la kusoma tu (SELECT).
Kuendesha programu katika mazingira salama kunaboresha zaidi ulinzi. Katika hali za biashara, data kawaida hutolewa na kubadilishwa kutoka kwa mifumo ya uendeshaji hadi hifadhidata ya kusoma tu au ghala la data lenye mpangilio wa kirafiki. Njia hii inahakikisha kuwa data ni salama, imeboreshwa kwa utendaji na ufikivu, na kwamba programu ina ufikiaji mdogo wa kusoma tu.
Jiunge na Azure AI Foundry Discord ili kukutana na wanafunzi wengine, kuhudhuria saa za ofisi, na kupata majibu ya maswali yako kuhusu AI Agents.
Kuelewa Miundo ya Ubunifu wa Kiumbe
Kanusho:
Hati hii imetafsiriwa kwa kutumia huduma ya kutafsiri ya AI Co-op Translator. Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.