文章详细介绍了如何构建一个简单的任务导向型AI Agent。从获取SiliconFlow API密钥开始,定义工具函数并转换为JSON Schema,然后构建Agent类管理对话历史和API调用。最后通过主函数实现与用户的交互,展示了完整的Agent工作流程:接收用户输入、调用大模型、处理工具调用、返回结果。整个过程包含代码实现和详细步骤,适合初学者学习。


马上跑出一个 AI agent

我们来基于 库和其 功能,动手构造一个 Tiny-Agent,这个 Agent 是一个简单的任务导向型 Agent,它能够根据用户的输入,回答一些简单的问题。

最终的效果:


第一步:

先获取到AI agent的地基模型api,没注册需要先注册

网址:SiliconFlow

把密匙复制下来,在 .env 文件里填写

第二步:

项目的目录结构:

定义工具函数:

src/tools.py 文件中定义 Agent 可以使用的工具函数。每个函数都需要有清晰的文档字符串(docstring),描述其功能和参数,因为这将用于自动生成工具的 JSON Schema。

# src/tools.pyfrom datetime import datetime
​
# 获取当前日期和时间defget_current_datetime() -> str:
    """
    获取当前日期和时间。
    :return: 当前日期和时间的字符串表示。
    """
    current_datetime = datetime.now()
    formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
    return formatted_datetime
​
defadd(a: float, b: float):
    """
    计算两个浮点数的和。
    :param a: 第一个浮点数。
    :param b: 第二个浮点数。
    :return: 两个浮点数的和。
    """returnstr(a + b)
​
defcompare(a: float, b: float):
    """
    比较两个浮点数的大小。
    :param a: 第一个浮点数。
    :param b: 第二个浮点数。
    :return: 比较结果的字符串表示。
    """if a > b:
        returnf'{a} is greater than {b}'elif a < b:
        returnf'{b} is greater than {a}'else:
        returnf'{a} is equal to {b}'
​
defcount_letter_in_string(a: str, b: str):
    """
    统计字符串中某个字母的出现次数。
    :param a: 要搜索的字符串。
    :param b: 要统计的字母。
    :return: 字母在字符串中出现的次数。
    """returnstr(a.count(b))
​
# src/utils.py (部分)import inspect
​
deffunction_to_json(func) -> dict:
    sig = inspect.signature(func)
    parameters = {}
    required = []
    for name, param in sig.parameters.items():
        # 根據型別推斷 OpenAI schemaif param.annotation == float:
            param_type = "number"elif param.annotation == int:
            param_type = "integer"elif param.annotation == str:
            param_type = "string"else:
            param_type = "string"
        parameters[name] = {"type": param_type}
        if param.default is inspect.Parameter.empty:
            required.append(name)
    return {
        "type": "function",
        "function": {
            "name": func.__name__,
            "description": inspect.getdoc(func),
            "parameters": {
                "type": "object",
                "properties": parameters,
                "required": required,
            },
        },
    }
构造agent类:

src/core.py 文件中定义 Agent 类。这个类负责管理对话历史、调用 OpenAI API、处理工具调用请求以及执行工具函数。

# src/core.py (部分)from openai import OpenAI
import json
from typing importList, Dict, Anyfrom src.utils import function_to_json
# 导入定义好的工具函数from src.tools import get_current_datetime, add, compare, count_letter_in_string
​
SYSREM_PROMPT = """
你是一个叫JUN人工智能助手。你的输出应该与用户的语言保持一致。
当用户的问题需要调用工具时,你可以从提供的工具列表中调用适当的工具函数。
"""
​
classAgent:
    def__init__(self, client: OpenAI, model: str = "Qwen/Qwen2.5-32B-Instruct", tools: List=[], verbose : bool = True):
        self.client = client
        self.tools = tools
        self.model = model
        self.messages = [
            {"role": "system", "content": SYSREM_PROMPT},
        ]
        self.verbose = verbose
​
    defget_tool_schema(self) -> List[Dict[str, Any]]:
        # 获取所有工具的 JSON 模式return [function_to_json(tool) for tool in self.tools]
​
    defhandle_tool_call(self, tool_call):
        # 处理工具调用
        function_name = tool_call.function.name
        function_args = tool_call.function.arguments
        function_id = tool_call.id
​
        function_call_content = eval(f"{function_name}(**{function_args})")
​
        return {
            "role": "tool",
            "content": function_call_content,
            "tool_call_id": function_id,
        }
​
    defget_completion(self, prompt) -> str:
​
        self.messages.append({"role": "user", "content": prompt})
​
        # 获取模型的完成响应
        response = self.client.chat.completions.create(
            model=self.model,
            messages=self.messages,
            tools=self.get_tool_schema(),
            stream=False,
        )
        # print("DEBUG response:", response)ifisinstance(response, str):
            # print("API 返回字串,內容為:", response)return response
        # 检查模型是否调用了工具        if response.choices[0].message.tool_calls:
            self.messages.append({"role": "assistant", "content": response.choices[0].message.content})
            # 处理工具调用
            tool_list = []
            for tool_call in response.choices[0].message.tool_calls:
                # 处理工具调用并将结果添加到消息列表中
                self.messages.append(self.handle_tool_call(tool_call))
                tool_list.append([tool_call.function.name, tool_call.function.arguments])
            # 调用过程# if self.verbose:#     print("调用工具:", response.choices[0].message.content, tool_list)# 再次获取模型的完成响应,这次包含工具调用的结果
            response = self.client.chat.completions.create(
                model=self.model,
                messages=self.messages,
                tools=self.get_tool_schema(),
                stream=False,
            )
            ifisinstance(response, str):
                # print("API 返回字串,內容為:", response)return response
​
        # 将模型的完成响应添加到消息列表中
        self.messages.append({"role": "assistant", "content": response.choices[0].message.content})
        return response.choices[0].message.content
主函数:

现在我们可以实例化并运行 Agent。在 demo.pyif __name__ == "__main__": 部分提供了一个简单的命令行交互示例。

# main.py (部分)
import os
from dotenv import load_dotenv
from openai import OpenAI
from src.core import Agent
from src.tools import get_current_datetime, add, compare, count_letter_in_string
​
load_dotenv()
API_KEY = os.getenv('SF_API_KEY')
​
​
if __name__ == "__main__":
    client = OpenAI(
        api_key=API_KEY, # 替换为你的 API Keybase_url="https://api.siliconflow.cn/v1",
        
    )
​
    # 创建 Agent 实例,传入 client、模型名称和工具函数列表agent = Agent(
        client=client,
        model="Qwen/QwQ-32B",
        tools=[get_current_datetime, add, compare, count_letter_in_string],
        verbose=True# 设置为 True 可以看到工具调用信息
    )
​
    # 开始交互式对话循环
    while True:
        # 使用彩色输出区分用户输入和AI回答prompt = input("\033[94mUser: \033[0m")  # 蓝色显示用户输入提示
        if prompt.lower() == "exit":
            break
        response = agent.get_completion(prompt)
        print("\033[92mAssistant: \033[0m", response,"\n")  # 绿色显示AI助手回答
.env文件
# .env 部分SF_API_KEY = 你在平台获取的api_key
Agent 的工作流程如下:
  1. 接收用户输入。
  2. 调用大模型(如 Qwen),并告知其可用的工具及其 Schema。
  3. 如果模型决定调用工具,Agent 会解析请求,执行相应的 Python 函数。
  4. Agent 将工具的执行结果返回给模型。
  5. 模型根据工具结果生成最终回复。
  6. Agent 将最终回复返回给用户。

零基础如何高效学习大模型?

你是否懂 AI,是否具备利用大模型去开发应用能力,是否能够对大模型进行调优,将会是决定自己职业前景的重要参数。

为了帮助大家打破壁垒,快速了解大模型核心技术原理,学习相关大模型技术。从原理出发真正入局大模型。在这里我和鲁为民博士系统梳理大模型学习脉络,这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码免费领取🆓**⬇️⬇️⬇️

在这里插入图片描述

【大模型全套视频教程】

教程从当下的市场现状和趋势出发,分析各个岗位人才需求,带你充分了解自身情况,get 到适合自己的 AI 大模型入门学习路线。

从基础的 prompt 工程入手,逐步深入到 Agents,其中更是详细介绍了 LLM 最重要的编程框架 LangChain。最后把微调与预训练进行了对比介绍与分析。

同时课程详细介绍了AI大模型技能图谱知识树,规划属于你自己的大模型学习路线,并且专门提前收集了大家对大模型常见的疑问,集中解答所有疑惑!

在这里插入图片描述

深耕 AI 领域技术专家带你快速入门大模型

跟着行业技术专家免费学习的机会非常难得,相信跟着学习下来能够对大模型有更加深刻的认知和理解,也能真正利用起大模型,从而“弯道超车”,实现职业跃迁!

图片

【精选AI大模型权威PDF书籍/教程】

精心筛选的经典与前沿并重的电子书和教程合集,包含《深度学习》等一百多本书籍和讲义精要等材料。绝对是深入理解理论、夯实基础的不二之选。

在这里插入图片描述

【AI 大模型面试题 】

除了 AI 入门课程,我还给大家准备了非常全面的**「AI 大模型面试题」,**包括字节、腾讯等一线大厂的 AI 岗面经分享、LLMs、Transformer、RAG 面试真题等,帮你在面试大模型工作中更快一步。

【大厂 AI 岗位面经分享(92份)】

图片

【AI 大模型面试真题(102 道)】

图片

【LLMs 面试真题(97 道)】

图片

【640套 AI 大模型行业研究报告】

在这里插入图片描述

【AI大模型完整版学习路线图(2025版)】

明确学习方向,2025年 AI 要学什么,这一张图就够了!

img

👇👇点击下方卡片链接免费领取全部内容👇👇

在这里插入图片描述

抓住AI浪潮,重塑职业未来!

科技行业正处于深刻变革之中。英特尔等巨头近期进行结构性调整,缩减部分传统岗位,同时AI相关技术岗位(尤其是大模型方向)需求激增,已成为不争的事实。具备相关技能的人才在就业市场上正变得炙手可热。

行业趋势洞察:

  • 转型加速: 传统IT岗位面临转型压力,拥抱AI技术成为关键。
  • 人才争夺战: 拥有3-5年经验、扎实AI技术功底真实项目经验的工程师,在头部大厂及明星AI企业中的薪资竞争力显著提升(部分核心岗位可达较高水平)。
  • 门槛提高: “具备AI项目实操经验”正迅速成为简历筛选的重要标准,预计未来1-2年将成为普遍门槛。

与其观望,不如行动!

面对变革,主动学习、提升技能才是应对之道。掌握AI大模型核心原理、主流应用技术与项目实战经验,是抓住时代机遇、实现职业跃迁的关键一步。

在这里插入图片描述

01 为什么分享这份学习资料?

当前,我国在AI大模型领域的高质量人才供给仍显不足,行业亟需更多有志于此的专业力量加入。

因此,我们决定将这份精心整理的AI大模型学习资料,无偿分享给每一位真心渴望进入这个领域、愿意投入学习的伙伴!

我们希望能为你的学习之路提供一份助力。如果在学习过程中遇到技术问题,也欢迎交流探讨,我们乐于分享所知。

*02 这份资料的价值在哪里?*

专业背书,系统构建:

  • 本资料由我与鲁为民博士共同整理。鲁博士拥有清华大学学士美国加州理工学院博士学位,在人工智能领域造诣深厚:

    • 在IEEE Transactions等顶级学术期刊及国际会议发表论文超过50篇
    • 拥有多项中美发明专利。
    • 荣获吴文俊人工智能科学技术奖(中国人工智能领域重要奖项)。
  • 目前,我有幸与鲁博士共同进行人工智能相关研究。

在这里插入图片描述

内容实用,循序渐进:

  • 资料体系化覆盖了从基础概念入门核心技术进阶的知识点。

  • 包含丰富的视频教程实战项目案例,强调动手实践能力。

  • 无论你是初探AI领域的新手,还是已有一定技术基础希望深入大模型的学习者,这份资料都能为你提供系统性的学习路径和宝贵的实践参考助力你提升技术能力,向大模型相关岗位转型发展

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

抓住机遇,开启你的AI学习之旅!

在这里插入图片描述

Logo

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

更多推荐