mcpField
L
langchain-development

langchain-development

github.com/mindrallyAgent 工作流287685 次安装3 周前更新
代码仓库

关于 langchain-development

用于使用 Python、LangChain 和 LangGraph 构建大模型应用的开发技能,提供链组合、Agent、检索、观测、测试和性能方面的指导。

主要功能

  1. 01LCEL 链组合与执行
  2. 02Agent 和工具配置
  3. 03记忆与 LangGraph 状态管理
  4. 04RAG 与检索策略
  5. 05LangSmith 跟踪与调试
  6. 06测试和性能实践

适用场景

  1. 01组织可复用的 LangChain 链
  2. 02构建有状态的 LangGraph 工作流
  3. 03为大模型应用实现文档检索
  4. 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