Giter Site home page Giter Site logo

aws-samples / amazon-personalize-langchain-extensions Goto Github PK

View Code? Open in Web Editor NEW
9.0 2.0 1.0 16 KB

Amazon Personalize Langchain extensions to support invoking and retrieving personalized recommendations from your Amazon Personalize resources

Home Page: https://aws.amazon.com/personalize/

License: MIT No Attribution

Python 100.00%
langchain recommendations recommendations-as-a-service personalization amazon-personalize generative-ai langchain-python

amazon-personalize-langchain-extensions's Introduction

Amazon Personalize Langchain Extensions

This repo provides a set of utility classes to work with Langchain. It currently has a utility class AmazonPersonalize for working with a Amazon Personalize campaign/recommender and AmazonPersonalizeChain custom chain build to retrieve recommendations from Amazon Personalize and execute a default prompt (which can be overriden by the user).

Installing

Clone the repository

git clone https://github.com/aws-samples/amazon-personalize-langchain-extensions.git

Move to the repo dir

cd amazon-personalize-langchain-extensions

Install the classes

pip install .

Usage

[Use-case-1] Setup Amazon Personalize Client and invoke Personalize Chain for summarizing results

from aws_langchain import AmazonPersonalize

recommender_arn="<insert_arn>"

client=AmazonPersonalize(credentials_profile_name="default",region_name="us-west-2",recommender_arn=recommender_arn)
client.get_recommendations(user_id="1")

[Use-case-2] Setup Amazon Personalize Client and invoke Personalize Chain for summarizing results

from aws_langchain import AmazonPersonalize
from aws_langchain import AmazonPersonalizeChain
from langchain.llms.bedrock import Bedrock

recommender_arn="<insert_arn>"

bedrock_llm = Bedrock(model_id="anthropic.claude-v2", region_name="us-west-2")
client=AmazonPersonalize(credentials_profile_name="default",region_name="us-west-2",recommender_arn=recommender_arn)
# Create personalize chain
# Use return_direct=True if you do not want summary
chain = AmazonPersonalizeChain.from_llm(
    llm=bedrock_llm, 
    client=client,
    return_direct=False 
)
response = chain({'user_id': '1'})
print(response)

[Use-Case-3] Invoke Amazon Personalize Chain using your own prompt

from langchain.prompts.prompt import PromptTemplate
from aws_langchain import AmazonPersonalize
from aws_langchain import AmazonPersonalizeChain
from langchain.llms.bedrock import Bedrock

RANDOM_PROMPT_QUERY="""
You are a skilled publicist. Write a high-converting marketing email advertising several movies available in a video-on-demand streaming platform next week, 
    given the movie and user information below. Your email will leverage the power of storytelling and persuasive language. 
    The movies to recommend and their information is contained in the <movie> tag. 
    All movies in the <movie> tag must be recommended. Give a summary of the movies and why the human should watch them. 
    Put the email between <email> tags.

    <movie>
    {result} 
    </movie>

    Assistant:
    """

RANDOM_PROMPT = PromptTemplate(input_variables=["result"], template=RANDOM_PROMPT_QUERY)


recommender_arn="<insert_arn>"

bedrock_llm = Bedrock(model_id="anthropic.claude-v2", region_name="us-west-2")
client=AmazonPersonalize(credentials_profile_name="default",region_name="us-west-2",recommender_arn=recommender_arn)

chain=AmazonPersonalizeChain.from_llm(llm=bedrock_llm, client=client, return_direct=False, prompt_template=RANDOM_PROMPT)
chain.run({'user_id':'1', 'item_id':'234'})

[Use-case-4] Invoke Amazon Personalize in a Sequential Chain

from langchain.chains import SequentialChain
from langchain.chains import LLMChain
from aws_langchain import AmazonPersonalize
from aws_langchain import AmazonPersonalizeChain
from langchain.llms.bedrock import Bedrock
from langchain.prompts.prompt import PromptTemplate

RANDOM_PROMPT_QUERY_2="""
You are a skilled publicist. Write a high-converting marketing email advertising several movies available in a video-on-demand streaming platform next week, 
    given the movie and user information below. Your email will leverage the power of storytelling and persuasive language. 
    You want the email to impress the user, so make it appealing to them.
    The movies to recommend and their information is contained in the <movie> tag. 
    All movies in the <movie> tag must be recommended. Give a summary of the movies and why the human should watch them. 
    Put the email between <email> tags.

    <movie>
    {result}
    </movie>

    Assistant:
    """

recommender_arn="<insert_arn>"

bedrock_llm = Bedrock(model_id="anthropic.claude-v2", region_name="us-west-2")
client=AmazonPersonalize(credentials_profile_name="default",region_name="us-west-2",recommender_arn=recommender_arn)

RANDOM_PROMPT_2 = PromptTemplate(input_variables=["result"], template=RANDOM_PROMPT_QUERY_2)
personalize_chain_instance=AmazonPersonalizeChain.from_llm(llm=bedrock_llm, client=client, return_direct=True)
random_chain_instance = LLMChain(llm=bedrock_llm, prompt=RANDOM_PROMPT_2)
overall_chain = SequentialChain(chains=[personalize_chain_instance, random_chain_instance], input_variables=["user_id"], verbose=True)
overall_chain.run({'user_id':'1', 'item_id':'234'})

[Use-case-5] Invoke Amazon Personalize using metadata from response

from aws_langchain import AmazonPersonalize
from aws_langchain import AmazonPersonalizeChain
from langchain.llms.bedrock import Bedrock

recommender_arn="<insert_arn>"
metadata_column_list = ["METADATA_COL1"]
metadataMap = {"ITEMS": metadata_column_list}

bedrock_llm = Bedrock(model_id="anthropic.claude-v2", region_name="us-west-2")
client=AmazonPersonalize(credentials_profile_name="default",region_name="us-west-2",recommender_arn=recommender_arn)
# Create personalize chain
# Use return_direct=True if you do not want summary
chain = AmazonPersonalizeChain.from_llm(
    llm=bedrock_llm, 
    client=client,
    return_direct=False 
)
response = chain({'user_id': '1', 'metadata_columns': metadataMap})
print(response)

Uninstall

pip uninstall aws-langchain

Contributing

Create your GitHub branch and make a pull request. See CONTRIBUTING for more information.

License

This library is licensed under the MIT-0 License. See the LICENSE file.

amazon-personalize-langchain-extensions's People

Contributors

amazon-auto avatar pranava-amzn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

tom0311

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.