用亚马逊 Bedrock Agent 构建智能体和知识库 – 金蝶发票云票据助手开发实践(第一篇:Agent 开发实践)

用亚马逊 Bedrock Agent 构建智能体和知识库 – 金蝶发票云票据助手开发实践(第一篇:Agent 开发实践)

💡 原文中文,约10000字,阅读约需24分钟。
📝

内容提要

亚马逊在re:Invent 2023发布大会上推出了Bedrock Agent,加速了企业用户对生成式AI的应用程序开发进程。Bedrock Agent集成了历史会话管理、向量库等多种组件,帮助用户快速构建企业专用的智能体应用。文章还介绍了使用Lambda创建工具和创建Agent的指令和Action groups。

🔎

延伸解读

Bedrock Agent 如何降低开发门槛

文章指出,传统基于大模型的应用开发需要集成多种组件,如数据库保存历史会话和向量数据、引入 Langchain 等框架、优化提示词等,这提升了开发门槛。Bedrock Agent 通过提示词自动构建、内置历史会话管理、与 Lambda 和多种向量库自动集成,让开发者更专注于业务逻辑。与自行使用 Langchain 构建 Agent 相比,Bedrock Agent 由 AWS 平台维护依赖库版本和匹配性,减少了后续开发维护的难度。

Agent 指令与 API Schema 是关键设计点

文章强调,Agent 指令决定了 Agent 应该做什么以及如何与用户互动,需要清晰描述工作流程、每一步业务逻辑以及返回给客户的内容。同时,Action group 的 API schema 用于描述 Lambda 函数中每个 function 的作用和参数意义,其准确性直接影响 FM 对 Function 的选择和参数收集。因此,开发者应确保业务描述与对应 API 的描述语意一致,以提高 Agent 调用的准确性。

Lambda 集成简化工具开发但需遵循固定格式

Bedrock Agent 与 Lambda 的集成让工具开发变得简单,开发者只需在 Lambda 中实现业务函数,无需关注 Langchain 等依赖库的维护。但 Lambda 函数需要解析特定结构的触发事件,根据 event 中的 apiPath 调用相应函数,并返回符合 Bedrock Agent 要求的固定格式响应,包括 actionGroup、apiPath、httpMethod、statusCode、responseBody 等字段。此外,还需编辑 Lambda 资源策略,允许 Agent 访问。

❓

Q&A

Bedrock Agent 是什么?它主要解决什么问题?

Bedrock Agent 是亚马逊在 re:Invent 2023 推出的服务,同时提供检索增强生成(RAG)和代理(Agent)能力。它通过提示词自动构建、内置历史会话管理、与 Lambda 和多种向量库的自动集成,帮助用户快速构建企业专用的智能体应用,让开发者更专注于业务逻辑。

使用 Bedrock Agent 开发智能体相比用 Langchain 自己构建有什么优势?

Bedrock Agent 与 Lambda 集成,开发者只需编写工具函数,无需维护 Langchain 等依赖库。Langchain 开源版本变化快,依赖库版本更新和与基础模型版本的匹配会带来开发和维护难度,而 Bedrock Agent 由 AWS 平台负责维护这部分内容,简化了开发流程。

构建一个 Bedrock Agent 需要完成哪些主要步骤?

主要步骤包括:1)编写 Agent 指令,定义 Agent 的功能和交互方式;2)构建一个或多个 Action groups,每个 Action group 对应一个 Lambda 函数和 API schema;3)创建 Knowledge base(可选,用于私域知识问答);4)创建 Agent 并选择基础模型;5)编辑 Lambda 资源策略允许 Agent 访问;6)进行功能测试。

如何为 Bedrock Agent 编写有效的 Agent 指令?

Agent 指令需要详细描述 Agent 应该做什么以及如何与用户互动,通常包含工作流程或步骤、清晰描述业务逻辑、每一步具体实现什么、返回给客户的内容。指令没有固定模板,但业务描述应尽量与对应 API 的描述语意一致。例如发票助手指令定义了收集信息、生成预览、确认后开票、发送邮箱等流程。

创建 Action group 时 API schema 的作用是什么?如何提供?

API schema 用于描述 Lambda 函数中每个 function 的作用、参数意义,帮助基础模型基于 schema 做出 Function 选择并收集参数,因此定义的准确性非常重要。Bedrock Agent 提供两种方式:编写自己的 JSON 描述上传到 S3,或使用 in-line 的 OpenAPI editor 在线编写。

Lambda 函数如何解析 Bedrock Agent 触发的事件并返回结果?

Lambda 事件中包含 apiPath、parameters 等关键内容。开发者可以用 get_named_parameter 函数从 event['parameters'] 中提取参数值。入口函数根据 event['apiPath'] 调用相应的业务函数,并按照 Bedrock Agent 要求的固定返回值模板构造 action_response,包含 actionGroup、apiPath、httpMethod、httpStatusCode、responseBody 等字段。

金蝶发票云票据助手这个案例实现了哪些功能?

该助手基于 Bedrock Agent 构建,实现两个功能:一是向客户收集开发票所需信息,自动调用后端 API 为用户开具发票;二是基于企业票据知识回答用户提问。用户从以前面向系统填单操作转变为通过自然语言对话申请发票开具,提升了用户体验。

🏷️

标签

➡️

继续阅读