Agent项目实战——Agent框架
创建agent需要model、memory、prompt、agent执行器等搭建Agent框架先将其主要功能封装在一个类中。from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder from langchain.agents import create_openai_tools_agent,AgentExecutor,tool import os os.environ[OPENAI_API_KEY] sk-xxxxxxxxxx os.environ[OPENAI_API_BASE] url #代理地址 tool def test(): Test tool return test class Master: def __init__(self): self.chatmodel ChatOpenAI( modelgpt-3.5-turbo-0125, temperature0, streamingTrue, ) self.MEMORY_KEY chat_history self.SYSTEMPL self.prompt ChatPromptTemplate.from_messages( [ (system, 你是一个助手协助用户完成任务。), MessagesPlaceholder(variable_nameagent_scratchpad), (user, {input}), ] ) self.memory tools [test] agent create_openai_tools_agent( self.chatmodel, toolstools, promptself.prompt, ) self.agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, ) def run(self,query): result self.agent_executor.invoke({input: query}) return result随后在chat接口实例化对象运行项目开始测试。app.post(/chat) def chat(query:str): master Master() return master.run(query)在此需要注意1.Agent智能体创建的方法1.initialize_agent作用通用的 Agent 创建入口支持多种AgentType如ZERO_SHOT_REACT_DESCRIPTION、CHAT_CONVERSATIONAL_REACT_DESCRIPTION等。特点封装程度高内部自动生成 prompt通过AgentType枚举选择不同的 agent 行为模式直接返回 AgentExecutor可直接执行设计上更像配置式灵活性较低适用模型任意 LLM包括非 OpenAI示例from langchain.agents import initialize_agent, AgentType from langchain_openai import ChatOpenAI from langchain.tools import Tool # 定义一个简单工具 def add_numbers(a: int, b: int) - int: return a b tools [ Tool( nameAddNumbers, funclambda x: add_numbers(*map(int, x.split())), description输入两个整数返回它们的和 ) ] # 创建 LLM llm ChatOpenAI(modelgpt-4o-mini, temperature0) # 创建 Agent agent initialize_agent( toolstools, llmllm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue ) # 运行 agent.run(请用 AddNumbers 计算 12 和 30 的和)2.create_openai_tools_agent作用专门为OpenAI Functions API即 function calling设计的 Agent 创建方法。特点需要手动传入 prompt自由度极高返回的是Runnable对象可以被链式调用必须配合 AgentExecutor 使用职责分离更清晰专为 OpenAI 的函数/工具调用优化适用模型仅支持 OpenAI function calling 模型示例from langchain.agents import create_openai_tools_agent, tool from langchain_openai import ChatOpenAI from langchain.agents import tool # 定义工具使用 tool 装饰器 tool def multiply_numbers(a: int, b: int) - int: 返回两个整数的乘积 return a * b # 创建 LLM必须是支持 function calling 的模型 llm ChatOpenAI(modelgpt-4o-mini, temperature0) # 创建 Agent agent create_openai_tools_agent(llm, [multiply_numbers]) # 运行 result agent.invoke({input: 请用 multiply_numbers 计算 6 和 7 的乘积}) print(result)LangChain 官方明确建议新项目v0.1.0 使用create_openai_tools_agent这类新函数逐步淘汰initialize_agent。2.MessagesPlaceholderMessagesPlaceholder是LangChain框架中ChatPromptTemplate的一种特殊占位符用于在提示词模板中动态插入一组已有的消息通常是多轮对话的历史记录。它是 Agent 的草稿纸记录整个思考→行动→观察的过程。它的主要作用是保留对话上下文在调用模型时把之前的聊天记录插入到提示词中。灵活插入消息列表不需要提前知道有多少条历史消息。与多轮对话记忆Memory配合常用于ConversationBufferMemory、ConversationBufferWindowMemory等。通俗理解你可以把它想象成一个草稿纸占位符variable_nameagent_scratchpad就像在说这里预留一个位置放 Agent 的草稿纸运行时LangChain 会自动把 Agent 的思考过程、中间步骤、工具调用记录等放到这个位置实际工作流程# 典型的 Agent 提示模板结构 prompt ChatPromptTemplate.from_messages([ (system, 你是一个有用的助手可以调用工具解决问题。), (user, {input}), # 用户输入 (placeholder, {agent_scratchpad}), #这里就是 MessagesPlaceholder ])当 Agent 运行时第一轮agent_scratchpad是空的调用工具后把思考→调用工具→得到结果的过程添加到agent_scratchpad下一轮Agent 可以看到之前的思考过程决定下一步

相关新闻

互联网大厂Java面试实战:从核心语言到微服务与AI技术全解析

互联网大厂Java面试实战:从核心语言到微服务与AI技术全解析

互联网大厂Java面试实战:从核心语言到微服务与AI技术全解析 面试场景介绍 在互联网大厂求职Java开发岗位的谢飞机,面对严肃的面试官,经历了一场既专业又带点幽默的面试过程。面试涵盖了Java核心、微服务架构、云原生、大数据与AI等前沿技术&a…

2026/7/4 20:36:01 阅读更多 →
避开选择误区,精准匹配需求——手机存储容量的实用指南

避开选择误区,精准匹配需求——手机存储容量的实用指南

选购手机时,很多人在存储容量上陷入两难:选小了担心不够用,选大了怕浪费,128GB、256GB、512GB的选择看似简单,实则藏着不少认知误区。事实上,存储容量的选择与使用习惯、换机周期、需求场景深度相关&#x…

2026/7/4 16:45:46 阅读更多 →
当PLC遇上温控器:手把手搞透1200与E5cc的485通讯

当PLC遇上温控器:手把手搞透1200与E5cc的485通讯

西门子1200与欧姆龙E5cc温控器通讯程序 功能:实现西门子1200 PLC对欧姆龙E5cc温控器进行485通讯控制,在触摸屏上设定温度,读取温度 程序采用轮询方式,有通讯故障后再恢复功能,也可以后续根据需要在此基础上扩充台数 器…

2026/5/17 10:25:39 阅读更多 →

最新新闻

AutoRaise终极指南:3步实现macOS鼠标悬停窗口自动聚焦,提升5倍工作效率

AutoRaise终极指南:3步实现macOS鼠标悬停窗口自动聚焦,提升5倍工作效率

AutoRaise终极指南:3步实现macOS鼠标悬停窗口自动聚焦,提升5倍工作效率 【免费下载链接】AutoRaise AutoRaise (and focus) a window when hovering over it with the mouse 项目地址: https://gitcode.com/gh_mirrors/au/AutoRaise 在macOS多任务…

2026/7/4 20:35:42 阅读更多 →
【强烈推荐收藏】2026网络安全:国家战略支柱与最确定职业红利

【强烈推荐收藏】2026网络安全:国家战略支柱与最确定职业红利

【强烈推荐收藏】2026网络安全:国家战略支柱与最确定职业红利 文章指出2026年网络安全已成为国家战略核心,新《网络安全法》实施加大处罚力度,产业市场规模扩大与人才缺口并存。两会明确网络安全是数字时代的刚需与国家战略支柱,…

2026/7/4 20:31:41 阅读更多 →
基于YOLOv5的道路损坏实时检测系统开发实践

基于YOLOv5的道路损坏实时检测系统开发实践

1. 项目概述:基于YOLOv5的道路损坏识别系统道路损坏检测一直是交通基础设施维护中的痛点问题。传统人工巡检方式效率低下且成本高昂,而基于计算机视觉的自动化检测方案正在逐步改变这一现状。我们开发的这套系统采用YOLOv5目标检测框架,能够实…

2026/7/4 20:29:41 阅读更多 →
Codex 实战 Skills:发生 Bug 时,用 Skill 自动捕获堆栈并格式化推送到群聊的预警技能

Codex 实战 Skills:发生 Bug 时,用 Skill 自动捕获堆栈并格式化推送到群聊的预警技能

Codex 实战 Skills:发生 Bug 时,用 Skill 自动捕获堆栈并格式化推送到群聊的预警技能 在现代软件工程的敏捷开发与运维体系中,故障的发现速度直接决定了系统的恢复时间(MTTR)。当生产环境发生异常时,传统的日志查看方式往往存在滞后性,而基于即时通讯工具(如飞书、钉钉…

2026/7/4 20:27:41 阅读更多 →
三步搞定E-Hentai漫画收藏:免费批量下载终极指南

三步搞定E-Hentai漫画收藏:免费批量下载终极指南

三步搞定E-Hentai漫画收藏:免费批量下载终极指南 E-Hentai-Downloader是一款专为漫画爱好者设计的智能下载工具,让你轻松将E-Hentai画廊内容批量打包为ZIP文件,实现漫画资源的高效管理与永久收藏。无需复杂操作,只需简单几步即可…

2026/7/4 20:27:41 阅读更多 →
[论文学习]吸引力元数据攻击:诱导LLM智能体调用恶意工具深度解析

[论文学习]吸引力元数据攻击:诱导LLM智能体调用恶意工具深度解析

Attractive Metadata Attack: Inducing LLM Agents to Invoke Malicious Tools 📖 概述 论文揭示了一种新型且隐蔽的LLM智能体安全威胁——吸引力元数据攻击(Attractive Metadata Attack, AMA) :攻击者通过操纵恶意工具的名称、描…

2026/7/4 20:27:41 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻