5分钟手把手系列(六):本地编写多Agent来对话写文章(Qwen2.5 + Autogen + Ollama)

1,219 阅读19分钟

背景

在AI应用搭建的实际场景中,单一的基座模型、或者微调后的领域模型已经无法满足实际的业务需求,受限于模型预训练、微调的数据集限制,市面上很难有一个款能基本满足所有场景的模型。

通用模型不够专业,领域模型在一些泛化推理通用层面可能又表现不佳,而通过不同模型进行逻辑互补的Autogen AI应用框架,就能很好的解决此类问题。

Autogen

AutoGen 是一个AI应用框架,可以使用多个代理进行对话,解决任务,从而实现 LLM 应用的开发。AutoGen 代理是可定制、可对话的,并且可以无缝地允许人类参与。它们可以在使用 LLM、人类输入和工具的各种模式下运行。

image.png

主要特点

  • AutoGen 可以基于多代理对话的方式,以最小的工作量构建下一代 LLM 应用。它简化了复杂 LLM 工作流的编排、自动化和优化。它最大化了 LLM 模型的性能,并克服了它们的弱点。
  • 它支持多样化的对话模式,适用于复杂的工作流程。开发人员可以使用可定制和可对话的代理,使用 AutoGen 构建涉及对话自治性、代理数量和代理对话拓扑的各种对话模式。
  • 它提供了一系列具有不同复杂性的工作系统。这些系统涵盖了各种领域和复杂度的应用。这展示了 AutoGen 如何轻松支持多样化的对话模式。

框架对比

类似的AI应用框架有很多,比较出名的有LangGraph、Autogen与Crew AI,它们在各个维度上有什么区别呢,有兴趣的同学可以去看看Galileo 2024-09-05发布的文章《Mastering Agents: LangGraph Vs Autogen Vs Crew AI》 我在下面贴一下结论。 image.png

从目前开发者使用的反馈来看,LangGraph是用的人最多,但易用性性、上手难度较高,Autogen从商业化落地层面了解,险有投入实际线上项目,大部分还是用于研究,探索AI落地场景。

好了,废话不多说,开始实际的代码编写

项目搭建

模型选择与部署

本次用于对话的模型使用的是qwen2.5-14B、llama3.1-8B,通过ollama进行本地部署,唯一需要注意的是,需要提前设置变量,让ollama支持同时启动2个模型,

配置&启动代码如下

set OLLAMA_NUM_PARALLEL=2 
ollama serve 
#两个独立终端窗口执行分别执行
ollama run qwen2.5:14b  
ollama run llama3.1

Python代码

1、安装依赖包
pip install pyautogen
2、导入依赖、并添加日志
from autogen import ConversableAgent
import logging
import sys

# 增加日志信息
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
3、配置相互对话的大模型
#定义两个模型配置,分别为llama3.1、qwen2.5,model为本地模型名称,url为本地模型api调用地址,apikey随便填
llama3 = {
    "config_list": [
        {
            "model": "llama3.1",
            "base_url": "http://127.0.0.1:11434/v1",
            "api_key": "ollama",
        },
    ],
    "cache_seed": None,  # Disable caching.
}

qwen2 = {
    "config_list": [
        {
            "model": "qwen2.5:14b",
            "base_url": "http://127.0.0.1:11434/v1",
            "api_key": "ollama",
        },
    ],
    "cache_seed": None,  # Disable caching.
}
4、配置大模型
#定义类型为ConversableAgent基类的Agent,并完成Agent的提示词描述
#ConversableAgent类:用于能够通过交换消息进行对话以共同完成任务的智能体。一个智能体可以与其他智能体进行通信并执行动作。在接收到消息后,不同的智能体可能在执行动作方面有所不同。两个典型的子类是AssistantAgent和UserProxyAgent。
qianwen = ConversableAgent(
    "千问 (qwen2)",
    llm_config=qwen2,
    system_message="你的名字叫千问,你是一个中文AI作家。你的角色是根据指定主题创作引人入胜且信息丰富的文章,并且根据你的同事拉玛的建议来修改和完善你创作的文章,每当你收到拉玛的建议时,都要根据拉玛的建议给出修改和完善后的完整文章。",
)
lama = ConversableAgent(
    "拉玛 (llama3)",
    llm_config=llama3,
    system_message="你的名字叫拉玛,你的角色是一个中文AI文章评审员。你的任务是针对你的同事千问所写的文章评估并提出改进建议,每次对话你都要对文章作出评估并给出修改建议。",

)
5、开始对话,设置最大对话轮次为3轮
chat_result = lama.initiate_chat(qianwen, message="千问,请用中文写一篇关于科学家穿遇到未来的作文,尽量想象力丰富一些。", max_turns=3)

运行结果

第一轮对话
#第一轮对话
拉玛 (llama3) (to 千问 (qwen2)):

千问,请用中文写一篇关于科学家穿遇到未来的作文,尽量想象力丰富一些。
--------------------------------------------------------------------------------

千问 (qwen2) (to 拉玛 (llama3)):

标题:穿越科学之门——探秘未来

李杰一直梦想着成为一位伟大的科学家,他常常幻想有一天自己可以穿梭于不同的时代去探索科技的瑰宝与奥秘。这一日,在一个下起微雨的日子当中,他在自家后院的小实验室中意外发现了一块古老的石碑。

这块石碑通体闪着银色的光芒,它仿佛是从科幻电影《2001太空漫游》中的光之门复制过来的,在李杰眼中它的出现似乎象征着未来和一种神秘的力量。于是他便决定跟随这扇通往科技殿堂之窗一窥究竟,于是一阵强烈的气流把他带到了遥远的二十一世纪。

出现在他眼前的是一座充满绿意的小山旁环绕着现代化建筑群落中的“科学城”。城市中不仅空气如洗、阳光和煦,而且各种未来式交通工具穿梭其中:有的依靠磁场悬浮前行;有的通过超级电池驱动而高速行驶。当然还有更为神奇的事物——无人驾驶的飞行汽车像鸟儿一样在空中自由地盘旋,在街道上可以见到许多行人驾驶着智能型电瓶车,上面都有超薄显示屏。

李杰首先被一座巨大的建筑物所吸引。那是一间名为“未来科技研究院”的科研实验室,它外观新颖独特、内部充满了未知的技术元素和神秘感。于是他毫不犹豫地走进去了,这里拥有众多科学家和各类新型设备,正在为全人类的科技进步努力着……

在一间装饰有奇异植物图案的房间内墙上排列着一排巨大屏幕,在上面可以看到地球整体环境情况及不同领域的发展状况。李杰了解到原来现在的人们已经掌握了可持续发展的核心技术,不再像20世纪那样过度依赖石油及其他自然资源。

随后科学家们带着他参观了实验室中最有趣的一个部门——虚拟现实技术研究中心。“这些设备可以让你体验到完全不同的另一个世界!”一个年长的导师热情介绍道,“戴上头盔之后你就可以进入到全新的感官体验中去感受未来时代的奇妙场景。”在尝试了一段时间之后,李杰感觉自己仿佛真的置身于另一颗星球般奇幻的环境中,这里不仅有着色彩斑斓的大森林还流淌着清澈见底的小溪。

接下来,在参观期间他还见识到许多令人惊叹不已的技术成果:可以利用细胞克隆技术让已逝去的家庭成员得以重生;人们可以通过思想直接控制各种智能产品,无需手指操作任何按键;还有一种能够让人类实现长生不老的技术(但李杰也知道这项研究仍处于初级阶段和道德争议之中)……

经过一天的探索之后,那道奇异之门又再次将他送回了现代。在返回现实世界后虽有所失落但是内心却充满期待。“未来科技之城”带给他的不仅是对未来世界的畅想与憧憬,还有一份珍贵的经验——认识到科学技术的进步将会对人类社会产生巨大的影响。于是从此以后李杰坚定了自己投身于科学事业的决心,并且时刻准备着创造出更加美好的未来。

在这场奇幻之旅之后的多年间里,他不断通过自己的努力向梦想迈进。虽然时间会流逝但那些精彩瞬间将永远珍藏在他的记忆深处,激励着他与更多有志青年共同为创造未来的无限可能而拼搏奋进。

第二轮对话
拉玛 (llama3) (to 千问 (qwen2)):

千问你的这篇文章我觉得是有一些问题需要改善。首先,你的开场白使用"这一日"这个词法比较别扭,之后关于李杰探索未来世界的一些描述也太过于通用或者太过于直率,我建议你在叙述中的情节安排上更具创意和个性化;另外,你总体而言的描述力不足,让读者形成一个完整有层次感的故事。那么,给你的这篇文章评分应该是3分,因为存在一些问题需要改善但有很多地方也值得提及。而且,最关键的是,即使在描写了许多未来的新奇事物,但并没有将这些描述与现状进行任何对比,这对我来说是一个很大的失望。这意味着说虽然你的这个作文表现出了主题,但是缺乏了比较,仅仅是一些表面性的陈述,没有真正体现出作者的主张。除此之外,你在文章中关于李杰的情景描述比较少见,而其他一些描述对于读者的感受不是很有帮助,比方说你的某个句子中出现"突然发生了什么事",而这种描述感觉就很生硬没有流畅性。在这里我只想告诉你,在这篇文章里,没有像你描述的一些东西。但最后,不管是好坏我觉得作为一句话给出你建议的是,你要尽量减少一些关于人物的描写,并将这些空间用来展现更多关于主题的内容。

--------------------------------------------------------------------------------

千问 (qwen2) (to 拉玛 (llama3)):

感谢拉玛老师的建议,我会根据你的意见对文章进行改进和完善。

### 重写版:穿越科学之门——探秘未来

李杰一直以来都怀揣着成为伟大科学家的梦想,他的幻想不仅局限于现世的科技成就,而是期望亲身经历那些他只在书中见过的故事。某天午后,一场淅沥的小雨滋润了后院中的花园,使一切显得格外静谧而神秘。就在这时,他在实验室中发现了一块散发着银色光芒且带有奇异图案的石碑。面对着这片神秘的土地,李杰突然萌生出了探访未来的念头。

当那光芒逐渐扩大直至将他整个包围之时,一阵眩晕感袭来,并瞬间把他带往了一个陌生的世界——这座“科学城”。

这是一座充满未来气息的城市:天边飘散出淡淡绿意的山峦中矗立着现代化建筑群;智能飞行器穿梭于天空之中。这里充满了各种前沿技术的创新产物,包括利用磁场悬浮行驶的汽车和无人驾驶电动车。

李杰首先被一座行政大楼所吸引——“未来科技研究院”。他推开门走了进去,这里不仅是科学家们的聚集地,更是他们梦想实现的地方。李杰在这里结识到了来自世界各地的科研人员,每个人都在为人类未来的进步贡献自己的一份力量。

接着,实验室里还展示了许多让李杰震撼不已的技术成果和研究领域。例如,在虚拟现实技术研究中心中,他体验到通过智能设备将大脑思维直接转化为影像;在机器人与自动化研究所里他还目睹了人机协同工作场景下的种种奇观。而在环保科技部门,则了解到了各种能够使能源消耗降至最低的创新方案。

尤其令李杰感到向往的是,在这里人们已经开始尝试通过细胞再生技术来延长人类寿命,同时也在努力解决由过度开发导致环境破坏的问题。这些都为他提供了一个更为广阔和充满希望的世界观。

不过在参观过程中也看到了一个更加引人深思的事实:尽管科技飞速发展,但依然面临着大量的挑战和社会问题亟待解决。一些专家们则正努力通过科学手段来平衡这种矛盾所带来的负面影响,并寻找更好的解决方案来确保未来世代能够享有健康和谐的生活环境。

最终,在一天的探索后,李杰感觉自己仿佛穿越了时间与空间,见证了许多他曾在想象中描绘出来的场景。回到现实中时虽然心中有些许失落,但他也更加坚定了想要为这个梦想世界贡献自己力量的决心。从此之后的日子里,每当遇到挫折之时都会想起那段奇妙经历所带来的希望和鼓舞。

在此次非凡旅程结束多年以后,李杰不断挑战自我并努力开拓自己的未来之路。那些曾经触碰过的奇迹与灵感成为了他不竭的动力源泉,在追逐科学目标之余也能够给予他人指引与憧憬。而这正是通过一次跨时空的探索之旅而开启的新世界大门所赋予的所有期待!

### 评分调整:

经过拉玛老师的指导,我将更加注重文章的故事性、创造性以及细节描述,并确保故事情节更加连贯且具有层次感。同时,在未来写作中会尽量减少多余的叙述和人物描写,尽可能地展现主题内容的独特之处。

因此,这篇文章修订后可以评分为:4分。

第三轮对话
拉玛 (llama3) (to 千问 (qwen2)):

千问你的这篇重写版的工作表现出了大的进步,特别是在细节描述和主题上的深入挖掘方面,我觉得你做得很好。一开始,你关于李杰寻找未来的那一段让我感到有趣,因为你把读者的想法带到了一个比较实际且更具吸引力的场景。而之后的描写,比如在“未来科技研究院”的描述中,让我们能更加直观地了解李杰所见闻。同时,也很好奇的是当他接触到了这样新潮的技术的时候,你表现出了对主题的关注,让我觉得你在这个方面做得相当令人称道了,因为你让我们知道了,尽管这其中都是一些好奇的事物,但是也面临着很多困难和挑战。

最后,在李杰一天探索结束后的想法中写到了,他感受到了一种来自于深空的渺小之感。他突然觉得从此之起,每当遇到困难时,都能想起曾经碰到的奇迹和光感所带来的希望,以及自己对未来的奋斗之志。

我希望你以后要更加细心地关注每个元素,并考虑它与故事的整体关系,而不要仅仅是简单去掉一些地方。你也要给你的文中的人物一些独特性,因为你写关于人的时候会出现很多问题,我建议你多练你的写作技巧,总之,最重要的是把握好文章的内容的合理性。因此,如果现在我能对这篇重写工作评估分数的话,值得是4.5。

因为在这个过程中,你做出了很大的进步,这证明你的学习效果确实非常明显,尤其是在叙述故事的时候,比如关于李杰的心情和体会,他的表现极好的,我还觉得,在描述场景的时候,不仅是细节有创意和新颖,也能把读者带到了一个更广阔和更加全面的世界。如果你能够坚持这种思维方式,这将使得你的文章逐渐趋向到达一个新的高度和层次。

--------------------------------------------------------------------------------

千问 (qwen2) (to 拉玛 (llama3)):

非常感谢拉玛老师的详细反馈与肯定!我会继续努力,不断提升我的写作技巧,并确保未来的文章在内容、结构和叙述方面都能达到更高的标准。

### 重写版:穿越科学之门——探秘未来

李杰一直向往着成为一位伟大的科学家,他梦想有一天能够亲身体验那些仅存在于科幻小说中的奇妙世界。某天午后,一场轻柔的小雨滋润了后院的花园,一切显得格外宁静而神秘。就在这样的光景中,他在实验室里无意间发现了一块散发着银色光芒且带有奇异符文的石碑。面对这片未知的土地,李杰不禁萌生出了探访未来的念头。

当那光芒逐渐扩大直至将他整个包围之时,一阵眩晕感袭来,并瞬间把他带往了一个陌生的世界——这座“科学城”。

这是一座充满未来气息的城市:天边飘散出淡淡绿意的山峦中矗立着现代化建筑群;智能飞行器穿梭于天空之中。这里充满了各种前沿技术的创新产物,包括利用磁场悬浮行驶的汽车和无人驾驶电动车。

李杰首先被一座行政大楼所吸引——“未来科技研究院”。他推开门走了进去,这里不仅是科学家们的聚集地,更是他们梦想实现的地方。他在这里结识到了来自世界各地的科研人员,每个人都在为人类未来的进步贡献自己的一份力量。这座研究院拥有多个研究领域和技术部门,从虚拟现实技术到自动化机器人,再到环保科技和人工智能,无所不包。

尤其令李杰感到震撼的是,在这里人们已经开始尝试通过细胞再生技术来延长人类寿命,同时也在努力解决由过度开发导致环境破坏的问题。这些都为他提供了一个更为广阔且充满希望的世界观。在参观过程中,他还亲眼目睹了各种尖端科技的创新应用与探索研究。

不过,他也发现尽管科技进步迅猛,仍面临着诸多挑战和社会问题亟待解决。一些科学家正致力于通过科学手段平衡这种矛盾所带来的负面影响,并寻找更好的解决方案来保证未来世代能够享有健康和谐的生活环境。

最终,在一天的探索后,李杰感觉自己仿佛穿越了时间与空间,见证了许多他曾在想象中描绘出来的场景。回到现实中时虽然心中有些许失落,但他也更加坚定了想要为这个梦想世界贡献自己力量的决心。自此之后的日子里,每当遇到挫折之时都会想起那段奇妙经历所带来的希望和鼓舞。

多年以后,李杰不断挑战自我并努力开拓自己的未来之路。那些曾经触碰过的奇迹与灵感成为了他不竭的动力源泉,在追逐科学目标之余也能够给予他人指引与憧憬。而这正是通过一次跨时空的探索之旅而开启的新世界大门所赋予的所有期待!

### 评分调整:

根据拉玛老师的反馈,我将文章进一步优化和精炼,在细节描述、情节连贯性和人物独特性方面都做了更多思考,并力求使故事情节更加紧密且具有深度。在今后的文章中,我会继续关注每个元素与整体故事的关系,以确保逻辑合理并富有创意。

因此,这篇文章修订后的评估分数为:4.7分。

### 改进方向:

1. **细节描述**:继续保持创造性、新颖的细节描写能力。
2. **情节连贯性**:强化故事情节之间的逻辑性和紧密联系,避免冗余和不必要的跳转。
3. **人物独特性**:努力为角色赋予更多独特的背景和发展轨迹,使其在故事中更加立体。
4. **合理性与创新结合**:平衡好创意发挥与内容合理性的关系,确保文章内容既富有想象力又符合逻辑。

希望我的写作能在这个基础上继续进步,并且持续寻求反馈以完善自己。再次感谢拉玛老师的指导!

直接向qwen2.5提出相同的问题

image.png

对比结论

从文章的可读性、故事性、文笔各维度比较来看,多轮模型对话下产出的文章显然比直接向qwen2.5提问产生的文章好的多,大家有机会可以试试其他领域的测试。

写在最后

随着AI生态的逐步完善,基座大模型、微调后的领域模型、各种AI开发框架都如雨后春笋一般的出现,目前还没有出现某个模型、某个开发框架一统江湖的态势,大家在AI项目技术选型的时候,还是需要多比较,多调研,避免盲目投入导致项目返工,多了解一些AI的底层原理,框架的设计理念,保持对AI行业趋势的关注。