Skip to content

LangChain 智能体开发框架

测吧(北京)科技有限公司

霍格沃兹测试开发学社


LangChain

LangChain 是一个由大型语言模型 (LLM) 驱动的应用程序开发框架。主要为开发者提供一个简单易用的接口来构建基于大语言模型的应用。LangChain = Language + Chains


LangChain 的生态架构

  • LangChain 核心
  • LangChain 社区生态
  • LangChain 智能体
  • Templates 提示词模板
  • LangServe 服务运行框架
  • LangSmith 监控分析工具
  • LangGraph 智能体开发框架


开源 OSS VS 商业 Commercial

不推荐使用官方的商业方案。因为很多服务都在海外,访问会不方便。推荐使用开源替代。

\

  • FastApi 代替 LangServe
  • Jaeger 代替 LangSmith
  • 本地提示词 代替 Prompt Hub


Jaeger VS LangSmith


为什么需要学习 LangChain

  • 功能强大,接口简约,架构设计非常先进
  • 文档丰富,工具齐全,示例丰富
  • 生态丰富,最早最流行的 LLM 开发框架,很多成熟的项目基于 LangChain

同类智能体框架

google agent build


主要框架介绍

框架 简介 优势
LangChain 模块化、"链式"结构(Chains) 灵活性最强、生态系统成熟、社区庞大、模型无关性好、易于集成各种工具和数据库
LangGraph 基于图的流程编排(Graph-based) 明确的流程控制(节点和边)、支持循环和分支、方便调试和高级错误处理。
LlamaIndex RAG(检索增强生成)与 Agent 结合 专注于数据索引和检索,能高效地为 Agent 注入大量外部数据知识。
CrewAI 基于角色的多智能体协作(Role-based Crew) 强调角色(Role)、任务(Task)和团队(Crew)的结构化,易于创建并行的、有记忆的工作流程。
AutoGen (Microsoft) 多智能体聊天(Multi-Agent Conversation) 大厂出品
Google ADK 强调多智能体协作 大厂出品
Pydantic.AI 类型化 将 FastAPI 的感觉带入 GenAI 应用程序和代理开发。 技术特色强 mcp a2a ag-ui

{.!text-xs}


热门 Agent 框架对比


LangChain 核心能力

  • Chat models
  • Messages
  • Prompt templates
  • Example selectors
  • LLMs
  • Output parsers

{}

  • Document loaders
  • Text splitters
  • Embedding models
  • Vector stores
  • Retrievers
  • Indexing

{}

  • Tools
  • Multimodal
  • Agents
  • Callbacks
  • Custom
  • Serialization

大模型调用

基本的大模型调用,发起一次请求。增加了一行代码初始化模型的能力。简化大模型的使用。

from langchain.chat_models import init_chat_model
from langchain_ollama import ChatOllama


def test_llm():
    llm = init_chat_model("openai:gpt-4.1")
    llm.invoke('北京天气如何')


def test_llm_oop():
    llm = ChatOllama(model='qwen3', base_url='http://127.0.0.1', temperature=0)
    llm.invoke('北京天气如何')

智能体 Demo

graph TD
  %% Outside the agent
  QUERY([query])
  LLM{thought}
  TOOL(tools)
  ANSWER([answer])

  %% Main flows (no inline labels)
  QUERY --> LLM
  LLM --"action"--> TOOL
  TOOL --"observation"--> LLM
  LLM --"finish"--> ANSWER

{.bg-white}

# pip install -qU "langchain[openai]" to call the model

from langchain.agents import create_agent
from langchain_core.globals import set_debug

set_debug(True)


def get_weather(city: str) -> str:
    """查询特定城市天气"""
    return f"{city} 总是晴天!"


agent = create_agent(
    model="openai:gpt-4",
    tools=[get_weather],
    prompt="你是一位乐于助人回答简洁高效的助手",
)

# Run the agent
agent.invoke(
    {"messages": [{"role": "user", "content": "北京天气如何"}]}
)

{.!grow-2}


对接 MCP

mcp 与 openapi 是当下主流的 2 类工具注册协议。langchain 通过扩展支持 mcp。

\

from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_agent

client = MultiServerMCPClient(
    {
        "math": {
            "transport": "stdio",  # Local subprocess communication
            "command": "python",
            # Absolute path to your math_server.py file
            "args": ["/path/to/math_server.py"],
        },
        "weather": {
            "transport": "streamable_http",  # HTTP-based remote server
            # Ensure you start your weather server on port 8000
            "url": "http://localhost:8000/mcp",
        }
    }
)

tools = await client.get_tools()
agent = create_agent(
    "anthropic:claude-3-7-sonnet-latest",
    tools
)
math_response = await agent.ainvoke(
    {"messages": [{"role": "user", "content": "what's (3 + 5) x 12?"}]}
)
weather_response = await agent.ainvoke(
    {"messages": [{"role": "user", "content": "what is the weather in nyc?"}]}
)

RAG

rag

{.!grow-2}

import requests
from langchain_core.tools import tool
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent


@tool
def fetch_url(url: str) -> str:
    """Fetch text content from a URL"""
    response = requests.get(url, timeout=10.0)
    response.raise_for_status()
    return response.text


system_prompt = """\
Use fetch_url when you need to fetch information from a web-page; quote relevant snippets.
"""

agent = create_agent(
    model=init_chat_model("ollama:qwen3"),
    tools=[fetch_url],  # A tool for retrieval
    prompt=system_prompt,
)

文档处理

{.!grow-2}

loader_multiple_pages = WebBaseLoader(
    ["https://www.example.com/", "https://google.com"]
)
docs = loader.load()

# docs[0]输出
Document(metadata={'source': 'https://www.example.com/', 'title': 'Example Domain', 'language': 'No language found.'}, page_content='\n\n\nExample Domain\n\n\n\n\n\n\n\nExample Domain\nThis domain is for use in illustrative examples in documents.')

文档分割

url = "https://plato.stanford.edu/entries/goedel/"

headers_to_split_on = [
    ("h1", "Header 1"),
    ("h2", "Header 2"),
    ("h3", "Header 3"),
    ("h4", "Header 4"),
]

html_splitter = HTMLHeaderTextSplitter(headers_to_split_on)

# for local file use html_splitter.split_text_from_file(<path_to_file>)
html_header_splits = html_splitter.split_text_from_url(url)

嵌入模型

flowchart LR

    subgraph "📥 Indexing phase (store)"
        A[📄 Documents] --> B[🔢 Embedding model]
        B --> C[🔘 Embedding vectors]
        C --> D[(Vector store)]
    end

    subgraph "📤 Query phase (retrieval)"
        E[❓ Query text] --> F[🔢 Embedding model]
        F --> G[🔘 Query vector]
        G --> H[🔍 Similarity search]
        H --> D
        D --> I[📄 Top-k results]
    end

\

from langchain_ollama import OllamaEmbeddings

embeddings = OllamaEmbeddings(model="llama3")

embeddings.embed_query("Hello, world!")

向量存储

from pprint import pprint

from langchain_core.vectorstores import InMemoryVectorStore
from langchain_ollama import OllamaEmbeddings

embeddings = OllamaEmbeddings(model="qwen3-embedding")
vector_store = InMemoryVectorStore(embedding=embeddings)
vector_store.add_texts(
    texts=[
        'hello world',
        '你好世界',
        '你好思寒',
        'hello',
        '无关内容',
    ]
)
r = vector_store.similarity_search_with_score('hello', k=5)
pprint(r, indent=4)

## 输出
[   (   Document(id='a7060a7b-001f-472c-8672-07a523e81075', metadata={}, page_content='hello'),
        1.0000000000000002),
    (   Document(id='62a1aa51-77a9-4e41-8180-d2bf29d28b14', metadata={}, page_content='hello world'),
        0.888996099744812),
    (   Document(id='8987e305-c768-404e-a22b-c13ffadb1529', metadata={}, page_content='你好世界'),
        0.7463448647547312),
    (   Document(id='640b4476-2403-442e-93e1-aebb7db812eb', metadata={}, page_content='你好思寒'),
        0.6466733291467462),
    (   Document(id='59dc9c5d-3f0a-49fe-a3b5-657b513cd668', metadata={}, page_content='无关内容'),
        0.3365601380500021)]

多智能体

graph LR
    A[User] --> B[Controller Agent]
    B --> C[Tool Agent 1]
    B --> D[Tool Agent 2]
    C --> B
    D --> B
    B --> E[User Response]

{.bg-white}

\

graph LR
    A[User] --> B[Agent A]
    B --> C[Agent B]
    C --> A

{.bg-white}

from langchain.tools import tool
from langchain.agents import create_agent

subagent1 = create_agent(..)

@tool(
    name="subagent1_name",
    description="subagent1_description"
)
def call_subagent1(query: str):
    result = subagent1.invoke({
        "messages": [{"role": "user", "content": query}]
    })
    return result["messages"].text

agent = create_agent(..., tools=[call_subagent1])

{.!grow-1}


软件测试智能体


Agent 智能体核心元素

  • LLM chatgpt qwen deepseek
  • Planning:规划 路由 ReAct
  • Parser:结构化输出解析 json
  • Tools:工具集合与调用能力 tool function mcp
  • Memory 短期/长期 知识图谱

agent


利用 Agent 根据任务进行探索测试

  • Web 自动化测试智能体
  • App 自动化测试智能体
  • 接口自动化测试智能体
  • 通用自动化智能体(MCP)

agent graph


Web 自动化 Agent


App 自动化 Agent

{.!grow-3}

{.!grow-4}


智能化测试平台演示


AI 爬虫实现自动探索并创建知识图谱


官方文档

{.!text-sm}