在生成式AI中,代理通常指的是能够自主生成或操作数据的系统或模型。这些代理可以在多种场景中发挥作用,包括文本生成、图像和视频制作、音乐创作,以及数据分析和模拟。以下是一些代理在生成式AI中的具体作用和好处:
代理可以生成新颖的创意,如艺术作品、音乐或文学文本,帮助艺术家和创作者超越传统思维限制。
在媒体和娱乐行业,代理能够自动生成新闻报道、社交媒体帖子或其他类型的内容,大大提高效率并降低成本。
生成式AI代理可以根据用户的喜好和历史行为来个性化内容,如推荐系统中的个性化播放列表或新闻摘要。
在商业和科研领域,代理可以生成模拟数据或预测模型,帮助企业和研究人员分析市场趋势、进行风险评估或开发新产品。
教育领域的代理可以创建定制的学习材料和模拟考试,为学习者提供个性化的学习经验,同时减轻教师的负担。
代理能够自动处理和翻译语言,使跨语言交流变得更加便捷,也能提供语言学习的辅助工具。
下面是一个翻译者的代理和一个审核者的代理,让他们互动起来:
using Microsoft.SemanticKernel.Experimental.Agents;
using System.Text;
namespace Demo08_Agent
{
internal class Program
{
static string key;
static string chatModelId;
static List<IAgent> agents;
static async Task Main(string[] args)
{
key = File.ReadAllText(@"C:\GPT\key.txt");
chatModelId = "gpt-4-turbo";
agents = new List<IAgent>();
Console.WriteLine("======== 开始协作 ========");
IAgentThread? agentThread = null;
try
{
// 创建翻译者
var translator = await CreateTranslatorAsync();
// 创建审核者
var auditor = await CreateAuditorAsync();
// 创建协作线程,两个代理都向其中添加消息。
agentThread = await translator.NewThreadAsync();
var prompt = new StringBuilder();
prompt.AppendLine("把下面中文翻译成日文:");
prompt.AppendLine("-----------------");
prompt.AppendLine(File.ReadAllText("content.txt"));
// 添加用户留言
var messageUser = await agentThread.AddUserMessageAsync(prompt.ToString());
DisplayMessages(null, ConsoleColor.White, messageUser);
var times = 1;
bool isComplete = false;
do
{
times++;
// 启动翻译者工作
var agentMessages = await agentThread.InvokeAsync(translator).ToArrayAsync();
DisplayMessages(translator, ConsoleColor.Green, agentMessages);
// 启动审核工作
agentMessages = await agentThread.InvokeAsync(auditor).ToArrayAsync();
DisplayMessages(auditor, ConsoleColor.Yellow, agentMessages);
// 评估是否达到目标。
if (agentMessages.First().Content.Contains("采用它", StringComparison.OrdinalIgnoreCase))
{
isComplete = true;
}
if (times > 3)
{
isComplete = true;
}
}
while (!isComplete);
}
finally
{
// 清理
await Task.WhenAll(agents.Select(a => a.DeleteAsync()));
}
}
static async Task<IAgent> CreateTranslatorAsync()
{
var agent = await new AgentBuilder()
.WithOpenAIChatCompletion(chatModelId, key)
.WithInstructions("您是一位中文日文的翻译家,以严谨闻名。你全神贯注于手头的目标。翻译成准确,高质量的译文。完善翻译内容时,请考虑翻译审核员的建议。")
.WithName("翻译家")
.WithDescription("翻译家")
.BuildAsync();
return agent;
}
static async Task<IAgent> CreateAuditorAsync()
{
var agent = await new AgentBuilder()
.WithOpenAIChatCompletion(chatModelId, key)
.WithInstructions("你是一位中日文翻译的翻译审核员,你有丰富的翻译和审核经验,对翻译质量有较高的要求,总是严格要求,反复琢磨,以求得到更为准确的翻译。目标是确定给定翻译否符合要求,是否采用。如果不符合要求,提出你的建议给翻译家,但不要把翻译内容给对方。如果翻译内容可以接受并且符合您的标准,请说:采用它。")
.WithName("翻译审核员")
.WithDescription("翻译审核员")
.BuildAsync();
return agent;
}
static void DisplayMessages(IAgent? agent = null, ConsoleColor color = ConsoleColor.White, params IEnumerable<IChatMessage> messages)
{
foreach (var message in messages)
{
Console.ResetColor();
Console.ForegroundColor = color;
if (agent != null)
{
Console.WriteLine($"{agent.Name}({message.Role}): {message.Content}");
}
else
{
Console.WriteLine($"({message.Role}): {message.Content}");
}
Console.ResetColor();
}
}
}
}
执行的结果如下: