Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfada, Microsoft Agent Framework İş Akışları içinde Aracıların nasıl kullanılacağına genel bir bakış sağlanır.
Genel Bakış
İş akışlarınıza zeka eklemek için iş akışı yürütmenizin bir parçası olarak yapay zeka aracılarından yararlanabilirsiniz. Yapay zeka aracıları iş akışlarıyla kolayca tümleştirilebilir ve daha önce elde edilmesi zor olan karmaşık ve akıllı çözümler oluşturmanıza olanak tanır.
Bir İş Akışına Doğrudan Aracı Ekleme
Uçlar aracılığıyla iş akışınıza aracılar ekleyebilirsiniz:
using Microsoft.Agents.AI.Workflows;
using Microsoft.Extensions.AI;
using Microsoft.Agents.AI;
// Create the agents first
AIAgent agentA = new ChatClientAgent(chatClient, instructions);
AIAgent agentB = new ChatClientAgent(chatClient, instructions);
// Build a workflow with the agents
WorkflowBuilder builder = new(agentA);
builder.AddEdge(agentA, agentB);
Workflow<ChatMessage> workflow = builder.Build<ChatMessage>();
İş Akışını Çalıştırma
Yukarıda oluşturulan iş akışının içerisinde, aracılar iş akışının diğer bölümleriyle olan iletişimi yöneten bir yürütücü tarafından sarılmıştır. Yürütücü üç ileti türünü işleyebilir:
-
ChatMessage: Tek bir sohbet iletisi. -
List<ChatMessage>: Sohbet iletilerinin listesi. -
TurnToken: Yeni bir dönüş başlangıcına işaret eden bir dönüş belirteci.
Yürütücü bir TurnToken alıncaya kadar aracı birimi yanıtlaması için tetiklemez. 'TurnToken öncesinde alınan tüm iletiler arabelleğe alınır ve TurnToken alındığında aracıya gönderilir.'
StreamingRun run = await InProcessExecution.StreamAsync(workflow, new ChatMessage(ChatRole.User, "Hello World!"));
// Must send the turn token to trigger the agents. The agents are wrapped as executors.
// When they receive messages, they will cache the messages and only start processing
// when they receive a TurnToken. The turn token will be passed from one agent to the next.
await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
await foreach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false))
{
// The agents will run in streaming mode and an AgentRunUpdateEvent
// will be emitted as new chunks are generated.
if (evt is AgentRunUpdateEvent agentRunUpdate)
{
Console.WriteLine($"{agentRunUpdate.ExecutorId}: {agentRunUpdate.Data}");
}
}
Yerleşik Aracı Yürütücüsü'ni kullanma
Uçlar aracılığıyla iş akışınıza aracılar ekleyebilirsiniz:
from agent_framework import WorkflowBuilder
from agent_framework.azure import AzureChatClient
from azure.identity import AzureCliCredential
# Create the agents first
chat_client = AzureChatClient(credential=AzureCliCredential())
writer_agent: ChatAgent = chat_client.create_agent(
instructions=(
"You are an excellent content writer. You create new content and edit contents based on the feedback."
),
name="writer_agent",
)
reviewer_agent = chat_client.create_agent(
instructions=(
"You are an excellent content reviewer."
"Provide actionable feedback to the writer about the provided content."
"Provide the feedback in the most concise manner possible."
),
name="reviewer_agent",
)
# Build a workflow with the agents
builder = WorkflowBuilder()
builder.set_start_executor(writer_agent)
builder.add_edge(writer_agent, reviewer_agent)
workflow = builder.build()
İş Akışını Çalıştırma
Yukarıda oluşturulan iş akışının içerisinde, aracılar iş akışının diğer bölümleriyle olan iletişimi yöneten bir yürütücü tarafından sarılmıştır. Yürütücü üç ileti türünü işleyebilir:
-
str: Dize biçiminde tek bir sohbet iletisi -
ChatMessage: Tek bir sohbet iletisi -
List<ChatMessage>: Sohbet iletilerinin listesi
Yürütücü bu türlerden birine ait bir ileti aldığında, aracıyı yanıt vermesi için tetikler ve yanıt türü bir AgentExecutorResponse nesne olur. Sınıf, aşağıdakiler dahil olmak üzere ajanın yanıtı hakkında yararlı bilgiler içerir:
-
executor_id: Bu yanıtı üreten yürütücü kimliği -
agent_run_response: Aracıdan gelen tam yanıt -
full_conversation: Bu noktaya kadar olan konuşma geçmişinin tamamı
İş akışı çalıştırılırken aracıların yanıtları ile ilgili iki olası olay türü yayılabilir:
-
AgentRunUpdateEventakış modunda oluşturulurken aracının yanıtının öbeklerini içerir. -
AgentRunEventakış dışı modda aracıdan gelen tam yanıtı içerir.
Varsayılan olarak, ajanlar akış modunda çalışan yürütücülere yerleştirilmiştir. Özel bir yürütücü oluşturarak bu davranışı özelleştirebilirsiniz. Diğer ayrıntılar için sonraki bölüme bakın.
last_executor_id = None
async for event in workflow.run_streaming("Write a short blog post about AI agents."):
if isinstance(event, AgentRunUpdateEvent):
if event.executor_id != last_executor_id:
if last_executor_id is not None:
print()
print(f"{event.executor_id}:", end=" ", flush=True)
last_executor_id = event.executor_id
print(event.data, end="", flush=True)
Özel Aracı İşleyici Kullanma
Bazen yapay zeka aracılarının bir iş akışıyla tümleştirilmesini özelleştirmek isteyebilirsiniz. Özel bir yürütücü oluşturarak bunu başarabilirsiniz. Bu, şunları denetlemenize olanak tanır:
- Aracının çağrılması: akış veya akışsız
- Özel ileti türleri de dahil olmak üzere aracının işleyecek ileti türleri
- Aracın başlatılması ve temizlenmesi dahil olmak üzere yaşam döngüsü
- Aracı iş parçacıklarının ve diğer kaynakların kullanımı
- Özel olaylar da dahil olmak üzere aracının yürütülmesi sırasında ortaya çıkan ek olaylar
- Paylaşılan durumlar ve istekler/yanıtlar gibi diğer iş akışı özellikleriyle tümleştirme
internal sealed class CustomAgentExecutor : Executor<CustomInput, CustomOutput>("CustomAgentExecutor")
{
private readonly AIAgent _agent;
/// <summary>
/// Creates a new instance of the <see cref="CustomAgentExecutor"/> class.
/// </summary>
/// <param name="agent">The AI agent used for custom processing</param>
public CustomAgentExecutor(AIAgent agent) : base("CustomAgentExecutor")
{
this._agent = agent;
}
public async ValueTask<CustomOutput> HandleAsync(CustomInput message, IWorkflowContext context)
{
// Retrieve any shared states if needed
var sharedState = await context.ReadStateAsync<SharedStateType>("sharedStateId", scopeName: "SharedStateScope");
// Render the input for the agent
var agentInput = RenderInput(message, sharedState);
// Invoke the agent
// Assume the agent is configured with structured outputs with type `CustomOutput`
var response = await this._agent.RunAsync(agentInput);
var customOutput = JsonSerializer.Deserialize<CustomOutput>(response.Text);
return customOutput;
}
}
from agent_framework import (
ChatAgent,
ChatMessage,
Executor,
WorkflowContext,
handler
)
class Writer(Executor):
agent: ChatAgent
def __init__(self, chat_client: AzureChatClient, id: str = "writer"):
# Create a domain specific agent using your configured AzureChatClient.
agent = chat_client.create_agent(
instructions=(
"You are an excellent content writer. You create new content and edit contents based on the feedback."
),
)
# Associate the agent with this executor node. The base Executor stores it on self.agent.
super().__init__(agent=agent, id=id)
@handler
async def handle(self, message: ChatMessage, ctx: WorkflowContext[list[ChatMessage]]) -> None:
"""Handles a single chat message and forwards the accumulated messages to the next executor in the workflow."""
# Invoke the agent with the incoming message and get the response
messages: list[ChatMessage] = [message]
response = await self.agent.run(messages)
# Accumulate messages and send them to the next executor in the workflow.
messages.extend(response.messages)
await ctx.send_message(messages)
Sonraki Adımlar
- İş akışlarını aracı olarak kullanmayı öğrenin.
- İş akışlarında istekleri ve yanıtları işlemeyi öğrenin.
- İş akışlarında durumu yönetmeyi öğrenin.
- Denetim noktaları oluşturmayı ve onlardan devam etmeyi öğrenin.
- İş akışlarını izlemeyi öğrenin.
- İş akışlarında durum yalıtımı hakkında bilgi edinin.
- İş akışlarını görselleştirmeyi öğrenin.