SuperAPI AI 工具集

langchain-development

智能体与模型

查看项目

更新于 10-15 13:10

技能介绍

本技能面向使用 Python 开发 LangChain、LangGraph 及 LLM 应用的开发者,提供专家级指导。强调编写简洁、技术性强的回答并配以准确的 Python 示例;采用函数式、声明式编程,尽量避免类;优先迭代与模块化而非重复代码;变量命名使用带辅助动词的描述性名称(如 is_active、has_context);严格遵循 PEP 8 风格。

代码组织方面,建议按功能划分逻辑模块,目录结构包括 chains(链定义)、agents(智能体配置与工具)、tools(自定义工具实现)、memory(记忆与状态管理)、prompts(提示模板与管理)、retrievers(RAG 与检索组件)、callbacks(自定义回调处理器)、utils(工具函数)、tests(测试文件)和 config(配置文件)。命名约定为:文件、函数和变量使用 snake_case,类使用 PascalCase,私有函数以下划线为前缀,并使用能体现用途的描述性名称(如 create_retrieval_chain、build_agent_executor)。

LangChain 表达式语言(LCEL)部分,介绍使用管道操作符(|)组合链,优先使用 RunnableSequence 和 RunnableParallel 处理复杂工作流,并通过 RunnableLambda 实现恰当的错误处理,示例展示了将检索器、提示、LLM 和输出解析器用管道串联的写法。最佳实践包括:单输入用 invoke()、多输入用 batch()、实时流式输出用 stream()、运行时配置用 with_config()、为可运行对象附加工具或函数用 bind()。

智能体与工具部分,说明使用 @tool 装饰器定义工具并配清晰的文档字符串,为所有工具参数添加类型提示,实现输入验证,尽量返回结构化输出;示例使用 Pydantic 的 BaseModel 与 Field 定义参数结构。智能体配置建议根据模型能力选用 create_react_agent 或 create_tool_calling_agent,实现带最大迭代次数的智能体执行器,添加回调用于监控与调试,复杂工具交互使用结构化聊天智能体。

记忆与状态管理部分,会话记忆可用 ConversationBufferMemory(短对话)、ConversationSummaryMemory(长对话)、ConversationBufferWindowMemory(固定长度历史),生产环境使用持久化存储后端(Redis、PostgreSQL)。LangGraph 状态方面,使用 TypedDict 定义显式状态模式,为复杂状态更新实现状态归约器,使用检查点支持可恢复工作流,并跨会话处理状态持久化;示例展示了用 Annotated 与 add 定义消息列表状态的 AgentState 以及 StateGraph 的初始化。

RAG 部分涵盖三方面:文档处理建议使用合适的文本分割器(RecursiveCharacterTextSplitter、MarkdownTextSplitter),实现带重叠的合适分块大小,分割时保留元数据,按文件类型选用文档加载器;向量存储建议按规模需求选择,实现嵌入缓存,条件允许时使用混合搜索(稠密+稀疏),配置合适的相似度度量;检索策略包括多查询检索、上下文压缩降噪、父文档检索以及重排序以提升相关性。

LangSmith 集成方面,监控部分建议通过 LANGCHAIN_TRACING_V2=true 启用追踪,为运行添加名称便于识别,实现自定义元数据用于过滤,使用标签分类;调试部分建议查看追踪以定位性能瓶颈,分析 token 使用模式,监控链各组件的延迟,并为错误率设置告警。

错误处理建议实现带指数退避的重试逻辑,优雅处理 LLM 提供方的速率限制,为关键路径使用回退链,记录带足够上下文的错误;示例展示了使用 RunnableWithFallbacks 的 with_fallbacks 方法处理 RateLimitError 和 TimeoutError。性能优化建议对 I/O 密集型操作使用异步方法(ainvoke、abatch),对昂贵操作实现缓存,尽可能批量请求,使用流式输出提升用户体验。测试方面,为单个链组件编写单元测试,为完整链实现集成测试,单元测试中对 LLM 调用使用模拟,并测试边界情况与错误条件。依赖清单包括:langchain、langchain-core、langchain-community、langgraph、langsmith、python-dotenv、pydantic。