ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI大模型应用开发实战:从提示词工程到Agent智能体构建

AI大模型应用开发实战:从提示词工程到Agent智能体构建 如果你是一名程序员现在想入门AI大模型开发是不是感觉有点无从下手网上资料铺天盖地一会儿是“大模型基础”一会儿是“提示词工程”还有“Agent智能体”、“ReAct框架”……每个词都听过但连起来就不知道从哪开始。更让人困惑的是很多教程要么是纯理论要么是零散的代码片段看完之后还是不知道如何把这些技术串联起来真正落地到一个项目中。这正是本文要解决的问题。这篇文章不是另一个泛泛而谈的概念清单而是一份为程序员量身定制的、从入门到落地的实战路线图。我们将聚焦于三个最核心、最能产生实际价值的模块大模型基础认知、提示词工程实战、以及Agent智能体开发并最终通过一个融合了多框架与ReAct思想的完整项目手把手带你走通全流程。我的核心判断是对于开发者而言学习大模型应用开发关键在于掌握“连接”与“控制”的能力。即如何将大模型的能力“连接”到你现有的业务系统和数据中又如何通过工程化的方法“控制”大模型的输出使其稳定、可靠、符合预期。本文将围绕这一主线为你拆解每一步。读完本文你将能清晰地知道学什么避开知识碎片建立以“工程应用”为目标的结构化知识体系。怎么练获得可复现的环境配置、代码示例和项目实战而不仅仅是理论。如何用理解不同技术如ReAct的适用场景与局限在真实项目中做出正确技术选型。1. 重新定义“入门”程序员学大模型到底在学什么很多初学者会陷入一个误区把入门大模型等同于去研究Transformer架构、背诵SOTA模型参数、或者复现预训练过程。这对于AI研究员是必要的但对于绝大多数应用开发者来说这条路成本极高且ROI很低。程序员入门大模型真正应该学习的是“大模型服务化”和“智能体工程化”。大模型服务化你不必自己从零训练一个GPT但你需要学会如何调用OpenAI、DeepSeek、智谱等提供的API或者如何在本地部署并服务化一个开源模型如Qwen、Llama。核心是将其视为一个强大的、有状态的“云函数”或“微服务”。智能体工程化大模型本身只是一个“大脑”它不知道当前时间、无法查询数据库、不能执行代码。Agent智能体就是为这个“大脑”装上“手脚”和“感官”的框架。学习Agent就是学习如何通过Prompt、工具调用Function Calling、工作流Workflow来编排大模型让它能完成复杂、多步骤的真实任务。因此本文的教程结构将严格遵循这个应用视角基础认知 → 核心交互技术Prompt → 能力扩展框架Agent → 综合项目实战。2. 模块一大模型基础——超越API调用的深度理解在写第一行代码之前我们需要建立几个关键认知这能让你后续的学习事半功倍。2.1 大模型的核心能力与本质局限大模型LLM是一种基于海量数据训练的概率生成模型。它的核心能力是理解和生成人类语言并在此过程中展现出惊人的知识关联和逻辑推理能力。但对于开发者必须清醒认识其本质局限知识截止性模型训练数据有截止日期不知道之后的事件。幻觉Hallucination会生成看似合理但完全错误或虚构的信息。无实时感知不知道当前的天气、股价、或你数据库里的最新数据。非确定性相同输入可能产生不同输出可通过参数控制。开发者的首要任务就是通过工程手段来弥补这些局限。例如用检索增强生成RAG解决知识截止性问题用ReAct等结构化思维链减少幻觉用工具调用来获取实时信息。2.2 关键概念Token、Context Window、Temperature这些参数直接关系到你的应用成本和效果。Token大模型处理文本的基本单位。中文大约1个Token对应1-2个汉字。API费用和生成速度都与Token数强相关。上下文窗口Context Window模型一次性能处理的最大Token数如128K。你提供的系统提示、历史对话、检索到的资料都在这个窗口内。接近窗口上限时模型可能会“遗忘”开头的内容。Temperature温度控制输出随机性的关键参数。温度 ≈ 0输出确定性最高适合有标准答案的任务如代码生成、数据提取。温度 ≈ 0.7平衡创造性和一致性适合创意写作、对话。温度 1输出非常随机可能产生无意义内容。2.3 环境准备选择你的“模型服务”对于入门和多数应用场景我们建议从云API开始快速验证想法。步骤1获取API密钥以DeepSeek为例因其目前对开发者友好访问DeepSeek官网注册并登录。进入控制台找到“API密钥”管理页面。创建一个新的密钥并妥善保存它只会显示一次。步骤2安装必要的Python库我们将使用openai这个通用库因为DeepSeek等国内模型也兼容OpenAI API格式。# 创建并进入项目目录 mkdir ai-agent-tutorial cd ai-agent-tutorial # 创建虚拟环境推荐 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Mac/Linux: source venv/bin/activate # 安装核心库 pip install openai python-dotenv步骤3安全地管理密钥永远不要将API密钥硬编码在代码中使用环境变量。# 在项目根目录创建 .env 文件 echo DEEPSEEK_API_KEY你的实际api密钥 .env echo OPENAI_API_KEYsk-xxx如果你也用OpenAI .env# 文件config.py import os from dotenv import load_dotenv load_dotenv() # 加载 .env 文件中的环境变量 DEEPSEEK_API_KEY os.getenv(DEEPSEEK_API_KEY) OPENAI_API_KEY os.getenv(OPENAI_API_KEY) # 可以在这里配置其他模型的基础URL例如DeepSeek的 DEEPSEEK_API_BASE https://api.deepseek.com3. 模块二提示词工程——从“聊天”到“精准指令”Prompt Engineering是与大模型交互的核心技能。它的目标是将模糊的需求转化为模型能稳定、准确执行的指令。3.1 提示词的基本结构角色、任务、约束、格式一个工程化的提示词通常包含以下部分# 文件prompt_basic.py system_prompt 你是一位资深Python开发专家擅长编写清晰、高效、符合PEP8规范的代码。 你的任务是根据用户需求生成可直接运行的Python代码片段。 约束 1. 只输出代码不要包含任何解释性文字。 2. 确保代码包含必要的导入语句。 3. 如果需求复杂请将代码封装在函数中。 4. 假设用户使用Python 3.9环境。 输出格式 python # 你的代码user_request 写一个函数计算斐波那契数列的第n项。**拆解说明** * **角色**设定模型的身份使其输出风格专业化。 * **任务**清晰、无歧义地说明要做什么。 * **约束**限制输出范围避免多余信息如“解释”这是控制输出的关键。 * **格式**明确要求结构化输出如JSON、代码块便于后续程序自动化处理。 ### 3.2 进阶技巧思维链CoT与少样本示例Few-Shot 当任务复杂时需要引导模型“一步步思考”。 **技巧1思维链Chain-of-Thought** 通过“让我们一步步思考”等指令激发模型的推理过程。 python # 文件prompt_cot.py complex_prompt 用户问题如果小明比小红大5岁3年前小明的年龄是小红的2倍请问现在两人各多少岁 请一步步推理并给出最终答案。 # 模型更可能输出“设小红现在x岁则小明现在x5岁。三年前...解得x8。所以小红8岁小明13岁。”技巧2少样本示例Few-Shot Learning在提示词中提供1-3个输入-输出的例子让模型模仿格式和逻辑。# 文件prompt_fewshot.py few_shot_prompt 请将以下中文商品评论的情感分类为“正面”、“负面”或“中性”。 示例1 评论 “手机电池续航太差了半天就没电。” 情感 负面 示例2 评论 “物流速度快包装完好给个好评。” 情感 正面 示例3 评论 “商品收到了和图片一样。” 情感 中性 现在请分类 评论 “相机画质不错但价格有点贵。” 情感 3.3 实战构建一个可复用的提示词模板函数在实际项目中我们需要将提示词模块化。# 文件prompt_manager.py class PromptManager: def __init__(self): self.templates { code_review: 你是一位严格的代码审查员。请审查以下{language}代码 {code} 请按以下格式输出 1. **潜在问题**(列出问题如性能、安全、可读性) 2. **改进建议**(具体的代码修改建议) 3. **安全评分**(1-10分10分最安全) , data_extractor: 从以下文本中提取结构化信息 {text} 请提取以下字段{fields} 以JSON格式输出键名分别为{field_keys}。 } def generate_prompt(self, template_name: str, **kwargs) - str: 根据模板名和参数生成提示词 if template_name not in self.templates: raise ValueError(f模板 {template_name} 不存在) return self.templates[template_name].format(**kwargs) # 使用示例 if __name__ __main__: pm PromptManager() code_to_review def add(a, b):\n return a b prompt pm.generate_prompt(code_review, languagePython, codecode_to_review) print(prompt)4. 模块三Agent智能体原理——为大模型赋予“行动力”Agent是大模型应用从“玩具”走向“工具”的关键。它的核心思想是让大模型根据目标自主决定何时、调用何种工具函数。4.1 Agent的核心循环感知-思考-行动一个典型的Agent运行遵循以下循环感知接收用户输入或环境状态。思考大模型分析当前情况决定下一步是“直接回答”还是“调用工具”。行动如果决定调用工具则生成工具调用请求如函数名和参数执行工具获取结果。观察将工具执行结果返回给大模型。循环大模型基于新观察再次“思考”直到得出最终答案。4.2 工具调用Function Calling详解这是Agent与外界交互的桥梁。你需要向大模型清晰地描述工具的功能。# 文件agent_tools.py import requests from datetime import datetime # 1. 定义工具函数 def get_current_time(timezone: str Asia/Shanghai) - str: 获取指定时区的当前时间。 Args: timezone: 时区名称例如 Asia/Shanghai, America/New_York。 Returns: 格式化的时间字符串。 # 简化实现实际应用应使用pytz等库 now datetime.now() return now.strftime(f%Y-%m-%d %H:%M:%S (假设时区: {timezone})) def search_web(query: str) - str: 使用搜索引擎查询信息模拟。 Args: query: 搜索关键词。 Returns: 搜索结果的摘要文本。 # 注意此处为模拟。实际应用中你可能需要调用Serper、Google Search API等。 # 此处返回模拟数据强调工具定义和调用的概念。 return f关于{query}的模拟搜索结果这是一个非常热门的话题涉及最新技术发展。 # 2. 向大模型描述这些工具 tools_description_for_llm [ { type: function, function: { name: get_current_time, description: 获取当前的日期和时间。, parameters: { type: object, properties: { timezone: { type: string, description: 时区例如 Asia/Shanghai, } }, required: [timezone], }, }, }, { type: function, function: { name: search_web, description: 在互联网上搜索最新信息。, parameters: { type: object, properties: { query: { type: string, description: 需要搜索的关键词或问题, } }, required: [query], }, }, }, ]4.3 ReAct框架推理与行动的协同ReActReasoning Acting是一种让Agent“三思而后行”的经典范式。其核心是在提示词中要求模型将“思考过程”Reasoning以文本形式输出然后再决定行动Action。一个典型的ReAct提示词结构如下问题{用户问题} 你必须通过思考、行动、观察的步骤来解决问题。 思考首先我需要分析问题明确需要哪些信息或工具。 行动{“action”: “工具名”, “action_input”: {“参数”: “值”}} 观察{工具执行返回的结果} 思考根据观察我下一步应该... 行动... 循环直至问题解决 最终答案{最终的答案}这种方式能显著提升复杂任务中的推理准确性和可解释性。5. 模块四项目实战——构建一个多工具ReAct智能体现在我们将整合前面所有知识构建一个能查询时间、搜索信息、并进行简单计算的智能体。我们将使用LangChain框架它是目前构建Agent最流行的框架之一能极大简化工具调用和流程控制。5.1 项目初始化与依赖安装# 在之前的虚拟环境中安装LangChain和相关库 pip install langchain langchain-openai langchain-community # 安装用于数学计算的工具包可选演示用 pip install numexpr5.2 定义工具集我们将创建三个工具时间、搜索、计算。# 文件tools.py import math from datetime import datetime from langchain.tools import tool import requests tool def get_time(timezone: str Asia/Shanghai) - str: 获取指定时区的当前时间。输入应为时区字符串如Asia/Shanghai。 now datetime.now() return f当前时间{timezone}是{now.strftime(%Y-%m-%d %H:%M:%S)} tool def web_search(query: str) - str: 在互联网上搜索信息。输入是一个搜索查询字符串。 # 强烈提醒此处为模拟。在生产环境中你必须使用合法的搜索API并遵守相关法律法规和平台条款。 # 模拟返回 simulated_results { 2026年AI趋势: 预计2026年AI智能体Agent将更加普及与工作流深度集成。, Python最新版本: Python 3.13 已于2025年发布带来了性能优化和新语法特性。, 今天天气: 模拟数据北京晴15-25°C。请以权威气象平台数据为准。 } return simulated_results.get(query, f未找到关于{query}的特定模拟信息。) tool def calculator(expression: str) - str: 执行数学计算。支持加减乘除、乘方**和括号。输入是一个数学表达式字符串如(34)*2。 try: # 警告使用eval有安全风险仅用于演示。生产环境应使用更安全的解析库如ast.literal_eval处理有限操作。 # 此处为简化演示确保仅在受控环境下运行。 result eval(expression, {__builtins__: {}}, {math: math}) return f计算结果{expression} {result} except Exception as e: return f计算错误{e}。请检查表达式格式。5.3 构建ReAct智能体我们将使用LangChain的create_react_agent来快速构建一个遵循ReAct范式的智能体。# 文件react_agent.py import os from dotenv import load_dotenv from langchain import hub from langchain.agents import create_react_agent, AgentExecutor from langchain_openai import ChatOpenAI from tools import get_time, web_search, calculator # 1. 加载环境变量和配置 load_dotenv() # 使用DeepSeek兼容OpenAI API llm ChatOpenAI( modeldeepseek-chat, openai_api_keyos.getenv(DEEPSEEK_API_KEY), base_urlhttps://api.deepseek.com/v1, temperature0.1 # 对Agent任务低温度更稳定 ) # 2. 准备工具列表 tools [get_time, web_search, calculator] # 3. 从LangChain Hub获取一个优化的ReAct提示词模板 # 这是一个社区维护的、经过打磨的提示词比我们自己写的更健壮。 prompt hub.pull(hwchase17/react) # 4. 创建ReAct Agent agent create_react_agent(llm, tools, prompt) # 5. 创建Agent执行器它负责运行循环思考-行动-观察-... agent_executor AgentExecutor(agentagent, toolstools, verboseTrue, handle_parsing_errorsTrue) # 6. 运行智能体测试 if __name__ __main__: test_questions [ 现在上海是几点钟, 2026年AI有什么趋势, 计算一下15的平方加上20除以4等于多少, 先查一下北京现在的天气如果是晴天就计算(20-5)*3等于多少。 ] for question in test_questions: print(f\n{*50}) print(f用户问题: {question}) print(f{*50}) try: # 注意web_search工具是模拟的实际需要替换为真实API result agent_executor.invoke({input: question}) print(f智能体回答: {result[output]}) except Exception as e: print(f执行出错: {e})5.4 运行与解析运行python react_agent.py。你将看到类似以下的详细输出verboseTrue会打印思考过程 用户问题: 现在上海是几点钟 进入新的Agent执行链... 思考我需要获取当前上海的时间。上海位于Asia/Shanghai时区。我应该使用get_time工具。 行动{action: get_time, action_input: {timezone: Asia/Shanghai}} 观察当前时间Asia/Shanghai是2025-04-10 14:30:15 思考我已经获得了时间信息可以回答用户了。 行动{action: Final Answer, action_input: 当前上海时间是2025年4月10日下午2点30分15秒。} 智能体回答: 当前上海时间是2025年4月10日下午2点30分15秒。这个输出完美展示了ReAct的流程思考分析问题决定调用get_time工具。行动生成格式化的工具调用请求。观察接收工具返回的结果。再思考根据结果决定任务完成给出最终答案。对于更复杂的第四个问题智能体会展示出顺序执行多个工具的能力。6. 深入探索多智能体Multi-Agent系统简介当任务极其复杂时可以引入多个各司其职的智能体进行协作这就是多智能体系统MAS。例如规划智能体拆解总任务为子任务。执行智能体负责调用工具完成具体子任务。评审智能体检查执行结果的质量。协调智能体管理智能体间的通信和调度。这通常通过LangGraph、CrewAI等框架来实现它们提供了可视化的工作流编排能力。这是Agent开发的高级方向。7. 常见问题与排查指南在开发大模型应用和Agent时你一定会遇到以下问题问题现象可能原因排查步骤解决方案API调用失败返回认证错误1. API密钥错误或过期。2. 环境变量未正确加载。3. 请求的Base URL不对。1. 检查.env文件中的密钥是否正确。2. 在代码中打印os.getenv(“API_KEY”)确认是否加载。3. 核对官方文档的API端点地址。1. 在控制台重新生成密钥并更新。2. 确保代码中调用了load_dotenv()。3. 修正base_url参数。智能体陷入循环不停调用工具1. 提示词未设置停止条件。2. 工具返回结果未能让模型判断任务结束。3. 模型温度过高输出不稳定。1. 检查Agent执行器的max_iterations参数。2. 查看verbose日志观察思考过程是否卡在某个点。3. 降低模型温度如设为0.1。1. 设置max_iterations10等限制。2. 优化工具的描述和返回格式使其更清晰。3. 在系统提示词中明确“给出最终答案后必须停止”。模型输出格式不符合要求1. 提示词中对输出格式的约束不够强。2. 少样本示例不够典型。1. 审查提示词使用“必须”、“请严格按以下格式”等强约束词。2. 在提示词中提供更精确的输出示例。1. 采用结构化输出格式如JSON Schema要求模型。2. 使用LangChain的OutputParser等组件进行后处理。工具调用参数解析错误1. 模型生成的参数格式与工具定义不匹配。2. 参数类型错误如需要字符串却传了数字。1. 查看handle_parsing_errors捕获的错误信息。2. 检查工具函数的参数类型注解和描述。1. 在工具描述中明确参数类型和示例。2. 使用Pydantic模型来严格定义工具的参数结构。处理长文本时性能慢或丢失上下文1. 输入Token数超过模型上下文窗口。2. 历史对话过长关键信息被挤掉。1. 计算输入文本的Token数可用tiktoken库。2. 观察最终回答是否忽略了对话早期的信息。1. 对长文本进行分块、摘要后再输入。2. 实现对话历史摘要机制只保留关键信息。3. 选用上下文窗口更大的模型。8. 最佳实践与工程化建议要将原型转化为可上线的应用必须关注工程化。成本与性能优化缓存对频繁且结果不变的查询如产品信息查询进行结果缓存。异步调用当需要并行调用多个工具或多个模型请求时使用asyncio。Token管理精简提示词移除冗余信息对用户输入进行长度限制。稳定性与容错重试机制为API调用和工具调用添加指数退避重试。降级方案当核心大模型服务不可用时应有备选方案如返回缓存、切换到更简单的规则引擎。超时控制为每个工具调用和模型请求设置合理的超时时间。可观测性与调试全链路日志记录每个用户请求的完整思考链、工具调用和最终输出。这对调试“幻觉”和错误至关重要。监控与告警监控API调用延迟、错误率、Token消耗和费用。版本管理对提示词模板、工具定义进行版本控制如存于Git。安全与合规输入过滤与审查对用户输入进行必要的过滤防止注入攻击或不当内容。工具权限控制为不同的工具设置权限等级避免智能体执行危险操作如删除数据库、发送邮件。数据隐私确保敏感用户数据不泄露给第三方模型API。对于高隐私场景考虑私有化部署模型。9. 总结你的大模型应用开发路线图至此我们已经完成了一次从理论到实战的完整穿越。回顾一下核心路径转变认知从“研究模型”转向“使用和操控模型服务”。掌握核心交互通过提示词工程角色、约束、思维链、少样本精准控制模型输出。构建行动能力利用Agent框架和工具调用将大模型与外部世界数据、API、系统连接起来。采用高级范式使用ReAct等模式提升复杂任务下的推理可靠性。工程化落地关注成本、稳定性、可观测性和安全将原型转化为产品。下一步该做什么深化将示例中的模拟搜索工具web_search替换成真实的搜索引擎API如Serper、Google Search API构建一个真正能获取实时信息的智能体。扩展尝试集成更多工具如发送邮件、查询数据库、生成图表等。进阶学习LangGraph来编排包含分支和循环的复杂工作流或探索CrewAI来搭建多智能体协作系统。部署学习使用FastAPI将你的智能体封装成HTTP API服务并用Docker进行容器化部署。大模型应用开发的世界刚刚打开最大的优势不在于掌握所有前沿论文而在于快速将想法通过代码实现并解决真实问题。现在就从运行本文的示例代码开始构建你的第一个智能体吧。
返回列表