news 2026/7/7 20:12:06

第2章:LangChain大模型工具开发(Agent工具能力)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第2章:LangChain大模型工具开发(Agent工具能力)

LangChain_openai实例化大模型

首先我们需要安装LangChain_openai环境

uv add langchain_openai
from langchain_openai import ChatOpenAI import os llm=ChatOpenAI( model="qwen-max", api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", stream = True, ) print(llm)

提示词模版

llm=ChatOpenAI( model="qwen-max", api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", stream=True, ) for chunk in llm.stream("你是谁?"): print(chunk.content, end="", flush=True)

字符串提示词模版PromptTemplate

适用场景:

  • 用于文本补全模型,输入是纯文本(单字符串);
  • 适用于简单的任务,列如生成一段文本,回答问题或者执行命令。

特点:

  • 输入变量插值:通过{}占位符动态替换变量;
  • 模版格式:支持f-string
  • 输出形式:生成一个完整的字符串作为模型输入。

案例:

from langchain_openai import ChatOpenAI from langchain_core.prompts import PromptTemplate import os llm=ChatOpenAI( model="qwen-max", api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) template = PromptTemplate.from_template("今天是{something}") prompt = template.format(something="晴天") print(prompt)

聊天提示词模版(ChatPromptTemplate)

from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate import os llm=ChatOpenAI( model="qwen-max", api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) template = ChatPromptTemplate.from_messages([ ("system", "你是一位{role}专家,擅长回答{domain}领域的问题,简短回答.50个字"), ("user", "用户提问{question},请给出一个回答"), ] ) prompt = template.format_messages( role = "编程专家", domain = "编程", question = "如何使用langchain进行编程" ) print(prompt) print(llm.invoke( prompt).content)

消息体的抽象和复用

ChatMessagePromptTemplate可以结合ChatPromptTemplate使用,同时对提示词模版和消息体进行抽象和复用

from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate,SystemMessagePromptTemplate import os llm=ChatOpenAI( model="qwen-max", api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) system_message = SystemMessagePromptTemplate.from_template( template = "你是一位{role}专家,擅长回答{domain}领域问题,请给出一个回答.50个字以内", role = "system" ) user_message = SystemMessagePromptTemplate.from_template( template = "用户提问{question},请给出一个回答", role = "user" ) template = ChatPromptTemplate.from_messages([ system_message, user_message ] ) prompt = template.format_messages( role = "编程专家", domain = "编程", question = "如何使用langchain进行编程" ) print(prompt) print(llm.invoke( prompt).content)

少样本提示词模版(FewShotPromptTemplate)

使用场景:

  • 用于,在提示中包含示例,帮助模型理解任务;
  • 适用于复杂任务(如翻译,分类,推理),需要通过示例引导模型行为。

特点:

  • 示例嵌入:通过examples参数提供示例输出和输入;
  • 动态示例选择:支持ExampleSelector动态选择最相关的示例;
  • 模版格式:通过包含前缀(Prefix),示例(Examples)和后缀(Suffix)。
from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, FewShotPromptTemplate, \ PromptTemplate import os llm=ChatOpenAI( model="qwen-max", api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) example = [ { "input": "good night", "output": "晚上好" }, { "input": "good morning", "output": "早上好" } ] example_template = "输入:{input}\n 输出:{output}" shot_prompt = FewShotPromptTemplate( examples=example, example_prompt=PromptTemplate.from_template(example_template), prefix = "请将输入的英文翻译成中文", suffix = "输入:{text}\n输出:", input_variables = ["text"], ) prompts = shot_prompt.format(text="Thank") print(llm.invoke(prompts).content)

总结对比

常见模版类特性和使用场景对比

子类

使用模版类型

输入类型

主要用途

PromptTemplate

文本补全模型

单字符串

生成单轮文本任务的提示

ChatPromptTemplate

聊天模型

多消息列表

模拟多轮对话或者角色扮演

FewShotPromptTemplate

所以模型

包含示例的模版

通过示例引导模型完成复杂任务

链式调用大模型

我们可以使用管道符:|进行链式调用大模型

from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, FewShotPromptTemplate, \ PromptTemplate import os llm=ChatOpenAI( model="qwen-max", api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) example = [ { "input": "good night", "output": "晚上好" }, { "input": "good morning", "output": "早上好" } ] example_template = "输入:{input}\n 输出:{output}" shot_prompt = FewShotPromptTemplate( examples=example, example_prompt=PromptTemplate.from_template(example_template), prefix = "请将输入的英文翻译成中文", suffix = "输入:{text}\n输出:", input_variables = ["text"], ) chain = shot_prompt | llm res = chain.invoke({"text": "Thank"}) print(res.content)

自定义工具全流程开发

import sys import os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from app.bailian.common import chain, shot_prompt, llm from langchain_core.tools import Tool from langchain_core.messages import HumanMessage def add(a,b): return a+b add_tool = Tool( func=add, name="add", description="add two numbers" ) llm_with_tools = llm.bind_tools([add_tool]) chain = shot_prompt | llm_with_tools input_msg = HumanMessage(content="计算1+1的结果") res = chain.stream(input=[input_msg]) for chunk in res: if hasattr(chunk, 'tool_calls') and chunk.tool_calls: for tool_call in chunk.tool_calls: print(tool_call) args = tool_call["args"] print(args) func = tool_call["name"] print(func) if func == "add": print(f"计算结果:{add(float(args['a']), float(args['b']))}")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 18:20:04

单向循环链表

1.如何判断有头结点的链表是否有环快(fast)慢(slow)指针:1.设置快慢指针,同时从头结点的后继节点(第一个有效节点)出发。2.快指针每次走两步,慢指针每次走一步&#xff0…

作者头像 李华
网站建设 2026/7/6 23:28:41

SoundFlow 开源 .NET 音频引擎

目录 二、应用场景与案例 三、开发与部署指南 四、社区与生态 五、总结与建议 SoundFlow 是一个功能强大且可扩展的.NET音频引擎,专为跨平台音频处理而设计。它提供了一系列全面的音频播放、录制、处理、分析和可视化功能,所有这些都包含在一个结构良…

作者头像 李华
网站建设 2026/7/7 18:00:33

AS32X601的I2C模块操作EEPROM详解

国科安芯推出的AS32X601系列MCU芯片内置的I2C模块提供了符合工业标准的两线串行制接口,可用于MCU和外部I2C设备的通讯。I2C总线使用两条串行线:串行数据线SDA和串行时钟线SCL。 I2C接口模块实现了I2C协议的标准模式和快速模式,支持多主机I2C总…

作者头像 李华
网站建设 2026/7/7 17:01:02

应用安全 --- WIN安全 之 VMP初体验

Virtual Machine Protect. 虚拟机保护 ,可以将汇编指令转化为自定义指令集,虚拟指令涉及上百万条汇编指令,极大增强pj难度。由win版本的和linux,安卓版本的。他们的软件实现方法和厂家都不一样,但是原理相同。win具体的…

作者头像 李华
网站建设 2026/7/7 11:40:19

【Pytorch】基于LSTM-KAN、BiLSTM-KAN、GRU-KAN、TCN-KAN、Transformer-KAN(各种KAN修改一行代码搞定)的共享单车租赁预测研究(数据可换)附Pytho

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/7/7 4:29:24

计算机Java毕设实战-基于springboot的校园一卡通管理系统的设计与实现支持线下消费,线上服务【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华