浅谈智能体开发(第一部分):从编程到提示引导

文摘   科技   2024-05-06 01:09   四川  

作为一种新型软件,智能体(AI Agent)展现出许多传统软件所不具备的特征。不仅与传统软件的设计理念、方法、工具和技术栈有显著的差异,AI原生(AI Native)的智能体还融入了多种新概念和技术。我们从多个维度对AI Native智能体与传统软件进行了比较和分析,涉及开发语言、软件架构、设计模式和编程模式等多个方面。本文通过与传统软件的比较分析,浅谈AI原生的开发语言的异同。

编程(Programming) vs. 提示(Prompting)

一般而言,在传统软件开发中,开发活动主要涉及编写代码来实现具体的功能,如数据处理、用户界面和业务逻辑。程序员需要明确指定程序如何执行任务。相比之下,AI软件工程转向了“提示工程(Prompt Engineering)”——这是一种通过设计提示来引导预训练的大语言模型(如GPT)生成期望输出的方法。这种方式强调的是理解和利用模型的先验知识,以及通过自然语言提示设计来影响模型输出。AI智能体的开发,则更进一步,在为创建和管理智能体(agents)提供结构和工具的软件框架上,通过自然语言提示词为主的方法定义智能体的角色、任务、功能、与外界和其他智能体沟通和协作方法等。本质上用于引导驱动智能体框架的底层大语言模型。根据提示词,大语言模型甚至可以引导智能体或按需产生并执行代码,或接入第三方工具程序,以完成任务。

传统软件开发智能体开发
开发方法
Programming:主要通过编写具体的代码来定义程序的行为。Prompting:主要通过设计提示来引导预训练的大语言模型生成期望的输出。
语言使用
使用严格定义的编程语言,如Python、Java、C/C++等。主要使用自然语言进行提示设计,语言的灵活性和模糊性更高。
工具和环境
使用编译器或解释器来转换和执行代码。使用大语言模型驱动的智能体框架来管理和运行智能体。
能和知识需求
一般需要专业软件开发人员掌握编程语言、算法、数据结构等技术细节。不需要专业程序员。但需要理解AI模型的行为、局限性和如何设计有效的提示。
控制程度
控制程度高,开发者精确定义程序每一步的执行。提示的控制程度较低,结果受大语言模型和框架机制的影响。
应用领
广泛应用于所有类型的软件开发,如网站、应用程序、系统软件等。主要用于需要自然语言理解、推理和生成的应用(如聊天机器人、内容生成等),以及对性能要求不高的应用。
结果的可预测性
结果可预测、确定且一致,结果可能变化,不一定一致,因为模型输出受多种因素影响。
更新和维护
需要进行代码更新和维护以适应新的需求或技术变化。同样需要调整提示以适应新的数据或改进输出。
调试和优化
通过调试工具和测试确定代码错误或性能瓶颈,并进行修复或优化。通过调整提示内容和格式,往往以实验的方式找到最优引导模型输出的方式。
逻辑要求
明确编码,逻辑严密。提示设计灵活,更多关注对问题的定义、描述、给出参考案例(Few Shots)和指导方法(Chain of Thoughts)等。往往对具体任务的执行不做严格规定。


案例

下面是使用CrewAI(https://www.crewai.com/)多智能体协作框架对多个智能体进行定义的例子。可以看到,一个智能体小组(crew)由两个智能体(Agents)组成,分别是做研究分析的Researcher和写报告的Writer。Researcher和Writer的角色分别通过"角色“(role),”目标“(goal),“背景”(backstory)等方面,通过自然语言提示进行描述和定义。同样,它们各自完成的任务(Task)也通过提示进行描述(description)。当通过大量的提示和少量的程序和参数配置完成后,这个多个智能体协作的应用开发就完成了。只需要运行kickoff指令,就可以让这个智能体小组开始工作了。

import osfrom crewai import Agent, Task, Crew, Processfrom crewai_tools import SerperDevTool
os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
# You can choose to use a local model through Ollama for example. See https://docs.crewai.com/how-to/LLM-Connections/ for more information.
# os.environ["OPENAI_API_BASE"] = 'http://localhost:11434/v1'# os.environ["OPENAI_MODEL_NAME"] ='openhermes' # Adjust based on available model# os.environ["OPENAI_API_KEY"] ='sk-111111111111111111111111111111111111111111111111'
search_tool = SerperDevTool()
# Define your agents with roles and goalsresearcher = Agent( role='Senior Research Analyst', goal='Uncover cutting-edge developments in AI and data science', backstory="""You work at a leading tech think tank. Your expertise lies in identifying emerging trends. You have a knack for dissecting complex data and presenting actionable insights.""", verbose=True, allow_delegation=False, tools=[search_tool] # You can pass an optional llm attribute specifying what model you wanna use. # It can be a local model through Ollama / LM Studio or a remote # model like OpenAI, Mistral, Antrophic or others (https://docs.crewai.com/how-to/LLM-Connections/) # # import os # os.environ['OPENAI_MODEL_NAME'] = 'gpt-3.5-turbo' # # OR # # from langchain_openai import ChatOpenAI # llm=ChatOpenAI(model_name="gpt-3.5", temperature=0.7))writer = Agent( role='Tech Content Strategist', goal='Craft compelling content on tech advancements', backstory="""You are a renowned Content Strategist, known for your insightful and engaging articles. You transform complex concepts into compelling narratives.""", verbose=True, allow_delegation=True)
# Create tasks for your agentstask1 = Task( description="""Conduct a comprehensive analysis of the latest advancements in AI in 2024. Identify key trends, breakthrough technologies, and potential industry impacts.""", expected_output="Full analysis report in bullet points", agent=researcher)
task2 = Task( description="""Using the insights provided, develop an engaging blog post that highlights the most significant AI advancements. Your post should be informative yet accessible, catering to a tech-savvy audience. Make it sound cool, avoid complex words so it doesn't sound like AI.""", expected_output="Full blog post of at least 4 paragraphs", agent=writer)
# Instantiate your crew with a sequential processcrew = Crew( agents=[researcher, writer], tasks=[task1, task2], verbose=2, # You can set it to 1 or 2 to different logging levels)
# Get your crew to work!result = crew.kickoff()
print("######################")print(result)

在这个例子中,编程的比重在智能体开发中显著地降低,主要起配置作用和将各部分组合在一起的作用。自然语言提示则至关重要,它们担负着描述应用业务的任务。

Dify.ai更提供了提示的集成开发环境(Prompt IDE)。IDE提供了开发、实验、调试提示和相关配置、相关资源的综合环境。

图:Dify.ai的提示集成环境,除了支持多模态数据、支持提示调试等功能以外,还支持提示的版本管理等功能。让Prompt Engineering更像Software Engineering

小结

虽然编程语言仍然发挥重要作用,AI智能体软件更多依赖于自然语言的提示对智能体和业务逻辑进行定义和描述。AI Native软件式较传统软件开发而言,已出现了显著变化。

以Dify.AI、CrewAI和AutoGen为代表的开发平台、工具和框架的出现,更加简化了AI智能体开发,让开发者能够更加集中精力于提示工程,而不是编程。这些使能软件还将快速地发展和成熟。

虽然提示工程对软件开发者有一定技能要求,但相较于传统软件工程对编程语言技能要求而言,难度已下降很多。当智能体技术进一步发展,更加有用并开始替代传统软件系统之时,专业的程序开发者将被以使用自然语言提示为主的更广泛的AI原生开发者所取代。

睿类文特
岂能尽得真实,但求更明道理。为睿智的您综合和深入地解读人工智能、互联网和IT领域的事儿,成为您与科技最前沿之间的桥梁。