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

《2026 LangChain零基础入门:用AI应用框架快速搭建智能助手》第6课:Tools 与自定义工具 —— 给AI加上搜索、计算、读文件、调用外部API等能力,让代理更强大

大家好,我是链上杯子(CSDN:链上杯子)。

失业一年了,天天想着怎么翻身。上节课让AI自己决定用工具后,我发现:如果能给它加上更多“手脚”,比如实时搜索网页、读本地笔记、调用天气/股票API,它就真的能帮我干活了。LangChain 的 Tools 系统就是为此设计的——你可以无限扩展工具,让Agent变成一个“万能助手”。第一次看到AI自己上网搜资料再回答问题,感觉像给它开了外挂。

本课目标
学会使用和自定义 LangChain Tools,让Agent拥有外部能力(计算、搜索、文件读写、API调用等)。
学完这节课,你就能为Agent添加任意工具,实现“AI自己去查资料、算数、读笔记”的强大交互。

核心代码实战

1. 内置工具 + 自定义工具(最简单扩展)
fromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportAgentExecutor,create_react_agentfromlangchain_classic.promptsimportPromptTemplatefromlangchain.toolsimporttoolimportdatetime# 初始化模型llm=ChatOpenAI(openai_api_key="",# ←←← 这里替换成你的 DeepSeek API Keyopenai_api_base="https://api.deepseek.com/v1",model="deepseek-chat",temperature=0)# 自定义工具1:当前时间@tooldefget_current_time()->str:"""返回当前日期和时间"""returndatetime.datetime.now().strftime("%Y年%m月%d日 %H:%M:%S")# 自定义工具2:简单计算器(支持加减乘除)@tooldefcalculator(expression:str)->str:"""执行简单的数学表达式计算,例如 '2 + 3 * 4'"""try:returnstr(eval(expression))exceptExceptionase:returnf"计算错误:{str(e)}"# 自定义工具3:模拟搜索本地笔记@tooldefsearch_local_note(keyword:str)->str:"""在本地笔记中搜索关键词,返回匹配内容(模拟)"""# 实际可以换成读文件或向量搜索notes={"失恋":"上次笔记写:失恋后要多运动、多读书、找朋友聊天。","Python":"Python入门建议:先学变量、列表、函数,再学类和模块。"}returnnotes.get(keyword,f"没有找到关于'{keyword}'的笔记。")tools=[get_current_time,calculator,search_local_note]# 使用中文 ReAct Prompt(同上节课)react_prompt=PromptTemplate.from_template("""尽可能好地回答以下问题。你可以使用以下工具: {tools} 请严格按照以下格式回答: 问题:你必须回答的输入问题 思考:你应该始终思考该做什么 行动:要采取的行动,必须是 [{tool_names}] 中的一个 行动输入:行动的输入 观察:行动的结果 ...(思考/行动/行动输入/观察 可以重复 N 次) 思考:我现在知道最终答案了 最终答案:对原始输入问题的最终答案 开始! 问题:{input} 思考:{agent_scratchpad}""")# 创建 Agentagent=create_react_agent(llm,tools,react_prompt)agent_executor=AgentExecutor(agent=agent,tools=tools,verbose=True)# 测试各种问题queries=["现在几点了?","帮我算一下 456 * 789 - 1234 是多少?","我上次笔记里关于失恋写了什么?","今天天气如何?如果热的话建议穿什么?"]forqinqueries:print(f"\n问题:{q}")result=agent_executor.invoke({"input":q})print("AI 回答:",result["output"])

运行后会看到 AI 自己决定:

  • 问时间 → 调用 get_current_time
  • 问计算 → 调用 calculator
  • 问笔记 → 调用 search_local_note
  • 问天气 → 可能直接推理或说没工具(你可以再加天气工具)
2. 真实外部API工具 —— 调用免费天气API
importrequests@tooldefreal_weather(city:str)->str:"""调用真实天气API获取城市当前天气(使用免费接口示例)"""api_key="你的和风天气免费Key"# 注册:https://dev.qweather.com/url=f"https://devapi.qweather.com/v7/weather/now?location={city}&key={api_key}"try:resp=requests.get(url).json()ifresp.get("code")=="200":temp=resp["now"]["temp"]text=resp["now"]["text"]returnf"{city}当前温度{temp}°C,天气:{text}。"else:return"天气查询失败。"exceptExceptionase:returnf"API错误:{str(e)}"tools.append(real_weather)# 重新创建 Agent(工具更新)agent=create_react_agent(llm,tools,react_prompt)agent_executor=AgentExecutor(agent=agent,tools=tools,verbose=True)# 测试result_weather=agent_executor.invoke({"input":"上海现在天气如何?适合穿短袖吗?"})print("天气查询结果:",result_weather["output"])

提示:注册和风天气(qweather.com)免费Key,替换 api_key。其他免费天气API也可替换。

3. 互动版 —— 命令行多工具 Agent
print("=== 多工具 Agent 开始(输入 'quit' 退出) ===")whileTrue:user_input=input("你:").strip()ifuser_input.lower()=="quit":breakresult=agent_executor.invoke({"input":user_input})print("AI:",result["output"])

试试问:“现在几点?帮我算 88 * 99 是多少?再查查北京天气。”

小练习(2 道)

练习1(基础)
复制第1段代码,加一个新工具@tool def get_date() -> str: return datetime.date.today().strftime("%Y年%m月%d日")
测试问:“今天是星期几?后天是几号?”
观察AI是否正确调用工具。

练习2(进阶)
加一个“读文件”工具(参考上节课 read_file)。
问:“读取当前目录下 my_notes.txt 的内容,并告诉我里面有没有提到‘目标’这个词。”
让AI自己决定调用工具并分析结果。

本课小结

本课重点学习了 Tools 系统:@tool 定义自定义工具、添加到 Agent、让AI自动调用。
通过真实API、计算、文件读写等工具,Agent 从“只会聊天”升级到“能干活”。这是构建实用AI助手的必备技能。

下节预告

下一课:RAG 入门 —— 让AI读你的本地文档再回答问题,构建个人知识库助手。

欢迎在评论区贴出你的Agent运行截图、工具调用过程、或任何问题~
如果觉得这篇有用,欢迎点赞或关注,一起玩转 LangChain!

http://www.jsqmd.com/news/506831/

相关文章:

  • 芯片设计EDA工具如何通过百度富文本编辑器实现原理图粘贴?
  • 分期乐额度这样处理才对!安全省心不踩坑 - 可可收
  • 实战指南:用thop库快速计算你的PyTorch模型FLOPs(附移动端优化技巧)
  • OSX-KVM与Proxmox Backup Server集成:10个高效虚拟机备份技巧
  • 从理论到实战:GitHub_Trending/hac/hacktricks技巧全收录
  • 二十、Kubernetes基础-47-kubernetes-1.27-docker-runtime-guide
  • 西门子博图1214C运动控制学习案例:从基础到实战
  • 2026年口碑好的大连全屋定制服务品牌推荐:大连全屋定制方案/大连全屋定制策划/大连全屋定制设计热门推荐 - 行业平台推荐
  • FPGA按键消抖与数码管显示系统设计
  • 免费开发者必看:用Apple ID搞定Xcode真机调试的3种实战姿势
  • 2026年知名的真空排水系统公司推荐:真空负压排水系统厂家推荐 - 行业平台推荐
  • 2026年靠谱的大气除氧器厂家推荐:旋膜式除氧器热门品牌厂家推荐 - 行业平台推荐
  • OWL ADVENTURE新手教程:手把手教你玩转像素风AI识图
  • 2026年热门的手持激光打标机品牌推荐:汽配激光打标机值得信赖厂家推荐(精选) - 行业平台推荐
  • DIY必备:用HM-10蓝牙模块打造无线串口通信(详细AT指令解析)
  • Terragrunt云成本分析:识别资源浪费与优化机会的终极指南
  • 2026CRM排行榜:多款一体云平台对比,打通企业数据孤岛最优解 - jfjfkk-
  • 顶级黑客推荐GitHub_Trending/hac/hacktricks:实战技巧汇总与完整指南
  • PCIe拓扑结构详解:为什么你的Device 0总是找不到?深度解析总线号分配机制
  • DBC、LDF与Excel互转工具升级:矩阵对比功能深度解析
  • 如何用LiveKit Agents构建10个教育领域AI应用案例:从智能辅导到虚拟教师
  • 从《原神》伤害计算到NASA火箭:浮点数在真实世界中的极限挑战
  • Qwen3-32B效果展示:RTX4090D上高质量长文本生成与多轮对话真实案例集
  • Tableau可视化图表百分比显示全攻略:从基础设置到高级技巧(2024版)
  • 如何使用GitHub_Trending/agen/agents构建实时多模态AI应用:完整指南
  • Spyglass Lint检查避坑指南:从SYNTH_5159警告到InferLatch错误的解决方案
  • Stable Yogi Leather-Dress-Collection可视化分析:使用Visio绘制模型服务架构图
  • SpringBoot3与Kafka深度整合:高效消息生产与消费实践
  • disposable-email-domains的自动化运维:监控、告警与自愈机制
  • FPGA片上ROM IP核设计与正弦波发生器实现