LangChain - AI应用开发利器(一)

1.LangChain简介


对于 LangChain,它是⼀个⽤于开发 由⼤语⾔模型 (LLM) 驱动的应⽤程序的框架。
通过前⼏个章节,我们已经说明尽管⼤模型的在某些⽅⾯表现振奋⼈⼼,但使⽤原⽣ LLM 可能会存在⼀些问题,例如将其当作搜索引擎去使⽤,LLM ⽣成的答案可能要⽐其他搜索引擎查到的答案更符合你的预期,但要是在复杂的场景下使⽤,如将 LLM 嵌⼊应⽤程序时却遭遇了全新难题:

  • 简单提⽰词(Prompt)得到的答案经常出现幻觉?
  • 提⽰词结构是否可以统⼀规范?
  • 如何实现开发过程中⼤模型的轻松、灵活切换?
  • ⼤模型输出是⾮结构化的,怎样与要求结构化数据的程序接⼝交互?
  • 如何克服预训练模型知识陈旧的问题,引⼊实时更新?
  • 如何连接模型与外部⼯具或系统,执⾏具体任务?
    LangChain 框架的核⼼⽬标就是应对这些挑战。它通过将⾃然语⾔处理流程拆解为标准化组件,让开发者能够⾃由组合并⾼效定制⼯作流。

2. LangChain代码快速上手

我们以下的例子都使用DeepSeek为例来进行代码编写

2.1. 申请API

去DeekSeek官网点击API开放平台,再点击左侧的API Key申请API

2.2. 安装相关的包

在pycharm中创建一个req.txt的文件,在终端输入pip install req.txt命令

req.txt的文件内容:

复制代码
langchain-openai==0.3.33
langchain==0.3.27
langchain-deepseek==0.1.4
langchain-ollama==0.3.6
langchain-tavily==0.2.12
langchain-chroma==0.2.5
langchain-community==0.3.22
nltk==3.9.2
langchain-redis==0.2.4
unstructured==0.18.15
markdown==3.9
redisvl==0.10.0

2.3. 编写相关的代码

代码:

python 复制代码
from langchain_core.runnables import RunnableSequence
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser

model = ChatOpenAI(api_key="...", model="deepseek-reasoner",openai_api_base="https://api.deepseek.com/v1", request_timeout=30 )

message = [
    SystemMessage("Translate the follwing setence from English to Chinese"),
    HumanMessage("Hello, Wrold!")  # 用户消息
]

message1 = [
    SystemMessage("介绍一下以下学校:"),
    HumanMessage("湖南农业大学,湖南师范大学") # 用户消息
]

message2 = [
    HumanMessage("说出你认为周杰伦最好听的一首歌") # 用户消息
]

message3 = [
    # SystemMessage("介绍一下以下学校:"),
    HumanMessage("说出你觉得湖南农业大学的优点") # 用户消息
]

result1 = model.invoke(message) # model.invoke()的返回值是AIMessage
print(result1)

parser = StrOutputParser()

chain1 = model | parser
chain2 = RunnableSequence(first=model, last=parser)
chain3 = model.pipe(parser)

result2 = chain1.invoke(message1)
result3 = chain2.invoke(message2)
result4 = chain3.invoke(message3)

print(result2)
print(result3)
print(result4)

运行结果:

2.3.1. 定义大模型

python 复制代码
from langchain_openai import ChatOpenAI
model = ChatOpenAI(api_key=".....", model="deepseek-reasoner",openai_api_base="https://api.deepseek.com/v1", request_timeout=30 )

2.3.2. 定义消息列表

python 复制代码
from langchain_core.messages import HumanMessage, SystemMessag
message1 = [
    SystemMessage("介绍一下以下学校:"),
    HumanMessage("湖南农业大学,湖南师范大学") 
]

message2 = [
    HumanMessage("说出你认为周杰伦最好听的一首歌") 
]

message3 = [
    # SystemMessage("介绍一下以下学校:"),
    HumanMessage("说出你觉得湖南农业大学的优点") 
]

参数说明:
SystemMessage :表⽰ 系统⻆⾊ 消息,系统消息通常作为输⼊消息序列中的第⼀条传⼊,是
⽤来启动 AI ⾏为的消息。
HumanMessage :表⽰ ⽤⼾⻆⾊ 消息,是来⾃⽤⼾的、从⽤⼾传递到模型的消息。

2.3.4. 步骤4:调⽤⼤模型

model 是 LangChain Runnable (可运⾏)接⼝的实例,这意味着 model 提供了⼀个标准接⼝供 我们与之交互。要简单地调⽤模型,我们可以将 消息列表 传递给 .invoke ⽅法。 使⽤ .invoke ⽅法进⾏⼤模型调⽤,核⼼代码:

python 复制代码
result1 = model.invoke(message)
print(result)

输出结果(调试可以看⻅ result 类型为 AIMessage):

输出说明:
AIMessage :来⾃ AI 的消息。从聊天模型返回,作为对提⽰(输⼊)的响应。
content :消息的内容。
additional_kwargs :与消息关联的其他有效负载数据。对于来⾃ AI 的消息,可能包括模
型提供程序编码的⼯具调⽤。
response_metadata :响应元数据。例如:响应标头、logprobs、令牌计数、模型名称。
侧重于 "响应"本⾝的信息,⽐如这次请求的 ID、使⽤的模型版本、以及服务提供商返回
的所有原始元数据。它主要⽤于调试、⽇志记录和获取请求的上下⽂信息。
usage_metadata :消息的使⽤元数据,例如令牌计数。
侧重于 "资源消耗"的量化信息,即这次请求消耗了多少 Token。它主要⽤于成本计算、
监控和预算控制。

2.3.5. 解析输出

若只想输出聊天模型返回的结果字符串,可以使⽤ StrOutputParser 输出解析器组件,将⼤模型
输出结果解析为最可能的字符串。核⼼代码:

python 复制代码
parser = StrOutputParser()

2.3.6. 链式执行

通过上述步骤,⽆论是调⽤⼤模型,还是输出解析,我们发现,每次都调⽤了⼀个 invoke() ⽅法,最 终才会得到我们想要的结果。
对于 LangChain,它给我们提供了链式执⾏的能⼒,即我们只需要定义各个"组件",将它们"链起
来",⼀次性执⾏即可得到最终效果。

python 复制代码
# 链式输出,上一个组件的输出座位下一个组件的输入,注意组件之间的顺序
chain1 = model | parser
chain2 = RunnableSequence(first=model, last=parser)
chain3 = model.pipe(parser)

result2 = chain1.invoke(message1)
result3 = chain2.invoke(message2)
result4 = chain3.invoke(message3)
相关推荐
开longlong了吗?25 分钟前
Luan Takeaway——大模型驱动的智能外卖管理系统( Spring Cloud、Langchain4j )
后端·spring·spring cloud·langchain
qq_5470261793 小时前
LangChain 多模态(Multimodal)
langchain
San304 小时前
深入浅出 RAG 与向量数据库:从 Milvus 基础到电子书级语义搜索实战
langchain·node.js·llm
吴佳浩6 小时前
OpenClaw、Claude Code 等 Agent 为什么都选择 Node.js?
前端·人工智能·langchain
爱打代码的小林6 小时前
基于 LangChain 实现带记忆功能的智能对话
人工智能·langchain
小超同学你好7 小时前
LangGraph 10. 记忆管理与三层记忆 与 OpenClaw Memory 模块介绍
人工智能·语言模型·langchain
此生只爱蛋7 小时前
【LangChain】提示词模版
langchain
爱打代码的小林11 小时前
基于 LangChain + 通义千问 + FAISS 构建 RAG 问答系统
langchain·大模型·faiss·rag
小王努力学编程11 小时前
LangGraph——AI应用开发框架
服务器·人工智能·python·ai·langchain·rag·langgraph
有个人神神叨叨12 小时前
langchain-ai/deepagents
人工智能·langchain