OpenAI 函数智能体

发表时间:2025-07-30 08:43

1 OpenAI函数智能体概述

OpenAI 函数智能体是一种结合了OpenAI函数调用能力的智能体类型,它允许语言模型(如GPT-3.5和GPT-4)以结构化的方式使用工具。与ReAct智能体通过自由文本格式来推理和使用工具不同,OpenAI函数智能体利用模型内置的函数调用能力,能够生成结构良好的函数调用参数,大大提高了工具使用的准确性和可靠性。

这种智能体特别适合需要结构化输出和工具调用的应用场景,例如API调用、数据查询和结构化任务执行。

2 OpenAI工作原理

OpenAI函数智能体的工作原理如下:

  1. 工具声明:将工具定义为函数(包含名称、描述和参数模式)

  2. 模型调用:向OpenAI模型发送用户查询和可用工具信息

  3. 函数选择:模型决定是直接回答还是调用特定函数

  4. 参数生成:如果选择调用函数,模型生成符合函数参数模式的JSON参数

  5. 参数生成:如果选择调用函数,模型生成符合函数参数模式的JSON参数

  6. 结果处理:将函数执行结果返回给模型进行下一步决策或最终回答生成

3 计划执行智能体优势



结构化输出:确保参数格式正确,减少解析错误

更高的准确性:模型被优化为正确调用函数,减少格式错误

简化提示工程:无需在提示中详细说明工具使用格式

高效工具选择:能够智能选择最适合当前任务的工具

更强的类型安全:函数参数具有严格的类型检查

4 个人助理应用

4.1 导入LangChain模块,调用阿里云百炼大模型

备注:代码中阿里百炼的API Key是个人的,文章24小时后会删除,请更换自己的API Key。















from langchain.tools import toolfrom langchain_openai import ChatOpenAIfrom langchain.agents import AgentExecutor, create_openai_functions_agentfrom langchain.tools import DuckDuckGoSearchRun, WikipediaQueryRun, toolfrom langchain_community.utilities import WikipediaAPIWrapperfrom langchain.prompts import ChatPromptTemplate, MessagesPlaceholderfrom langchain.memory import ConversationBufferMemoryimport osos.environ["DASHSCOPE_API_KEY"] = "sk-212cd36c049d416d9479714327f41e51"llm = ChatOpenAI(    api_key=os.getenv("DASHSCOPE_API_KEY"),    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",    model="qwen-plus")

4.2 创建旅行工具























search_tool = DuckDuckGoSearchRun(name="搜索")# 创建自定义工具@tooldef get_weather(location: str, unit: str = "celsius"):    """获取指定位置的天气信息"""    # 在实际应用中,这里应该调用真实的天气API    return f"{location}天气晴朗,温度25{unit[0]}"@tooldef check_calendar(date: str):    """查看指定日期的日程安排"""    # 实际应用中连接到日历API    return f"{date}的日程:9:00 团队会议,12:00 午餐,14:00 客户拜访"@tooldef add_event(date: str, time: str, description: str):    """向日历添加新事件"""    # 实际应用中连接到日历API    return f"已添加:{date} {time} - {description}"@tooldef send_email(to: str, subject: str, body: str):    """发送电子邮件"""    # 实际应用中连接到电子邮件API    return f"已向{to}发送主题为'{subject}'的电子邮件"

4.3 创建旅行规划智能体
























# 创建个人助理工具集assistant_tools = [check_calendar, add_event, send_email, get_weather, search_tool]# 创建个人助理智能体personal_assistant = create_openai_functions_agent(    llm=llm,    tools=assistant_tools,    prompt=ChatPromptTemplate.from_messages([        ("system", "你是一个高效的个人助理。使用提供的工具来帮助用户管理日程和处理任务。"),        MessagesPlaceholder(variable_name="chat_history"),        ("human", "{input}"),        MessagesPlaceholder(variable_name="agent_scratchpad"),    ]))personal_assistant_executor = AgentExecutor(    agent=personal_assistant,    tools=assistant_tools,    memory=ConversationBufferMemory(memory_key="chat_history", return_messages=True),    verbose=True)# 处理会议请求meeting_request = "帮我制定一个明天工作的行程计划。上午9点到10点,通知大家提前4会集合,讨论课程研发的事情!"meeting_plan = personal_assistant_executor.invoke({"input": meeting_request})print("会议日程:\n", meeting_plan["output"])


联系邮箱:oradba@tianlinks.com                                                                    QQ:13101385     
联系地址:安徽省合肥市高新区文曲路800号创新产业园一期A4栋709-710室      联系电话:13866763731
tianlinks.com

扫码关注微信公众号