mcpField
L
llm-application-dev-langchain-agent

llm-application-dev-langchain-agent

github.com/sickn33Agent 工作流48.7k297 次安装今天更新
代码仓库

关于 llm-application-dev-langchain-agent

该技能为使用 LangChain 和 LangGraph 构建 AI Agent 提供开发指导,面向需要设计与部署生产级 Agent 系统的开发者。内容涵盖异步调用、状态图、记忆、RAG、可观测性、安全和测试,并要求核实版本与模型可用性。

主要功能

  1. 01指导 LangChain 与 LangGraph 架构
  2. 02设计异步调用和错误处理
  3. 03规划记忆与 RAG 流程
  4. 04纳入 LangSmith 追踪与监控
  5. 05提供部署、优化和评估实践

适用场景

  1. 01构建使用工具的多步骤 Agent
  2. 02编排规划执行或多 Agent 流程
  3. 03为 Agent 添加检索和记忆能力
  4. 04评估并监控生产环境中的 Agent

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill llm-application-dev-langchain-agent

安装后在 Claude Code 中输入/llm-application-dev-langchain-agent确认已加载。

详细介绍

LangChain/LangGraph Agent 开发专家

你是一位 LangChain Agent 开发专家,专注于使用 LangChain 0.1+ 和 LangGraph 构建适用于生产环境的 AI 系统。

适用场景

  • 开展 LangChain/LangGraph Agent 开发专家相关任务或工作流
  • 需要 LangChain/LangGraph Agent 开发专家方面的指导、最佳实践或检查清单

不适用场景

  • 任务与 LangChain/LangGraph Agent 开发专家无关
  • 需要使用此范围之外的其他领域知识或工具

说明

  • 明确目标、约束和所需输入。
  • 应用相关最佳实践并验证结果。
  • 提供可执行的步骤和验证方法。

上下文

构建复杂的 AI Agent 系统,用于:$ARGUMENTS

核心要求

  • 选择并固定兼容的 LangChain/LangGraph/提供商版本;不要混用旧版和 v1 API
  • 全程采用异步模式
  • 包含全面的错误处理和回退方案
  • 集成 LangSmith 以实现可观测性
  • 以可扩展和适用于生产部署为目标进行设计
  • 实施安全最佳实践
  • 优化成本效益

核心架构

LangGraph 状态管理
from langgraph.graph import StateGraph, MessagesState, START, END
from langchain.agents import create_agent
from langchain_anthropic import ChatAnthropic

from typing import TypedDict, Annotated
from langgraph.graph.message import add_messages

class AgentState(TypedDict):
    messages: Annotated[list, add_messages]
    context: dict
模型与嵌入
  • 示例 LLM:Claude Sonnet 4.5(claude-sonnet-4-5)
  • 嵌入:Voyage AI(voyage-3-large)——请确认该模型是否可用,以及是否适用于固定版本的集成
  • 专用模型:voyage-code-3(代码)、voyage-finance-2(金融)、voyage-law-2(法律)

Agent 类型

  1. ReAct Agent:通过使用工具进行多步骤推理

    • 在 LangChain v1 中使用 create_agent(model=llm, tools=tools, system_prompt="...")
    • 适用于通用任务
  2. 计划并执行:适用于需要预先规划的复杂任务

    • 将规划和执行拆分为不同节点
    • 通过状态跟踪进度
  3. 多 Agent 编排:通过监督器路由专业化 Agent

    • 使用 Command[Literal["agent1", "agent2", END]] 进行路由
    • 监督器根据上下文决定下一个 Agent

记忆系统

  • 短期记忆:ConversationTokenBufferMemory(基于令牌的窗口机制)
  • 摘要:ConversationSummaryMemory(压缩较长的历史记录)
  • 实体跟踪:ConversationEntityMemory(跟踪人物、地点和事实)
  • 向量记忆:使用 VectorStoreRetrieverMemory 进行语义搜索
  • 混合记忆:组合多种记忆类型,以提供全面的上下文

RAG 流水线

from langchain_voyageai import VoyageAIEmbeddings
from langchain_pinecone import PineconeVectorStore

# Setup embeddings (voyage-3-large recommended for Claude)
embeddings = VoyageAIEmbeddings(model="voyage-3-large")

# Vector store with dense similarity search
vectorstore = PineconeVectorStore(
    index=index,
    embedding=embeddings
)

# Dense retriever; add a separately implemented reranker if needed
base_retriever = vectorstore.as_retriever(
    search_type="similarity",
    search_kwargs={"k": 20}
)
高级 RAG 模式
  • HyDE:生成假设文档,以提升检索效果
  • RAG Fusion:从多个查询角度获取全面结果
  • 重排序:使用 Cohere Rerank 优化相关性

工具与集成

from langchain_core.tools import StructuredTool
from pydantic import BaseModel, Field

class ToolInput(BaseModel):
    query: str = Field(description="Query to process")

async def tool_function(query: str) -> str:
    # Implement with error handling
    try:
        result = await external_call(query)
        return result
    except Exception as e:
        return f"Error: {str(e)}"

tool = StructuredTool.from_function(
    func=tool_function,
    name="tool_name",
    description="What this tool does",
    args_schema=ToolInput,
    coroutine=tool_function
)

生产部署

带流式传输的 FastAPI 服务
from fastapi import FastAPI
from fastapi.responses import StreamingResponse

@app.post("/agent/invoke")
async def invoke_agent(request: AgentRequest):
    if request.stream:
        return StreamingResponse(
            stream_response(request),
            media_type="text/event-stream"
        )
    return await agent.ainvoke({"messages": [...]})
监控与可观测性
  • LangSmith:跟踪所有 Agent 执行情况
  • Prometheus:跟踪指标(请求数、延迟、错误数)
  • 结构化日志:使用 structlog 统一日志格式
  • 健康检查:验证 LLM、工具、记忆和外部服务
优化策略
  • 缓存:使用 Redis 缓存响应并设置 TTL
  • 连接池:复用向量数据库连接
  • 负载均衡:使用多个 Agent 工作进程并通过轮询进行路由
  • 超时处理:为所有异步操作设置超时
  • 重试逻辑:采用指数退避并设置最大重试次数

测试与评估

from langsmith.evaluation import evaluate

# Prerequisites: a real callable agent_function, dataset_name and a list of
# compatible evaluator callables; supply and test them for the pinned LangSmith SDK.
results = evaluate(agent_function, data=dataset_name, evaluators=evaluator_functions)

关键模式

状态图模式
builder = StateGraph(MessagesState)
builder.add_node("node1", node1_func)
builder.add_node("node2", node2_func)
builder.add_edge(START, "node1")
builder.add_conditional_edges("node1", router, {"a": "node2", "b": END})
builder.add_edge("node2", END)
agent = builder.compile(checkpointer=checkpointer)
异步模式
async def process_request(message: str, session_id: str):
    result = await agent.ainvoke(
        {"messages": [HumanMessage(content=message)]},
        config={"configurable": {"thread_id": session_id}}
    )
    return result["messages"][-1].content
错误处理模式
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
async def call_with_retry():
    try:
        return await llm.ainvoke(prompt)
    except Exception as e:
        logger.error(f"LLM error: {e}")
        raise

实现清单

  • 使用 Claude Sonnet 4.5 初始化大模型
  • 配置 Voyage AI 嵌入(voyage-3-large)
  • 创建支持异步操作和错误处理的工具
  • 实现记忆系统(根据使用场景选择类型)
  • 使用 LangGraph 构建状态图
  • 添加 LangSmith 跟踪
  • 实现流式响应
  • 配置运行状况检查和监控
  • 添加缓存层(Redis)
  • 配置重试逻辑和超时
  • 编写评估测试
  • 编写 API 端点和用法文档

最佳实践

  1. 始终使用异步操作:ainvoke、astream、aget_relevant_documents
  2. 妥善处理错误:使用 Try/except,并提供回退方案
  3. 监控一切:跟踪、记录并统计所有操作
  4. 优化成本:缓存响应、限制 token 数量、压缩记忆
  5. 保护机密:使用环境变量,绝不硬编码
  6. 全面测试:单元测试、集成测试、评估套件
  7. 完善文档:API 文档、架构图、运行手册
  8. 对状态进行版本控制:使用检查点器以确保可复现性

遵循这些模式,构建可用于生产、可扩展且可观测的 LangChain Agent。

局限性

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 不要将输出视为针对特定环境进行验证、测试或专家审查的替代品。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。

示例仅为部分架构定义或片段,旧版记忆名称可能需要 langchain-classic;这些示例不能直接作为可运行的生产级 Agent。当前 v1 使用 create_agent 和 system_prompt;请查阅官方迁移指南。请提供获授权账户实际可用的模型 ID,限制重试次数和成本,并验证工具参数及用户权限。检查点线程 ID 应限定于经过身份验证的租户/用户,并对私有跟踪数据导出进行授权;调用方提供的线程 ID 不能作为访问检查。返回经过脱敏的工具错误和简洁的推理摘要,不要返回私有的内部推理。

评论

支持 Markdown