LangChain

LangChain
LangChain 是一个强大的框架,旨在帮助开发人员使用大型语言模型(LLM)构建端到端的应用程序。
1. 安装 LangChain
首先,你需要安装 LangChain。你可以使用 pip 来安装:
pip install langchain langchain-openai
2. 基本概念
在开始编写代码之前,了解一些 LangChain 的基本概念是很重要的:
- 链(Chain):
- 一个链是由一系列步骤组成的任务,每个步骤可以是一个模型调用、数据处理或其他操作。
- 代理(Agent):
- 代理用于处理复杂的任务,可以根据上下文动态选择不同的链来执行。
- 加载器(Loader):
- 用于从不同的数据源加载数据,如文件、数据库等。
- 文本分割器(Text Splitter):
- 用于将长文本分割成较小的片段,以便处理。
- 向量存储(Vector Store):
- 用于存储和检索向量化的数据。
3. 创建第一个 LangChain 应用
3.1 设置项目
创建一个新的 Python 项目,并安装必要的依赖项:
mkdir my_langchain_project
cd my_langchain_project
pip install langchain langchain-openai
3.2 编写代码
创建一个新的 Python 文件(例如 main.py),并编写以下代码:
from langchain_openai import ChatOpenAI
# 初始化 OpenAI 模型
model = ChatOpenAI(model="gpt-4o-mini", api_key="你的API密钥")
# 最简单的链:直接调用模型
response = model.invoke("你好,LangChain!")
print(response.content)
4. 高级功能
4.1 使用代理
代理可以帮助你处理更复杂的任务。以下是一个简单的代理示例:
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini", api_key="你的API密钥")
# 定义一个工具
@tool
def get_weather(city: str) -> str:
"""查询指定城市的天气"""
return f"{city} 今天晴,25°C"
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,可以使用工具完成任务。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(model, [get_weather], prompt)
executor = AgentExecutor(agent=agent, tools=[get_weather])
# 运行代理
result = executor.invoke({"input": "北京今天天气怎么样?"})
print(result["output"])
4.2 集成向量存储
向量存储用于存储和检索向量化的数据。以下是一个简单的示例:
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
# 初始化向量存储
embeddings = OpenAIEmbeddings(api_key="你的API密钥")
vector_store = FAISS.from_texts(
["这是第一个文档的内容", "这是第二个文档的内容"],
embedding=embeddings,
)
# 语义检索
results = vector_store.similarity_search("第一个文档", k=1)
for doc in results:
print(doc.page_content)
5. 部署
你可以将你的 LangChain 应用部署为 REST API,以便其他应用程序可以通过 HTTP 请求访问它。以下是一个简单的 Flask 应用示例:
from flask import Flask, request, jsonify
from langchain_openai import ChatOpenAI
app = Flask(__name__)
# 初始化模型
model = ChatOpenAI(model="gpt-4o-mini", api_key="你的API密钥")
@app.route("/api", methods=["POST"])
def api():
input_text = request.json.get("input_text")
output = model.invoke(input_text)
return jsonify({"output": output.content})
if __name__ == "__main__":
app.run(port=5000)
6. 调试与监控
使用 LangSmith 平台,你可以调试、测试、评估和监控你的 LLM 应用程序。以下是一个简单的示例:
import os
# 配置 LangSmith 追踪(需先注册 LangSmith 并获取 API 密钥)
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "你的LangSmith API密钥"
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini", api_key="你的API密钥")
response = model.invoke("你好,LangChain!")
print(response.content)
7. 图表与示例
为了更好地理解 LangChain 的工作流程,以下是一个简单的图表,展示了链、代理和向量存储的交互关系:
+----------------+ +----------------+ +----------------+
| | | | | |
| 用户输入 +-------> 代理 +-------> 链 |
| | | | | |
+----------------+ +----------------+ +----------------+
|
|
v
+----------------+
| |
| 向量存储 |
| |
+----------------+
8. 常见问题解答(FAQ)
8.1 Q1: 如何获取 OpenAI 的 API 密钥?
A1: 你可以在 OpenAI 的官方网站上注册一个账户,并在账户设置中生成 API 密钥。
8.2 Q2: LangChain 支持哪些编程语言?
A2: LangChain 提供 Python 和 JavaScript/TypeScript 两种官方版本(LangChain Python 与 LangChain.js),可满足不同技术栈的需求。
8.3 Q3: 如何处理 LangChain 中的错误?
A3: 你可以使用 try-except 语句来捕获和处理错误,并使用调试工具来排查问题。
9. 实际案例分析
9.1 文本分类应用
以下是一个使用 LangChain 构建的文本分类应用示例:
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
model = ChatOpenAI(model="gpt-4o-mini", api_key="你的API密钥")
# 定义文本分类链(LCEL 方式)
prompt = ChatPromptTemplate.from_template(
"请将以下文本分类为【科技、体育、娱乐、其他】中的一类,只输出类别:{input}"
)
chain = prompt | model | StrOutputParser()
# 运行链
input_text = "这是一个关于机器学习的文本。"
output = chain.invoke(input_text)
print(output)
10. 视频教程链接
为了帮助你更直观地学习 LangChain,这里提供一些优质的视频教程链接:
11. 参考链接
12. 更新和维护
随着 LangChain 的不断更新和发展,教程内容也需要及时更新和维护。以下是一个版本更新日志示例:
版本更新日志:
- 2024-09-28:初始版本发布,涵盖基本概念和示例代码。
- 2024-10-15:增加高级功能和实际案例分析。
- 2024-11-01:更新调试与监控部分,添加视频教程链接。