尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从零搭建AI Agent:开源框架与低成本模型实战指南

从零搭建AI Agent:开源框架与低成本模型实战指南 1. 为什么“从零搭一个AI Agent”是当下最值得投入的实践如果你最近关注AI领域会发现“AI Agent”这个词的热度已经快赶上当年的“中台”和“元宇宙”了。但和那些略显空洞的概念不同AI Agent是实打实能跑起来、能帮你干活的代码。简单来说它就是一个能理解你的目标、自主规划并调用工具去执行的智能体。想象一下你告诉它“帮我分析一下上个月的销售数据找出异常点并生成报告”它就能自己去打开数据库、跑分析脚本、调用图表生成工具最后把一份图文并茂的报告发到你邮箱。这不再是科幻而是用现有开源工具就能实现的现实。那么为什么我强烈建议你尤其是开发者亲自从零搭建一个呢原因有三。第一理解本质破除神秘感。市面上各种AI产品包装得天花乱坠但核心逻辑万变不离其宗。亲手搭一遍你就知道所谓的“智能”背后是提示词工程、任务分解、工具调用这些基础组件的组合拳没什么黑魔法。第二掌握主动权不被云服务绑架。很多商业化的Agent服务按调用次数收费长期来看成本不可控。自己搭建意味着你可以自由选择模型、控制数据流向、定制功能成本完全透明。第三这是最好的学习路径。通过一个具体的项目你能串联起大语言模型LLM应用开发的全栈知识从模型API调用、状态管理到错误处理比看十篇理论文章都管用。当然一提到“从零开始”很多人会联想到复杂的架构、高昂的GPU成本和漫长的学习曲线。这正是本文要解决的核心问题如何用最经济、最务实的方式快速跑通你的第一个AI Agent。我的方案核心是拥抱开源框架善用性价比最高的云模型从最小可行产品MVP开始迭代。接下来我将带你一步步拆解这个“最省钱方案”的每一个环节。2. 架构选型为什么开源框架是性价比的起点在决定自己写代码还是用框架之前我们先明确一个原则不要重复造轮子尤其是当这个轮子已经由顶级团队打磨得非常圆润的时候。AI Agent的核心逻辑——感知、规划、执行、反思——是一个相对固定的范式。自己从头实现不仅耗时耗力还会在状态管理、错误重试、工具注册等基础设施上踩无数个坑。因此选择一个成熟的开源框架是最高效、最省钱省时间就是省钱的起点。目前主流的开源AI Agent框架主要有以下几个它们各有侧重LangChain / LangGraph: 生态最庞大社区最活跃。它更像一个“元框架”提供了构建LLM应用所需的各种组件Models, Prompts, Chains, Agents, Tools。LangGraph在此基础上增加了基于状态图的编排能力非常适合构建复杂的、多步骤的Agent。优点是资源多、例子多缺点是抽象层次有时较高初学者可能觉得“黑盒”。AutoGen (by Microsoft): 微软出品主打“多智能体协作”。它的核心概念是定义多个具有不同角色如助理、用户代理、代码执行代理的Agent让它们通过对话来协同完成任务。非常适合需要模拟讨论、评审、辩论等场景的应用。CrewAI: 近期非常火爆概念清晰。它用“Crew”团队、“Agent”成员、“Task”任务、“Tool”工具这几个非常直观的概念来组织代码强调角色扮演和任务序列。文档友好上手速度快对于构建有明确分工的协作型Agent非常直观。Semantic Kernel (by Microsoft): 另一个微软框架更偏向于将传统代码与AI能力“嫁接”。它强调“插件”Plugins的概念可以轻松地将现有的API、函数封装成AI可用的工具。对于已经有很多遗留代码或服务的企业级应用集成可能是个好选择。我的选择与理由CrewAI 轻量级胶水代码对于“从零开始”和“最省钱”的目标我最终选择了CrewAI作为基础框架并在其之上用简单的Python脚本做补充。理由如下学习曲线平缓CrewAI的抽象非常符合直觉。你定义一个“数据分析师”Agent给它一个“生成月度报告”的Task再为它配备“查询数据库”、“绘制图表”等Tools。整个代码结构一目了然半小时就能看懂一个完整例子并跑起来。这极大地降低了初期的心智负担和试错时间成本。功能聚焦且够用它专注于多Agent任务编排这个核心场景提供了任务依赖、顺序/并行执行、结果传递等关键功能。对于大多数自动化场景如数据分析、内容生成、信息汇总来说这已经覆盖了80%的需求。我们不需要为那20%的极端复杂场景预付学习成本。易于定制和扩展当CrewAI的内置功能不满足时比如需要更复杂的工具调用逻辑我们可以很容易地在它的Agent执行循环外包裹自己的逻辑或者直接继承和修改它的核心类。这种“框架为主自定义为辅”的方式既保证了开发效率又保留了灵活性。注意框架选型没有绝对的对错只有是否适合当前阶段。如果你需要极致的灵活性和控制力LangGraph的“图”概念可能更合适。如果你痴迷于多Agent辩论的场景AutoGen是首选。但对于绝大多数想快速入门、验证想法、构建实用工具的开发者CrewAI是一个风险最低、收益最高的起点。3. 模型选择DeepSeek-V3与GLM-4-Flash的性价比对决框架搭好了舞台模型才是台上唱戏的“大脑”。模型的选择直接决定了Agent的智能水平和单次推理成本这是项目长期运行中最大的可变开销。我们的目标是在满足基本任务要求的前提下选择单位性能成本最低的模型。让我们对比一下当前性价比赛道上的两位热门选手DeepSeek-V3和GLM-4-Flash。DeepSeek-V3 近期现象级的开源模型。其最大的优势就是“免费”。通过官方平台提供的API拥有非常慷慨的免费额度。这对于原型验证、低频次使用或个人项目来说成本几乎是零。它的性能特别是在代码和推理任务上已经达到了第一梯队的水准。对于Agent常见的规划、工具调用代码生成等任务完全够用。GLM-4-Flash 智谱AI推出的“快省好”模型。Flash版本在保持GLM-4系列较强能力的同时大幅优化了推理速度和成本。它的API调用价格极具竞争力通常是GPT-4 Turbo的几分之一而速度更快。在中文场景、知识问答和逻辑推理上表现稳定。如何做出选择一个简单的决策流程评估任务类型如果你的Agent任务重度依赖代码生成如写数据分析脚本、自动化脚本、复杂逻辑推理或数学计算且对成本极度敏感DeepSeek-V3的免费额度是首选。你可以先用它跑通整个流程。如果你的任务更偏向中文理解与处理、多轮对话管理、知识密集型问答或者你需要更稳定的商用级API服务SLA保障那么GLM-4-Flash是更稳妥的付费选择其成本依然很低。进行成本测算 Agent的消耗不仅是单次问答的Token。一次完整的任务执行可能包含LLM规划任务消耗Token、LLM决定调用工具消耗Token、LLM处理工具返回结果并生成最终输出消耗Token。假设一个任务平均消耗2000个输入Token和1000个输出Token。DeepSeek-V3免费额度内成本为0。超出后价格也极低但初期几乎不用考虑。GLM-4-Flash按公开价格估算单次任务成本可能仅需几分钱甚至更少。实战建议双模型后备策略在我的实际搭建中我采用了GLM-4-Flash作为主力DeepSeek-V3作为免费备胎和测试专用的混合策略。开发与测试阶段全部使用DeepSeek-V3的免费API。频繁调试、修改提示词、测试工具链这个过程可能产生成千上万次调用免费模型让你毫无心理压力。生产或稳定运行阶段切换到GLM-4-Flash。它的响应速度更快对于需要良好用户体验的持续服务更合适。将DeepSeek-V3的配置保留在代码中作为降级方案。如果主力API出现故障或额度用尽可以快速切换保证Agent服务不中断。这种策略既利用了免费资源最大化降低了试错成本又在生产环境保证了性价比和可靠性。具体配置时你可以通过环境变量轻松切换模型API的Base URL和API Key。4. 环境搭建与核心代码实战理论说再多不如一行代码。接下来我们进入实战环节。我会假设你已经有基本的Python开发环境Python 3.9 pip 一个喜欢的IDE如VSCode并带你一步步搭建。4.1 项目初始化与依赖安装首先创建一个干净的项目目录并初始化虚拟环境这是保证依赖隔离的好习惯。# 创建项目目录 mkdir my_ai_agent cd my_ai_agent # 创建虚拟环境这里使用venv你也可以用conda python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate # 安装核心框架 pip install crewai # 安装LangChain我们主要用它提供的丰富Tool库和模型接入层 # CrewAI本身可以与多种LLM对接但利用LangChain的生态会更方便 pip install langchain langchain-community # 安装我们选定模型的LangChain集成包以GLM-4和DeepSeek为例 # 注意模型集成包名可能会变请以官方文档为准 pip install zhipuai # 智谱AI官方SDKLangChain会用到 # DeepSeek通常可以通过LangChain的ChatOpenAI兼容接口调用需要openai包 pip install openai4.2 构建你的第一个智能体团队一个简易内容创作助手我们的目标是构建一个能自动撰写技术博客大纲的Agent团队。团队由两个角色构成选题策划师和大纲撰写师。第一步定义工具ToolsTools是Agent的手和脚。我们先定义一个简单的网络搜索工具模拟和一个计算字数工具。# tools.py from langchain.tools import tool import requests tool def search_web(query: str) - str: 执行一次网络搜索并返回摘要。这是一个模拟函数实际应用中应接入Serper API或类似服务。 # 模拟搜索返回 print(f[模拟搜索] 搜索关键词: {query}) # 这里为了演示返回静态内容。真实情况可以调用Serper、Google Search API等。 # 注意调用真实API会产生费用初期模拟即可。 mock_results { AI Agent框架: 当前主流AI Agent框架包括LangChain, AutoGen, CrewAI等各有侧重..., 大语言模型应用: LLM应用开发需关注提示工程、RAG检索增强生成和Agent工作流..., } return mock_results.get(query, f未找到关于{query}的特定信息请尝试其他关键词。) tool def count_words(text: str) - str: 统计给定文本的字数。 word_count len(text.split()) return f文本字数为: {word_count}第二步配置大语言模型LLM我们将配置GLM-4-Flash作为LLM。你需要先去智谱AI开放平台open.bigmodel.cn申请一个API Key。# config.py import os from langchain.chat_models import ChatZhipuAI from langchain_openai import ChatOpenAI # 从环境变量读取API密钥避免硬编码在代码中 os.environ[ZHIPUAI_API_KEY] your_zhipuai_api_key_here # 如果使用DeepSeek需要设置其兼容OpenAI的API地址和Key os.environ[DEEPSEEK_API_KEY] your_deepseek_api_key_here # 如果需要 os.environ[OPENAI_API_BASE] https://api.deepseek.com # DeepSeek的端点 def get_glm_llm(): 创建并返回一个GLM-4-Flash的LLM实例。 # temperature控制创造性0.1表示更确定和一致适合任务执行 llm ChatZhipuAI( modelglm-4-flash, temperature0.1, api_keyos.environ[ZHIPUAI_API_KEY] ) return llm def get_deepseek_llm(): 创建并返回一个DeepSeek-V3的LLM实例兼容OpenAI API。 llm ChatOpenAI( modeldeepseek-chat, # 模型名称根据DeepSeek文档调整 base_urlos.environ[OPENAI_API_BASE], api_keyos.environ.get(DEEPSEEK_API_KEY), temperature0.1 ) return llm # 默认使用GLM-4-Flash llm get_glm_llm()第三步定义智能体Agents、任务Tasks和团队Crew# main.py from crewai import Agent, Task, Crew, Process from tools import search_web, count_words from config import llm # 导入配置好的LLM # 1. 定义智能体 topic_planner Agent( role资深技术博客选题策划师, goal根据用户模糊的需求提炼出具体、有吸引力、且有一定搜索热度的技术博客主题。, backstory你是一位在科技媒体工作十年的编辑擅长捕捉技术趋势能将深奥的技术概念转化为读者感兴趣的切入点。, verboseTrue, # 设置为True可以看到Agent的思考过程调试时非常有用 allow_delegationFalse, # 这个Agent不需要委托任务给他人 tools[search_web], # 赋予它搜索工具用于调研热度 llmllm, # 指定使用的LLM ) outline_writer Agent( role优秀的科技文章大纲撰写师, goal根据给定的博客主题创作一份结构清晰、逻辑严谨、细节丰富的文章大纲确保可执行性。, backstory你是一位畅销技术书籍的作者擅长构建知识体系能将一个主题拆解成层层递进、易于理解的章节。, verboseTrue, allow_delegationFalse, tools[count_words], # 赋予它字数统计工具用于控制大纲详略 llmllm, ) # 2. 定义任务 plan_task Task( description针对用户提出的“{topic}”这个方向进行调研并规划出3个最值得写的具体博客标题。每个标题需要附带一句话的核心亮点说明。, expected_output3个具体的博客标题每个标题附带一句话亮点。, agenttopic_planner, # 这个任务由策划师执行 ) write_task Task( description基于以下选题之一“{selected_title}”撰写一份详细的博客大纲。大纲需要包含引言、至少3个核心章节每个章节下需有2-3个小节、结论。请确保结构完整逻辑流畅。, expected_output一份包含引言、核心章节含子小节、结论的完整Markdown格式大纲。, agentoutline_writer, # 这个任务由撰写师执行 context[plan_task], # 关键此任务依赖于plan_task的输出 ) # 3. 组建团队并运行 crew Crew( agents[topic_planner, outline_writer], tasks[plan_task, write_task], processProcess.sequential, # 顺序执行先规划后撰写 verbose2, # 输出详细的执行日志 ) # 运行团队传入用户输入 user_input AI Agent开发入门 result crew.kickoff(inputs{topic: user_input}) print(\n *50) print(最终产出:) print(*50) print(result)运行与解析 执行python main.py。你会看到控制台输出详细的思考过程选题策划师启动它看到任务后会先“思考”用户想要“AI Agent开发入门”我该怎么找角度接着它可能会决定调用search_web工具搜索“AI Agent 开发 入门”等关键词在我们的模拟中会打印日志。拿到“搜索结果”后它开始构思最终输出3个选题例如《放弃空想手把手搭建你的第一个AI Agent》、《AI Agent核心架构解析从LangChain到CrewAI的实战选型》、《成本敏感型开发者的选择深度评测GLM-4-Flash与DeepSeek-V3在Agent场景下的表现》。大纲撰写师启动它接收到的selected_title参数来自上一个任务的输出CrewAI会自动传递。假设它选取了第一个标题然后开始构思大纲。在撰写过程中它可能会调用count_words工具来确保某个章节的描述不至于太简略。最终你将得到一份完整的博客大纲。实操心得在第一次运行中你可能会发现输出不尽如人意。这非常正常。AI Agent的调试核心是调试提示词Prompt。你需要反复调整Agent的role、goal、backstory以及Task的description。例如如果大纲不够深入可以在撰写师的goal里加上“确保大纲包含具体的代码示例环节”或“每个小节要提出一个关键问题并解答”。这个过程被称为“提示词工程”是Agent开发中最具“手艺”的环节。5. 成本控制与优化实战指南搭建出能跑的Agent只是第一步让它在预算内稳定、高效地运行才是真正的挑战。以下是几个关键的省钱实战策略。5.1 精细化管理Token消耗Token是LLM世界的“货币”。控制Token就是控制成本。设定清晰的输出限制在Task的expected_output中明确格式和长度要求例如“请用不超过200字总结”、“以JSON格式输出”。这能有效防止模型“废话连篇”。优化上下文Context管理Agent在执行中会产生历史对话。如果这些历史全部无脑传给下一个步骤Token会飞速增长。你需要摘要历史让模型在关键步骤后对之前的对话或结果进行摘要只传递摘要。选择性记忆只传递对下一步决策真正必要的信息。在CrewAI中context参数就是用于传递上游任务的结果要确保传递的是精炼后的结果对象而不是冗长的原始输出。使用更高效的模型这就是选择GLM-4-Flash或DeepSeek-V3的原因。在非关键路径上比如一些简单的文本格式化、校验任务甚至可以尝试更小、更便宜的模型。5.2 引入缓存机制很多Agent任务具有重复性。例如你的Agent每天都需要分析类似的销售数据格式。如果每次都将同样的数据描述和问题发送给LLM就是在浪费钱。为LLM调用添加缓存可以使用langchain.cache模块将相同的输入Prompt和对应的输出Response缓存起来。下次遇到相同的请求时直接返回缓存结果。对于变化不大的查询效果立竿见影。from langchain.globals import set_llm_cache from langchain.cache import InMemoryCache # 使用内存缓存适合单次运行 set_llm_cache(InMemoryCache()) # 或者使用SQLite缓存适合持久化 # from langchain.cache import SQLiteCache # set_llm_cache(SQLiteCache(database_path.langchain.db))业务逻辑层缓存对于工具调用的结果比如通过某个API获取的、短期内不会变化的数据如产品目录也应该在代码层面实现缓存避免重复调用外部服务。5.3 实施有效的错误处理与重试网络抖动、模型临时过载、工具API限流……这些都会导致单次运行失败。如果没有重试机制一次偶然失败就意味着整个任务报废之前消耗的Token和计算资源全部浪费。为LLM调用配置重试在LangChain或直接调用API时配置指数退避重试。from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def call_llm_with_retry(prompt): # 调用LLM的代码 response llm.invoke(prompt) return response为工具调用配置重试对于search_web这类依赖外部网络的服务同样需要重试逻辑。设计任务断点续传对于复杂的多步骤任务记录每个步骤的状态和结果。如果任务在中间失败重启后可以从上一个成功步骤继续而不是从头开始。CrewAI的Process状态管理可以结合外部存储如数据库来实现这一点。5.4 监控与成本告警不能度量就无法优化。你需要知道钱花在了哪里。记录日志记录每一次LLM调用的时间、消耗的Token数输入/输出、使用的模型。这可以通过装饰器或LangChain的Callback机制实现。计算成本根据日志和模型单价定期计算花费。可以写一个简单的脚本汇总日志文件并输出日报/周报。设置告警当每日或单次任务消耗的Token超过某个阈值时发送邮件或钉钉消息告警。这能帮你及时发现异常流量比如提示词有漏洞导致死循环调用。6. 从Demo到实用扩展性与进阶思考当你成功运行了上面的内容创作助手你已经掌握了AI Agent开发的核心闭环。但这只是一个起点。要让这个Agent真正实用还需要考虑以下方面6.1 连接真实世界集成更多工具模拟的search_web工具只是个开始。真正的力量在于连接丰富的工具数据获取集成SQLToolkit让Agent能直接查询数据库集成RequestsToolkit让它能调用任意HTTP API获取天气、股价、新闻等信息。文件操作集成工具让Agent能读取本地PDF、Word、Excel文件或写入生成的文件。软件操作通过Selenium或Playwright工具包让Agent能自动化操作浏览器。代码执行这是一个需要极度谨慎的工具。可以创建一个安全的沙箱环境让Agent能够执行它自己生成的Python代码片段来分析数据或进行转换但必须严格限制权限和资源。在CrewAI中集成这些工具非常简单因为其兼容LangChain庞大的Tool生态。你几乎可以“即插即用”。6.2 提升决策质量优化提示词与工作流角色扮演Role-Playing我们已经在Agent定义中使用了role和backstory这其实就是一种角色扮演。你可以把它做得更极致。例如定义一个“严厉的代码评审员”Agent它的backstory是“拥有20年C和Python开发经验对代码风格、性能和安全性有近乎偏执的要求”让它来评审另一个Agent生成的代码。反思Reflection让Agent具备“回头检查”的能力。可以在一个任务链的最后增加一个“评审员”Agent它的任务就是检查之前所有输出的质量提出改进意见甚至触发重新执行。CrewAI的sequential流程可以很容易地加入这个环节。动态任务规划我们目前的流程是静态的先A后B。更高级的Agent可以根据中间结果动态决定下一步做什么。这需要用到更底层的框架如LangGraph来构建状态机让Agent在“规划”、“执行”、“评估”几个状态间循环。6.3 部署与持续运行封装为API服务使用FastAPI或Flask将你的CrewAI团队封装成一个HTTP端点。这样任何其他系统都可以通过发送请求来触发Agent工作。定时任务结合APScheduler或Celery让你的Agent每天定点执行如自动生成日报、定时巡检网站。添加人机交互通过集成聊天工具如钉钉、Slack、微信机器人你可以用自然语言直接给Agent派活它完成后将结果发回对话。6.4 绕不开的挑战稳定性与幻觉即使采用了最省钱的方案AI Agent在实用化道路上仍有两大顽疾稳定性LLM的输出具有随机性即使temperature0.1同样的输入可能产生质量波动较大的输出。应对策略包括设置明确的输出格式规范如JSON Schema、在关键步骤引入人工审核或规则校验、对于重要任务采用“多数表决”机制让多个Agent独立执行后投票选择最佳结果。幻觉HallucinationLLM会一本正经地胡说八道比如编造一个不存在的API接口。这是目前技术的主要局限。缓解方法包括为Agent提供充足、准确的上下文信息这就是RAG技术要解决的问题、要求Agent对关键信息提供引用来源、构建工具调用结果的验证机制例如Agent调用了一个查询接口如果返回空或错误应触发重试或报错而不是自己编造数据。搭建一个AI Agent从Demo到稳定生产是一个不断迭代、不断添加“安全护栏”的过程。最省钱的方案其精髓不在于用了某个免费的模型而在于用最小的代价快速验证核心价值然后在产生真实价值的地方精准投入。希望这份指南能帮你跨出坚实的第一步。记住最好的学习就是动手现在就开始搭建你的第一个智能体吧。
返回列表