目录

(Prompts)提示作用

Prompts 常见操作

基础 PromptTemplate 使用

Few-shot 提示模板

ChatPromptTemplate (对话提示模板)

(Agents)代理作用

Agents 常见操作

基础 Agent 使用

自定义工具 Agent

高级应用示例

带记忆的对话代理

使用本地模型的代理

结构化输出代理


LangChain框架 Loader 、Vectorstores、Chain 应用-CSDN博客 

另外一篇关于LangChain框架的应用


(Prompts)提示作用

作用:控制大语言模型(LLM)的输入,通过模板化指令引导模型生成更精准的输出。
关键功能

  • 结构化输入:将变量动态插入预定义的文本模板(如:"写一首关于{topic}的诗"

  • 标准化输出:通过指令约束模型返回格式(如JSON、列表等)

  • 上下文管理:整合示例(Few-shot)、系统消息等提升效果

典型工作流
提示模板 → 代理接收 → 决策调用工具 → 整合结果 → 返回最终输出

Prompts 常见操作

基础 PromptTemplate 使用

from langchain.prompts import PromptTemplate# 创建简单提示模板
template = "请用{language}写一个关于{topic}的函数"
prompt = PromptTemplate(input_variables=["language", "topic"],template=template
)# 格式化提示
formatted_prompt = prompt.format(language="Python", topic="快速排序")
print(formatted_prompt)########运行结果############
请用Python写一个关于快速排序的函数

Few-shot 提示模板

from langchain.prompts import FewShotPromptTemplate, PromptTemplate# 准备示例
examples = [{"input": "高兴", "output": "笑容满面"},{"input": "悲伤", "output": "泪流满面"}
]# 创建单个示例模板
example_template = """
输入: {input}
输出: {output}"""
example_prompt = PromptTemplate(input_variables=["input", "output"],template=example_template
)# 创建Few-shot模板
few_shot_prompt = FewShotPromptTemplate(examples=examples,example_prompt=example_prompt,prefix="将以下情感转换为成语描述:",suffix="输入: {adjective}\n输出:",input_variables=["adjective"]
)print(few_shot_prompt.format(adjective="愤怒"))################运行结果#######################
将以下情感转换为成语描述:输入: 高兴
输出: 笑容满面输入: 悲伤
输出: 泪流满面输入: 愤怒
输出:

ChatPromptTemplate (对话提示模板)

from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.schema import SystemMessage# 创建聊天提示模板
chat_prompt = ChatPromptTemplate.from_messages([SystemMessage(content="你是一个有帮助的AI助手"),HumanMessagePromptTemplate.from_template("{user_input}")
])formatted_chat = chat_prompt.format_messages(user_input="你好!")
print(formatted_chat)################运行结果########################
[SystemMessage(content='你是一个有帮助的AI助手', additional_kwargs={}, response_metadata={}), HumanMessage(content='你好!', additional_kwargs={}, response_metadata={})]

(Agents)代理作用

作用:让LLM自主调用工具(Tools)完成复杂任务,实现动态决策和自动化流程。
关键功能

  • 工具集成:连接搜索API、计算器、数据库等外部工具

  • 任务编排:自动决定何时调用哪个工具(如先搜索再计算)

  • 多步骤推理:通过循环迭代解决需要多步操作的问题

Agents 常见操作

基础 Agent 使用

from langchain.agents import load_tools, initialize_agent, AgentType
from langchain.llms import Ollama
# 初始化工具和LLM
llm = Ollama(temperature=0,model='qwen')
tools = load_tools(["serpapi","llm-math"], llm=llm)# 创建代理
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)# 执行任务
agent.run("目前特斯拉的股价是多少?如果是100股,总价值是多少美元?")

自定义工具 Agent

from langchain.agents import tool
from langchain.agents import AgentType, initialize_agent
from langchain.llms import Ollama# 定义自定义工具
@tool
def get_word_length(word: str) -> int:"""返回单词的长度"""return len(word)# 初始化
llm = Ollama(temperature=0,model='qwen3')
tools = [get_word_length]# 创建代理
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)# 使用代理
agent.run("单词'hello'的长度是多少?")##################运行结果#####################
<think>
好的,用户问的是单词'hello'的长度是多少。我需要用提供的工具来解决这个问题。首先,我应该调用get_word_length工具,参数是'hello'。然后工具会返回这个单词的长度。我只需要把结果返回给用户就可以了。
</think>Thought: 我需要确定单词'hello'的长度。可以使用get_word_length工具来获取这个信息。
Action: get_word_length
Action Input: hello
Observation: 5
Thought:<think>
Final Answer: 单词'hello'的长度是5。

高级应用示例

带记忆的对话代理

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import Ollama
from langchain.memory import ConversationBufferMemory# 初始化带记忆的代理
llm = Ollama(temperature=0,model='qwen')
tools = load_tools(["llm-math"], llm=llm)
memory = ConversationBufferMemory(memory_key="chat_history")agent = initialize_agent(tools,llm,agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,memory=memory,verbose=True
)# 多轮对话
agent.run("3的平方是多少?")
agent.run("再加上7等于多少?")###############运行结果#########################
Thought: Do I need to use a tool? Yes
Action: the action to take, should be one of [Calculator] ]
Action Input: 
Observation: the action to take, should be one of [Calculator] ] is not a valid tool, try one of [Calculator].
Thought:Do I need to use a tool? No
AI: 3的平方是9.
```> Finished chain.> Entering new AgentExecutor chain...
AI: 再加上7等于14.

使用本地模型的代理

from langchain_community.llms import Ollama
from langchain.agents import tool, AgentType
from langchain.agents import initialize_agent# 使用本地Ollama模型
llm = Ollama(model="qwen")# 定义简单工具
@tool
def word_counter(text: str) -> int:"""计算文本中的单词数量"""return len(text.split())# 创建代理
agent = initialize_agent([word_counter],llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)agent.run("数一数这句话有多少个单词: 'LangChain是一个强大的AI开发框架'")############运行的结果#################我应该使用word_counter()工具来计算文本中的单词数量。
Action: word_counter
Action Input: 'LangChain是一个强大的AI开发框架'
Observation: 1
Thought:根据观察结果,一句话只有一个单词。Final Answer: 一句话只有一个单词。

结构化输出代理

from langchain.llms import Ollama
from langchain_core.tools import tool
from langchain.prompts import PromptTemplate
from langchain.agents import initialize_agent, AgentType
from langchain_community.llms import Ollama
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from typing import Any, Dict
import json# 1. 定义更简单的输出结构
response_schemas = [ResponseSchema(name="summary", description="文章的简要总结"),ResponseSchema(name="keywords", type="list", description="提取的关键词列表"),ResponseSchema(name="sentiment", description="情感分析结果,只能是positive/neutral/negative")
]# 2. 创建自定义解析器处理Ollama输出
class OllamaOutputParser(StructuredOutputParser):def parse(self, text: str) -> Dict[str, Any]:try:# 尝试从输出中提取JSON部分start = text.find('{')end = text.rfind('}') + 1json_str = text[start:end]return json.loads(json_str)except Exception as e:# 如果解析失败,返回默认结构return {"summary": "无法生成摘要","keywords": [],"sentiment": "neutral"}output_parser = OllamaOutputParser.from_response_schemas(response_schemas)# 3. 修改提示模板确保JSON格式输出
ANALYSIS_PROMPT = """请严格按以下要求分析文本:
文本:{text}输出要求:
1. 必须使用JSON格式
2. 包含以下字段:- summary: 50字以内摘要- keywords: 3-5个关键词列表- sentiment: 情感倾向(positive/neutral/negative)返回的JSON必须用```json包裹:
```json
{{你的JSON输出}}
```"""# 4. 创建工具
@tool
def analyze_text(text: str) -> Dict[str, Any]:"""分析文本并返回结构化结果"""prompt_template = PromptTemplate(template=ANALYSIS_PROMPT,input_variables=["text"],partial_variables={"format_instructions": output_parser.get_format_instructions()})formatted_prompt = prompt_template.format(text=text)llm = Ollama(model="qwen3", temperature=0)result = llm(formatted_prompt)try:return output_parser.parse(result)except Exception as e:print(f"解析失败: {e}")return {"summary": text[:50] + "...","keywords": ["LangChain"],"sentiment": "neutral"}# 5. 创建并运行代理
agent = initialize_agent([analyze_text],Ollama(model="qwen3", temperature=0),agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True,handle_parsing_errors=True  # 关键:处理解析错误
)text = "LangChain是一个用于开发语言模型应用的框架。它简化了与LLMs的交互过程,提供了模块化组件,可以快速开发AI模型应用。"
result = agent.run(f"分析这段文本: {text}")
print(result)################运行结果##################################
<think>
好的,我现在需要分析用户提供的关于LangChain的文本。首先,用户的问题是要分析这段文本,所以我要使用analyze_text工具。让我先仔细阅读一下文本内容。文本内容是:“LangChain是一个用于开发语言模型应用的框架。它简化了与LLMs的交互过程,提供了模块化组件,可以快速开发AI模型应用。” 看起来这段文字在介绍LangChain的功能和优势。我需要确定用户的需求是什么,可能他们想了解LangChain的核心功能、它如何简化开发过程,或者它的主要特点。接下来,我应该调用analyze_text工具来处理这段文本。工具会返回结构化的结果,比如关键词、主题、重要信息等。我需要确保输入的文本正确无误,然后等待工具的分析结果。根据返回的观察结果,我可以提取关键点,比如框架的用途、简化交互的过程、模块化组件以及快速开发应用的优势。最后,将这些信息整理成一个清晰、简洁的最终答案,回答用户的问题。
</think>Thought: 我需要使用analyze_text工具来分析提供的文本内容。
Action: analyze_text
Action Input: LangChain是一个用于开发语言模型应用的框架。它简化了与LLMs的交互过程,提供了模块化组件,可以快速开发AI模型应用。Observation: {'summary': 'LangChain是开发语言模型应用的框架,简化LLM交互,提供模块化组件以快速构建AI应用。', 'keywords': ['LangChain', '语言模型应用', 'LLMs交互', '模块化组件', 'AI应用开发'], 'sentiment': 'neutral'}
Thought:<think>
</think>Final Answer: 这段文本介绍了LangChain是一个用于开发语言模型应用的框架,其核心功能包括简化与大型语言模型(LLMs)的交互过程,并通过模块化组件实现快速开发AI模型应用。关键词有LangChain、语言模型应用、LLMs交互、模块化组件和AI应用开发,整体语气中性。> Finished chain.
这段文本介绍了LangChain是一个用于开发语言模型应用的框架,其核心功能包括简化与大型语言模型(LLMs)的交互过程,并通过模块化组件实现快速开发AI模型应用。关键词有LangChain、语言模型应用、LLMs交互、模块化组件和AI应用开发,整体语气中性。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88591.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88591.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88591.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟实现unordered_map

1.定义unordered_map 是 C 标准库中的哈希表容器&#xff0c;特点是无序存储、平均 O (1) 时间复杂度的插入 / 查找 / 删除操作。其核心原理是通过哈希函数将关键字映射到哈希桶&#xff08;bucket&#xff09;&#xff0c;再通过链表或红黑树处理哈希冲突。2.实现原理1. 哈希表…

史上最详细Java并发多线程(面试必备,一篇足矣)

第一章&#xff1a;线程基础 1.1 线程与进程 进程&#xff1a;系统资源分配的基本单位&#xff0c;拥有独立的内存空间 线程&#xff1a;CPU调度的基本单位&#xff0c;共享进程内存空间 关系&#xff1a;一个进程可包含多个线程&#xff0c;线程切换成本远低于进程 1.2 线程的…

【DataFlow】数据合成流水线工具

1.整体解读 核心思想&#xff1a;以数据为中心的AI&#xff08;Data-Centric AI&#xff09; DataFlow 的核心目标是通过一系列自动化“流水线”&#xff08;Pipelines&#xff09;来处理和生成高质量的数据&#xff0c;从而提升大语言模型&#xff08;LLM&#xff09;在特定领…

Hangfire 调用报错解决方案总结

System.ArgumentNullException: 值不能为 null 错误在使用 Hangfire 时确实是一个常见问题&#xff0c;特别是在配置 Hangfire 服务器时。问题分析这个错误通常发生在以下情况&#xff1a;没有正确配置 Hangfire 服务器队列配置缺失或不正确连接字符串配置问题解决方案要点正确…

MySQL的使用

MySQL的使用一、mysql中的周边命令1. 检查版本2. 查看字符集3. 查看客户端连接4. 查看最后一条警告消息二、数据库、数据表的管理1. 语法规则2. 数据库2.1 查看数据库2.2 创建数据库2.3 选择数据库2.4 查看创建数据库命令2.5 创建库时添加字符集2.6 修改数据库字符集2.7 删除数…

2025Nginx最新版讲解/面试

维护系统多服务器部署&#xff0c;将我们请求代理到各个服务器。代理正向代理&#xff0c;代理对象是我们的客户端&#xff0c;目标对象不知道我们用户。VPN就是典型的正向代理。反向代理&#xff0c;代理对象是服务端&#xff0c;用户不知道服务端具体信息。而这正是Nginx所做…

JAVASCRIPT 前端数据库-V8--仙盟数据库架构-—-—仙盟创梦IDE

老版本 在v1 版本中我们讲述了 基础版的应用 JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客 接下载我们做一个更复杂的的其他场景 由于&#xff0c;V1查询字段必须 id 接下来我们修改了了代码 JAVASCRIPT 前端数据库-V2--仙盟数据库架构-—-—仙盟创…

UNIX 域套接字实现本地进程间通信

&#x1f680; 使用 UNIX 域套接字 (AF_UNIX) 实现高效进程通信 在 Linux 和其他类 UNIX 系统中&#xff0c;进程间通信 (IPC) 的方法有很多种&#xff0c;例如管道、消息队列、共享内存等。然而&#xff0c;当你的应用程序需要在 同一台机器上的不同进程间进行高效、低延迟的数…

【Axure教程】中继器间图片的传递

中继器在Axure中可以作为图片保存的数据库&#xff0c;在实际系统中&#xff0c;我们经常需要将选择数据库的图片添加到其他图片列表中&#xff0c;所以今天就教大家&#xff0c;怎么在Axure中实现中继器之间的图片传递&#xff0c;包含将一个中继器中的图片列表传递到另一个中…

专题:2025云计算与AI技术研究趋势报告|附200+份报告PDF、原数据表汇总下载

原文链接&#xff1a;https://tecdat.cn/?p42935 关键词&#xff1a;2025, 云计算&#xff0c;AI 技术&#xff0c;市场趋势&#xff0c;深度学习&#xff0c;公有云&#xff0c;研究报告 云计算和 AI 技术正以肉眼可见的速度重塑商业世界。过去十年&#xff0c;全球云服务收…

从代码学习深度强化学习 - PPO PyTorch版

文章目录 前言PPO 算法简介从 TRPO 到 PPOPPO 的两种形式:惩罚与截断代码实践:PPO 解决离散动作空间问题 (CartPole)环境与工具函数定义策略与价值网络PPO 智能体核心实现训练与结果代码实践:PPO 解决连续动作空间问题 (Pendulum)环境准备适用于连续动作的网络PPO 智能体 (连…

PortsWiggerLab: Blind OS command injection with output redirection

实验目的This lab contains a blind OS command injection vulnerability in the feedback function.The application executes a shell command containing the user-supplied details. The output from the command is not returned in the response. However, you can use o…

星云穿越与超光速飞行特效的前端实现原理与实践

文章目录 1,引言2,特效设计思路3,技术原理解析1. 星点的三维分布2. 视角推进与星点运动3. 三维到二维的投影4. 星点的视觉表现5. 色彩与模糊处理4,关键实现流程图5,应用场景与优化建议6,总结1,引言 在现代网页开发中,炫酷的视觉特效不仅能提升用户体验,还能为产品增添…

【Linux】C++项目分层架构:核心三层与关键辅助

C 项目分层架构全指南&#xff1a;核心三层 关键辅助一、核心三层架构 传统的三层架构&#xff08;或三层体系结构&#xff09;是构建健壮系统的基石&#xff0c;包括以下三层&#xff1a; 1. 表现层&#xff08;Presentation Layer&#xff09; 负责展示和输入处理&#xff0…

【机器学习】保序回归平滑校准算法

保序回归平滑校准算法&#xff08;SIR&#xff09;通过分桶合并线性插值解决广告预估偏差问题&#xff0c;核心是保持原始排序下纠偏。具体步骤&#xff1a;1&#xff09;按预估分升序分桶&#xff0c;统计每个分桶的后验CTR&#xff1b;2&#xff09;合并逆序桶重新计算均值&a…

项目开发日记

框架整理学习UIMgr&#xff1a;一、数据结构与算法 1.1 关键数据结构成员变量类型说明m_CtrlsList<PageInfo>当前正在显示的所有 UI 页面m_CachesList<PageInfo>已打开过、但现在不显示的页面&#xff08;缓存池&#xff09; 1.2 算法逻辑查找缓存页面&#xff1a;…

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)

60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门&#xff08;附 BeagleBone Black 及驱动解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的开源可见光通信&#xff08;VLC / Li-Fi&#xff09;研究平台。它把硬件、驱动、协议栈…

Python性能优化

Python 以其简洁和易用性著称,但在某些计算密集型或大数据处理场景下,性能可能成为瓶颈。幸运的是,通过一些巧妙的编程技巧,我们可以显著提升Python代码的执行效率。本文将介绍8个实用的性能优化技巧,帮助你编写更快、更高效的Python代码。   一、优化前的黄金法则:先测…

easyui碰到想要去除顶部栏按钮边框

只需要加上 plain"true"<a href"javascript:void(0)" class"easyui-linkbutton" iconCls"icon-add" plain"true"onclick"newCheck()">新增</a>

C++字符串详解:原理、操作及力扣算法实战

一、C字符串简介在C中&#xff0c;字符串的处理方式主要有两种&#xff1a;字符数组&#xff08;C风格字符串&#xff09;和std::string类。虽然字符数组是C语言遗留的底层实现方式&#xff0c;但现代C更推荐使用std::string类&#xff0c;其封装了复杂的操作逻辑&#xff0c;提…