当前位置: 首页 > news >正文

从0到1构建奶牛行为智能监控系统(七)基于langchain的智能体构建

前面已经在服务器实现了基于vllm的qwen大模型部署,目标检测、身份识别、行为识别服务部署,数据库服务也搭建起来了,这期就介绍使用langchain构建智能体,将服务封装为工具供大模型调用

一、langchain介绍与安装

langchain智能体开发框架的内部封装好了很多智能体开发工具,可以有效降低开发复杂度。

本项目使用了langchain v0.3版本,安装方式参考官网:LangChain 中文教程 | LangChain 中文文档

二、智能体构建

2.1.大模型初始化

配置智能体所使用的大模型,这里就是我们前面部署的qwen3.5-9b模型,使用vllm部署的适配openai调用方式

def _create_llm(self) -> ChatOpenAI: return ChatOpenAI( model=self.config.llm.model_name, # 模型名称 base_url=self.config.llm.base_url, # API 地址 api_key=self.config.llm.api_key, # 密钥 temperature=self.config.llm.temperature, # 创造性程度 max_tokens=self.config.llm.max_tokens, # 最大输出长度 extra_body={ "chat_template_kwargs": { "enable_thinking": self.config.llm.enable_thinking, } }, )

2.2.定义目标检测、身份识别、行为识别服务工具集

这里将之前部署的服务包装为智能体能够调用的工具

def _create_tools(self) -> list: tools = [] tools.extend(get_detection_tools()) # 目标检测工具 tools.extend(get_behavior_tools()) # 行为分析工具 tools.extend(get_identification_tools()) # 身份识别工具 tools.extend(get_database_tools()) # 数据库查询工具 return tools

以身份识别为例,通过添加@tool修饰器,langchain会自动将方法注册为工具,方法内部使用httpx库进行http请求发送,调用我们前面部署好的各种模型服务

from langchain_core.tools import tool import httpx @tool def identify_cow(topk: int = 5) -> str: """ 根据最近上传的奶牛图像进行个体身份识别。 """ url = f"{IdentificationToolConfig.base_url}/api/identifi/detect" try: # 调用识别服务 response = httpx.post(url, params={"topk": topk}, timeout=60.0) response.raise_for_status() data = response.json() if not data.get("success"): return f"识别失败:{data.get('message', '未知错误')}" # 格式化结果 results = data.get("results", []) if not results: return "未找到匹配的奶牛。" lines = ["奶牛身份识别结果:"] for i, r in enumerate(results, 1): lines.append( f"\n匹配 {i}:ID={r.get('id')}, " f"名称={r.get('name')}, " f"置信度={r.get('confidence')}%" ) return "\n".join(lines) except httpx.ConnectError: return "身份识别服务未启动。" except httpx.TimeoutException: return "请求超时,请稍后重试。" except Exception as exc: return f"识别出错:{exc}"

2.3.提示词构建与智能体构建

这里自行写入提示词,然后使用langchain提供的方法将大模型、工具和提示词连接起来构建成智能体

prompt = ChatPromptTemplate.from_messages([ ("system", self.config.system_prompt), # 系统角色设定 MessagesPlaceholder(variable_name="chat_history"), # 对话历史占位 ("human", "{input}"), # 用户输入 MessagesPlaceholder(variable_name="agent_scratchpad"), # 工具调用痕迹 ]) //智能体构建 agent = create_tool_calling_agent(self.llm, self.tools, prompt)

2.5.主要对话接口

对话调用输入前端传入的用户信息,返回智能体结果

def chat( self, message: str, chat_history: list[BaseMessage] | None = None, ) -> dict[str, Any]: """主聊天接口""" if chat_history is None: chat_history = [] try: result = self.agent_executor.invoke({ "input": message, "chat_history": chat_history, }) return { "success": True, "response": result.get("output", ""), } except Exception as e: return { "success": False, "error": str(e), "response": f"处理请求时发生错误:{str(e)}", }
http://www.jsqmd.com/news/881852/

相关文章:

  • LLM推理解耦技术:提升大型语言模型推理效率的关键方法
  • IDEA 2026.2 EAP 2 新特性:Live Templates 升级
  • 湖州市黄金回收白银回收铂金回收彩金回收门店优选+2026年最新黄金回收TOP5排行榜及联系方式推荐 - 盛世金银回收
  • 基于大语言模型的表位智能设计与筛选:epiGPTope项目解析
  • 别再只会用`echo mem > /sys/power/state`了:手把手带你理解Linux内核的三种休眠模式
  • 跨VM RowHammer攻击防御技术与DRAM安全研究
  • DeepSeek V3多模态扩展能力首曝(仅限首批合作机构验证数据)
  • Java YOLO推理精度漂移终极解决方案:从预处理到后处理的工业级优化指南
  • ARM SVE架构WHILEGT指令详解与应用优化
  • Rancher 安装与配置文档
  • search_reports 减少AI里Tokens 消耗
  • ARM SME指令集与MOVA指令详解:矩阵运算优化
  • 面试官问我Redis,我背了八股文,他却问我“为什么缓存会雪崩”
  • 基于CNN自编码器的量子态误差缓解:从密度矩阵图像修复到NISQ应用
  • 量子机器学习预测误差:从T/N线性关系到紧致界理论突破
  • 基于Nginx的局域网HTTP Yum源搭建
  • 2025-2026年时余家具电话查询:选购中古风实木家具前请核实资质 - 品牌推荐
  • 2026年智己LS8优势深度解析:家庭SUV续航痛点与实用价值 - 品牌推荐
  • 深度学习MRI加速:DeepFoqus-Accelerate如何实现4倍扫描速度与无损诊断质量
  • 病房钢制门十大品牌有哪些?
  • 2025-2026年尚百年电话查询:定制全铝家居前需核实资质与合同条款 - 品牌推荐
  • 2026年智己LS8优势续航深度分析:家用SUV场景续航焦虑与操控痛点解析 - 品牌推荐
  • Unity 2020.1实战:用UGUI和AudioSource搞定酷狗同款音乐频谱(附完整代码)
  • Go Sidecar 主循环并发化改造:让请求不再排队堵在门口
  • 基于机器学习的癫痫发作检测与预测:从EEG信号处理到LSTM时序建模
  • 纯前端到底要不要学 Java
  • Unity UGUI实战:从零复刻一个带频谱可视化的音乐播放器(附完整源码)
  • Linux系统篇,开发工具(六):文件的编译配置、调试的理解、cgdb和gdb的操作使用
  • 不止于播放:用Unity Video Player的RenderTexture模式,轻松实现游戏内电视、监控屏效果
  • 2026年5月上海搬家公司推荐:TOP5排名评测居民搬家防超时收费市场份额选择指南 - 品牌推荐