Token导航 LogoToken导航

Agent Skill · 研究检索

langchain-fundamentals(LangChain fundamentals 搜索)

langchain-fundamentals 用于记录任务执行中的错误、用户纠正、经验和能力缺口,适合在 Codex、Claude、Cursor、Gemini CLI 中希望让 Agent 持续沉淀问题、修正和最佳实践时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

langchain-fundamentals 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为只读;许可证信息还不明确,第三方扫描有提醒项,按安装量在研究检索类的 73,675 个 Skill 里排第 910。

总安装 143,376周安装 5,775GitHub Stars 638下载 45,008核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:langchain-fundamentals(LangChain fundamentals 搜索)
来源仓库:https://github.com/langchain-ai/langchain-skills
仓库路径:skills/langchain-fundamentals
安装命令:
npx skills add https://github.com/langchain-ai/langchain-skills --skill langchain-fundamentals
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/langchain-ai/langchain-skills --skill langchain-fundamentals

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

使用 create_agent()、工具和中间件模式构建生产 LangChain 代理。

使用create_agent() 带有型号、工具列表、系统提示;使用检查点配置状态持久性 和线程 ID 用于跨调用的对话记忆 通过@tool定义工具 装饰器 (Python) 或 tool() 具有清晰描述的函数 (TypeScript),以便代理知道何时调用它们 添加中间件,例如 HumanInTheLoopMiddleware 用于审批工作流程、自定义错误处理以及对代理决策的人机交互控制 设置recursion_limit 在调用配置中以防止无限循环,并通过 result["messages"][-1].content 访问结果 而不是直接访问内容

来源仓库内路径:skills/langchain-fundamentals

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/langchain-ai/langchain-skills --skill langchai…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它标注为只读,先用只读任务试一次,确认行为符合预期再扩大使用范围。

常见问题

6 条

langchain-fundamentals 怎么安装?

在终端执行 npx skills add https://github.com/langchain-ai/langchain-skills --skill langchain-fundamen…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

langchain-fundamentals 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

langchain-fundamentals 需要什么权限?

权限级别是只读。该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

langchain-fundamentals 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

langchain-fundamentals 用的人多吗?

公开数据是累计安装 143,376 次,近一周安装 5,775 次,下载 45,008 次,GitHub 638 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

langchain-fundamentals 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 标注为只读权限,试用阶段不容易误改本地文件。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。
  • 只想先试试效果、不希望它改动本地文件的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
langchain-fundamentals

LangChain fundamentals 搜索 · 本页

143,376638只读未明确有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

<create_agent>

Creating Agents with create_agent

create_agent() is the recommended way to build agents. It handles the agent loop, tool execution, and state management.

Agent Configuration Options

ParameterPurposeExample
modelLLM to use"anthropic:claude-sonnet-4-5" or model instance
toolsList of tools[search, calculator]
system_prompt / systemPromptAgent instructions"You are a helpful assistant"
checkpointerState persistenceMemorySaver()
middlewareProcessing hooks[HumanInTheLoopMiddleware] (Python) / [humanInTheLoopMiddleware({...})] (TypeScript)
</create_agent>

@tool def get_weather(location: str) -> str: """Get current weather for a location.

Args:
    location: City name
"""
return f"Weather in {location}: Sunny, 72F"

agent = create_agent(model="anthropic:claude-sonnet-4-5", tools=[get_weather], system_prompt="You are a helpful assistant.")

result = agent.invoke({"messages": [{"role": "user", "content": "What's the weather in Paris?"}]}) print(result["messages"][-1].content)

</python>
<typescript>

import { createAgent } from "langchain"; import { tool } from "@langchain/core/tools"; import { z } from "zod";

const getWeather = tool( async ({ location }) => Weather in ${location}: Sunny, 72F, { name: "get_weather", description: "Get current weather for a location.", schema: z.object({ location: z.string().describe("City name") }), } );

const agent = createAgent({ model: "anthropic:claude-sonnet-4-5", tools: [getWeather], systemPrompt: "You are a helpful assistant.", });

const result = await agent.invoke({ messages: [{ role: "user", content: "What's the weather in Paris?" }], }); console.log(result.messages[result.messages.length - 1].content);


checkpointer = MemorySaver()

agent = create_agent(model="anthropic:claude-sonnet-4-5", tools=[search], checkpointer=checkpointer,)

config = {"configurable": {"thread_id": "user-123"}} agent.invoke({"messages": [{"role": "user", "content": "My name is Alice"}]}, config=config) result = agent.invoke({"messages": [{"role": "user", "content": "What's my name?"}]}, config=config)

# Agent remembers: "Your name is Alice"

</python> <typescript> Add MemorySaver checkpointer to maintain conversation state across invocations.

import { createAgent } from "langchain";
import { MemorySaver } from "@langchain/langgraph";

const checkpointer = new MemorySaver();

const agent = createAgent({
  model: "anthropic:claude-sonnet-4-5",
  tools: [search],
  checkpointer,
});

const config = { configurable: { thread_id: "user-123" } };
await agent.invoke({ messages: [{ role: "user", content: "My name is Alice" }] }, config);
const result = await agent.invoke({ messages: [{ role: "user", content: "What's my name?" }] }, config);
// Agent remembers: "Your name is Alice"

Tools are functions that agents can call. Use the @tool decorator (Python) or tool() function (TypeScript).

@tool def add(a: float, b: float) -> float: """Add two numbers.

Args:
    a: First number
    b: Second number
"""
return a + b
</python>
<typescript>

import { tool } from "@langchain/core/tools"; import { z } from "zod";

const add = tool( async ({ a, b }) => a + b, { name: "add", description: "Add two numbers.", schema: z.object({ a: z.number().describe("First number"), b: z.number().describe("Second number"), }), } );


Middleware intercepts the agent loop to add human approval, error handling, logging, and more. A deep understanding of middleware is essential for production agents — use `HumanInTheLoopMiddleware` (Python) / `humanInTheLoopMiddleware` (TypeScript) for approval workflows, and `@wrap_tool_call` (Python) / `createMiddleware` (TypeScript) for custom hooks.

Key imports:

from langchain.agents.middleware import HumanInTheLoopMiddleware, wrap_tool_call

import { humanInTheLoopMiddleware, createMiddleware } from "langchain";


Key patterns:

- **HITL**: `middleware=[HumanInTheLoopMiddleware(interrupt_on={"dangerous_tool": True})]` — requires `checkpointer` + `thread_id`
- **Resume after interrupt**: `agent.invoke(Command(resume={"decisions": [{"type": "approve"}]}), config=config)`
- **Custom middleware**: `@wrap_tool_call` decorator (Python) or `createMiddleware({wrapToolCall:...})` (TypeScript)

<structured_output>

## Structured Output

Get typed, validated responses from agents using `response_format` or `with_structured_output()`.

class ContactInfo(BaseModel): name: str email: str phone: str = Field(description="Phone number with area code")

# Option 1: Agent with structured output

agent = create_agent(model="gpt-4.1", tools=[search], response_format=ContactInfo) result = agent.invoke({"messages": [{"role": "user", "content": "Find contact for John"}]}) print(result["structured_response"]) # ContactInfo(name='John',...)

# Option 2: Model-level structured output (no agent needed)

from langchain_openai import ChatOpenAI model = ChatOpenAI(model="gpt-4.1") structured_model = model.with_structured_output(ContactInfo) response = structured_model.invoke("Extract: John, [john@example.com](https://github.com/langchain-ai/langchain-skills/blob/HEAD/config/skills/langchain-fundamentals/mailto:john@example.com), 555-1234")

# ContactInfo(name='John', email='[john@example.com](https://github.com/langchain-ai/langchain-skills/blob/HEAD/config/skills/langchain-fundamentals/mailto:john@example.com)', phone='555-1234')

</python> <typescript>

import { ChatOpenAI } from "@langchain/openai";
import { z } from "zod";

const ContactInfo = z.object({
  name: z.string(),
  email: z.string().email(),
  phone: z.string().describe("Phone number with area code"),
});

// Model-level structured output
const model = new ChatOpenAI({ model: "gpt-4.1" });
const structuredModel = model.withStructuredOutput(ContactInfo);
const response = await structuredModel.invoke("Extract: John, john@example.com, 555-1234");
// { name: 'John', email: 'john@example.com', phone: '555-1234' }

<model_config>

Model Configuration

create_agent accepts model strings ("anthropic:claude-sonnet-4-5", "openai:gpt-4.1") or model instances for custom settings:

from langchain_anthropic import ChatAnthropic
agent = create_agent(model=ChatAnthropic(model="claude-sonnet-4-5", temperature=0), tools=[...])

</model_config>

CORRECT: Clear, specific description with Args

@tool def search(query: str) -> str: """Search the web for current information about a topic.

Use this when you need recent data or facts.

Args:
    query: The search query (2-10 words recommended)
"""
return web_search(query)
</python>
<typescript>
Clear descriptions help the agent know when to use each tool.

// WRONG: Vague description const badTool = tool(async ({ input }) => "result", { name: "bad_tool", description: "Does stuff.", // Too vague! schema: z.object({ input: z.string() }), });

// CORRECT: Clear, specific description const search = tool(async ({ query }) => webSearch(query), { name: "search", description: "Search the web for current information about a topic. Use this when you need recent data or facts.", schema: z.object({ query: z.string().describe("The search query (2-10 words recommended)"), }), });


# CORRECT: Add checkpointer and thread_id

from langgraph.checkpoint.memory import MemorySaver

agent = create_agent(model="anthropic:claude-sonnet-4-5", tools=[search], checkpointer=MemorySaver(),) config = {"configurable": {"thread_id": "session-1"}} agent.invoke({"messages": [{"role": "user", "content": "I'm Bob"}]}, config=config) agent.invoke({"messages": [{"role": "user", "content": "What's my name?"}]}, config=config)

# Agent remembers: "Your name is Bob"

</python> <typescript> Add checkpointer and thread_id for conversation memory across invocations.

// WRONG: No persistence
const agent = createAgent({ model: "anthropic:claude-sonnet-4-5", tools: [search] });
await agent.invoke({ messages: [{ role: "user", content: "I'm Bob" }] });
await agent.invoke({ messages: [{ role: "user", content: "What's my name?" }] });
// Agent doesn't remember!

// CORRECT: Add checkpointer and thread_id
import { MemorySaver } from "@langchain/langgraph";

const agent = createAgent({
  model: "anthropic:claude-sonnet-4-5",
  tools: [search],
  checkpointer: new MemorySaver(),
});
const config = { configurable: { thread_id: "session-1" } };
await agent.invoke({ messages: [{ role: "user", content: "I'm Bob" }] }, config);
await agent.invoke({ messages: [{ role: "user", content: "What's my name?" }] }, config);
// Agent remembers: "Your name is Bob"

CORRECT: Set recursion_limit in config

result = agent.invoke({"messages": [("user", "Do research")]}, config={"recursion_limit": 10}, # Stop after 10 steps)

</python>
<typescript>
Set recursionLimit in the invoke config to prevent runaway agent loops.

// WRONG: No iteration limit const result = await agent.invoke({ messages: [["user", "Do research"]] });

// CORRECT: Set recursionLimit in config const result = await agent.invoke( { messages: [["user", "Do research"]] }, { recursionLimit: 10 }, // Stop after 10 steps );


# CORRECT: Access messages from result dict

result = agent.invoke({"messages": [{"role": "user", "content": "Hello"}]}) print(result["messages"][-1].content) # Last message content

</python> <typescript> Access the messages array from the result, not result.content directly.

// WRONG: Trying to access result.content directly
const result = await agent.invoke({ messages: [{ role: "user", content: "Hello" }] });
console.log(result.content); // undefined!

// CORRECT: Access messages from result object
const result = await agent.invoke({ messages: [{ role: "user", content: "Hello" }] });
console.log(result.messages[result.messages.length - 1].content); // Last message content

平台分布

Codex

36.5%
按下载量换算16,428

Claude

30.3%
按下载量换算13,637

Cursor

17.99%
按下载量换算8,097

Gemini CLI

9.14%
按下载量换算4,114

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

只读

该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills