DocumentationAPI Reference📓 Tutorials🧑‍🍳 Cookbook🤝 Integrations💜 Discord🎨 Studio
Documentation

AnthropicChatGenerator

This component enables chat completions using Anthropic large language models (LLMs).

Most common position in a pipelineAfter a ChatPromptBuilder
Mandatory init variables"api_key": An Anthropic API key. Can be set with ANTHROPIC_API_KEY env var.
Mandatory run variables“messages” A list of ChatMessage  objects
Output variables"replies": A list of ChatMessage objects

”meta”: A list of dictionaries with the metadata associated with each reply, such as token count, finish reason, and so on
API referenceAnthropic
GitHub linkhttps://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/anthropic

Overview

This integration supports Anthropic chat models such as claude-3-5-sonnet-20240620,claude-3-opus-20240229claude-3-haiku-20240307, and similar. Check out the most recent full list in Anthropic documentation.

Parameters

AnthropicChatGenerator needs an Anthropic API key to work. You can provide this key in:

  • The ANTHROPIC_API_KEY environment variable (recommended)
  • The api_key init parameter and Haystack Secret API: Secret.from_token("your-api-key-here")

Set your preferred Anthropic model with the model parameter when initializing the component.

AnthropicChatGenerator requires a prompt to generate text, but you can pass any text generation parameters available in the Anthropic Messaging API method directly to this component using the generation_kwargs parameter, both at initialization and when running the component. For more details on the parameters supported by the Anthropic API, see the Anthropic documentation.

Finally, the component needs a list of ChatMessage objects to operate. ChatMessage is a data class that contains a message, a role (who generated the message, such as userassistantsystemfunction), and optional metadata.

Only text input modality is supported at this time.

Streaming

This Generator supports streaming the tokens from the LLM directly in output. To do so, pass a function to the streaming_callback init parameter.

Prompt caching

Prompt caching is a feature for Anthropic LLMs that stores large text inputs for reuse. It allows you to send a large text block once and then refer to it in later requests without resending the entire text.
This feature is particularly useful for coding assistants that need full codebase context and for processing large documents. It can help reduce costs and improve response times.

Here's an example of an instance of AnthropicChatGenerator being initialized with prompt caching and tagging a message to be cached:

from haystack_integrations.components.generators.anthropic import AnthropicChatGenerator
from haystack.dataclasses import ChatMessage

generation_kwargs = {"extra_headers": {"anthropic-beta": "prompt-caching-2024-07-31"}}

claude_llm = AnthropicChatGenerator(
    api_key=Secret.from_env_var("ANTHROPIC_API_KEY"), generation_kwargs=generation_kwargs
)

system_message = ChatMessage.from_system("Replace with some long text documents, code or instructions")
system_message.meta["cache_control"] = {"type": "ephemeral"}

messages = [system_message, ChatMessage.from_user("A query about the long text for example")]
result = claude_llm.run(messages)

# and now invoke again with 

messages = [system_message, ChatMessage.from_user("Another query about the long text etc")]
result = claude_llm.run(messages)

# and so on, either invoking component directly or in the pipeline 

For more details, refer to Anthropic's documentation and integration examples.

Usage

Install theanthropic-haystack package to use the AnthropicChatGenerator:

pip install anthropic-haystack

On its own

from haystack_integrations.components.generators.anthropic import AnthropicChatGenerator
from haystack.dataclasses import ChatMessage

generator = AnthropicChatGenerator()
message = ChatMessage.from_user("What's Natural Language Processing? Be brief.")
print(generator.run([message]))

In a pipeline

You can also use AnthropicChatGeneratorwith the Anthropic chat models in your pipeline.

from haystack import Pipeline
from haystack.components.builders import ChatPromptBuilder
from haystack.dataclasses import ChatMessage
from haystack_integrations.components.generators.anthropic import AnthropicChatGenerator
from haystack.utils import Secret

pipe = Pipeline()
pipe.add_component("prompt_builder", ChatPromptBuilder())
pipe.add_component("llm", AnthropicChatGenerator(Secret.from_env_var("ANTHROPIC_API_KEY")))
pipe.connect("prompt_builder", "llm")

country = "Germany"
system_message = ChatMessage.from_system("You are an assistant giving out valuable information to language learners.")
messages = [system_message, ChatMessage.from_user("What's the official language of {{ country }}?")]

res = pipe.run(data={"prompt_builder": {"template_variables": {"country": country}, "template": messages}})
print(res)

Additional References

🧑‍🍳 Cookbook: Advanced Prompt Customization for Anthropic