【LLM】Langchain框架开发应用总结
Langchain 常用组件以及包含的子模块常用组件OpenAI langchain-openai Downloads per month PyPI - Latest version[AzureChatOpenAI,AzureOpenAI,AzureOpenAIEmbeddings,ChatOpenAI,OpenAI,OpenAIEmbeddings,__all__,__builtins__,__cached__,__doc__,__file__,__loader__,__name__,__package__,__path__,__spec__,chat_models,custom_tool,data,embeddings,llms,tools]tools1. 直接是函数的形式只能由Agent自主决策调用# 工具定义defget_weather(city:str)-str:获取指定城市的实时天气信息 模拟天气数据实际项目中调用天气 API 这个工具可以查询中国主要城市的天气情况包括温度、天气状况和空气质量。 Args: city: 城市名称支持北京、上海、成都等 Returns: 包含天气详情的字符串 weather_database{北京:{condition:晴天,temp_range:15-25°C,aqi:优,humidity:45%,wind:东南风2级,suggestion:适合户外活动,icon:☀️},上海:{condition:多云,temp_range:18-28°C,aqi:良,humidity:65%,wind:东风3级,suggestion:空气质量良好,icon:⛅},成都:{condition:多云,temp_range:16-24°C,aqi:中,humidity:75%,wind:无持续风向1级,suggestion:空气质量一般,icon:⛅}}ifcitynotinweather_database:returnf❌ 抱歉暂时无法查询{city}的天气信息。\n支持的城市北京、上海、成都dataweather_database[city]resultf{data[icon]}{city}天气预报 ━━━━━━━━━━━━━━━━━━━━━━ • 天气状况{data[condition]}• 温度范围{data[temp_range]}• 空气质量{data[aqi]}• 湿度{data[humidity]}• 风力{data[wind]}• 建议{data[suggestion]}━━━━━━━━━━━━━━━━━━━━━━ 数据更新时间{datetime.now().strftime(%Y-%m-%d %H:%M)}returnresult.strip()# 在agent中传入工具a_gentcreate_agent(modelllm,#agentAgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,#verboseTrue,toolstools,system_prompt你是一个周内助手能自动分析输入需求自动调用对应工具精准查询并按优好的方式返回回答。,)inputs{messages:[{role:user,content:成都现在的天气如何}]}resulta_gent.invoke(inputs)# 使用函数作为tool时只能使用agent自主调用final_messageresult[messages][-1]print(f查询结果{final_message.content})使用函数作为tool时只能使用agent自主调用2. 使用tool装饰器使用装饰器可以直接通过tools方法名通过.invoke(参数)调用fromlangchain_core.toolsimporttooltooldefget_current_time(timezone:strAsia/Shanghai)-str:获取当前时间和日期 Args: timezone: 时区默认为 Asia/Shanghai北京时间 Returns: 格式化的时间信息 nowdatetime.now()weekdays[一,二,三,四,五,六,日]weekdayweekdays[now.weekday()]resultf 当前时间信息 ━━━━━━━━━━━━━━━━━━━━━━ 日期{now.year}年{now.month}月{now.day}日 星期星期{weekday}⏰ 时间{now.strftime(%H:%M:%S)} 时区{timezone}━━━━━━━━━━━━━━━━━━━━━━ returnresult.strip()# tool装饰器方法测试resultget_current_time.invoke(北京)print(result)# 输出: 晴天25°C# 查看工具信息print(f工具名称:{get_current_time.name})print(f工具描述:{get_current_time.description})print(f参数结构:{get_current_time.args})3. 复杂的装饰器fromlangchain_core.toolsimporttoolfromtypingimportOptionaltooldefsearch_database(query:str,category:Optional[str]None)-str: 在数据库中搜索信息 Args: query: 搜索关键词 category: 可选的分类过滤器如科技、健康、教育 database{科技:[人工智能正在改变世界,5G技术的应用],健康:[健康饮食的重要性,运动与长寿的关系],教育:[在线学习的趋势,终身学习的价值]}results[]ifcategoryandcategoryindatabase:foritemindatabase[category]:ifquery.lower()initem.lower():results.append(f[{category}]{item})else:forcat,itemsindatabase.items():foriteminitems:ifquery.lower()initem.lower():results.append(f[{cat}]{item})ifresults:return找到以下结果:\n\n.join(results)else:returnf没有找到关于 {query} 的结果4. 需要更多参数控制时fromlangchain_core.toolsimportBaseToolfrompydanticimportBaseModel,FieldfromtypingimportType# 定义输入参数结构classCalculatorInput(BaseModel):left_number:intField(description运算符左侧数字如 1)operator:strField(description二目运算符如 /-/*/%)right_number:intField(description运算符右侧数字如 2)classCalculator2D(BaseTool):name:strtwo-dimensional operation calculatordescription:str执行二目数学计算args_schema:Type[BaseModel]CalculatorInputdef_run(self,left_number:int,operator:str,right_number:int)-str:同步执行try:expressionf{left_number}{operator}{right_number}resulteval(expression)returnf计算结果:{expression}{result}exceptExceptionase:returnf计算错误:{str(e)}asyncdef_arun(self,left_number:int,operator:str,right_number:int)-str:异步执行可选实现expressionf{left_number}{operator}{right_number}returnself._run(expression)# 使用calcCalculator2D()resultcalc.invoke({left_number:123,operator:,right_number:456})print(result)模型初始化方法from langchain_openai import ChatOpenAIllm ChatOpenAI(model“deepseek-chat”,api_keyos.environ.get(‘DEEPSEEK_API_KEY’),base_url“https://api.deepseek.com”,)from langchain.chat_models import init_chat_modelmodel init_chat_model(“claude-sonnet-4-5-20250929”,temperature0.5,timeout10,max_tokens1000)2025年12月草稿

相关新闻

Hypothesis API 风格指南:为属性测试库设计一致、易用的策略 API

Hypothesis API 风格指南:为属性测试库设计一致、易用的策略 API

测试开发工具 【免费下载链接】hypothesis The property-based testing library for Python 项目地址: https://gitcode.com/gh_mirrors/hy/hypothesis 点击查看 免费下载 Hypothesis 是一个基于属性的 Python 测试库(property-based testing library&a…

2026/9/25 8:59:16 阅读更多 →
Atlas 300V Pro 24G推理加速卡实战:YOLO模型部署全流程解析

Atlas 300V Pro 24G推理加速卡实战:YOLO模型部署全流程解析

1. Atlas 300V Pro 24G 到底是什么性质的卡1.1 它和 GPU、普通计算卡不是一回事最近有不少做视觉、做边缘智能的朋友在讨论“atlas”,尤其“atlas 300v 24g 是运算加速卡吗”这个问题反复出现。我先给一个直接结论:Atlas 300V Pro 24G 确实是运算加速卡&…

2026/9/25 8:59:16 阅读更多 →
昇腾Atlas 300V实战:YOLO模型部署与推理全流程解析

昇腾Atlas 300V实战:YOLO模型部署与推理全流程解析

提起“atlas”,搞 AI 推理的人第一反应可能不是古希腊神话里的擎天神,而是华为昇腾生态里那块低调但实用的 Atlas 加速卡。特别是最近被反复问到的 Atlas 300V 24G,很多人一眼看到“24G”这个数字,下意识以为是像游戏显卡那样的大…

2026/9/25 8:59:16 阅读更多 →

最新新闻

Atlas 300V 24G实战:驱动安装到YOLO部署与性能调优

Atlas 300V 24G实战:驱动安装到YOLO部署与性能调优

手头正好在做一批视频分析设备的选型,测了好几块加速卡之后,我把Atlas 300V 24G留在了机房里长期跑业务。这篇文章不打算复述一遍官方文档里的参数表,而是把从拿到卡开始,装驱动、转模型、跑通YOLO、再优化吞吐的完整路径拆给你看…

2026/9/25 9:35:38 阅读更多 →
「智能体」基于Trae与Todoist的职场效率革命:TaoToken统一Key接入MCP配置实战

「智能体」基于Trae与Todoist的职场效率革命:TaoToken统一Key接入MCP配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 9:35:38 阅读更多 →
昇腾Atlas 300V 24G深度解析:NPU加速卡上的YOLO实战部署

昇腾Atlas 300V 24G深度解析:NPU加速卡上的YOLO实战部署

最近在后台被问到最多的一句话是:"atlas 300v 24g 是运算加速卡吗"。问这个问题的,多半是刚接触昇腾生态的开发者,之前在GPU上跑熟了YOLO,突然拿到一块Atlas 300V 24G,看名字里带个"V"&#xff0c…

2026/9/25 9:35:38 阅读更多 →
Linux dhcpd超全详解:原理、配置、排错与高可用实战

Linux dhcpd超全详解:原理、配置、排错与高可用实战

1. 为什么说 dhcpd 是 Linux 网络服务里“最沉默也最致命”的命令?在运维现场,我见过太多次这样的场景:一台新上架的 CentOS 服务器,网络配置明明写得清清楚楚,ip addr show显示网卡 UP、IP 地址也配好了,但…

2026/9/25 9:35:38 阅读更多 →
数据中心800V高压直流供电技术解析与工程实践

数据中心800V高压直流供电技术解析与工程实践

字节跳动突然对八百伏高压直流动手,这条消息在圈内传开后,不少人的第一反应都是“终于来了”。做数据中心配电的人都清楚,过去几年机柜功率密度一路飙升,传统的交流UPS供电链路已经明显吃紧,尤其在AI训练集群面前&…

2026/9/25 9:35:38 阅读更多 →
treg CLI Agent 实战:OpenRouter 与 MCP 协议集成指南

treg CLI Agent 实战:OpenRouter 与 MCP 协议集成指南

1. 从“treg”这个标题说起:一个被低估的CLI Agent入口第一次看到“treg”这个词,大概率会一头雾水。它不像codex cli、claude cli那样自带说明,也不像openrouter那样有明确的品牌指向。但把热词摊开来看——treg、OpenRouter、agent、CLI、M…

2026/9/25 9:34:37 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →