作为一名长期从事AI应用开发的工程师,我最近半年深度使用了LangChain框架来构建多个生产级对话系统。LangChain正在成为连接大语言模型(LLM)与实际业务场景的"胶水层",其模块化设计让开发者能快速搭建复杂AI工作流。本文将分享我的完整学习路径和实战经验,涵盖从核心概念到企业级应用的全套知识。
LangChain的核心价值在于将LLM应用开发抽象为六大标准化组件:
这种设计让开发者可以像搭积木一样组合功能。例如我们团队的知识库问答系统,就通过VectorstoreIndexCreator + ConversationalRetrievalChain的组合,仅用50行代码实现了原本需要数千行的工作。
python复制from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
prompt = PromptTemplate(
input_variables=["product"],
template="为{product}写5个创意广告文案,要求突出科技感",
)
chain = LLMChain(llm=OpenAI(temperature=0.7), prompt=prompt)
print(chain.run("智能手表"))
python复制from langchain.chains import TransformChain, SequentialChain
def transform_func(inputs):
text = inputs["text"]
return {"output_text": text.upper()}
transform_chain = TransformChain(
input_variables=["text"],
output_variables=["output_text"],
transform=transform_func
)
seq_chain = SequentialChain(
chains=[transform_chain, chain],
input_variables=["text", "product"]
)
文档处理是问答系统的关键前置步骤,我们的最佳实践包括:
python复制from langchain.text_splitter import (
MarkdownHeaderTextSplitter,
RecursiveCharacterTextSplitter
)
markdown_splitter = MarkdownHeaderTextSplitter(
headers_to_split_on=[("#", "Header 1"), ("##", "Header 2")]
)
单纯向量搜索常出现答非所问的情况,我们通过以下策略提升准确率:
python复制from langchain.retrievers import BM25Retrieval, EnsembleRetriever
bm25_retriever = BM25Retrieval.from_documents(docs)
vector_retriever = vectorstore.as_retriever()
ensemble_retriever = EnsembleRetriever(
retrievers=[bm25_retriever, vector_retriever],
weights=[0.4, 0.6]
)
python复制from langchain.retrievers.document_compressors import LLMChainExtractor
compressor = LLMChainExtractor.from_llm(OpenAI(temperature=0))
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=ensemble_retriever
)
python复制from langchain.cache import SQLiteCache
import langchain
langchain.llm_cache = SQLiteCache(database_path=".langchain.db")
python复制async def async_generate(chain, inputs):
return await chain.arun(inputs)
# 批量处理100个问题
tasks = [async_generate(chain, input) for input in batch_inputs]
await asyncio.gather(*tasks)
我们设计的评估指标包括:
实现方案:
python复制from langchain.evaluation import load_evaluator
evaluator = load_evaluator("labeled_score_string",
criteria={"accuracy": "回答与标准答案的吻合程度"},
llm=OpenAI(temperature=0)
)
eval_result = evaluator.evaluate_strings(
prediction=chain_output,
input=question,
reference=gold_answer
)
chain.verbose=True查看实际发送的promptsimilarity_search_with_score查看匹配分数在真实项目中,我们发现将LangChain与FastAPI结合构建微服务是最佳实践。以下是我们团队使用的标准项目结构:
code复制/project
/chains
core_chain.py
routing_chain.py
/models
embeddings.py
llm_wrappers.py
/api
endpoints.py # FastAPI路由
/evaluation
metrics.py
test_cases.json
这种架构下,每个Chain可以独立开发测试,通过API暴露能力。我们部署的客服系统每天处理超过2万次查询,平均响应时间控制在1.3秒以内。