微信扫码
添加专属顾问
我要投稿
LangChain框架助你快速构建大模型应用,从基础对话到智能代理一站式开发。 核心内容: 1. LangChain三大核心组件与生态体系解析 2. 多模型统一调用与提示模板实战演示 3. 从环境配置到首个对话应用的完整实现流程
LangChain 是一个用于开发由大语言模型(LLM)驱动的应用程序的框架。LangChain 生态简化了大语言模型应用程序生命周期的每个阶段:
LangChain:拥有丰富的开源组件和第三方集成,供应商达数百家;
LangGraph:利用图(节点-边)的概念,可以轻松构建具有流式传输和人工介入支持的有状态Agent,还可以将程序封装成API进行调用;
LangSmith:可以检查、监控和评估应用程序,观察程序运行中的状态数据,以便程序能够持续优化。
今天我们以langchain为例,实现一些简单开发用例。
LangChain核心架构组件
LLMs(大语言模型):支持多种模型:OpenAI GPT、Anthropic Claude、Google Gemini、DeepSeek 等,统一的接口能够调用不同的模型
Prompts(提示模板):结构化的提示管理,支持变量替换和复杂模板
Chains(链式调用):可以将多个组件串联起来,实现复杂的处理流程
Agents(智能代理):能够使用工具的 AI 助手,根据用户输入决定调用哪些工具
Tools(工具):扩展 LLM 的能力,如搜索、计算、API 调用等
Memory(记忆):在对话中保持上下文支持多种记忆类型。
实践1-LLM-直接对话
因为AI对Python支持更友好,所以我们选取了Python作为实践语言,首先需要提前准备好Python环境。
LangChain的功能非常灵活,我们下面将展示最基本的应用。
安装需要的包并进行相关引入
pip install langchain langchain-core langchain-openai python-dotenv
创建.env文件并配置API_KEY(例子中选用了Deepseek,需要付费,国内免费API推荐智谱)
# DeepSeek API密钥(当前代码使用的)
DEEPSEEK_API_KEY=your_deepseek_api_key_here
# 如果要使用其他LLM,需要相应的API密钥
# OPENAI_API_KEY=your_openai_api_key_here
# ANTHROPIC_API_KEY=your_anthropic_api_key_here
# GOOGLE_API_KEY=your_google_api_key_here
# MISTRAL_API_KEY=your_mistral_api_key_here
导入对应python包,实现基础对话功能
from langchain_openai import ChatOpenAIfrom dotenv import load_dotenv
LLM 初始化,接入方式大同小异,根据不同LLM信息接入
# 读取环境变量中的API_KEY
load_dotenv()
def agent_example():
# 初始化DeepSeek LLM
llm = ChatOpenAI(
model="deepseek-chat",
api_key=os.getenv("DEEPSEEK_API_KEY"),
temperature=0.7,
base_url="https://api.deepseek.com/v1"
)
# 初始化OpenAI LLM
# llm = ChatOpenAI(
# model="gpt-4",
# api_key=os.getenv("OPENAI_API_KEY"),
# temperature=0.7
# )
# 初始化Anthropic Claude LLM
# llm = ChatAnthropic(
# model="claude-3-opus-20240229",
# api_key=os.getenv("ANTHROPIC_API_KEY"),
# temperature=0.7
# )
# 初始化Google Gemini LLM
# llm = ChatGoogleGenerativeAI(
# model="gemini-pro",
# api_key=os.getenv("GOOGLE_API_KEY"),
# temperature=0.7
# )
# 初始化Mistral LLM
# llm = ChatOpenAI(
# model="mistral-small-latest",
# api_key=os.getenv("MISTRAL_API_KEY"),
# temperature=0.7,
# base_url="https://api.mistral.ai/v1"
# )
直接利用LLM进行对话
result = llm.invoke("一句话介绍下上海")
print(result.content)
# 回答
"上海,国际大都市,东方明珠,经济金融中心。"
实践2-角色限定-提示词模版
接下来使用提示词模板对提示词进行扩充和限定。
导入对应python包
from langchain_core.prompts import PromptTemplate
设定LLM角色模板
# 设定模板template = """ 你是一个乐于助人的助手。仅根据以下上下文回答问题。 如果你不知道答案,就说 “我不知道”。 上下文:{context} 问题:{query} 答案: 继续提问"""# PromptTemplate封装prompt_template = PromptTemplate( input_variables=["context", "query"],template=template)# 自定义变量字段插入context = "Python 是一种解释型、动态类型的高级编程语言。"query = "Python 是怎么分类的?"formatted = prompt_template.format(context=context, query=query)
LLM进行对话
result = llm.invoke(formatted)
print(result.content)
# 回答
"""
Python 是一种解释型、动态类型的高级编程语言。根据这个上下文,Python 可以被分类为:
1. 解释型语言:Python 代码在运行时被逐行解释执行,不需要编译成机器码。
2. 动态类型语言:Python 在运行时检查变量的类型,而不是在编译时。
3. 高级编程语言:Python 提供了丰富的库和抽象,使得开发者可以不必处理底层的细节,专注于解决问题本身。
请问您还有其他问题吗?
"""
实践3-链式调用-LLMChain
接上一个代码样例,Langchain最新版本可以使用 | 改造chain的写法(旧版本需要导入LLMChain)
llm_chain = prompt_template | llm
执行结果
result = llm_chain.invoke({'context': context, 'query':query})print(result.content)
也可以多个chain组合调用,先导入python包
from langchain.chains import LLMChainfrom langchain.chains import SimpleSequentialChain
组合多个chain完成特定任务(实测使用|会报错)
# Chain A: 翻译成英文
chain1 = LLMChain(llm=llm, prompt=PromptTemplate.from_template("翻译成英文: {text}"))
# Chain B: 用英文写一封邮件
chain2 = LLMChain(llm=llm, prompt=PromptTemplate.from_template("用这句话写封邮件: {text}"))
# 串联 Chain A -> Chain B
pipeline = SimpleSequentialChain(chains=[chain1, chain2])
# 一句话搞定
print(pipeline.invoke({"input": "请帮我告诉老板我今天晚点到"}))
# 回答
"""
Subject: Urgent: Informing of My Evening
DelayDear [Boss's Name],
I hope this email finds you well.
I am writing to inform you that I will be unavoidably late this evening.
Due to [briefly explain the reason for the delay], I am unable to arrive at the office on time.
I sincerely apologize for any inconvenience this may cause and appreciate your understanding in this matter.
Please help me convey my apologies to the boss. I will make every effort to minimize the delay and will be in touch as soon as I am back in the office.
Thank you for your assistance.
Best regards,
[Your Name]
"""
实践4-Agent-构建智能体
接下来实现一个基础版智能体。
引入Python包
# 提示词模板from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder# Agent构建与执行from langchain.agents import AgentExecutor, create_openai_tools_agent# Tool工具调用from langchain.tools import Tool
自定义一个“科普介绍”工具函数
# 写一个工具函数
def get_introduction(topic: str) -> str:
""" 获取关于某个主题的详细介绍 """
return f"这是关于{topic}的详细介绍"
# 将函数封装成Tool,放在tools列表
tools = [
Tool(
name="get_introduction",
func=get_introduction,
description="""用于获取关于某个主题的详细介绍"""
)
]
创建Agent提示词模板
# 创建Agent提示模板prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个有帮助的助手"), ("user", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad"),])
创建Agent,获取用户输入并回答
agent = create_openai_tools_agent(llm, tools, prompt)agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)user_input = input("请输入您想查询的主题:")result = agent_executor.invoke({"input": user_input})print(result["output"])
执行提问并回答
输入:""" 请输入您想查询的主题:LLM """回答:"""LLM是“大型语言模型”(Large Language Model)的缩写,它是一种基于人工智能的技术,能够理解和生成人类语言。这类模型通常由数以亿计的参数组成,能够通过大量的文本数据进行训练,从而学会语言的模式和结构。LLM的主要特点包括:1. **强大的语言理解能力**:LLM能够理解复杂的语言结构,包括语法、语义和上下文。2. **文本生成能力**:LLM可以生成连贯、有逻辑的文本,包括文章、对话、代码等。3. **多语言支持**:许多LLM能够处理多种语言,这使得它们在全球化环境中非常有用。4. **持续学习**:LLM可以通过不断学习新的数据来提高其性能。LLM在多个领域都有应用,如自然语言处理、机器翻译、文本摘要、问答系统等。常见的LLM包括GPT-3、BERT、LaMDA等。"""
实践5-工具扩展-联网搜索
除了给Agent自定义工具外,langchain_community.tools中内置了丰富的工具,我们选取Tavily来实现联网搜索。
先去官网获取API_KEY并写入.env文件中:
https://app.tavily.com/home
引入Python包
from langchain_community.tools.tavily_search importTavilySearchResults
新增工具列表
tools = [ Tool( name="get_introduction", func=get_introduction, description="""用于获取关于某个主题的详细介绍""" ), # 增加新的一行 TavilySearchResults(max_results=3) # 返回3条搜索结果]
执行提问并回答
输入:""" 请输入您想查询的主题:搜一下今天的日期 """回答:"""Invoking: `tavily_search_results_json` with `{'query': '今天日期'}`[{'title': "日期今天Today'sDate365", 'url': 'http://zh.todaysdate365.com/', 'content': '今天的日期是: 星期一 2025 六月23 .', 'score': 0.79254496 }, ... {'title': '今天的日期', 'url': 'https://todaysdatenow.com/zh-CN/', 'content': '# 今天的日期\n\n', 'score': 0.31624308}]今天的日期是2025年6月23日。"""
实测下来tavily的搜索效果并不好,可以通过更改最大返回的相关结果进行一定改善
TavilySearchResults(max_results=10)
实践6-Memory-记忆功能
接下来通过记忆模块增加LLM的上下文理解能力。
引入Python包
from langchain.memory import ConversationBufferMemory
更改提示词,将chat_history插入
prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个有帮助的助手"), # 新增对话历史 MessagesPlaceholder(variable_name="chat_history"), ("user", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad")])
增加Memory组件
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# 为agent增加memory
agent_executor = AgentExecutor(
agent=agent,
# 新增memory
memory=memory,
tools=tools,
verbose=True
)
新增二次对话逻辑:
user_input = input("请输入您想查询的主题:")
result = agent_executor.invoke({"input": user_input})
print(result["output"])
# 新增第二次对话
user_input = input("请继续提问:")
result = agent_executor.invoke({"input": user_input})
print(result["output"])
执行提问并回答
输入:
""" 请输入您想查询的主题:怎么快速学习LLM """
回答:
"""
快速学习大型语言模型(LLM)需要系统的方法和持续的努力。以下是一些建议:
1. **基础知识学习**:
- **数学基础**:熟悉线性代数、概率论和统计学等基础数学知识。
- **编程技能**:掌握至少一种编程语言,如Python,因为它是机器学习领域的主流语言。
- **机器学习基础**:了解机器学习的基本概念,如监督学习、无监督学习、强化学习等。
2. **理论理解**:
- **深度学习**:深入研究深度学习的基本原理,特别是神经网络和自然语言处理(NLP)。
- **LLM原理**:了解LLM的工作原理,包括预训练、微调、模型架构等。
3. **实践操作**:
- **实验**:通过实际操作来加深理解。可以使用TensorFlow、PyTorch等框架进行实验。
- **开源项目**:参与开源项目,如Hugging Face的Transformers库,可以让你更深入地了解LLM。
4. **资源学习**:
- **在线课程**:参加在线课程,如Coursera、edX上的NLP和深度学习课程。
- **书籍**:阅读相关书籍,如《深度学习》(Goodfellow et al.)、《自然语言处理综论》(Jurafsky and Martin)等。
5. **社区交流**:
- **加入社区**:加入相关的技术社区,如GitHub、Stack Overflow、Reddit等,与其他开发者交流。
- **参加会议**:参加机器学习和NLP相关的会议和研讨会。
6. **持续更新**:
- **关注最新研究**:LLM是一个快速发展的领域,需要持续关注最新的研究成果和技术动态。
- **实践与反思**:在实践中不断尝试和反思,总结经验教训。
7. **工具和库**:
- **熟悉工具**:熟悉如Jupyter Notebook、Git等工具,以及Hugging Face的Transformers库等。
通过上述方法,你可以系统地学习LLM,并在实践中不断提高自己的技能。记住,持续学习和实践是关键。
"
二次输入:
"""请继续提问:关注最新研究有什么方式"""
回答:
"""
关注最新研究是保持知识更新和跟进领域前沿的重要方式。以下是一些有效的方法来关注LLM(大型语言模型)和相关领域的最新研究:
1. **学术期刊和会议**:
- **订阅期刊**:订阅如《自然》(Nature)、《科学》(Science)、《人工智能》(Artificial Intelligence)、《机器学习》(Journal of Machine Learning Research)等顶级学术期刊。
- **参加会议**:参加国际会议,如NeurIPS、ICML、ACL(Association for Computational Linguistics)、EMNLP(Empirical Methods in Natural Language Processing)等,这些会议通常会发布最新的研究成果。
2. **在线平台**:
- **arXiv.org**:这是一个预印本服务器,可以让你免费获取最新的研究论文。
- **Google Scholar**:使用Google Scholar搜索相关主题,可以找到最新的论文和引用。
- **ResearchGate**:一个学术社交网络平台,研究人员可以分享他们的论文和研究成果。
3. **社交媒体和论坛**:
- **Twitter**:关注相关领域的专家、研究机构和期刊的官方账号,获取最新的研究动态。
- **Reddit**:加入如r/MachineLearning、r/NLP等Reddit社区,参与讨论和分享。
- **LinkedIn**:关注行业专家和公司的LinkedIn页面,了解他们的最新动态。
4. **专业组织和机构**:
- **加入专业组织**:如AAAI(Association for the Advancement of Artificial Intelligence)、IEEE(Institute of Electrical and Electronics Engineers)等,这些组织会发布最新的研究信息和会议通知。
- **关注研究机构**:关注如Google AI、Facebook AI Research、DeepMind等顶级研究机构的官方网站和博客。
5. **学术会议和研讨会**:
- **在线研讨会**:参加在线研讨会和讲座,许多会议和研讨会现在提供在线观看选项。
- **直播和回放**:观看重要会议的直播或回放,如NeurIPS、ICML的在线直播。
6. **学术新闻和博客**:
- **学术新闻网站**:如TechCrunch、Wired、The Verge等,它们经常报道最新的科技和学术研究。
- **专业博客**:阅读如Distill、AI Daily、The Morning Paper等博客,它们会总结和解读最新的研究论文。
通过结合上述方法,你可以有效地跟踪LLM和相关领域的最新研究动态。
"""
实践总结
实践中展示了 LangChain 的几个核心概念:
LLM - 多种模型支持
llm = ChatOpenAI(model="deepseek-chat", ...)
Prompts - 结构化提示
prompt_template = PromptTemplate(...)...prompt = ChatPromptTemplate.from_messages([...])
Chains-链式调用
llm_chain = prompt | llmllm_chain = LLMChain(llm=llm, prompt=prompt)
Agent - 智能代理
agent = create_openai_tools_agent(llm, tools, prompt)
Tools - 自定义工具+内置工具
tools = [Tool(name="get_introduction", ...)]
Memory - 记忆组件
memory = ConversationBufferMemory( memory_key="chat_history", return_messages=True)
从LLM简单对话,到LLM+提示+工具+Memory 的Agent,本实践最小限度的实现了langchain的开发过程,感兴趣的同学可以也尝试实现一下。
本次实践可以再次加深我们对于复杂Agent的理解:本质上是基于 LLM,在用户和大模型之间串联工具,根据更精细化的需求,可以实现更准确和垂直的目的,提高用户在某领域的AI使用上专业和便捷程度。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-05-08
2025-04-18
2025-05-06
2025-05-28
2025-06-05
2025-04-13
2025-04-18
2025-03-30
2025-05-19
2025-03-31
2025-06-13
2025-05-21
2025-05-19
2025-05-08
2025-05-06
2025-04-22
2025-04-18
2025-03-22