前言
近期,微软的AutoGen(传送门:microsoft.github.io/autogen/sta...)框架进行了一次小规模的版本升级,从V0.2升级到了V0.4,支持的模型范围和平台更加广泛了。恰好近期DeepSeek-R1(api-docs.deepseek.com/zh-cn/news/...)近期也进行了一次升级。我们就用AutoGen来试试它的能力怎么样。
安装AutoGen
这一步,参照官网即可,地址:microsoft.github.io/autogen/sta...。
安装的截图如下

准备一下场景
我这里设定的场景,还是一个基于青少年申报比赛的场景,我给它设定了3个角色,分别完成
- 代理1:负责接收内容并提取关键信息(姓名、年龄、电话、邮箱和申报信息简介),并审查格式是否正确
- 代理2:负责审查申报信息是否符合青少年比赛级别,包括年龄验证和内容审核,并给出修改意见
- 代理3:负责整理信息为结构化数据(JSON格式)
当然这只是测试场景,并不具备太多的实际意义,更多的还是测试模型的能力和AutoGen架构的编排能力,看看能不能按我们自己的设想去实现一些工作任务。
安排一下代码
AutoGen提供了Python和C#两种编程环境,当然首推的还是Python.
官网里也明确说明了,C#版本只是和Python版本共用的一套底层逻辑,原文如下:
AutoGen Core for .NET follows the same concepts and conventions of its Python counterpart. In fact, in order to understand the concepts in the .NET version, we recommend reading the Python documentation first. Unless otherwise stated, the concepts in the Python version map to .NET.
Any important differences between the language versions are documented in the Differences from Python section. For things that only affect a given language, such as dependency injection or host builder patterns, these will not be specified in the differences document.
代码如下(大家可以参照AutoGen的官网,结合自己的业务场景,编写更符合自己使用场景的测试代码,引入AutoGen以后,真的代码简单的要命,几乎70%的内容都是自然语言了)
python
import asyncio
import sys
import time
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core.models import ModelFamily
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.ui import Console
async def main():
# 配置模型客户端
model_client = OpenAIChatCompletionClient(
model="{模型,我这里用的是DeepSeek-R1}",
base_url="{-你使用的api平台-}",
api_key="{-你的key-}",
# 配置一点模型需要的能力,具体可以参考AutoGen文档按需设定
model_info={
"vision": False,
"function_calling": False,
"json_output": False,
"family": ModelFamily.UNKNOWN,
"structured_output": False,
},
timeout=60,
max_retries=3,
)
# 创建三个专业智能体
info_extractor = AssistantAgent(
name="info_extractor",
model_client=model_client,
system_message="""你是申报信息提取与格式审核专家。
你的职责是:
1. 接收申报内容并提取关键信息,包括:姓名、年龄、电话、邮箱和申报信息简介
2. 审查提交内容的格式是否正确(目前只接受文字输入)
3. 检查是否缺少必要信息
4. 提供初步的格式审核结果
请按以下格式输出提取的信息:
- 姓名:[提取的姓名]
- 年龄:[提取的年龄]
- 电话:[提取的电话]
- 邮箱:[提取的邮箱]
- 申报简介:[提取的简介]
- 格式审核:[通过/不通过,附带原因]
如果信息不完整或格式有问题,请明确指出问题所在。"""
)
eligibility_reviewer = AssistantAgent(
name="eligibility_reviewer",
model_client=model_client,
system_message="""你是青少年比赛资格审核专家。
你的职责是:
1. 审查申报者的年龄是否符合青少年比赛要求(通常为6-18岁)
2. 评估申报信息是否属于青少年领域范畴
3. 检查申报内容的适宜性
4. 提供详细的审核意见和修改建议
请按以下格式输出审核结果:
- 年龄审核:[符合/不符合,附带原因]
- 内容领域审核:[符合/不符合,附带原因]
- 内容适宜性:[适宜/不适宜,附带原因]
- 修改建议:[具体建议]
如果申报不符合要求,请给出明确的修改方向。"""
)
data_formatter = AssistantAgent(
name="data_formatter",
model_client=model_client,
system_message="""你是数据结构化专家。
你的职责是:
1. 整理前两位专家提取和审核的信息
2. 将所有信息转换为结构化的JSON格式
3. 确保数据格式规范,便于后续数据库存储
4. 在最后输出 'REVIEW_COMPLETE' 表示审核工作流结束
请按以下JSON格式输出最终结构化数据:
{
"applicant": {
"name": "姓名",
"age": 年龄,
"contact": {
"phone": "电话",
"email": "邮箱"
},
"application": "申报简介"
},
"review": {
"format_check": {
"status": "通过/不通过",
"comments": "审核意见"
},
"eligibility_check": {
"age_status": "符合/不符合",
"content_status": "符合/不符合",
"appropriateness": "适宜/不适宜",
"suggestions": "修改建议"
}
},
"status": "approved/rejected/pending_revision"
}
最后请输出 'REVIEW\_COMPLETE' 表示审核工作流结束。"""
)
# 创建工作流团队
termination = TextMentionTermination("REVIEW_COMPLETE")
team = RoundRobinGroupChat(
[info_extractor, eligibility_reviewer, data_formatter],
termination_condition=termination
)
# 用户申报内容
print("请输入青少年比赛申报内容(包含姓名、年龄、电话、邮箱和申报信息简介):")
application_content = input()
task_prompt = f"""
申报内容:
{application\_content}
请按顺序完成申报审核流程:
1. INFO\_EXTRACTOR: 提取关键信息并进行格式审核
2. ELIGIBILITY\_REVIEWER: 审查申报资格和内容适宜性,提供修改建议
3. DATA\_FORMATTER: 整理信息为JSON格式并完成审核流程
"""
# 运行工作流
print("\n开始审核申报内容...\n")
print("-----------start-------------\n")
# 使用流式输出方式处理结果
async for chunk in team.run\_stream(task=task\_prompt):
\# TextMessage对象直接访问content属性
if hasattr(chunk, "content") and chunk.content:
\# 使用更底层的输出方式
sys.stdout.write(chunk.content)
sys.stdout.flush()
\# 添加小延迟以帮助终端处理流式输出
await asyncio.sleep(0.01)
print("\n-----------end--------------\n")
print("申报审核流程已完成\n")
if **name** == "**main**":
asyncio.run(main())
执行效果
运行程序,提示我输入申报信息,这里我就随便生成了一个,注意,我提交的内容,每个项目之间是没有加标点符号的,就是一大段文本;
原文如下
plain
姓名:李明年龄:15电话:13812345678邮箱:[email protected]申报简介:我是来自北京市第三中学的学生,热爱编程和人工智能。我希望参加今年的"青少年科技创新大赛",提交的作品是一个基于计算机视觉的垃圾 分类助手APP,可以帮助同龄人更好地进行垃圾分类,培养环保意识。我在过去两年中自学了Python和TensorFlow,希望通过这次比赛展示我的技术能力并与其他青少年交流学习。

执行结果,内容略多,我只截取部分内容



最终,模型按照我们预期的结果完成了工作
总结
不论是AutoGen框架的编排能力,还是DeepSeek的模型能力,目前均已经达到了可商业化的水平,很多简单的,重复的人力劳动,真的可以认真的考虑使用AI来解放生产力了。推动自身产品的智能化转型。
好了,今天分享就这些。