微信扫码
添加专属顾问
我要投稿
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_KEYload_dotenv()def agent_example():# 初始化DeepSeek LLMllm = 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 Bpipeline = SimpleSequentialChain(chains=[chain1, chain2])# 一句话搞定print(pipeline.invoke({"input": "请帮我告诉老板我今天晚点到"}))# 回答"""Subject: Urgent: Informing of My EveningDelayDear [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增加memoryagent_executor = AgentExecutor(agent=agent,# 新增memorymemory=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-10-29
为什么我们选择 LangGraph 作为智能体系统的技术底座?
2025-10-27
Langchain 、 Manus 组了一个研讨会:Agent越智能,死得越快!
2025-10-23
LangChain V1.0 深度解析:手把手带你跑通全新智能体架构
2025-10-23
LangChain 与 LangGraph 双双发布 1.0:AI 智能体框架迎来里程碑时刻!
2025-10-19
AI 不再“乱跑”:LangChain × LangGraph 打造可控多阶段智能流程
2025-10-15
LangChain对话Manus创始人:顶级AI智能体上下文工程的“满分作业”首次公开
2025-10-09
Langchain回应OpenAI:为什么我们不做拖拉拽工作流
2025-09-21
告别无效检索:我用LangExtract + Milvus升级 RAG 管道的实战复盘
2025-09-13
2025-09-21
2025-10-19
2025-08-19
2025-08-17
2025-09-19
2025-09-12
2025-09-06
2025-08-03
2025-08-29
2025-10-29
2025-07-14
2025-07-13
2025-07-05
2025-06-26
2025-06-13
2025-05-21
2025-05-19