链3 | 豆包MarsCode AI刷题
- LangChain中工具的重要性及作用机制:
- 工具是代理与世界交互的关键:在以LLM为核心控制器的代理系统中,工具如同代理的武器,通过其执行能力延展了大模型的功能。LangChain将各种功能封装成工具,每个工具都有特定输入、输出及处理方法。代理根据任务需求经大模型推理选择合适工具,工具处理输入生成输出,该输出可再经大模型推理作为其他工具输入或最终返回给用户,以此提高系统灵活性、可扩展性并简化开发者工作。
- 如何加载工具:介绍了在程序中加载工具的代码片段,部分工具(如链、代理)需用LLM初始化,展示了相应的代码示例。
- LangChain支持的部分工具及应用示例:
- arXiv工具:用于学术研究,是围绕Arxiv.org的封装工具,可帮助获取相关领域论文信息。通过示例展示了ZERO_SHOT_REACT_DESCRIPTION类型Agent如何依据提示引导模型调用该工具来查询论文创新点,包括提示内容的详细拆解以及代理思考过程和最终答案的呈现。
- Gmail工具箱:可用于开发个人助理实现邮件相关功能。详细阐述了开发能访问Gmail邮件、检查特定客服是否发邮件的AI应用的步骤:首先在Google Cloud设置应用程序接口获取开发密钥,接着根据密钥生成开发Token,最后用LangChain框架开发Gmail App,包括导入相关包、初始化工具包及模型、通过指定工具和模型初始化agent并运行查询指令等操作及相应代码示例,展示了自然语言格式请求下由Agent和工具协同完成任务的过程及结果。
- LangChain的核心价值:
- 集成多模型和多策略:能让多个模型或策略在统一框架下工作,轻松创建可处理多种输入并执行多种任务的系统,无需为每个任务单独写代码。
- 更易于交互和维护:提供工具和代理抽象,使开发者可从底层实现细节转向高层逻辑,封装底层任务让开发者更专注于组合工具解决实际问题。
- 适应性:其架构便于添加、替换新的工具或模型,以适应新需求或变化。
- 可解释性:提供对话历史和工具选择记录,有助于理解系统决策原因。
深入思考
- LangChain的工具体系为AI应用开发带来了极大便利,通过将不同功能封装成工具并与大模型紧密结合,实现了复杂任务的高效处理。这种方式不仅充分发挥了大模型的推理能力,还借助工具的专业性拓展了应用场景。
- 在实际开发中,不同工具针对不同领域和任务需求,如arXiv工具服务于学术研究,Gmail工具箱专注于邮件相关操作,这体现了LangChain的通用性和针对性。开发者可根据具体项目需求灵活选用和组合工具,构建个性化的智能应用。
- LangChain对底层任务的封装使得开发者无需过多关注模型加载、输入输出处理等细节,降低了开发门槛,但同时也需要开发者对其提供的框架和工具足够熟悉,以便更好地发挥其优势,实现高效开发和精准应用。
思考题
- 关于利用AI助理实现写邮件草稿及发送邮件功能:
- 要实现让AI助理帮忙写邮件草稿甚至发送邮件的功能,可基于前面介绍的Gmail工具箱相关内容进一步拓展。在设置获取Gmail API权限时,不能仅局限于读取权限(如之前示例中的
gmail.readonly),需要根据具体需求调整权限范围,比如获取写入、发送等相关权限。
- 在代码层面,初始化Gmail工具包及相关模型等步骤与之前类似,但在调用具体工具功能时,需找到对应于写邮件草稿(可能涉及根据用户提供的主题、内容要点等生成符合邮件格式的文本内容)和发送邮件(将生成好的邮件内容通过Gmail API发送出去)的工具方法,并通过Agent合理调用这些工具,结合大模型的推理能力,例如根据用户需求生成合适的邮件内容,然后利用工具将其发送出去。
- 关于使用GitHub工具开发自动完成GitHub任务的App:
- 首先要导入与GitHub交互所需的工具包(类似之前导入Gmail相关工具包的操作),例如从
langchain.agents.agent_toolkits中导入GitHubToolkit。
- 初始化GitHub工具包,可能需要提供相应的GitHub账号认证信息等,以获取与GitHub仓库交互的权限。
- 获取工具后,结合合适的聊天模型(如
ChatOpenAI)初始化Agent,例如使用AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION类型的Agent。
- 针对查看Issues任务,可通过Agent运行类似“查看仓库[具体仓库名]中的最新Issues”这样的自然语言指令,Agent会根据提示和大模型推理调用GitHub工具包中的相关工具来获取并返回Issues信息。对于Merge Branches任务,运行如“合并仓库[具体仓库名]中的[分支名1]和[分支名2]”的指令,Agent同样会协调工具完成相应操作,实现自动完成部分GitHub任务的目的。