現今在使用 ai 應用生態最完整肯定是 python,所以我大部分的應用大概會用 python 完成,
如果有機會可以隨後考慮其他程式語言完成(有時間的話😅)
在我們開始前有些東西要設定一下
我建議安裝 aws cli 進行設定好讓我們取得 credential 連結左就擺在這了
以 mac 為例 我們其實可以用 homebrew 安裝
brew install awscli
安裝完成後我們可以繼續了
使用指令
aws configure sso
接下來登入自己的 aws 帳號取得 admin_permission_set 的 credential
把個別的項目輸入
一樣可以在 aws admin_permission_set 取得,並在自己的 terminal 設定環境變數
export AWS_ACCESS_KEY_ID=your-access-key
export AWS_SECRET_ACCESS_KEY=your-secret-key
export AWS_DEFAULT_REGION=us-east-1
筆者使用 uv 作為我的 package Manager 也是可以用 pip 這部分看個人習慣
開始我的專案 在個人 project 目錄下輸入指令
uv init
專案結構
.
├── main.py
├── pyproject.toml
└── README.md
1 directory, 3 files
boto3uv add boto3
當然如果習慣用 pip 的可以用
pip install boto3
pip install botocore
main.py
我們一開始的檔案長這樣
def main():
    print("Hello from project!")
if __name__ == "__main__":
    main()
我們要開始建立一個 class 生存文字應用 我們稱之為 BedrockTextGenerator
class BedrockTextGenerator:
  def __init__(self, region_name='ap-northeast-1')
def main():
    print("Hello from project!")
if __name__ == "__main__":
    main()
我們會用到的
import boto3
import json
from botocore.exceptions import ClientError
所以一開始我們寫 code 會長這樣
import boto3
import json
from botocore.exceptions import ClientError
class BedrockTextGenerator:
  def __init__(self, region_name='ap-northeast-1')
    """
    這裡是初始化的 Bedrock 用戶端
    """
    self.bedrock_runtime = boto3.client(region_name=region_name)
def main():
    print("Hello from testb!")
if __name__ == "__main__":
    main()
接著我們要用 claude 的 foundation model 生成文字 我們 method 就叫做 generate_text_claude
def generate_text_claude(self, prompt, max_tokens=1000):
    """
    使用Claude模型生成文字
    """
    try:
        # 構建請求體
        body = {
            "prompt": f"\n\nHuman: {prompt}\n\nAssistant:",
            "max_tokens_to_sample": max_tokens,
            "temperature": 0.7,
            "top_p": 0.9
        }
        
        # 發送請求到Bedrock
        response = self.bedrock_runtime.invoke_model(
            body=json.dumps(body),
            modelId='anthropic.claude-v2',  # Claude模型ID
            accept='application/json',
            contentType='application/json'
        )
        
        # 解析回應
        response_body = json.loads(response.get('body').read())
        generated_text = response_body.get('completion', '')
        
        return generated_text.strip()
        
    except ClientError as e:
        print(f"發生錯誤: {e}")
        return None
所以完成長這樣
import boto3
import json
from botocore.exceptions import ClientError
class BedrockTextGenerator:
  def __init__(self, region_name='ap-northeast-1')
    """
    這裡是初始化的 Bedrock 用戶端
    """
    self.bedrock_runtime = boto3.client(region_name=region_name)
  def generate_text_claude(self, prompt, max_tokens=1000):
        """
        使用Claude模型生成文字
        """
        try:
            # 構建請求體
            body = {
                "prompt": f"\n\nHuman: {prompt}\n\nAssistant:",
                "max_tokens_to_sample": max_tokens,
                "temperature": 0.7,
                "top_p": 0.9
            }
            
            # 發送請求到Bedrock
            response = self.bedrock_runtime.invoke_model(
                body=json.dumps(body),
                modelId='anthropic.claude-v2',  # Claude模型ID
                accept='application/json',
                contentType='application/json'
            )
            
            # 解析回應
            response_body = json.loads(response.get('body').read())
            generated_text = response_body.get('completion', '')
            
            return generated_text.strip()
            
        except ClientError as e:
            print(f"發生錯誤: {e}")
            return None
def main():
    print("Hello from testb!")
if __name__ == "__main__":
    main()
這樣我們的 class 就做完了
def main():
    # 初始化生成器
    generator = BedrockTextGenerator()
    
    # 測試提示
    prompt = "幫我隨便寫啥,約200字"
    
    print("=== 使用Claude模型 ===")
    claude_result = generator.generate_text_claude(prompt)
    if claude_result:
        print(claude_result)
所以完整的程式碼如下
import boto3
import json
from botocore.exceptions import ClientError
class BedrockTextGenerator:
  def __init__(self, region_name='ap-northeast-1')
    """
    這裡是初始化的 Bedrock 用戶端
    """
    self.bedrock_runtime = boto3.client(region_name=region_name)
  def generate_text_claude(self, prompt, max_tokens=1000):
        """
        使用Claude模型生成文字
        """
        try:
            # 構建請求體
            body = {
                "prompt": f"\n\nHuman: {prompt}\n\nAssistant:",
                "max_tokens_to_sample": max_tokens,
                "temperature": 0.7,
                "top_p": 0.9
            }
            
            # 發送請求到Bedrock
            response = self.bedrock_runtime.invoke_model(
                body=json.dumps(body),
                modelId='anthropic.claude-v2',  # Claude模型ID
                accept='application/json',
                contentType='application/json'
            )
            
            # 解析回應
            response_body = json.loads(response.get('body').read())
            generated_text = response_body.get('completion', '')
            
            return generated_text.strip()
            
        except ClientError as e:
            print(f"發生錯誤: {e}")
            return None
def main():
    # 初始化生成器
    generator = BedrockTextGenerator()
    
    # 測試提示
    prompt = "幫我隨便寫啥,約200字"
    
    print("=== 使用Claude模型 ===")
    claude_result = generator.generate_text_claude(prompt)
    if claude_result:
        print(claude_result)
if __name__ == "__main__":
    main()
打完收工