Foundational LLM Chat 是一个使用 AWS CDK 和 Converse API 构建的 Chainlit 应用程序,可让您与 Amazon Bedrock 语言模型进行交互。它提供了一个用户友好的界面,用于与 Amazon Bedrock LLM 聊天、上传图像或文档以及接收多模式响应。该应用程序使用各种服务部署在 AWS 上,例如 Amazon Bedrock、Amazon Elastic Container Service、Amazon Cognito、Amazon CloudFront 等。
该架构图说明了基础 LLM 聊天应用程序的 AWS 部署。用户通过受 Amazon Cognito 身份验证保护的 Web 界面与应用程序交互。该应用程序使用 Amazon CloudFront 的 CDN 在全球范围内分发。在特定 AWS 区域内,应用程序使用 Amazon ECS 进行容器化部署跨多个可用区部署。后端与 Amazon Bedrock 集成以利用各种语言模型,使用户能够与 AI 助手进行多模式对话。
该应用程序是通过./bin
文件夹中的config.json
文件进行配置的。关键配置选项包括:
default_system_prompt
:此字段包含聊天机器人将使用的默认系统提示(如果未在bedrock_models
字段中指定)。它定义了人工智能助手的初始指令和行为。您可以修改此值以更改助手的角色或初始提示。
max_characters_parameter
:此字段指定输入文本中允许的最大字符数。如果设置为字符串"None"
,则没有字符限制。如果需要,您可以更改此值以限制输入文本长度。
max_content_size_mb_parameter
:此字段设置输入内容(例如图像)的最大大小(以兆字节为单位)。如果设置为字符串"None"
,则没有大小限制。您可以修改该值来限制输入内容的最大大小。
default_aws_region
:此字段指定部署应用程序的 AWS 区域。您还可以为每个 Amazon Bedrock 模型字段设置区域。
prefix
:此字段允许您为应用程序创建的资源名称设置前缀。如果需要,您可以将其留空或提供自定义前缀。
该字段包含聊天机器人可以使用的基岩模型的字典。每个模型都由一个键(例如,“Sonnet”、“Haiku”)标识,并且该键是 Chainlit 聊天配置文件中使用的名称。每个模型至少具有以下属性:
id
:Amazon Bedrock 模型的 ID 或 ARN。您可以在 AWS 文档中找到可用的模型 ID。region
:用于访问模型的区域数组。如果未启用跨区域推理,则为 1 个;如果未启用跨区域推理,则为多个。可选配置参数包括:
inference_profile
:跨区域推理的设置prefix
:区域前缀(例如“us”)region
: 主要推理区域system_prompt
: 自定义系统提示符cost
:定价信息input_1k_price
:1,000 个输入代币的成本(以美元为单位)。您可以在 AWS Bedrock 定价页面上找到不同型号的定价信息。output_1k_price
:1,000 个输出代币的成本(以美元为单位)。vision
[可选] :正确或错误。是否为模型启用了视觉功能。document
[可选] :正确或错误。如果为模型启用了文档功能](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html)。tool
[可选] :正确或错误。如果为模型启用了工具功能](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html)。default
[可选] :true 或 false。默认选择型号您可以修改bedrock_models
部分以包含其他模型或根据您的要求更新现有模型。
以下是如何检索型号 ID 和定价信息的示例:
要查找模型 ID 或 ARN,请参阅 AWS Bedrock 模型 ID 文档。例如,Claude 3 Sonnet 模型的 ID 为anthropic.claude-3-sonnet-20240229-v1:0
。
要查找定价信息,请参阅 AWS Bedrock 定价文档。对于 Claude 3 Sonnet 模型,输入和输出定价如下:
对config.json
文件进行所需的更改后,您可以按照自述文件中的说明继续进行部署。
这是 json 的示例:
{
"default_system_prompt" : " you are an assistant " ,
"max_characters_parameter" : " None " ,
"max_content_size_mb_parameter" : " None " ,
"default_aws_region" : " us-west-2 " ,
"prefix" : " " ,
"bedrock_models" : {
"Claude Sonnet 3.5 New" : {
"system_prompt" : " you are an assistant " ,
"id" : " us.anthropic.claude-3-5-sonnet-20241022-v2:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " , " us-east-2 " ],
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.015
},
"default" : true ,
"vision" : true ,
"document" : true ,
"tool" : true
},
"Meta Llama 3.2 90B Vision Instruct" : {
"id" : " us.meta.llama3-2-90b-instruct-v1:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " ],
"cost" : {
"input_1k_price" : 0.002 ,
"output_1k_price" : 0.002
},
"vision" : true ,
"document" : true ,
"tool" : true
},
"Mistral Large 2" : {
"id" : " mistral.mistral-large-2407-v1:0 " ,
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.009
},
"vision" : false ,
"document" : true ,
"tool" : true
}
}
}
该应用程序利用 Amazon Bedrock Prompt Manager 来:
目前该应用程序支持 2 种自动变量替换:
%Y-%m-%d
;%Y-%m-%d %H:%M:%S UTC
您可以编辑chainlit_image/foundational-llm-chat_app/massages_utils.py
中的extract_and_process_prompt
函数以添加更多直接替换。
该应用程序使用 Amazon Bedrock 的 Converse API,提供:
所有系统提示均通过 Amazon Bedrock Prompt Manager 进行存储和管理,提供:
当使用系统提示配置语言模型的行为时,考虑安全影响并采取措施防止潜在的误用或漏洞至关重要。一个重大风险是提示注入,其中恶意输入可能以意想不到的方式操纵系统提示,可能导致有害或有偏见的输出。
以下指南是一个很好的起点:缓解越狱和提示注入。
提示工程是指精心设计提示或指令来指导语言模型生成所需输出的实践。有效的提示工程对于确保语言模型理解并适当响应给定的上下文和任务至关重要。
以下课程旨在让您全面逐步了解如何使用 Bedrock:使用 Anthropic Claude v3 进行提示工程,在 Claude 中设计最佳提示。
本指南通过一系列课程和练习涵盖了快速工程的各种技术和最佳实践,分为三个级别:初级、中级和高级。
通过遵循本指南中概述的原则和技术,您可以增强语言模型应用程序的性能和可靠性,确保 AI 助手生成更相关、更连贯和上下文感知的响应。
我们建议使用 AWS Cloud9 进行部署。如果您想使用 Cloud9 部署解决方案,则在继续之前需要满足以下条件:
m5.large
作为实例类型。Amazon Linux 2023
作为平台。 如果您决定不使用 AWS Cloud9,请验证您的环境是否满足以下先决条件:
验证您的环境是否满足以下先决条件:
你有:
AWS 账户
允许您创建 AWS 示例中包含的资源的访问策略
控制台和编程访问
NodeJS 已安装
nvm
您可以在继续之前运行以下命令 nvm install --lts
NPM 已安装
nvm
您可以在继续之前运行以下命令 nvm install-latest-npm
AWS CLI 已安装并配置为与您的 AWS 账户一起使用
已安装 AWS CDK CLI
安装了 Finch 或安装了 Docker
在部署区域中启用 Amazon Bedrock 模型访问:如何启用 Amazon Bedrock 模型访问。
至少启用以下一项:
克隆存储库,打开文件夹,安装依赖项:
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[仅当您之前在部署区域中没有这样做时才可选]引导 CDK 环境:
cdk bootstrap
构建并部署堆栈:
cdk deploy --region YOUR_DEPLOY_REGION
其中 YOUR_DEPLOY_REGION 是您要部署应用程序的 AWS 区域。例如: us-west-2
。
如果您使用 Finch 而不是 Docker,请在命令开头添加CDK_DOCKER=finch
如下例所示:
CDK_DOCKER=finch cdk deploy --region us-west-2
这将在 AWS 上创建所有必要的资源,包括 ECS 集群、Cognito 用户池、CloudFront 分配等。
部署完成后,CloudFront 分发 URL 将显示在终端中。使用此 URL 访问 Foundational-llm-chat 应用程序。
部署后你会得到类似这样的信息:
✅ Foundational-LLM-ChatStack
Deployment time: 465.09s
Outputs:
FoundationalLlmChatStack.CognitoUserPool = ID
FoundationalLlmChatStack.NetworkingFoundationalLlmChatChatbotStack = CLOUDFRONT_DISTRIBUTION_ADDRESS
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceLoadBalancer = ECS_LOAD_BALANCER
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceServiceURL = ECS_LOAD_BALANCER_ADDRESS
Stack ARN: ARN
Total time: 469.14s
Amazon CloudFront 分配如以下行所示: FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
用户池。打开此用户池并创建一个用户并验证电子邮件地址;为了避免产生不必要的成本,建议您在使用完本示例创建的资源后清理并删除它们。请按照以下步骤删除堆栈和关联的资源:
Foundational-LLM-ChatStack
的堆栈。这将删除整个堆栈,包括 ECS 集群、Cognito 用户池、CloudFront 分配以及所有其他关联资源。
或者,您可以使用 AWS CDK 从命令行删除堆栈:
cdk destroy --region YOUR_DEPLOY_REGION
将YOUR_DEPLOY_REGION
替换为您部署应用程序的 AWS 区域。
请注意,删除堆栈不会自动删除部署期间创建的 CloudWatch 日志和 Amazon ECS 任务定义。如果您不再需要这些资源,您可能需要手动删除它们,以避免产生额外费用。
虽然当前的架构为部署基础 LLM 聊天应用程序提供了一个良好的起点,但对于生产就绪部署还有其他注意事项:
在当前架构中,CloudFront 发行版和应用程序负载均衡器 (ALB) 之间的通信通过 HTTP 进行。对于生产部署,强烈建议使用 HTTPS (TLS/SSL) 进行安全通信:
在两个级别(ALB 和 ECS 任务)启用具有 TLS 终止的 HTTPS 可确保端到端加密并增强应用程序的安全性。
此 AWS 示例仅用于演示和教育目的。如果没有进一步修改和强化,它不是为生产用途而设计的。将此应用程序部署到生产环境之前,根据您的具体要求和最佳实践进行彻底的测试、安全评估和优化至关重要。
claude 的系统提示可以直接从 Anthropic 文档中获取:系统提示
欢迎贡献!请遵循通常的 Git 工作流程:
该库根据 MIT-0 许可证获得许可。请参阅许可证文件。
在将此示例中的内容用于生产目的之前,您应该考虑进行自己的独立评估。这可能包括(除其他外)根据您的特定质量控制实践和标准测试、保护和优化此示例中提供的内容。