Function calling(函数调用)是大语言模型(Large Language Models, LLMs)的一项高级功能,它允许模型在生成响应时调用外部工具、API 或自定义函数
在LLMs中,函数调用是指模型不是简单地生成文本响应,而是根据用户查询的需要,动态决定是否调用预定义的外部函数。这些函数可以执行特定任务,如搜索网络、执行代码、获取实时数据等。模型会输出一个“函数调用请求”,然后系统执行该函数,并将结果反馈给模型,模型再基于结果生成最终响应。
Function calling(函数调用)是大语言模型(Large Language Models, LLMs)的一项高级功能,它允许模型在生成响应时调用外部工具、API 或自定义函数,以扩展模型的能力。以下是对这一概念的详细解释,我将从定义、工作原理、实现方式、示例、优势和局限性等方面进行阐述。
1. 定义和背景
-
什么是函数调用?
在LLMs中,函数调用是指模型不是简单地生成文本响应,而是根据用户查询的需要,动态决定是否调用预定义的外部函数。这些函数可以执行特定任务,如搜索网络、执行代码、获取实时数据等。模型会输出一个“函数调用请求”,然后系统执行该函数,并将结果反馈给模型,模型再基于结果生成最终响应。 -
为什么需要函数调用?
LLMs如GPT系列、Grok或Claude,本质上是基于训练数据的预测模型,它们没有实时访问外部世界的权限(如互联网、数据库)。函数调用解决了这一局限,让模型能“借力”外部工具,实现更准确、动态的交互。例如,模型无法直接知道当前天气,但可以通过调用天气API来获取。 -
发展历史简述:
函数调用最早在OpenAI的GPT-3.5和GPT-4中普及(称为“Function Calling”或“Tool Use”)。其他模型如Google的Gemini、Anthropic的Claude也支持类似功能。xAI的Grok模型(如Grok 4)也集成这一能力,支持多种工具调用。
2. 工作原理
函数调用通常涉及以下步骤:
-
步骤1: 解析用户查询
模型分析输入,判断是否需要外部帮助。如果查询涉及实时数据、计算或特定操作,模型会选择合适的函数。 -
步骤2: 生成函数调用请求
模型输出一个结构化的调用格式(如JSON对象),指定函数名、参数等。例如:{ "function_name": "web_search", "arguments": { "query": "当前北京天气" } }这不是直接响应用户,而是“中间输出”给系统。
-
步骤3: 执行函数
系统(后端框架)执行指定的函数,并返回结果(如搜索结果的JSON数据)。 -
步骤4: 整合结果生成响应
模型接收函数结果,作为额外上下文,生成最终用户可见的响应。 -
关键技术:
- 工具描述(Tool Schema):每个函数都有一个描述文件(通常是JSON Schema),包括函数名、参数类型、描述等。模型在训练或微调时学习如何使用这些描述。
- 并行调用:高级模型支持同时调用多个函数,提高效率。
- 状态管理:有些系统支持状态ful调用(如REPL代码解释器),前一次调用结果可影响后一次。
3. 实现方式
-
在模型层面:
LLMs通过微调(fine-tuning)学习函数调用。训练数据包括“查询 → 函数调用 → 结果 → 响应”的示例。模型的输出被约束为特定格式(如XML或JSON),以确保可解析。 -
在系统层面:
- API集成:如OpenAI的Chat Completions API,支持
tools参数定义函数。 - 框架支持:LangChain、Haystack等库简化了函数调用链的构建。
- 安全机制:函数调用需遵守安全规则(如不允许有害操作),模型会拒绝违规查询。
- API集成:如OpenAI的Chat Completions API,支持
-
示例代码(Python中使用OpenAI API):
import openai # 定义工具 tools = [ { "type": "function", "function": { "name": "get_weather", "description": "获取指定城市的天气", "parameters": { "type": "object", "properties": { "location": {"type": "string", "description": "城市名"} }, "required": ["location"] } } } ] # 调用模型 response = openai.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "北京今天天气如何?"}], tools=tools ) # 如果模型决定调用函数 if response.choices[0].message.tool_calls: tool_call = response.choices[0].message.tool_calls[0] # 执行函数并反馈结果这展示了如何在代码中实现函数调用。
4. 示例应用
- 实时信息获取:用户问“今天比特币价格?”,模型调用crypto API,返回最新价格。
- 代码执行:用户问“计算π的前100位”,模型调用代码解释器,运行Python代码如
import mpmath; mpmath.mp.dps = 100; print(mpmath.pi)。 - 搜索与总结:用户问“最近AI新闻”,模型调用web搜索,总结结果。
- 复杂链式调用:用户问“计划去东京旅行,查天气并推荐景点”,模型先调用天气API,再调用地点搜索API,最后整合响应。
- 在Grok中的示例:如本系统,支持
web_search、code_execution等工具,用于处理查询。
5. 优势
- 扩展性:让LLMs从“静态生成器”变为“智能代理”,处理复杂任务。
- 准确性:减少幻觉(hallucination),因为数据来自可靠来源。
- 交互性:支持多轮对话,如用户追问时可复用先前函数结果。
- 效率:并行调用减少延迟。
6. 局限性和挑战
- 依赖外部服务:如果API downtime或网络问题,调用失败。
- 安全风险:需防止模型被诱导调用有害函数(如“jailbreak”攻击)。
- 成本:每次调用增加计算和API费用。
- 复杂性:函数描述需精确,否则模型可能误用。
- 隐私:调用外部API可能泄露用户数据。
总之,函数调用是大语言模型向AGI(人工通用智能)演进的关键一步,它桥接了模型的内部知识与外部世界。如果你有特定模型(如Grok)的函数调用示例或代码实现需求,我可以进一步扩展!
LangChain Framework 详解
LangChain 是一个开源框架,用于简化基于大语言模型(Large Language Models, LLMs)的应用程序开发。它允许开发者将 LLMs 与外部数据源、工具和内存等组件“链式”连接起来,构建复杂的 AI 应用,如聊天机器人、检索增强生成(RAG)系统和智能代理(Agents)。LangChain 于 2022 年 10 月由 Harrison Chase 推出,现已成为 LLM 应用开发的领先工具之一。
以下是 LangChain 的标志性 Logo:
1. 核心概念和架构
LangChain 的设计是模块化的,主要组件包括:
- Models:支持多种 LLM(如 OpenAI、Anthropic、Google、Hugging Face 等),提供统一接口,便于切换模型。
- Prompts:提示模板管理,支持动态插入变量和 few-shot 示例。
- Chains:将多个组件串联起来,形成工作流。例如:提示 → LLM 调用 → 输出解析。
- Memory:内存管理,支持对话历史持久化(如 ConversationBufferMemory)。
- Indexes/Retrievers:数据索引和检索,支持向量数据库(如 Pinecone、FAISS),用于 RAG。
- Agents/Tools:代理系统,允许 LLM 动态决定调用外部工具(如搜索、计算器、API)。
- Callbacks:用于监控和调试。
LangChain 的典型架构图如下(展示组件间连接):
2. 生态系统(2025 年现状)
- LangChain:核心框架,用于快速构建简单到中等复杂的 LLM 应用。
- LangGraph:低级代理编排框架,支持多代理协作、循环控制和状态管理,更适合复杂代理工作流。
- LangSmith:调试、监控和评估工具,支持追踪链路、A/B 测试和性能优化(框架无关)。
- LangServe:将链部署为 API 服务。
截至 2025 年,LangChain 已下载超过 7000 万次,支持数百种集成,焦点转向可靠代理工程。
3. 主要优势
- 模块化和可扩展:易于组合组件,快速原型开发。
- 多模型支持:避免供应商锁定。
- RAG 和 Agents 支持强大:擅长处理外部数据和工具调用。
- 社区活跃:开源(GitHub: langchain-ai/langchain),文档完善。
- 生产就绪:结合 LangSmith 可监控和优化。
4. 局限性和批评
- 复杂性:抽象层多,对于简单任务可能过度工程化,导致调试困难。
- 性能开销:链式调用可能引入延迟。
- 版本兼容:快速迭代有时导致 breaking changes。
- 替代品兴起:许多开发者转向更轻量或专精框架(如 LlamaIndex 用于 RAG,CrewAI 用于多代理)。
5. 常见应用场景
- 聊天机器人和虚拟助手。
- RAG 系统(基于私有数据回答问题)。
- 文档总结、代码分析。
- 多代理协作(如自动化任务)。
6. 简单示例(Python)
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.chains import LLMChain
llm = ChatOpenAI(model="gpt-4o")
prompt = ChatPromptTemplate.from_template("解释{topic}的概念,用简单中文。")
chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run(topic="LangChain"))
7. 与替代品的比较(2025 年)
- LlamaIndex:更专注 RAG 和数据索引,适合知识密集应用。
- Haystack:搜索和 RAG 强,生产级管道。
- CrewAI / AutoGen:多代理协作更简单。
- DSPy:提示优化框架,更声明式。
- Semantic Kernel:微软出品,多语言支持。
LangChain 适合快速构建代理和通用 LLM 应用;复杂代理推荐 LangGraph。
官方文档:https://docs.langchain.com/
GitHub:https://github.com/langchain-ai/langchain
官网:https://www.langchain.com
LangChain Framework 简明详解
LangChain 是开源框架,用于简化大语言模型(LLM)应用开发,帮助开发者将 LLM 与外部数据、工具、内存等组件“链式”连接,构建聊天机器人、RAG 系统和智能代理。2022 年 10 月由 Harrison Chase 推出,已成为主流 LLM 开发工具。
核心组件:
- Models:统一接口,支持 OpenAI、Anthropic、Hugging Face 等多种 LLM。
- Prompts:动态提示模板管理。
- Chains:组件串联,形成工作流(如提示 → LLM → 输出解析)。
- Memory:对话历史持久化。
- Retrievers/Indexes:向量数据库集成,支持 RAG(如 Pinecone、FAISS)。
- Agents/Tools:代理系统,LLM 动态调用外部工具(搜索、API、计算器)。
- Callbacks:监控与调试。
生态系统(2025 年):
- LangChain:核心框架,适合快速构建通用应用。
- LangGraph:复杂代理编排,支持多代理、循环与状态管理。
- LangSmith:调试、追踪、评估工具(生产级)。
- LangServe:将链部署为 REST API。
优势:
- 模块化、易扩展、多模型支持。
- RAG 与 Agents 能力强。
- 社区活跃,开源(GitHub 下载超 7000 万)。
局限性:
- 抽象层多,简单任务可能过度复杂。
- 快速迭代易导致版本不兼容。
- 替代品:LlamaIndex(RAG 专精)、CrewAI/AutoGen(多代理)、DSPy(提示优化)。
常见场景:
- 聊天机器人、文档问答、代码分析、自动化任务。
简单示例(Python):
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.chains import LLMChain
llm = ChatOpenAI(model="gpt-4o")
prompt = ChatPromptTemplate.from_template("用简单中文解释{topic}")
chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run(topic="LangChain"))
LangGraph 详解
LangGraph 是 LangChain 生态中的一个开源框架,专为构建状态化、多代理应用而设计。它提供低级别的编排工具,帮助开发者创建可靠、可控的智能代理系统,支持从简单工作流到复杂多代理协作的各种场景。作为一个独立库,LangGraph 可以不依赖 LangChain 使用,但通常与 LangChain 结合以增强功能。
1. 目的和背景
LangGraph 的主要目的是解决大语言模型(LLM)在构建长期运行、状态化代理时的挑战。它聚焦于代理编排的核心能力,如持久化执行、流式传输、人机交互(Human-in-the-loop)和内存管理。不同于传统框架的抽象化,LangGraph 提供底层基础设施,让开发者自定义代理工作流,适用于自动化现实任务、对话代理和复杂任务处理。例如,它可以构建支持人类审查的代理系统,确保代理在复杂场景中保持可靠性和可控性。
LangGraph 于 2023 年左右推出,由 LangChain Inc. 开发,受 Pregel(Google 论文)和 Apache Beam 等系统启发。其设计灵感来源于 NetworkX,用于图结构的管理。 截至 2025 年 12 月,LangGraph 已广泛用于生产环境,支持云部署和多代理协作,焦点转向更强的容错性和扩展性。
2. 关键特性
- 状态持久化:内置内存管理,支持短期工作内存(用于当前推理)和长期跨会话内存,确保代理在中断后能恢复执行。
- 人机交互:允许在任意节点插入人工监督,如检查、修改或批准代理动作,支持“时间旅行”(回滚状态)。
- 流式传输:原生支持按令牌流式输出和中间步骤实时显示,提升用户体验。
- 图结构编排:使用节点(nodes)和边(edges)定义工作流,支持单一代理、多代理、层次化或循环控制。
- 调试与观测:集成 LangSmith,提供可视化追踪执行路径、状态变化和性能指标。
- 生产部署:通过 LangGraph Platform 支持水平扩展、自动重试、智能缓存和多种部署模式(云、混合、自托管)。
- 可扩展性:与 LangChain 组件(如模型、提示和工具)无缝集成,适用于大规模 AI 工作负载。
3. 工作原理
LangGraph 将代理工作流建模为图(graph)。核心组件包括:
- State:共享数据结构(如 MessagesState),存储消息历史或自定义状态。
- Nodes:代表执行函数,如 LLM 调用、工具使用或自定义逻辑。
- Edges:定义节点间的连接,支持条件分支、循环和顺序流。
工作流程:
- 定义 StateGraph:指定状态 schema。
- 添加节点和边:从 START 到 END 构建图。
- 编译并运行:调用 graph.invoke() 执行,状态在节点间传递。
- 支持持久化:使用检查点(如 SQLite 或 PostgreSQL)保存状态,实现中断恢复。
例如,一个简单代理的原理:用户输入进入 START,流向 LLM 节点生成响应,然后结束。复杂场景可添加条件边(如如果响应不满意,则循环回人工节点)。
4. 示例
-
基本 Hello World 示例(Python 代码):
from langgraph.graph import StateGraph, MessagesState, START, END def mock_llm(state: MessagesState): return {"messages": [{"role": "ai", "content": "hello world"}]} graph = StateGraph(state_schema=MessagesState) graph.add_node("mock_llm", mock_llm) graph.add_edge(START, "mock_llm") graph.add_edge("mock_llm", END) compiled_graph = graph.compile() result = compiled_graph.invoke({"messages": [{"role": "user", "content": "hi!"}]}) print(result)输出:包含用户消息和 AI 响应的状态。
-
多代理示例:构建客户支持代理,一个节点生成草稿,另一个审查;添加人类批准边,确保输出可靠。
-
实际应用:自动化代码文档生成(使用代理链调用 RAG 和语义重排序);或构建对话代理,支持长期内存和实时流式交互。
5. 优势
- 灵活性:低级 API 允许完全自定义,超越黑箱代理框架。
- 可靠性:内置容错、重试和持久化,适合生产级部署。
- 集成性:与 LangSmith(调试)和 LangServe(API 部署)无缝结合。
- 开发者友好:支持 LangGraph Studio 用于可视化原型设计和共享。
6. 局限性
- 学习曲线陡峭:低级抽象要求开发者熟悉图结构和状态管理,对于简单任务可能过度复杂。
- 性能开销:复杂图可能引入延迟,需要优化。
- 版本迭代:快速更新可能导致兼容性问题。
- 替代品:如 CrewAI(更简单多代理)或 AutoGen(微软的多代理框架),但 LangGraph 在状态化和编排上更强大。
7. 与 LangChain 的区别
- LangChain:高层框架,提供预构建的链(chains)、代理和 RAG 组件,适合快速开发通用 LLM 应用。
- LangGraph:低级框架,专注于状态图和多代理编排,是 LangChain 的底层支持。LangChain 基于 LangGraph 构建更抽象的工具,而 LangGraph 提供更细粒度的控制,适用于复杂、自定义工作流。
8. 安装与资源
- 安装:
pip install -U langgraph - 官方文档:https://docs.langchain.com/oss/python/langgraph/overview
- 官网:https://www.langchain.com/langgraph
- GitHub:https://github.com/langchain-ai/langgraph
如果你需要特定代码示例、教程或更深入的某个特性解释,请随时告知!
LangGraph 多代理(Multi-Agent)示例详解
LangGraph 特别适合构建多代理系统,通过将每个代理定义为图中的节点(node),并用边(edge)控制协作流程,实现复杂任务的分工与协调。常见模式包括共享消息协作、监督者(Supervisor)路由、层次化团队(Hierarchical Teams)和代理间手递(Handoffs)。
以下是官方和社区常见的多代理示例(基于 2025 年最新文档和教程):
1. 简单多代理协作(Multi-Agent Collaboration)
-
描述:多个专长代理(如研究代理、绘图代理)共享消息列表,协作完成任务(如研究主题并生成图表)。
-
架构:代理作为节点,消息在共享状态中传递,无明确监督者。
-
官方教程:https://langchain-ai.github.io/langgraph/tutorials/multi_agent/multi-agent-collaboration/
-
应用:研究 + 可视化任务。
2. 监督者模式(Supervisor with Members)
-
描述:一个监督者代理路由任务到专长成员代理(如搜索代理、数学代理),成员完成后再返回监督者。
-
优势:监督者动态决定下一个代理,避免单个代理工具过多导致性能下降。
-
官方示例:LangGraph 仓库中的 supervisor 示例。
-
应用:客服系统、复杂查询路由(如城市信息查询:天气、酒店、航班代理)。
3. 层次化代理团队(Hierarchical Agent Teams)
- 描述:多层监督者,每个子团队有自己的监督者,上层监督者协调团队。
- 优势:处理大规模任务,避免单一监督者负载过重。
- 官方教程:https://langchain-ai.github.io/langgraph/tutorials/multi_agent/hierarchical_agent_teams/
- 应用:大型研究系统、企业级自动化(如多个部门协作)。
4. 其他热门示例
-
研究代理团队:受 STORM 论文启发,主编辑代理协调研究、写作、审查代理。示例:GPT Researcher 项目。
-
城市信息系统(AWS 示例):监督者协调天气、活动、酒店等专长代理。
-
Swarm 风格:代理动态手递控制(使用 langgraph-swarm 库)。
-
报告写作:规划 → 生成 → 反思 → 修订的多代理循环。
简单代码框架(监督者示例)
from langgraph.graph import StateGraph, START, END
from langgraph.prebuilt import create_react_agent
# 定义专长代理
research_agent = create_react_agent(llm, tools=[search_tool])
chart_agent = create_react_agent(llm, tools=[chart_tool])
# 监督者节点:决定路由
def supervisor(state):
# 根据最后消息路由到 "research" 或 "chart" 或 END
...
graph = StateGraph(State)
graph.add_node("supervisor", supervisor)
graph.add_node("research", research_agent)
graph.add_node("chart", chart_agent)
# 添加条件边...
app = graph.compile()
资源推荐:
- 官方多代理教程:https://langchain-ai.github.io/langgraph/tutorials/multi_agent/
- 博客:https://blog.langchain.com/langgraph-multi-agent-workflows/
- GitHub 示例:https://github.com/langchain-ai/langgraph (examples/multi_agent 文件夹)
- YouTube 演示:搜索 “LangGraph Multi-Agent Workflows”
这些示例展示了 LangGraph 的灵活性:从简单协作到生产级层次系统。如果你需要某个具体示例的完整代码或实现细节,请告诉我!
更多推荐

所有评论(0)