ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【Agent】【tools】5.使用LlamaIndex实现带有回调功能的函数调用

【Agent】【tools】5.使用LlamaIndex实现带有回调功能的函数调用 案例目标本案例展示了如何在LlamaIndex中使用带有回调功能的FunctionTool实现人机交互功能。该功能允许开发者在代理交互过程中请求用户输入并执行任何程序化操作实现人在回路human-in-the-loop的概念。具体目标包括演示如何创建带有回调函数的FunctionTool展示如何在代理执行过程中获取用户确认实现一个简单的问候消息发送功能需要用户确认后才能执行技术栈与核心依赖llama-index-llms-openaillama-index-agents-openaiOpenAI APIFunctionToolFunctionAgent本案例主要使用LlamaIndex框架中的FunctionTool和FunctionAgent组件结合OpenAI的GPT模型实现带有回调机制的函数调用功能。环境配置1安装依赖包%pip install llama-index-llms-openai%pip install llama-index-agents-openai2导入所需模块from llama_index.core.tools import FunctionToolfrom llama_index.core.agent.workflow import FunctionAgentfrom llama_index.llms.openai import OpenAIimport os3设置OpenAI API密钥os.environ[OPENAI_API_KEY] sk-案例实现1. 创建回调函数首先定义一个回调函数用于向用户显示函数调用产生的数据并请求用户输入以返回到交互中。def callback(message):confirmation input(f{message[1]}\nDo you approve of sending this greeting?\nInput(Y/N):)if confirmation.lower() y:# Here you can trigger an action such as sending an email, message, api call, etc.return Greeting sent successfully.else:return (Greeting has not been approved, talk a bit about how to improve)2. 创建带回调的函数工具创建一个简单的函数只需要接收者和问候消息然后将其转换为带有回调功能的FunctionTool。def send_hello(destination: str, message: str) - str:Say hello with a rhymedestination: str - Name of recipientmessage: str - Greeting message with a rhyme to the recipients namereturn destination, messagehello_tool FunctionTool.from_defaults(fnsend_hello, callbackcallback)3. 创建代理并测试使用OpenAI的GPT-4模型创建FunctionAgent并测试其功能。llm OpenAI(modelgpt-4.1)agent FunctionAgent(tools[hello_tool])测试1向Karen发送问候response await agent.run(Send hello to Karen)print(str(response))输出The hello message has been sent to Karen with the rhyme Hello Karen, youre a star!测试2向Joe发送问候response await agent.run(Send hello to Joe) print(str(response))输出I have successfully sent a hello message to Joe with the greeting Hello Joe, youre a pro!案例效果本案例实现了一个带有回调功能的函数调用系统具有以下效果当代理调用函数工具时会触发回调函数回调函数会向用户显示将要发送的问候消息用户可以选择批准(Y)或拒绝(N)该操作如果用户批准函数返回成功消息如果用户拒绝函数返回未批准消息并建议如何改进代理能够根据不同的接收者生成押韵的问候消息关键点这种回调机制允许在自动化的AI代理流程中引入人工干预确保关键操作需要人工确认提高了系统的安全性和可控性。案例实现思路本案例的实现思路基于以下几个关键概念1人在回路Human-in-the-Loop设计通过在函数调用过程中引入回调机制允许在自动化流程中插入人工决策点提高系统的可控性和安全性。2回调函数设计回调函数接收函数调用的结果向用户展示相关信息并根据用户输入返回相应的响应影响后续流程。3FunctionTool扩展通过FunctionTool.from_defaults()方法将普通函数转换为带有回调功能的工具扩展了基本函数调用的能力。4代理集成将带有回调功能的工具集成到FunctionAgent中使代理能够在执行过程中触发回调实现人机交互。扩展建议基于本案例可以考虑以下扩展方向多步骤确认流程实现更复杂的多步骤确认流程而不仅仅是简单的Y/N选择异步回调处理改进回调处理机制支持异步操作和更复杂的用户交互回调结果缓存添加回调结果缓存机制避免重复确认相同的操作多种回调方式支持多种回调方式如邮件确认、短信验证、图形界面等权限管理集成权限管理系统根据用户角色决定哪些操作需要确认批量操作确认支持批量操作的确认机制提高用户体验回调日志记录添加详细的回调日志记录便于审计和问题排查总结本案例展示了如何在LlamaIndex中使用带有回调功能的FunctionTool实现人机交互功能。通过在函数调用过程中引入回调机制我们可以在自动化的AI代理流程中插入人工决策点提高系统的安全性和可控性。这种人在回路的设计模式在实际应用中非常有价值特别是在需要执行敏感操作或需要人工判断的场景中。通过简单的回调函数我们可以实现复杂的交互逻辑使AI系统更加灵活和可靠。该案例的代码简洁明了易于理解和扩展为构建更复杂的人机交互系统提供了良好的基础。
返回列表