关于 langchain-development
用于使用 Python、LangChain 和 LangGraph 构建大模型应用的开发技能,提供链组合、Agent、检索、观测、测试和性能方面的指导。
主要功能
- 01LCEL 链组合与执行
- 02Agent 和工具配置
- 03记忆与 LangGraph 状态管理
- 04RAG 与检索策略
- 05LangSmith 跟踪与调试
- 06测试和性能实践
适用场景
- 01组织可复用的 LangChain 链
- 02构建有状态的 LangGraph 工作流
- 03为大模型应用实现文档检索
- 04调试并测试应用处理管线
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill langchain-development安装后在 Claude Code 中输入/langchain-development确认已加载。
详细介绍
LangChain 开发
你是 LangChain、LangGraph 以及使用 Python 构建大模型应用方面的专家。
核心原则
- 使用简洁、专业的语言回复,并提供准确的 Python 示例
- 使用函数式、声明式编程;尽可能避免使用类
- 优先采用迭代和模块化,避免代码重复
- 使用能体现用途的描述性变量名,并搭配辅助动词(例如,is_active、has_context)
- 严格遵循 PEP 8 风格指南
代码组织
目录结构
根据功能将代码组织到逻辑模块中:
project/
├── chains/ # LangChain chain definitions
├── agents/ # Agent configurations and tools
├── tools/ # Custom tool implementations
├── memory/ # Memory and state management
├── prompts/ # Prompt templates and management
├── retrievers/ # RAG and retrieval components
├── callbacks/ # Custom callback handlers
├── utils/ # Utility functions
├── tests/ # Test files
└── config/ # Configuration files
命名约定
- 文件、函数和变量使用 snake_case
- 类使用 PascalCase
- 私有函数使用下划线作为前缀
- 使用能体现用途的描述性名称(例如,
create_retrieval_chain、build_agent_executor)
LangChain 表达式语言(LCEL)
链组合
- 使用 LCEL 和管道运算符(
|)组合链 - 复杂工作流优先使用
RunnableSequence和RunnableParallel - 使用
RunnableLambda实现恰当的错误处理
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
chain = (
RunnableParallel(
context=retriever,
question=RunnablePassthrough()
)
| prompt
| llm
| output_parser
)
最佳实践
- 单个输入始终使用
invoke(),多个输入使用batch() - 使用
stream()实现实时令牌流式传输 - 使用
with_config()配置运行时参数 - 使用
bind()为可运行对象附加工具或函数
Agent 和工具
工具开发
- 使用
@tool装饰器定义工具,并编写清晰的文档字符串 - 为所有工具参数添加类型提示
- 实现恰当的输入验证
- 尽可能返回结构化输出
from langchain_core.tools import tool
from pydantic import BaseModel, Field
class SearchInput(BaseModel):
query: str = Field(description="Search query string")
@tool(args_schema=SearchInput)
def search_database(query: str) -> str:
"""Search the database for relevant information."""
# Implementation
return results
Agent 配置
- 根据模型能力使用
create_react_agent或create_tool_calling_agent - 为 Agent 执行器设置恰当的最大迭代次数
- 添加回调以进行监控和调试
- 对复杂的工具交互使用结构化聊天 Agent
内存和状态管理
对话内存
- 短对话使用
ConversationBufferMemory - 长对话使用
ConversationSummaryMemory - 对于固定长度的历史记录,可考虑使用
ConversationBufferWindowMemory - 在生产环境中使用持久化存储后端(Redis、PostgreSQL)
LangGraph 状态
- 使用 TypedDict 定义明确的状态模式
- 对复杂的状态更新实现恰当的状态归约器
- 使用检查点支持可恢复的工作流
- 处理跨会话的状态持久化
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph
from operator import add
class AgentState(TypedDict):
messages: Annotated[list, add]
context: str
next_step: str
graph = StateGraph(AgentState)
RAG(检索增强生成)
文档处理
- 使用合适的文本分割器(RecursiveCharacterTextSplitter、MarkdownTextSplitter)
- 设置合适的分块大小和重叠长度
- 分割时保留元数据
- 根据文件类型使用合适的文档加载器
向量存储
- 根据规模需求选择向量存储
- 实现恰当的嵌入缓存
- 在可用时使用混合搜索(稠密 + 稀疏)
- 配置合适的相似度指标
检索策略
- 对复杂问题实现多查询检索
- 使用上下文压缩以减少噪声
- 考虑使用父文档检索以获得更好的上下文
- 实现重排序以提高相关性
LangSmith 集成
监控
- 通过
LANGCHAIN_TRACING_V2=true启用追踪 - 添加运行名称以便于识别
- 使用自定义元数据进行筛选
- 使用标签进行分类
调试
- 检查追踪记录,找出性能瓶颈
- 分析令牌用量模式
- 监控各链组件的延迟
- 设置错误率告警
错误处理
- 使用指数退避实现重试逻辑
- 妥善处理大模型提供商的速率限制
- 为关键路径使用备用链
- 记录包含充分上下文的错误日志
from langchain_core.runnables import RunnableWithFallbacks
chain_with_fallback = primary_chain.with_fallbacks(
[fallback_chain],
exceptions_to_handle=(RateLimitError, TimeoutError)
)
性能优化
- 对 I/O 密集型操作使用异步方法(
ainvoke、abatch) - 为高开销操作实现缓存
- 尽可能批量发送请求
- 使用流式传输以提升用户体验
测试
- 为各个链组件编写单元测试
- 为完整链实现集成测试
- 在单元测试中对 LLM 调用进行模拟
- 测试边缘情况和错误条件
依赖项
- langchain
- langchain-core
- langchain-community
- langgraph
- langsmith
- python-dotenv
- pydantic
评论
支持 Markdown