📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易
由 deepset 维护

集成:Cohere

在 Haystack 中使用 Cohere 模型

作者
deepset

目录

概述

您可以使用 Cohere 模型GeneratorsEmbedders 在您的 Haystack 管道中。

安装

pip install cohere-haystack

使用

您可以通过多种方式使用 Cohere 模型

Embedding 模型

您可以通过三个组件利用 Cohere 的 `/embed` 模型:CohereTextEmbedderCohereDocumentEmbedderCohereDocumentImageEmbedder。这些组件支持 Embed 系列模型。

要为文本文档创建语义嵌入,请在索引管道中使用 `CohereDocumentEmbedder`。要为基于图像的文档创建语义嵌入,请在索引管道中使用 `CohereDocumentImageEmbedder`。要为查询生成嵌入,请使用 `CohereTextEmbedder`。一旦您为特定用例选择了合适的组件,即可使用模型名称初始化该组件。默认情况下,Cohere API 密钥将自动从 `COHERE_API_KEY` 环境变量或 `CO_API_KEY` 环境变量中读取。

下面是用于文本文档的、包含 `InMemoryDocumentStore`、`CohereDocumentEmbedder` 和 `DocumentWriter` 的示例索引管道

from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
from haystack_integrations.components.embedders.cohere import CohereDocumentEmbedder

document_store = InMemoryDocumentStore()

documents = [Document(content="My name is Wolfgang and I live in Berlin"),
             Document(content="I saw a black horse running"),
             Document(content="People speak French in France"),
             Document(content="Germany has many big cities")]

indexing_pipeline = Pipeline()
indexing_pipeline.add_component("embedder", CohereDocumentEmbedder(model="embed-multilingual-v3.0", input_type="search_document"))
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("embedder", "writer")

indexing_pipeline.run({"embedder": {"documents": documents}})

下面是用于基于图像的文档的、包含 `InMemoryDocumentStore`、`CohereDocumentImageEmbedder` 和 `DocumentWriter` 的示例索引管道

from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.writers import DocumentWriter
from haystack_integrations.components.embedders.cohere import CohereDocumentImageEmbedder

documents = [
    Document(content="A photo of a cat", meta={"file_path": "cat.jpg"}),
    Document(content="A photo of a dog", meta={"file_path": "dog.jpg"}),
]

indexing_pipeline = Pipeline()
indexing_pipeline.add_component("embedder", CohereDocumentImageEmbedder(model="embed-v4.0"))
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("embedder", "writer")

indexing_pipeline.run({"embedder": {"documents": documents}})

生成模型(LLMs)

要使用 Cohere 的 `/generate` 模型,请使用模型名称初始化 CohereGenerator。默认情况下,Cohere API 密钥将自动从 `COHERE_API_KEY` 环境变量或 `CO_API_KEY` 环境变量中读取。然后,您可以在 `PromptBuilder` 之后,在问答管道中使用此 `CohereGenerator`。

下面是使用 RAG 和 `PromptBuilder` 以及 `CohereGenerator` 进行生成式问答的示例管道

from haystack import Pipeline
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.components.builders.prompt_builder import PromptBuilder
from haystack_integrations.components.embedders.cohere import CohereTextEmbedder
from haystack_integrations.components.generators.cohere import CohereGenerator

template = """
Given the following information, answer the question.

Context:
{% for document in documents %}
    {{ document.text }}
{% endfor %}

Question: What's the official language of {{ country }}?
"""
pipe = Pipeline()
pipe.add_component("embedder", CohereTextEmbedder(model="embed-multilingual-v3.0"))
pipe.add_component("retriever", InMemoryEmbeddingRetriever(document_store=document_store))
pipe.add_component("prompt_builder", PromptBuilder(template=template))
pipe.add_component("llm", CohereGenerator(model="command-light"))
pipe.connect("embedder.embedding", "retriever.query_embedding")
pipe.connect("retriever", "prompt_builder.documents")
pipe.connect("prompt_builder", "llm")

pipe.run({
    "embedder": {"text": "France"},
    "prompt_builder": {"country": "France"}
})

与上面的示例类似,您也可以使用 `CohereChatGenerator` 在您的管道中使用 Cohere 的 `/chat` 模型和功能(流式传输、连接器)。

from haystack import Pipeline
from haystack.components.builders import ChatPromptBuilder
from haystack.dataclasses import ChatMessage
from haystack_integrations.components.generators.cohere.chat import CohereChatGenerator


pipe = Pipeline()
pipe.add_component("prompt_builder", ChatPromptBuilder())
pipe.add_component("llm", CohereChatGenerator())
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": "Germany"}, "prompt_source": messages}})
print(res)

Ranker 模型

要使用 Cohere 的 `/ranker` 模型,请使用模型名称初始化 CohereRanker。默认情况下,Cohere API 密钥将自动从 `COHERE_API_KEY` 环境变量或 `CO_API_KEY` 环境变量中读取。然后,您可以使用此 `CohereRanker` 根据与指定查询的语义相关性对文档进行排名。

下面是包含 `InMemoryDocumentStore`、`InMemoryBM25Retriever` 和 `CohereRanker` 的示例索引管道

from haystack import Document, Pipeline
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.rankers.cohere import CohereRanker

docs = [
    Document(content="Paris is in France"),
    Document(content="Berlin is in Germany"),
    Document(content="Lyon is in France"),
]
document_store = InMemoryDocumentStore()
document_store.write_documents(docs)

retriever = InMemoryBM25Retriever(document_store=document_store)
ranker = CohereRanker()

document_ranker_pipeline = Pipeline()
document_ranker_pipeline.add_component(instance=retriever, name="retriever")
document_ranker_pipeline.add_component(instance=ranker, name="ranker")

document_ranker_pipeline.connect("retriever.documents", "ranker.documents")

query = "Cities in France"
res = document_ranker_pipeline.run(data = {"retriever": {"query": query, "top_k": 3}, "ranker": {"query": query, "top_k": 2}})