前言
大型语言模型(LLM)如GPT-4的出现,极大地推动了人工智能领域的发展。然而,直接与LLM的API交互来构建复杂应用,往往需要处理大量的prompt工程、状态管理和外部工具集成,过程非常繁琐。为了解决这个问题,LangChain
应运而生。它是一个强大的开源框架,旨在简化基于LLM的应用开发。
本文将作为一份入门指南,带你一步步了解LangChain的核心概念,并亲手构建你的第一个LLM应用。
什么是LangChain?
可以把LangChain想象成一个“瑞士军刀”,它将构建LLM应用的常用组件模块化,让你像搭积木一样轻松地将它们组合起来。这些组件包括:
- Models: 集成各种语言模型(如OpenAI, Hugging Face等)。
- Prompts: 强大的提示词管理、优化和序列化工具。
- Chains: 将LLM和其他组件按特定顺序“链接”起来,实现复杂的调用逻辑。
- Indexes: 结构化文档,让LLM可以轻松地查询和使用外部知识。
- Agents: 赋予LLM使用外部工具(如搜索引擎、计算器、API)的能力,让它能自主决策和行动。
- Memory: 让LLM在多次交互中能够“记住”之前的信息,实现有状态的对话。
通过这些组件,LangChain让开发者可以专注于应用的核心逻辑,而不是底层的实现细节。
准备工作
在开始之前,请确保你已经安装了Python,并拥有一个OpenAI API密钥。
1. 安装必要的库
我们需要安装LangChain的核心库以及与OpenAI集成的库。
pip install langchain langchain-openai
2. 配置你的API密钥
为了让LangChain能够调用OpenAI的模型,你需要设置API密钥。建议使用环境变量的方式来管理密钥,这样更安全。
在你的终端中执行:
export OPENAI_API_KEY="sk-..."
注意: 请将
sk-...
替换为你自己的真实OpenAI API密钥。
如果你在Jupyter Notebook或脚本中操作,也可以通过以下方式设置:
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
构建你的第一个LangChain应用:一个简单的问答机器人
我们的第一个应用非常简单:用户输入一个关于某个主题的问题,LLM返回一个简短的回答。
1. 导入必要的模块
首先,我们从 langchain_openai
导入 ChatOpenAI
作为我们的LLM模型,并从 langchain.prompts
导入 ChatPromptTemplate
来构建我们的提示。
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
2. 初始化LLM
我们选择并初始化一个聊天模型。这里我们使用 gpt-3.5-turbo
,因为它速度快且成本效益高。
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
temperature
参数控制输出的随机性,值越高,回答越有创意;值越低,回答越确定。
3. 创建Prompt模板
Prompt模板是LangChain的一大特色。它允许我们创建带有可变占位符的提示,让代码更具可重用性。
prompt = ChatPromptTemplate.from_template(
"你是一个知识渊博的助手。请用一句话回答关于“{topic}”的问题。"
)
这里的 {topic}
就是一个占位符,我们后续可以用具体的主题来替换它。
4. 创建并使用Chain
现在,我们将LLM和Prompt模板“链接”在一起,创建一个简单的调用链(Chain)。在LangChain中,我们可以使用管道符 |
来轻松实现这一点,这被称为LangChain Expression Language (LCEL)。
# 使用LCEL创建Chain
chain = prompt | llm
# 调用Chain
response = chain.invoke({"topic": "人工智能"})
print(response)
当你运行这段代码时,invoke
方法会将 {"topic": "人工智能"}
传递给 chain
。
prompt
组件接收到输入,并将{topic}
替换为“人工智能”,生成一个完整的prompt。- 这个完整的prompt被传递给
llm
组件。 llm
调用OpenAI API,并将返回的结果输出。
你可能会看到类似下面的输出:
AIMessage(content='人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。')
这个输出是一个 AIMessage
对象,其中 content
字段包含了模型的实际回答。
5. 提取纯文本回答
通常我们只需要最终的文本内容。我们可以再链接一个 StrOutputParser
来实现这个目的。
from langchain.schema.output_parser import StrOutputParser
# 创建一个新的Chain,增加输出解析器
chain_with_parser = prompt | llm | StrOutputParser()
# 再次调用
text_response = chain_with_parser.invoke({"topic": "量子计算"})
print(text_response)
这次,输出将直接是干净的字符串:
量子计算是一种遵循量子力学规律调控量子信息单元进行计算的新型计算模式。
总结
恭喜你!你已经成功使用LangChain构建并运行了你的第一个LLM应用。我们通过组合 PromptTemplate
、ChatOpenAI
模型和 StrOutputParser
,用极简的代码实现了一个简单的问答功能。
这仅仅是LangChain强大功能的冰山一角。在接下来的文章中,我们将继续探索更高级的主题,如Agents、Memory和Retrieval,让你能够构建更复杂、更智能的AI应用。敬请期待!
...