LangChain

image

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:更新调试与监控部分,添加视频教程链接。