LangChain框架 Prompts、Agents 应用

目录

(Prompts)提示作用

[Prompts 常见操作](#Prompts 常见操作)

[基础 PromptTemplate 使用](#基础 PromptTemplate 使用)

[Few-shot 提示模板](#Few-shot 提示模板)

ChatPromptTemplate (对话提示模板)

(Agents)代理作用

[Agents 常见操作](#Agents 常见操作)

[基础 Agent 使用](#基础 Agent 使用)

[自定义工具 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('}') + 1
            json_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应用开发,整体语气中性。
相关推荐
春天的菠菜3 小时前
【LangChain第2章】使用之Model I/O
langchain
idkmn_4 小时前
Agentic AI 基础概念
人工智能·python·深度学习·chatgpt·langchain
lusasky14 小时前
AgentScope、LangChain、AutoGen 全方位对比 + 混用可行性指南
microsoft·langchain
前端阿森纳1 天前
从产品经理视角拆解 LangChain 的抽象设计
langchain·llm·aigc
大模型真好玩1 天前
LangGraph1.0速通指南(一)—— LangGraph1.0 核心概念、点、边
人工智能·langchain·agent
阿里云云原生1 天前
AgentRun Sandbox SDK 正式开源!集成 LangChain 等主流框架,一键开启智能体沙箱新体验
阿里云·langchain·开源·serverless·agentarun
、、、、南山小雨、、、、1 天前
最简单的LangChain和RAG
langchain
路边草随风1 天前
langchain agent动态变更系统prompt
人工智能·python·langchain·prompt
Jack___Xue2 天前
LangChain实战快速入门笔记(六)--LangChain使用之Agent
笔记·langchain·unix
大模型教程2 天前
使用Langchain4j和Ollama3搭建RAG系统
langchain·llm·ollama