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

【langchain库名解析】

目录

一、from langchain_openai import ChatOpenAI

1. 核心功能

2. 典型使用场景

场景 1:直接生成对话回复

场景 3:流式输出(逐词显示结果)

3. 与其他 LangChain 组件的协同

结合提示模板(PromptTemplate)

结合记忆模块(ConversationBufferMemory)

4. 关键参数说明

5. 与直接调用 OpenAI API 的区别

二、from langchain_core.tools import tool

1. 核心用途

2. 基础用法示例

定义工具

通过 Agent 调用工具

3.典型应用场景

4. 核心参数解析

5. 与直接调用函数的区别

三、from langchain.tools.render import render_text_description

1. 核心功能

2.使用示例

3. 高级用法

自定义参数描述

4. 在Agent提示模板中的应用

5. 与其他渲染方法的对比

关键参数说明

四、from langchain_core.output_parsers.json import JsonOutputParser

1、核心功能

2、典型使用场景

3.注意事项

4.总结

五、from langchain_core.tools import tool

1.核心用途

2.示例代码

3.适用场景

六、from langchain.prompts.example_selector import LengthBasedExampleSelector

1、核心功能

2、工作原理

3、关键配置参数

4、典型应用场景


一、from langchain_openai import ChatOpenAI

1. 核心功能

功能说明
模型调用封装 OpenAI 的聊天模型 API,简化调用流程(如身份验证、参数传递)
对话管理支持多轮对话的上下文管理(需结合 Memory 模块)
结构化输入/输出处理消息的格式(如系统指令、用户输入、AI回复的区分)
流式响应支持逐步获取生成结果(streaming),提升实时交互体验
参数控制调整生成参数(如 temperaturemax_tokenstop_p

2. 典型使用场景

场景 1:直接生成对话回复
from langchain_openai import ChatOpenAI# 初始化模型(需设置环境变量 OPENAI_API_KEY)
chat = ChatOpenAI(model="gpt-3.5-turbo")# 生成回复
response = chat.invoke("你好!")
print(response.content)  # 输出:你好!有什么可以帮助你的吗?

场景 2:多轮对话(结合 SystemMessage 和 HumanMessage

from langchain_core.messages import SystemMessage, HumanMessage# 定义系统角色指令
messages = [SystemMessage(content="你是一个专业的技术文档翻译助手"),HumanMessage(content="请将 'API Gateway' 翻译成中文")
]# 调用模型
response = chat.invoke(messages)
print(response.content)  # 输出:API 网关
场景 3:流式输出(逐词显示结果)
chat = ChatOpenAI(model="gpt-4", streaming=True)for chunk in chat.stream("请解释量子计算"):print(chunk.content, end="", flush=True)
# 输出逐词显示:量子计算是一种利用量子力学原理...

3. 与其他 LangChain 组件的协同

结合提示模板(PromptTemplate
from langchain_core.prompts import ChatPromptTemplate# 定义模板
template = ChatPromptTemplate.from_messages([("system", "你是一个{speaker}"),("human", "{query}")
])# 绑定模型生成链
chain = template | chat# 调用链
response = chain.invoke({"speaker": "诗人", "query": "写一首关于春天的诗"})
print(response.content)
结合记忆模块(ConversationBufferMemory
from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()
memory.save_context({"input": "你好"}, {"output": "你好!我是AI助手"})
memory.save_context({"input": "你会编程吗"}, {"output": "我会用Python写代码"})# 从记忆加载历史对话
messages = memory.load_memory_variables({})["history"]
response = chat.invoke(messages + [HumanMessage(content="你擅长什么语言?")])
print(response.content)  # 输出:我擅长使用Python编程。

4. 关键参数说明

参数类型默认值作用
modelstr"gpt-3.5-turbo"指定模型版本(如 "gpt-4")
temperaturefloat0.7控制生成随机性(0-2,值越大越随机)
max_tokensintNone限制生成的最大 token 数量
streamingboolFalse是否启用流式输出
openai_api_keystrNone手动指定 API 密钥(优先从环境变量读取)

5. 与直接调用 OpenAI API 的区别

对比项LangChain 的 ChatOpenAI直接调用 OpenAI API
代码复杂度高度封装,简化调用逻辑需要手动处理 HTTP 请求和响应解析
扩展性可无缝接入 LangChain 的链、代理、记忆等模块需自行实现上下文管理、工具集成等功能
适用场景快速构建复杂应用(如带记忆的对话机器人)简单的一次性请求或原型验证

快速接入 OpenAI 模型:无需处理底层 API 细节

构建模块化应用:轻松结合提示工程、记忆管理、外部工具

实现复杂交互逻辑:如多轮对话、流式响应、参数动态调整

二、from langchain_core.tools import tool

主要作用是通过 装饰器 将普通 Python 函数快速转化为 LangChain 框架可识别的 工具(Tool),使 AI 代理(Agent)能够动态调用这些函数。

1. 核心用途

用途说明
扩展代理能力将自定义函数(如搜索、计算、数据库操作)封装为工具,供代理调用
标准化接口统一工具的描述、参数格式,便于代理理解和使用
集成到工作流工具可被嵌入到 Agent 的决策链中,实现自动化任务分解和执行

2. 基础用法示例

定义工具
from langchain_core.tools import tool@tool
def search_weather(city: str) -> str:"""根据城市名称查询实时天气(示例函数,实际需调用API)"""# 假设这里调用真实天气API(如OpenWeatherMap)return f"{city}:晴,25℃"# 工具会自动生成名称和描述,供Agent理解其功能
print(search_weather.name)      # 输出:search_weather
print(search_weather.description)  
# 输出:search_weather(city: str) -> str - 根据城市名称查询实时天气(示例函数,实际需调用API)
通过 Agent 调用工具
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_openai import ChatOpenAI# 定义工具列表
tools = [search_weather]# 初始化模型和Agent
model = ChatOpenAI(model="gpt-3.5-turbo")
agent = create_tool_calling_agent(model, tools)
agent_executor = AgentExecutor(agent=agent, tools=tools)# 执行任务
result = agent_executor.invoke({"input": "上海现在的天气怎么样?"
})
print(result["output"])  # 输出:上海:晴,25℃

3.典型应用场景

场景工具示例说明
数据查询天气/股票/航班查询工具将 API 调用封装为 Agent 可操作的工具
业务系统集成订单查询、CRM数据更新连接企业内部系统
数学计算计算器、单位转换工具解决数值处理需求
内容生成辅助图片生成、文本摘要扩展生成式 AI 的功能边界

4. 核心参数解析

参数类型作用
namestr自定义工具名称(默认使用函数名)
descriptionstr工具的功能描述(Agent 根据此决定是否调用)
args_schemaPydantic Model定义参数结构和校验规则
return_directbool是否绕过 Agent 直接返回结果(适用于无需后续处理的工具)

5. 与直接调用函数的区别

对比项使用 @tool 封装的工具直接调用普通函数
调用方式通过 Agent 自动决策调用需显式编写调用代码
上下文感知可结合对话历史、用户意图动态触发静态逻辑,无法自适应
错误处理支持 Agent 自动重试或选择替代工具需手动实现异常处理
可扩展性轻松添加/移除工具,无需修改核心逻辑需重构代码以适应新功能
  1. 快速扩展 Agent 能力:将任意功能转化为 AI 可调用的工具

  2. 构建自动化工作流:Agent 根据问题自动选择并组合工具

  3. 降低系统耦合度:工具独立开发,通过标准化接口集成

适合需要 动态任务分解 的场景(如客服系统自动选择查订单、查物流等工具)。

三、from langchain.tools.render import render_text_description

核心作用是将 工具列表(Tools) 转换为 自然语言描述文本,主要用于 生成Agent的系统提示词,帮助大语言模型理解可用工具的功能和调用方式。

1. 核心功能

功能说明
工具描述格式化将工具的 namedescriptionargs 等元数据转换为易读的文本格式
提示工程优化生成标准化的工具说明文本,嵌入到Agent的提示模板中,提升工具调用准确性
调试与日志以友好格式输出工具信息,便于开发者检查工具注册情况

2.使用示例

from langchain_core.tools import tool
from langchain.tools.render import render_text_description#一、定义工具
@tool
def add(a:int,b:int)->int:"""计算加法"""return a+b@tool
def mul(a:int,b:int)->int:"""计算乘法"""return a*b@tool
def dele(a:int,b:int)->int:"""计算减法"""return a-b@tool
def get_weather(location:str,unit:str)->str:"""获取指定地区天气参数:location:地区名称unit:温度单位返回:str:描述当前天气和温度"""return f"{location}的天气20{unit}"#二、注册和管理工具
tools=[add,mul,dele,get_weather]#三、构建工具条件和调用描述
render_tools=render_text_description([add,mul,dele,get_weather])
print(render_tools)

运行结果:

add(a: int, b: int) -> int - 计算加法
mul(a: int, b: int) -> int - 计算乘法
dele(a: int, b: int) -> int - 计算减法
get_weather(location: str, unit: str) -> str - 获取指定地
区天气参数:
location:地区名称
unit:温度单位返回:
str:描述当前天气和温度

3. 高级用法

自定义参数描述

通过 Pydantic 模型增强参数说明:

from pydantic import BaseModel, Fieldclass WeatherArgs(BaseModel):location: str = Field(description="城市名称,如'上海'")unit: str = Field(description="温度单位,可选值:'摄氏度'或'华氏度'")@tool(args_schema=WeatherArgs)
def get_current_weather(location: str, unit: str) -> str:# 实现代码...# 渲染后参数描述会更清晰
tool_descriptions = render_text_description([get_current_weather])
print(tool_descriptions)

运行示例

get_current_weather: 获取指定位置和单位的当前天气
参数:- location (str): 城市名称,如'上海'- unit (str): 温度单位,可选值:'摄氏度'或'华氏度'

4. 在Agent提示模板中的应用

结合 SystemMessagePromptTemplate 构建完整提示:

from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate# 生成工具描述文本
tool_descriptions = render_text_description(tools)# 构建系统提示模板
system_prompt = SystemMessagePromptTemplate.from_template("你是一个智能助手,可以调用以下工具:\n\n{tools}\n\n""每次调用工具时,请严格按照参数要求提供数据。"
)# 最终提示组合
prompt = ChatPromptTemplate.from_messages([system_prompt,("user", "{input}"),
])

5. 与其他渲染方法的对比

方法输出格式典型应用场景
render_text_description()纯文本Agent提示词、命令行日志
render_text_description_as_markdown()Markdown文档生成、UI展示
render_tool_schemas()JSON Schema结构化数据交换、前端集成

关键参数说明

参数类型默认值说明
toolsList[Tool]必填需要渲染的工具列表
args_onlyboolFalse是否只渲染参数部分(True时隐藏工具描述,仅显示参数)
tool_namesList[str]None指定渲染特定名称的工具(None时渲染全部)

使用 render_text_description 可实现:

  1. 工具能力可视化:将代码中的工具定义转化为自然语言

  2. 提示词标准化:确保Agent准确理解工具用途和调用方式

  3. 开发效率提升:快速检查工具注册状态,减少调试成本

这是构建可靠 Agent 工作流的关键步骤,尤其在需要动态管理大量工具的场景中(如插件系统)。

四、from langchain_core.output_parsers.json import JsonOutputParser

在 LangChain 中的作用是 将语言模型(LLM)输出的 JSON 格式文本解析为结构化数据(如 Python 字典或对象),以便后续程序处理。

1、核心功能

  1. JSON 解析
    将模型返回的 JSON 字符串(如 '{"name": "Alice", "age": 30}')转换为 Python 字典或其他数据结构,避免手动处理字符串解析。

  2. 结构化输出
    确保链(Chain)的最终输出是结构化数据,而非非结构化文本,便于与其他工具或 API 集成。

  3. 验证与兼容性
    可结合 Pydantic 模型(需其他组件配合)验证 JSON 结构,确保字段和类型符合预期,若不符合会抛出错误。

2、典型使用场景

  • 链式调用末尾:作为链的最后一步,解析模型的 JSON 响应。

from langchain_core.output_parsers.json import JsonOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI# 1. 创建解析器
parser = JsonOutputParser()# 2. 提示词要求模型返回 JSON
prompt = PromptTemplate(template="回答为 JSON,包含 'name' 和 'age': {question}",input_variables=["question"],
)# 3. 构建链:模型 → 解析器
chain = prompt | ChatOpenAI() | parser# 4. 调用链,获取结构化结果
result = chain.invoke({"question": "Alice 的年龄是多少?"})
# 输出: {"name": "Alice", "age": 30}
  • 容错处理:若模型返回非标准 JSON(如额外文本),需额外步骤(如正则提取)预处理,再使用解析器。


3.注意事项

  1. 依赖模型协作:需在提示词中明确要求模型生成 JSON,否则可能解析失败。

  2. 错误处理:建议用 try-except 捕捉解析异常,处理格式错误。

  3. 高级验证:结合 PydanticOutputParser 可实现更严格的字段和类型校验。


4.总结

JsonOutputParser 简化了从语言模型获取结构化数据的过程,是构建可靠 LangChain 应用的关键组件,尤其适用于需要机器可读输出(如 API 调用、数据流水线)的场景。

五、from langchain_core.tools import tool

作用是导入一个装饰器 @tool,它允许你将普通的 Python 函数快速转换为 LangChain 可调用的工具(Tool)。这些工具可以被 LangChain 的代理(Agent)、链(Chain)等组件直接调用,以完成特定任务(如调用 API、计算、查询等)。

1.核心用途

  1. 简化工具定义:通过 @tool 装饰器,无需手动编写复杂的工具类,只需装饰一个函数,即可将其集成到 LangChain 的工作流中。

  2. 赋予自然语言描述:工具的函数名和文档字符串会被自动解析,让语言模型(如 ChatGPT)理解工具的功能和调用方式。


2.示例代码

from langchain_core.tools import tool
'''
库名解析:langchain_core.tools
专门用于定义和管理 AI 工具(Tools),其核心作用是
让开发者能够轻松创建、描述和集成可被大型语言模型
(LLM)调用的功能模块1. 工具标准化定义
通过 @tool 装饰器,将普通 Python 函数转化为 LangChain 工具自动生成工具元数据,包括:名称(函数名)描述(函数文档字符串首段)参数结构(类型注解 + 参数描述)执行逻辑(函数本体)
'''# AI 可读的接口
@tool
def multiply(first_int: int, second_int: int) -> int:"""对两个整数进行乘法运算"""return first_int * second_int@tool
def add(first_int: int, second_int: int) -> int:"""对两个整数进行加法运算"""return first_int + second_int@tool
def get_current_weather(location: str, unit: str) -> str:"""获取指定位置和单位的当前天气参数:location (str): 位置的名称unit (str): 温度单位(例如:摄氏度、华氏度)返回:str: 描述当前天气和温度的字符串"""return f"It's 20 {unit} in {location}"#工具注册与管理
tools = [multiply, add, get_current_weather]print("\n名称1: ", multiply.name)
print("描述1: ", multiply.description)
print("参数1: ", multiply.args)print("\n名称2: ", add.name)
print("描述2: ", add.description)
print("参数2: ", add.args)print("\n名称3: ", get_current_weather.name)
print("描述3: ", get_current_weather.description)
print("参数3: ", get_current_weather.args)'''
完整属性结构:
基础元数据:name、description
参数配置:args(简化参数列表)、args_schema(详细结构)
执行控制:return_direct
模式描述:schema(兼容 OpenAI 函数调用格式)
运行时方法:run()、arun()
'''

运行结果

名称1:  multiply
描述1:  对两个整数进行乘法运算
参数1:  {'first_int': {'title': 'First Int', 'type': 'integer'}, 'second_int': {'title': 'Second Int', 'type': 'integer'}}名称2:  add
描述2:  对两个整数进行加法运算
参数2:  {'first_int': {'title': 'First Int', 'type': 'integer'}, 'second_int': {'title': 'Second Int', 'type': 'integer'}}名称3:  get_current_weather
描述3:  获取指定位置和单位的当前天气参数:
location (str): 位置的名称
unit (str): 温度单位(例如:摄氏度、华氏度)返回:
str: 描述当前天气和温度的字符串
参数3:  {'location': {'title': 'Location', 'type': 'string'}, 'unit': {'title': 'Unit', 'type': 'string'}}

3.适用场景

  • 快速将现有函数(如数据库查询、API 调用)接入 LangChain 代理。

  • 构建自定义工具扩展代理的能力(例如:股票查询、邮件发送等)。

如果需要更复杂的工具(如异步调用、自定义错误处理),可以继承 BaseTool 类手动实现,但 @tool 装饰器在简单场景下更高效。


六、from langchain.prompts.example_selector import LengthBasedExampleSelector

用于 ​​动态优化提示长度​​ 的核心工具,其核心功能是通过智能选择示例数量,确保提示文本不超过大语言模型的上下文窗口限制。

1、核心功能

  1. ​动态示例裁剪​
    根据用户输入的实时长度,自动调整包含的示例数量:

    • ​短输入​​:加载更多示例(如输入“happy”时加载全部5个示例)
    • ​长输入​​:减少示例数量(如输入超长句子时仅保留1个示例)
      原理:通过计算 输入长度 + 示例渲染长度 是否超过 max_length 阈值,动态筛选示例
  2. ​防止上下文溢出​
    避免因示例过多导致提示文本被截断,确保模型接收完整信息。

example_selector = LengthBasedExampleSelector(examples=examples,example_prompt=example_prompt,max_length=25  # 总字符数限制
)

超过该阈值时,系统会从后向前剔除示例。


2、工作原理

  1. ​示例渲染计算​
    将每个示例通过 example 模板格式化为字符串,计算其字符总数。例如:

# 示例模板
template="Input: {input}\nOutput: {output}"  # 单示例渲染后约20字符

2.动态选择算法​

  • 优先保留与当前输入长度互补的示例
  • 按 输入长度 + Σ示例长度 ≤ max_length 的规则迭代选

3、关键配置参数

参数作用典型值
max_length总字符数上限(含输入+示例)25-200
get_text_length自定义长度计算函数lambda x: len(x.split())(按单词数)
example_prompt示例格式化模板需与任务逻辑匹配

4、典型应用场景

  1. ​多轮问答优化​
    在需要展示推理过程的问答中,动态控制示例数量(如用户提供的反义词生成场景)。

  2. ​长文本处理​
    处理包含复杂描述的输入时(如客服工单分类),避免示例挤占有效输入空间。

  3. ​跨语言任务​
    混合不同语言示例时,通过长度控制平衡多语言信息密度。



http://www.mrgr.cn/news/98191.html

相关文章:

  • vue周边库安装与开发者工具(vue系列二)
  • 学习MySQL的第八天
  • Unity 动画
  • Compose笔记(十六)--ExoPlayer
  • 数据结构day05
  • Git版本管理系列:(三)远程仓库
  • OpenHarmony5.0.2 音频audio适配
  • 网络机顶盒怎么连接WiFi-机顶盒连接wifi攻略,乐看家桌面轻松畅享网络视听
  • C++初阶-inline的使用
  • 09-设计模式企业场景 面试题-mk
  • PHM学习软件|PHM预测性维护系统
  • 『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解
  • 深入理解 RxSwift 中的 Driver:用法与实践
  • Ubuntu 22.04 AI大模型环境配置及常用工具安装
  • 单片机实现多线程的方法汇总
  • dify windos,linux下载安装部署,提供百度云盘地址
  • 快速上手Linux联网管理
  • 库学习04——numpy
  • 【笔记ing】AI大模型-02开发环境搭建
  • 【论文阅读】RMA: Rapid Motor Adaptation for Legged Robots