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

LangChain教程-、Langchain基础磐

简介AI Agent 不仅仅是一个能聊天的机器人如普通的 ChatGPT而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统更够完成更为复杂的AI场景需求。AI Agent功能根据查阅的资料agent的功能点如下Agent LLM 规划 记忆 工具使用LLM 用于回答推理的AI模型记忆 短期记忆对话历史长期记忆RAG知识库规划 任务的执行流工具 Agent可以调用的外部函数一个简单的Agent案例案例描述agent可以使用两个工具1. 记录公司数据的RAG知识库 2. python精确计算器import osfrom langchain_community.chat_models.tongyi import ChatTongyifrom langchain_community.embeddings import DashScopeEmbeddingsfrom langchain_community.vectorstores import FAISSfrom langchain_core.messages import ToolMessagefrom langchain_core.tools import toolfrom langchain_core.messages import HumanMessage, ToolMessagefrom langchain_core.documents import Documentfrom langchain_text_splitters import RecursiveCharacterTextSplitteros.environ[DASHSCOPE_API_KEY] api_keytooldef calculator(expression: str) - str:计算数学表达式。需要精确计算时使用。参数:expression: 数学算式如 2 2 或 500 * 0.8。返回:str: 计算结果如 4.0 或 400.0。print(f [??? 工具调用] 计算器正在计算: {expression})try:return str(eval(expression))except Exception as e:return f计算错误: {e}tooldef rag_search(query: str) - str:从数据库中搜索与查询公司内部相关的文档包括公司计划名代号截止日期等详细信息。参数:query (str): 要搜索的查询字符串。返回:str: 与查询相关的文档内容。# 从RAG数据库中检索文档raw_text 【公司内部机密代号“深蓝计划”】1. 项目目标开发一款能听懂猫语的翻译器。2. 核心技术基于Transformer的“喵声波”分析算法。3. 团队暗号如果有人问“今天天气怎么样”必须回答“我想吃鱼”。4. 截止日期2026年12月31日。5. 经费预算仅剩50元人民币主要用于购买猫条。RAG_PATH faiss_indexdocs [Document(page_contentraw_text)]text_splitter RecursiveCharacterTextSplitter(chunk_size25, chunk_overlap5)split_docs text_splitter.split_documents(docs)embeddings DashScopeEmbeddings(modeltext-embedding-v1)if os.path.exists(RAG_PATH):print(公司内部数据库已存在)ragdb FAISS.load_local(RAG_PATH, embeddings, allow_dangerous_deserializationTrue)else:print(创建公司内部数据库)ragdb FAISS.from_documents(split_docs, embeddings)ragdb.save_local(RAG_PATH)return \n\n.join(doc.page_content for doc in ragdb.similarity_search(query, k2))def run_agent(query:str):#初始化模型tool_maps{rag_search: rag_search,calculator: calculator}llm ChatTongyi(model_nameqwen-plus)tool_llm llm.bind_tools(toolslist(tool_maps.values()))message [HumanMessage(contentquery)]for i in range(5):print(*20\n第str(i1)轮\nquery\n*20)response tool_llm.invoke(message)message.append(response)print(f需要调用{len(response.tool_calls)}个方法)if not response.tool_calls:print(最终结果 response.content)returnfor tool_call in response.tool_calls:call_id tool_call[id]func_name tool_call[name]func_args tool_call[args]# 安全检查确保模型调用的工具真的存在if func_name in tool_maps:# 运行 Python 函数tool_func tool_maps[func_name]tool_output tool_func.invoke(func_args)print(工具调用 func_name 参数 str(func_args) 结果 tool_output)else:tool_output f错误: 工具 {func_name} 不存在。message.append(ToolMessage(contenttool_output,tool_call_idcall_id,namefunc_name,))if __name__ __main__:run_agent(公司计划是什么)run_agent(公司的经费预算是多少如果预算预算提高46%后多少)run_agent(今天天气真好)代码解析要实现复杂的工具调用必须实现AI的多轮对话在langchain框架中提供了大量的prompt模板让开发者不需要过度想一些基础的prompt实现。上面代码的执行流程如下初始化2个工具函数-绑定LLM与工具-通过循环进行多轮对话初始化2个工具函数这里的rag_search上一篇文章讲了具体实现这里就不废话了。tooldef calculator(expression: str) - str:计算数学表达式。需要精确计算时使用。参数:expression: 数学算式如 2 2 或 500 * 0.8。返回:str: 计算结果如 4.0 或 400.0。print(f [??? 工具调用] 计算器正在计算: {expression})try:return str(eval(expression))except Exception as e:return f计算错误: {e}tooldef rag_search(query: str) - str:......工具函数的格式主要有3个方面工具修饰 利用tool修饰器修饰函数的描述 这里放函数的描述大模型通过这个描述定位工具因此这部分必须详细可以参考上面:函数的描述函数的参数例子函数的返回例子工具的实现 返回值要是字符串如下tooldef func_name(arg) - str:描述......绑定LLM与工具工具的绑定非常的简单只需要简单的bind_tools类方法就行tool_maps{rag_search: rag_search,calculator: calculator}llm ChatTongyi(model_nameqwen-plus)tool_llm llm.bind_tools(toolslist(tool_maps.values()))通过循环进行多轮对话重点工具的调用流程提示词-LLM-要调用的工具-LLM-结果message [HumanMessage(contentquery)]for i in range(5):print(*20\n第str(i1)轮\nquery\n*20)response tool_llm.invoke(message)message.append(response)print(f需要调用{len(response.tool_calls)}个方法)if not response.tool_calls:print(最终结果 response.content)returnfor tool_call in response.tool_calls:call_id tool_call[id]func_name tool_call[name]func_args tool_call[args]# 安全检查确保模型调用的工具真的存在if func_name in tool_maps:# 运行 Python 函数tool_func tool_maps[func_name]tool_output tool_func.invoke(func_args)print(工具调用 func_name 参数 str(func_args) 结果 tool_output)else:tool_output f错误: 工具 {func_name} 不存在。message.append(ToolMessage(contenttool_output,tool_call_idcall_id,namefunc_name,))在调用bind_tools方法后大模型的返回对象会多出tool_calls字段的数组数据用于存放需要调用工具的参数函数名在调用函数后将调用函数的结果封装成ToolMessage传入再继续调用大模型。注意在调用LLM时可能LLM会不断要求Tool由此可能发生死循环因此要限制循环次数。安全与审思风险评估近些年ai提示词注入频频发生根据上面的案例tooldef calculator(expression: str) - str:计算数学表达式。需要精确计算时使用。参数:expression: 数学算式如 2 2 或 500 * 0.8。返回:str: 计算结果如 4.0 或 400.0。print(f [??? 工具调用] 计算器正在计算: {expression})try:return str(eval(expression))except Exception as e:return f计算错误: {e}LLM在调用这个工具时使用了eval这就造成了风险注入点不法分子可能利用这个漏洞获取电脑权限。修复思路修复上面漏洞可以参考以下几个思路通过指令提示词让LLM忽略并终止危险代码调用该函数在函数中用正则匹配危险代码或设置白名单替换eval函数将其换为更加安全的方法如手动写死运算墒究郝苯

相关文章:

LangChain教程-、Langchain基础磐

简介 AI Agent 不仅仅是一个能聊天的机器人(如普通的 ChatGPT),而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统,更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料,agent的…...

OpenClaw安全实践:Gemma-3-12b-it本地化保障敏感数据处理

OpenClaw安全实践:Gemma-3-12b-it本地化保障敏感数据处理 1. 为什么选择本地化部署 去年我在处理一批财务数据时,曾尝试使用某云端大模型服务进行报表分析。当系统提示"您的数据将被传输至第三方服务器进行处理"时,那种对敏感信息…...

性价比高的水泥压力板哪家技术强

在建筑材料市场中,水泥压力板凭借其诸多优势,如防火、防潮、隔音等,成为众多建筑项目的理想选择。对于追求性价比的客户来说,选择一家技术实力强的水泥压力板品牌至关重要。兴达成就是这样一家在市场上具有较高声誉的品牌&#xf…...

StructBERT中文相似度模型效果展示:LCQMC与ChineseSTS精准匹配案例集

StructBERT中文相似度模型效果展示:LCQMC与ChineseSTS精准匹配案例集 1. 引言:当AI能读懂句子的“言外之意” 你有没有遇到过这样的场景?在搜索引擎里输入一个问题,结果返回的答案和你问的完全不是一回事。或者,你想…...

智能营销新纪元:揭秘星图销冠系统如何用AI自动化重塑企业获客生态

在数字化转型浪潮席卷各行各业的今天,企业获客成本持续攀升,传统营销方式疲态尽显。寻找一家真正专业AI企业、服务好AI服务商,引入一套能打通公域引流与私域转化全链路的智能系统,已成为众多市场决策者的核心诉求。市场上声称能提…...

如何划分接口文档?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快1、首先最主要的就是要分析接口测试文档,每一个公司的测试文档都是不一样的。具体的就要根据自己公司的接口而定,里面缺少的内容自己需要与开…...

OpenClaw性能调优实战:提升Kimi-VL-A3B-Thinking多模态响应速度的5个技巧

OpenClaw性能调优实战:提升Kimi-VL-A3B-Thinking多模态响应速度的5个技巧 1. 问题背景与性能瓶颈分析 最近我在本地部署了Kimi-VL-A3B-Thinking多模态模型,并通过OpenClaw与之对接,构建了一个自动化图文处理的工作流。但在实际使用中发现&a…...

Glide:Android图片加载的瑞士军刀,真的有这么神?

Glide:Android图片加载的瑞士军刀,真的有这么神? Glide 是什么,为何选择它 在 Android 开发的世界里,图片加载是一个绕不开的重要环节。想象一下,在一个社交类 APP 中,用户的头像、发布的照片&a…...

基于Arm Cortex-M7内核GD32H7

基于Arm Cortex-M7内核,主频高达750MHz,并配备了高速大容量内存架构,旨在以“超高算力”与“实时通信”能力,为伺服控制、数字电源、智能家居(885478)等下一代智能装备提供核心硬件基础。 性能铁三角&#…...

查老板信息免费?3款工具深度功能对比(附避坑指南)

查老板信息免费的方法有很多,但大多数人都只停留在基础工商信息层面。真正能免费查到深度信息(关联企业、风险记录、AI解读)的工具其实不多,我最近亲测了几款常用工具,发现风鸟企业查询平台在免费深度功能方面表现突出…...

沈阳户外路灯厂家哪家好

大家好,我是你们的老朋友小李。今天咱们聊聊沈阳的户外路灯市场,尤其是哪家厂家值得信赖。在众多品牌中,中领乾路灯凭借其卓越的产品质量和贴心的服务,逐渐成为了行业的佼佼者。接下来,我会从几个方面来详细分析一下&a…...

企业为什么开始用小程序替代官网?

企业为什么开始用小程序替代官网?一、核心结论企业开始用小程序替代传统官网,本质上不是“技术替代”,而是获客方式与用户行为的变化。当用户从“搜索访问网站”转向“在平台内直接完成浏览与交易”时,小程序在转化效率与使用路径上更具优势…...

Claude Skills工作原理介绍(SKILL.md、available_skills、渐进式加载:三层上下文架构、最少惊讶原则)

文章目录Claude Skills 是如何工作的?什么是 Claude Skills?Skills 的核心结构触发机制:Claude 如何决定"要不要查手册"?渐进式加载:三层上下文架构Skills 的生命周期:从创建到迭代1. 捕捉意图2.…...

一文吃透 TDengine:对比主流时序库、核心语法与避坑指南

前言在物联网、工业监控、车联网、能源等场景,时序数据(时间戳 指标 标签)的规模动辄亿级测点、万亿行数据,传统数据库与通用时序库往往陷入 “写不动、查不动、存不起” 的困境。TDengine(涛思数据库)凭…...

LAYONTHEGROUND看

一、什么是requests? requests 是一个用于发送HTTP请求的 Python 库。 它可以帮助你: 轻松发送GET、POST、PUT、DELETE等请求 处理Cookie、会话等复杂性 自动解压缩内容 处理国际化域名和URL 二、应用场景 requests 广泛应用于以下实际场景: …...

2026年AI决胜关键: Harness架构才是碾压对手的终极护城河!

文章指出,在AI领域,单纯依靠大模型参数已经无法决定胜负,真正关键的是Harness架构的稳定性。文章通过实证报告揭示,在底层大模型权重不变的情况下,精巧的Harness能使AI通过率大幅提升。文章详细分析了长任务Agent可能面…...

uniSDK5.06 HBuilder-Integrate-AS 引入 AeroFFmpeg

用Android Studio 导入 unisdk5.06\Android-SDK5.06.82597_20260401\HBuilder-Integrate-AS 工程需要下载 jdk17 安卓SDK通过网盘分享的文件:unisdk5.06.rar 链接: https://pan.baidu.com/s/1cYeW29xsoqIa6lh4wk16FQ?pwdp8ak 提取码: p8ak...

QTableWidget 表格组件渭

7.1 初识三维模型 7.1.1 三维模型的数据载体 随着计算机图形技术的发展,我们或多或少都会见过或者听说过三维模型。笔者始终记得小时候第一次在电视上看到三维动画《变形金刚:超能勇士》的震撼感受;而现在我们已经可以在手机上玩三维游戏《王…...

Infoseek舆情系统决策树:在回应、沉默与引导间寻找最优解

对于许多品牌公关从业者而言,最难熬的时刻并非负面舆情爆发时的焦头烂额,而是事件初露端倪时的犹豫不决。手里攥着Infoseek舆情系统推送的早期预警,看着那条曲线正在缓慢抬头,一个终极难题摆在面前:是立刻回应以求先发…...

LeetCode hot100-114 二叉树展开为链表

class Solution { public:void flatten(TreeNode* root) {if (root nullptr) return;// 先展开左右子树flatten(root->left);flatten(root->right);// 保存右子树TreeNode* right root->right;// 将左子树移到右边root->right root->left;root->left nul…...

当AI能做一切,我们还剩下什么?

许多人以为,数字化就是用机器取代人。算法越来越聪明,自动化越来越普及,人的作用似乎正在被削弱。 事实恰恰相反。 数字化不是人的退场,而是人的升级。技术每向前推进一步,对人的要求就提高一层。机器负责执行&#xf…...

[Refactor]CPP Learn Data Day 馁

一、什么是urllib3? urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你: 发送各种 HTTP 请求(GET, POST, PUT, DELETE等)。 管理连接池,提高网络请求效率。 处理重试和重定向。 支…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具性

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储,而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码,常规方式只能重新配置连接,效率极低。本项目只作为学习研究使用,不做其他…...

Redis:延迟双删的适用边界与落地细节哨

pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...

实体没客流,电商竞争大,服装行业该如何破局?

声明:本文基于笔者在浙江绍兴柯桥区经营小微服装门店的真实业务场景,对一套名为“店有鱼”的零售 SaaS 系统进行技术性复盘。目的在于探讨如何通过数字化工具构建线上线下融合(O2O)的闭环能力,不构成产品推广。背景&am…...

使用 C# 删除 PDF 中的数字签名汹

一、 什么是 AI Skills:从工具级到框架级的演化 AI Skills(AI 技能) 的概念最早在 Claude Code 等前沿 Agent 实践中被强化。最初,Skills 被视为“工具级”的增强,如简单的文件读写或终端操作,方便用户快速…...

应用组策略管理域环境实验指导文档

一、文档概述 本实验指导基于Windows Server 2019域环境,系统讲解组策略的配置、应用规则及场景化落地方法,帮助学员掌握域环境下批量管理用户和计算机的核心技能。所有实验均适配实际企业运维场景,可直接复用到生产环境。 二、实验前置准备 2.1 环境检查清单 域环境部署…...

AI写论文软件哪个最好?精选7款AI论文生成神器,轻松掌握毕业论文!

你是否曾在深夜面对空白文档,为论文框架和文献综述绞尽脑汁?从本科生到博士生,从职场评职称到科研发表,论文写作始终是绕不开的挑战。别担心!如今AI论文写作工具已成为提升效率的利器,尤其是一些专业工具能…...

android java多线程传递数据方式-----使用volatile

public static volatile String is_on"yes"...

OpenClaw排错大全:Qwen3-4B接口超时与网关崩溃解决方案

OpenClaw排错大全:Qwen3-4B接口超时与网关崩溃解决方案 1. 问题背景与诊断准备 上周我在本地部署OpenClaw对接Qwen3-4B模型时,遭遇了典型的"三连击"问题:模型响应超时、网关频繁崩溃、飞书消息推送失败。经过72小时的折腾&#x…...