【langchain库名分析】

打印 上一主题 下一主题

主题 1485|帖子 1485|积分 4455

目录

一、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_openai import ChatOpenAI

1. 核心功能

功能说明模型调用封装 OpenAI 的谈天模型 API,简化调用流程(如身份验证、参数通报)对话管理支持多轮对话的上下文管理(需团结 Memory 模块)结构化输入/输出处理消息的格式(如系统指令、用户输入、AI回复的区分)流式相应支持渐渐获取生成效果(streaming),提拔实时交互体验参数控制调解生成参数(如 temperature、max_tokens、top_p) 2. 典范使用场景

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

  1. from langchain_openai import ChatOpenAI
  2. # 初始化模型(需设置环境变量 OPENAI_API_KEY)
  3. chat = ChatOpenAI(model="gpt-3.5-turbo")
  4. # 生成回复
  5. response = chat.invoke("你好!")
  6. print(response.content)  # 输出:你好!有什么可以帮助你的吗?
复制代码
场景 2:多轮对话(团结 SystemMessage 和 HumanMessage)
  1. from langchain_core.messages import SystemMessage, HumanMessage
  2. # 定义系统角色指令
  3. messages = [
  4.     SystemMessage(content="你是一个专业的技术文档翻译助手"),
  5.     HumanMessage(content="请将 'API Gateway' 翻译成中文")
  6. ]
  7. # 调用模型
  8. response = chat.invoke(messages)
  9. print(response.content)  # 输出:API 网关
复制代码
场景 3:流式输出(逐词显示效果)

  1. chat = ChatOpenAI(model="gpt-4", streaming=True)
  2. for chunk in chat.stream("请解释量子计算"):
  3.     print(chunk.content, end="", flush=True)
  4. # 输出逐词显示:量子计算是一种利用量子力学原理...
复制代码
3. 与其他 LangChain 组件的协同

团结提示模板(PromptTemplate)

  1. from langchain_core.prompts import ChatPromptTemplate
  2. # 定义模板
  3. template = ChatPromptTemplate.from_messages([
  4.     ("system", "你是一个{speaker}"),
  5.     ("human", "{query}")
  6. ])
  7. # 绑定模型生成链
  8. chain = template | chat
  9. # 调用链
  10. response = chain.invoke({"speaker": "诗人", "query": "写一首关于春天的诗"})
  11. print(response.content)
复制代码
团结影象模块(ConversationBufferMemory)

  1. from langchain.memory import ConversationBufferMemory
  2. memory = ConversationBufferMemory()
  3. memory.save_context({"input": "你好"}, {"output": "你好!我是AI助手"})
  4. memory.save_context({"input": "你会编程吗"}, {"output": "我会用Python写代码"})
  5. # 从记忆加载历史对话
  6. messages = memory.load_memory_variables({})["history"]
  7. response = chat.invoke(messages + [HumanMessage(content="你擅长什么语言?")])
  8. 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. 基础用法示例

界说工具

  1. from langchain_core.tools import tool
  2. @tool
  3. def search_weather(city: str) -> str:
  4.     """根据城市名称查询实时天气(示例函数,实际需调用API)"""
  5.     # 假设这里调用真实天气API(如OpenWeatherMap)
  6.     return f"{city}:晴,25℃"
  7. # 工具会自动生成名称和描述,供Agent理解其功能
  8. print(search_weather.name)      # 输出:search_weather
  9. print(search_weather.description)  
  10. # 输出:search_weather(city: str) -> str - 根据城市名称查询实时天气(示例函数,实际需调用API)
复制代码
通过 Agent 调用工具

  1. from langchain.agents import AgentExecutor, create_tool_calling_agent
  2. from langchain_openai import ChatOpenAI
  3. # 定义工具列表
  4. tools = [search_weather]
  5. # 初始化模型和Agent
  6. model = ChatOpenAI(model="gpt-3.5-turbo")
  7. agent = create_tool_calling_agent(model, tools)
  8. agent_executor = AgentExecutor(agent=agent, tools=tools)
  9. # 执行任务
  10. result = agent_executor.invoke({
  11.     "input": "上海现在的天气怎么样?"
  12. })
  13. print(result["output"])  # 输出:上海:晴,25℃
复制代码
3.典范应用场景

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

参数范例作用namestr自界说工具名称(默认使用函数名)descriptionstr工具的功能形貌(Agent 根据此决定是否调用)args_schemaPydantic Model界说参数结构和校验规则return_directbool是否绕过 Agent 直接返回效果(适用于无需后续处理的工具)
5. 与直接调用函数的区别

对比项使用 @tool 封装的工具直接调用平凡函数调用方式通过 Agent 主动决策调用需显式编写调用代码上下文感知可团结对话汗青、用户意图动态触发静态逻辑,无法自适应错误处理支持 Agent 主动重试或选择替换工具需手动实现非常处理可扩展性轻松添加/移除工具,无需修改核心逻辑需重构代码以适应新功能

  • 快速扩展 Agent 本领:将恣意功能转化为 AI 可调用的工具
  • 构建主动化工作流:Agent 根据标题主动选择并组合工具
  • 低落系统耦合度:工具独立开发,通过标准化接口集成
恰当必要 动态任务分解 的场景(如客服系统主动选择查订单、查物流等工具)。

三、from langchain.tools.render import render_text_description

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

功能说明工具形貌格式化将工具的 name、description、args 等元数据转换为易读的文本格式提示工程优化生成标准化的工具说明文本,嵌入到Agent的提示模板中,提拔工具调用准确性调试与日志以友好格式输出工具信息,便于开发者查抄工具注册情况 2.使用示例

  1. from langchain_core.tools import tool
  2. from langchain.tools.render import render_text_description
  3. #一、定义工具
  4. @tool
  5. def add(a:int,b:int)->int:
  6.         """计算加法"""
  7.         return a+b
  8. @tool
  9. def mul(a:int,b:int)->int:
  10.         """计算乘法"""
  11.         return a*b
  12. @tool
  13. def dele(a:int,b:int)->int:
  14.         """计算减法"""
  15.         return a-b
  16. @tool
  17. def get_weather(location:str,unit:str)->str:
  18.         """
  19.         获取指定地区天气
  20.         参数:
  21.         location:地区名称
  22.         unit:温度单位
  23.         返回:
  24.         str:描述当前天气和温度
  25.         """
  26.         return f"{location}的天气20{unit}"
  27. #二、注册和管理工具
  28. tools=[add,mul,dele,get_weather]
  29. #三、构建工具条件和调用描述
  30. render_tools=render_text_description([add,mul,dele,get_weather])
  31. print(render_tools)
复制代码
运行效果:
  1. add(a: int, b: int) -> int - 计算加法
  2. mul(a: int, b: int) -> int - 计算乘法
  3. dele(a: int, b: int) -> int - 计算减法
  4. get_weather(location: str, unit: str) -> str - 获取指定地
  5. 区天气
  6. 参数:
  7. location:地区名称
  8. unit:温度单位
  9. 返回:
  10. str:描述当前天气和温度
复制代码
3. 高级用法

自界说参数形貌

通过 Pydantic 模型增强参数说明:
  1. from pydantic import BaseModel, Field
  2. class WeatherArgs(BaseModel):
  3.     location: str = Field(description="城市名称,如'上海'")
  4.     unit: str = Field(description="温度单位,可选值:'摄氏度'或'华氏度'")
  5. @tool(args_schema=WeatherArgs)
  6. def get_current_weather(location: str, unit: str) -> str:
  7.     # 实现代码...
  8. # 渲染后参数描述会更清晰
  9. tool_descriptions = render_text_description([get_current_weather])
  10. print(tool_descriptions)
复制代码
运行示例
  1. get_current_weather: 获取指定位置和单位的当前天气
  2. 参数:
  3.   - location (str): 城市名称,如'上海'
  4.   - unit (str): 温度单位,可选值:'摄氏度'或'华氏度'
复制代码
4. 在Agent提示模板中的应用

团结 SystemMessagePromptTemplate 构建完整提示:
  1. from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate
  2. # 生成工具描述文本
  3. tool_descriptions = render_text_description(tools)
  4. # 构建系统提示模板
  5. system_prompt = SystemMessagePromptTemplate.from_template(
  6.     "你是一个智能助手,可以调用以下工具:\n\n{tools}\n\n"
  7.     "每次调用工具时,请严格按照参数要求提供数据。"
  8. )
  9. # 最终提示组合
  10. prompt = ChatPromptTemplate.from_messages([
  11.     system_prompt,
  12.     ("user", "{input}"),
  13. ])
复制代码
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 可实现:

  • 工具本领可视化:将代码中的工具界说转化为自然语言
  • 提示词标准化:确保Agent准确理解工具用途和调用方式
  • 开发服从提拔:快速查抄工具注册状态,镌汰调试本钱
这是构建可靠 Agent 工作流的关键步骤,尤其在必要动态管理大量工具的场景中(如插件系统)。

四、from langchain_core.output_parsers.json import JsonOutputParser

在 LangChain 中的作用是 将语言模型(LLM)输出的 JSON 格式文本分析为结构化数据(如 Python 字典或对象),以便后续步伐处理。
1、核心功能


  • JSON 分析
    将模型返回的 JSON 字符串(如 '{"name": "Alice", "age": 30}')转换为 Python 字典或其他数据结构,避免手动处理字符串分析。
  • 结构化输出
    确保链(Chain)的最终输出是结构化数据,而非非结构化文本,便于与其他工具或 API 集成。
  • 验证与兼容性
    可团结 Pydantic 模型(需其他组件共同)验证 JSON 结构,确保字段和范例符合预期,若不符合会抛出错误。
2、典范使用场景



  • 链式调用末尾:作为链的最后一步,分析模型的 JSON 相应。
  1. from langchain_core.output_parsers.json import JsonOutputParser
  2. from langchain_core.prompts import PromptTemplate
  3. from langchain_openai import ChatOpenAI
  4. # 1. 创建解析器
  5. parser = JsonOutputParser()
  6. # 2. 提示词要求模型返回 JSON
  7. prompt = PromptTemplate(
  8.     template="回答为 JSON,包含 'name' 和 'age': {question}",
  9.     input_variables=["question"],
  10. )
  11. # 3. 构建链:模型 → 解析器
  12. chain = prompt | ChatOpenAI() | parser
  13. # 4. 调用链,获取结构化结果
  14. result = chain.invoke({"question": "Alice 的年龄是多少?"})
  15. # 输出: {"name": "Alice", "age": 30}
复制代码


  • 容错处理:若模型返回非标准 JSON(如额外文本),需额外步骤(如正则提取)预处理,再使用分析器。

3.留意事项


  • 依赖模型协作:需在提示词中明确要求模型生成 JSON,否则大概分析失败。
  • 错误处理:发起用 try-except 捕捉分析非常,处理格式错误。
  • 高级验证:团结 PydanticOutputParser 可实现更严格的字段和范例校验。

4.总结

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

五、from langchain_core.tools import tool

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


  • 简化工具界说:通过 @tool 装饰器,无需手动编写复杂的工具类,只需装饰一个函数,即可将其集成到 LangChain 的工作流中。
  • 赋予自然语言形貌:工具的函数名和文档字符串会被主动分析,让语言模型(如 ChatGPT)理解工具的功能和调用方式。

2.示例代码

  1. from langchain_core.tools import tool
  2. '''
  3. 库名解析:langchain_core.tools
  4. 专门用于定义和管理 AI 工具(Tools),其核心作用是
  5. 开发者能够轻松创建、描述和集成可被大型语言模型
  6. (LLM)调用的功能模块
  7. 1. 工具标准化定义
  8. 通过 @tool 装饰器,将普通 Python 函数转化为 LangChain 工具
  9. 自动生成工具元数据,包括:
  10.     名称(函数名)
  11.     描述(函数文档字符串首段)
  12.     参数结构(类型注解 + 参数描述)
  13.     执行逻辑(函数本体)
  14. '''
  15. # AI 可读的接口
  16. @tool
  17. def multiply(first_int: int, second_int: int) -> int:
  18.     """对两个整数进行乘法运算"""
  19.     return first_int * second_int
  20. @tool
  21. def add(first_int: int, second_int: int) -> int:
  22.     """对两个整数进行加法运算"""
  23.     return first_int + second_int
  24. @tool
  25. def get_current_weather(location: str, unit: str) -> str:
  26.     """
  27.     获取指定位置和单位的当前天气
  28.    
  29.     参数:
  30.     location (str): 位置的名称
  31.     unit (str): 温度单位(例如:摄氏度、华氏度)
  32.    
  33.     返回:
  34.     str: 描述当前天气和温度的字符串
  35.     """
  36.     return f"It's 20 {unit} in {location}"
  37. #工具注册与管理
  38. tools = [multiply, add, get_current_weather]
  39. print("\n名称1: ", multiply.name)
  40. print("描述1: ", multiply.description)
  41. print("参数1: ", multiply.args)
  42. print("\n名称2: ", add.name)
  43. print("描述2: ", add.description)
  44. print("参数2: ", add.args)
  45. print("\n名称3: ", get_current_weather.name)
  46. print("描述3: ", get_current_weather.description)
  47. print("参数3: ", get_current_weather.args)
  48. '''
  49. 完整属性结构:
  50. 基础元数据:name、description
  51. 参数配置:args(简化参数列表)、args_schema(详细结构)
  52. 执行控制:return_direct
  53. 模式描述:schema(兼容 OpenAI 函数调用格式)
  54. 运行时方法:run()、arun()
  55. '''
复制代码
运行效果
  1. 名称1:  multiply
  2. 描述1:  对两个整数进行乘法运算
  3. 参数1:  {'first_int': {'title': 'First Int', 'type': 'integer'}, 'second_int': {'title': 'Second Int', 'type': 'integer'}}
  4. 名称2:  add
  5. 描述2:  对两个整数进行加法运算
  6. 参数2:  {'first_int': {'title': 'First Int', 'type': 'integer'}, 'second_int': {'title': 'Second Int', 'type': 'integer'}}
  7. 名称3:  get_current_weather
  8. 描述3:  获取指定位置和单位的当前天气
  9. 参数:
  10. location (str): 位置的名称
  11. unit (str): 温度单位(例如:摄氏度、华氏度)
  12. 返回:
  13. str: 描述当前天气和温度的字符串
  14. 参数3:  {'location': {'title': 'Location', 'type': 'string'}, 'unit': {'title': 'Unit', 'type': 'string'}}
复制代码
3.适用场景



  • 快速将现有函数(如数据库查询、API 调用)接入 LangChain 署理。
  • 构建自界说工具扩展署理的本领(例如:股票查询、邮件发送等)。
如果必要更复杂的工具(如异步调用、自界说错误处理),可以继承 BaseTool 类手动实现,但 @tool 装饰器在简单场景下更高效。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表