引言

  你是否想过,让大语言模型不仅能回答问题,还能帮我们做事?比如让它帮忙查天气、自动写报告、甚至安排行程?这就是 AI Agent(智能体) 和 Function Call(函数调用) 的魅力所在。它们让大模型从“只会说话”的百科全书,变成了能“动手操作”的智能助手。本文将了解什么是 Agent 和 Function Call,如何在本地免费部署它们,并通过 Dify、LangChain 和 Coze 等平台亲手搭建属于你自己的智能应用。

一、LLM Agent 与 Function Call 简介

1、LLM 与 Agent 的区别

  LLM(大语言模型) 是一种专注于理解和生成自然语言的深度学习模型,擅长文本生成、翻译、问答等任务。它就像一个知识渊博的学者,但只能“动口不动手”。

  Agent(智能体) 则是一个更广泛的概念,它能够在特定环境中自主感知、决策并执行动作,以实现目标。Agent 不仅包含语言处理能力,还具备规划、记忆、工具使用和行动能力。LLM 是 Agent 的“大脑”,但 Agent 还拥有“手脚”,可以与外部世界互动。

  简单来说:LLM 是“思考者”,Agent 是“行动者”。

2、Agent 是什么?

  AI Agent 的核心特征为:自主性、目标导向、持续学习与环境交互。

  一个典型的 Agent 包含以下四个关键模块:

  规划(Planning):将复杂任务拆解为子任务,并制定执行流程。Agent 还会在过程中进行反思,判断任务是否完成。

  记忆(Memory):包括短期记忆(如当前对话上下文)和长期记忆(如外部知识库,通常用向量数据库存储)。

  工具使用(Tools):通过 API 调用外部工具,如计算器、搜索引擎、代码执行器、数据库查询等。

  执行(Action):根据规划和记忆执行具体操作,可能涉及与外部系统交互。

二、Function Call 详解

1、为什么需要 Function Call?

  因为大模型虽然强大,但存在三大天生的缺点:

  信息滞后:训练数据有限,无法获取最新信息(如实时天气、股价)。

  缺乏行动力:只能输出文本,无法直接操作外部系统。

  没有“真逻辑”:模型输出的“逻辑”本质上是统计规律,在数学等精确领域容易出错。

  为了解决这些问题,OpenAI 推出了 Function Calling 功能,让大模型能够调用外部函数,以此来连接真实世界和精确系统。

2、Function Call 的工作机制

  Function Call 的工作流程可以分为五步:

  工具注册:系统向模型提供可用函数的元数据(名称、描述、参数结构等)。

  用户请求解析:模型理解用户意图,判断是否需要调用工具。

  函数调用决策与生成:模型输出结构化的函数调用对象(如 JSON),包含函数名和参数。

  外部执行:应用层调用真实函数(API、本地方法等),获取结果。

  结果整合与响应:将函数返回结果作为上下文重新输入模型,生成自然语言回答。

3、简单示例:加法器

  我们使用OpenAI SDK实现Function Calling的代码:首先定义了一个简单的加法函数sum_numbers,并构建了对应的工具描述(包括函数名、说明和参数结构);接着通过client.chat.completions.create调用模型并传入该工具,模型返回工具调用请求后,代码解析参数、执行本地加法函数,最后将计算结果以工具消息的形式再次发送给模型,由模型生成最终回答。

import json
from openai import OpenAI

# 定义加法函数
def sum_numbers(numbers):
    return sum(numbers)

# 定义工具描述
tools = [
    {
        "type": "function",
        "function": {
            "name": "sum",
            "description": "计算一组数字的和",
            "parameters": {
                "type": "object",
                "properties": {
                    "numbers": {
                        "type": "array",
                        "items": {"type": "number"},
                        "description": "需要求和的数字列表"
                    }
                },
                "required": ["numbers"]
            }
        }
    }
]

# 调用模型
response = client.chat.completions.create(
    model="qwen-plus",
    messages=[{"role": "user", "content": "请帮我计算 1, 2, 3 的和"}],
    tools=tools
)

# 解析模型返回的工具调用
tool_call = response.choices[0].message.tool_calls[0]
if tool_call.function.name == "sum":
    args = json.loads(tool_call.function.arguments)
    result = sum_numbers(args["numbers"])
    # 将结果返回给模型
    second_response = client.chat.completions.create(
        model="qwen-plus",
        messages=[
            {"role": "user", "content": "请帮我计算 1, 2, 3 的和"},
            response.choices[0].message,
            {
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": str(result)
            }
        ]
    )
    print(second_response.choices[0].message.content)

三、Agent 与 Function Call 的比较

  Function Call是一种让大模型调用预定义函数的能力,轻量且适合单次调用,好比一把小巧实用的瑞士军刀,适用于查询天气、简单计算等任务;而Agent则是一个具备自主决策能力的AI实体,能够进行多步规划并灵活组合多个工具,像一位熟练工人那样应对自动撰写报告、复杂数据分析等复杂任务。

特性	    Function Call	                    Agent
定义	    大模型调用预定义函数的能力	具备自主决策能力的 AI 实体
复杂度	    轻量级,单次调用	            多步规划、多工具组合
适用场景	    简单任务,如查询天气、计算	复杂任务,如自动撰写报告、数据分析
类比	    瑞士军刀,小巧实用	        熟练工人,灵活组合工具

四、Dify 简介与本地部署

1、Dify 是什么?

  Dify 是一个开源的 LLM 应用开发平台,提供从 Agent 构建到 AI Workflow 编排、RAG 检索、模型管理等能力,比 LangChain 更易用。官方网址为:https://dify.ai/

2、本地部署步骤

  我们使用 Dify 社区版,通过 Docker 完成本地部署。

1、下载源码

  从 GitHub 下载 Dify 1.8.0 或最新版本源码,解压到本地。

2、安装 Docker Desktop

  下载地址:https://www.docker.com/products/docker-desktop/

3、配置 Dify

  进入源码中的 docker 目录,将 .env.example 重命名为 .env。在命令行执行:

docker-compose up -d

  首次运行会拉取镜像,建议配置 Docker 镜像加速器如阿里云等。

4、访问 Dify

  启动成功后,浏览器访问 http://localhost/install,设置管理员邮箱和密码,即可进入 Dify 主界面。

五、Dify 关联本地大模型(Ollama)

1、安装 Ollama

  Ollama 是一个让你在本地运行大语言模型的工具,下载地址:https://ollama.com/

  安装后,在终端执行:

ollama serve

  浏览器访问 http://localhost:11434,显示 running 即成功。

2、下载模型

  例如下载 DeepSeek-R1 1.5B 模型:

ollama run deepseek-r1:1.5b

3、配置 Dify 连接 Ollama

  在 Dify 的 docker/.env 文件末尾添加:

CUSTOM_MODEL_ENABLED=true
OLLAMA_API_BASE_URL=host.docker.internal:11434

  然后在 Dify 后台“设置 → 模型供应商 → Ollama”中添加模型,即可在应用中选用本地模型。

六、Dify 多应用类型实战

1、聊天助手

  这是最简单的应用类型,基于 LLM 构建对话式交互。创建应用后,选择模型,发布后即可对话,还可以通过提示词和变量扩展功能,例如添加“翻译语言”变量,实现多语言翻译。

2、知识库增强

  当大模型无法回答特定领域问题时,可以导入本地知识库。例如,创建一个包含“张三就读xx中学”的文档知识库,并在聊天助手中关联该知识库,模型就能准确回答相关问题。

3. Agent(智能助手)

  Agent 类型应用具备工具调用能力。创建 Agent 后,点击“添加工具”,选择时间插件。当用户问“今天几号?”时,Agent 会自动调用工具返回准确日期。

七、LangChain 构建 Agent 示例

1、什么是 LangChain Agent?

  LangChain 中的 Agent 是一个由 LLM 驱动的控制器,遵循 ReAct(Reasoning + Acting) 范式,在“思考 → 行动 → 观察”循环中完成复杂任务。

2、示例:计算文本长度

1、导入库
from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory
from langchain.schema import HumanMessage
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI
2、实例化模型
model = ChatOpenAI()
3、自定义工具
class TextLengthTool(BaseTool):
    name = "文本字数计算工具"
    description = "输入一段文本,返回该文本的字符数"

    def _run(self, text: str) -> int:
        return len(text)
4、定义工具列表
tools = [TextLengthTool()]
 5、获取 ReAct 提示词
prompt = hub.pull("hwchase17/structured-chat-agent")
6、初始化 Agent
agent = create_structured_chat_agent(llm=model, tools=tools, prompt=prompt)
7、记录对话历史
memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True)
8、定义 Agent 执行器
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    memory=memory,
    verbose=True,
    handle_parsing_errors=True
)
9、运行 Agent
response = agent_executor.invoke({"input": "请计算 'Hello World' 的字符数"})
print(response["output"])

  运行后,Agent 会调用 TextLengthTool,返回结果并生成自然语言回答。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐