
Haystack 接入 Together AITogetherAIChatGenerator 与 TogetherAIGenerator 完整实战指南【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack本篇技术指南聚焦 Haystack 生态中的 Together AI 官方集成togetherai-haystack系统讲解TogetherAIChatGenerator与TogetherAIGenerator两个生成器组件的设计原理、完整参数体系、流式输出、工具调用Tool/Toolset与 Pipeline 编排方式。读完本文你将能够在自己的 RAG 或 Agent 应用中直接接入 Together AI 托管的开源大模型如 Llama-3.3-70B-Instruct并通过generation_kwargs精细控制生成行为。本文以 version-2.20 的集成 API 参考 为骨架并结合 核心源码 与配套使用文档进行纵深展开。集成定位OpenAI 兼容层之上的 Together AI 生成器Together AI 提供云托管的开源模型推理服务其 chat completion 端点与 OpenAI API 高度兼容。Haystack 正是利用这一兼容性设计了本集成TogetherAIChatGenerator直接继承自 Haystack 核心组件OpenAIChatGenerator基类源码位于 haystack/components/generators/chat/openai.py复用其 OpenAI Python SDK 客户端、消息归一化、流式分块处理与序列化逻辑TogetherAIGenerator又继承自TogetherAIChatGenerator在聊天生成能力之上封装出面向单条文本提示prompt string的简单接口。从源码结构可以推断这一继承关系意味着两个组件天然具备与 OpenAI 生态一致的请求/响应处理链路默认走https://api.together.xyz/v1这一 OpenAI 兼容 base URL因此可以直接复用OPENAI_TIMEOUT默认 30 秒与OPENAI_MAX_RETRIES默认 5 次环境变量来控制客户端行为对应实现见 openai.py 的_client_kwargs方法。安装与 API Key 配置使用前需要先安装集成包pip install togetherai-haystack运行需要满足两个前提拥有一个有效的 Together AI 账号且账户内有足够额度具备 API Key按以下任一方式提供推荐方式设置环境变量TOGETHER_API_KEY这也是组件的默认行为——api_key参数的默认值即为Secret.from_env_var(TOGETHER_API_KEY)显式传参使用 Haystack 的 Secret 管理机制 传入如api_keySecret.from_token(your-api-key-here)。组件默认模型为meta-llama/Llama-3.3-70B-Instruct-Turbo默认 API 基址为https://api.together.xyz/v1。若你的网络环境需要代理或服务商提供其他端点可通过api_base_url覆盖。TogetherAIChatGenerator面向多轮聊天的生成器构造函数签名与参数详解__init__( *, api_key: Secret Secret.from_env_var(TOGETHER_API_KEY), model: str meta-llama/Llama-3.3-70B-Instruct-Turbo, streaming_callback: StreamingCallbackT | None None, api_base_url: str | None https://api.together.xyz/v1, generation_kwargs: dict[str, Any] | None None, tools: ToolsType | None None, timeout: float | None None, max_retries: int | None None, http_client_kwargs: dict[str, Any] | None None ) - None各参数含义如下参数类型说明api_keySecretTogether API Key默认读取TOGETHER_API_KEY环境变量modelstr使用的 Together AI chat completion 模型名默认meta-llama/Llama-3.3-70B-Instruct-Turbo可换成 DeepSeek、Qwen 等在 Together AI 上托管的模型streaming_callbackStreamingCallbackT \| None流式回调函数每收到一个新 token 时被调用回调参数为StreamingChunkapi_base_urlstr \| NoneTogether AI API 基址默认 OpenAI 兼容端点https://api.together.xyz/v1generation_kwargsdict[str, Any] \| None透传给 Together AI 端点的生成参数见下文速查表toolsToolsType \| None供模型发起调用的Tool和/或Toolset对象详见下文工具调用小节timeoutfloat \| None单次 API 调用的超时时间max_retriesint \| None遇到服务端内部错误时的最大重试次数未设置时默认取OPENAI_MAX_RETRIES环境变量否则为 5http_client_kwargsdict[str, Any] \| None用于配置自定义httpx.Client/httpx.AsyncClient的关键字参数字典generation_kwargs 支持参数速查聊天端点generation_kwargs中的所有键值对都会被原样透传到 Together AI chat completion 端点因而支持端点定义的全部参数。API 参考中明确列出的常用项包括参数作用与建议取值max_tokens输出文本的最大 token 数temperature采样温度。越大越有创造性创意类任务可尝试 0.9有确定答案的任务建议 0等价于 argmax 采样top_p核采样nucleus sampling替代温度只考虑累计概率质量达到top_p的 token。例如 0.1 表示只考虑概率质量最高的前 10% tokenstream是否流式返回部分进度。开启后 token 以 server-sent events 形式逐段下发并以data: [DONE]结束safe_prompt是否在每次对话前注入安全提示词random_seed随机采样的种子用于复现结果response_format约束输出结构的 JSON Schema 或 Pydantic 模型提供后输出始终按该格式校验模型返回工具调用时除外。注意流式 结构化输出场景下response_format必须是 JSON Schema 而非 Pydantic 模型工具调用Tool 与 Toolset 的灵活组合TogetherAIChatGenerator通过tools参数支持函数调用function calling。tools的类型为ToolsType其灵活性体现在三种组织方式单个Tool列表将独立工具作为列表传入单个Toolset直接把整个工具集传入混合模式同一列表中同时混入多个Toolset与独立Tool。参考 使用文档 的示例from haystack.tools import Tool, Toolset from haystack_integrations.components.generators.togetherai import TogetherAIChatGenerator # 创建独立工具 weather_tool Tool(nameweather, descriptionGet weather info, ...) news_tool Tool(namenews, descriptionGet latest news, ...) # 将相关工具归组为 toolset math_toolset Toolset([add_tool, subtract_tool, multiply_tool]) # 混合传入 toolset 与独立 tool generator TogetherAIChatGenerator( tools[math_toolset, weather_tool, news_tool] # Toolset 与 Tool 的混合 )底层实现中OpenAIChatGenerator在初始化时会调用_check_duplicate_tool_names校验工具名唯一性并在warm_up()阶段调用warm_up_tools预热工具见 openai.py 初始化与预热逻辑。更完整的工具定义方法可参考 Tool 文档 与 Toolset 文档。序列化TogetherAIChatGenerator提供to_dict()方法将组件序列化为字典返回dict[str, Any]便于在 Pipeline 的 YAML 或 JSON 编排中持久化与复用。序列化时工具与回调函数会以可反序列化的形式存储。快速上手TogetherAIChatGenerator 使用示例独立使用API 参考给出的最小示例from haystack_integrations.components.generators.togetherai import TogetherAIChatGenerator from haystack.dataclasses import ChatMessage messages [ChatMessage.from_user(Whats Natural Language Processing?)] client TogetherAIChatGenerator() response client.run(messages) print(response)输出示例ChatMessage携带模型名、索引、结束原因与 token 用量{replies: [ChatMessage(_contentNatural Language Processing (NLP) is a branch of artificial intelligence that focuses on enabling computers to understand, interpret, and generate human language in a way that is meaningful and useful., _roleChatRole.ASSISTANT: assistant, _nameNone, _meta{model: meta-llama/Llama-3.3-70B-Instruct-Turbo, index: 0, finish_reason: stop, usage: {prompt_tokens: 15, completion_tokens: 36, total_tokens: 51}})]}输入输出均采用 Haystack 的ChatMessage格式。ChatMessage数据类源码见 haystack/dataclasses/chat_message.py封装了消息内容、角色user/system/assistant/tool对应ChatRole枚举以及可选元数据保证多轮对话上下文的连贯性。启用流式输出流式模式下token 生成即被回调消费显著降低首 token 延迟感知from haystack.dataclasses import ChatMessage from haystack_integrations.components.generators.togetherai import ( TogetherAIChatGenerator, ) client TogetherAIChatGenerator( modelmeta-llama/Llama-3.3-70B-Instruct-Turbo, streaming_callbacklambda chunk: print(chunk.content, end, flushTrue), ) response client.run([ChatMessage.from_user(What are Agentic Pipelines? Be brief.)]) # 检查响应所用的模型 print(\n\nModel used:, response[replies][0].meta.get(model))编排进 Pipeline聊天场景下最典型的位置是接在ChatPromptBuilder之后由 builder 生成消息序列再喂给生成器from haystack import Pipeline from haystack.components.builders import ChatPromptBuilder from haystack.dataclasses import ChatMessage from haystack_integrations.components.generators.togetherai import ( TogetherAIChatGenerator, ) prompt_builder ChatPromptBuilder() llm TogetherAIChatGenerator(modelmeta-llama/Llama-3.3-70B-Instruct-Turbo) pipe Pipeline() pipe.add_component(builder, prompt_builder) pipe.add_component(llm, llm) pipe.connect(builder.prompt, llm.messages) messages [ ChatMessage.from_system(Give brief answers.), ChatMessage.from_user(Tell me about {{city}}), ] response pipe.run( data{builder: {template: messages, template_variables: {city: Berlin}}}, ) print(response)关于ChatPromptBuilder的完整用法可参考 ChatPromptBuilder 文档。TogetherAIGenerator面向纯文本提示的生成器TogetherAIGenerator继承自TogetherAIChatGenerator在内部把字符串 prompt 包装为ChatMessage后再走聊天端点因此对外表现为输入字符串、输出字符串列表的简洁接口。构造函数签名与参数__init__( api_key: Secret Secret.from_env_var(TOGETHER_API_KEY), model: str meta-llama/Llama-3.3-70B-Instruct-Turbo, api_base_url: str | None https://api.together.xyz/v1, streaming_callback: StreamingCallbackT | None None, system_prompt: str | None None, generation_kwargs: dict[str, Any] | None None, timeout: float | None None, max_retries: int | None None, ) - None除与聊天版本相同的参数外本组件独有的关键参数是system_promptsystem_promptstr | None用于设定生成任务的上下文或指令。未提供时 system prompt 会被省略此时采用模型自带的默认系统提示词。此外两个版本在超时与重试的默认取值策略上保持一致timeout未设置时取OPENAI_TIMEOUT环境变量否则为 30 秒max_retries未设置时取OPENAI_MAX_RETRIES环境变量否则为 5。generation_kwargs 支持参数速查文本生成API 参考在文本生成版本中列出的参数覆盖更广除前文提到的max_tokens、temperature、top_p外还包括参数作用n每个提示生成几条补全。例如模型收到 3 条提示且n2则共生成 6 条补全每条提示 2 条stop一个或多个停止序列模型遇到后即停止生成presence_penalty对已在文本中出现过的 token施加的惩罚取值越大模型越不容易重复同一 tokenfrequency_penalty对已在文本中生成过的 token施加的惩罚取值越大越不容易重复logit_bias对指定 token 施加 logit 偏置字典的键为 token值为要添加的偏置量run 与 run_async同步方法签名run( *, prompt: str, system_prompt: str | None None, streaming_callback: StreamingCallbackT | None None, generation_kwargs: dict[str, Any] | None None ) - dict[str, Any]要点prompt用于文本生成的输入提示字符串system_prompt可选运行时传入会覆盖__init__中设置的 system promptstreaming_callback可选运行时传入会覆盖初始化时的回调generation_kwargs运行时的额外生成参数会逐键合并并优先于初始化时传入的同名参数返回值字典包含两个键——replies生成的文本补全字符串列表meta与每条生成结果对应的元数据字典列表包含模型名、结束原因finish reason与 token 用量统计。异步版本run_async拥有完全相同的参数与返回值可直接在asyncio环境中await调用。序列化TogetherAIGenerator同时提供to_dict()序列化与from_dict(data)反序列化两个方法。from_dict接收组件的字典表示并返回TogetherAIGenerator实例这使得基于 YAML/JSON 的 Pipeline 配置能够无损还原组件状态。快速上手TogetherAIGenerator 使用示例独立使用含 generation_kwargsAPI 参考中的示例同时演示了generation_kwargs的传法from haystack_integrations.components.generators.togetherai import TogetherAIGenerator generator TogetherAIGenerator(modeldeepseek-ai/DeepSeek-R1, generation_kwargs{ temperature: 0.9, }) print(generator.run(Who is the best Italian actor?))带 system prompt 的调用from haystack_integrations.components.generators.togetherai import TogetherAIGenerator client TogetherAIGenerator( modelmeta-llama/Llama-3.3-70B-Instruct-Turbo, system_promptYou are a helpful assistant that provides concise answers., ) response client.run(Whats Natural Language Processing?) print(response[replies][0])组装 RAG Pipeline在 RAG 场景中TogetherAIGenerator最常见的编排位置是接在PromptBuilder之后由检索器提供上下文、由生成器产出答案from haystack import Pipeline, Document from haystack.components.retrievers.in_memory import InMemoryBM25Retriever from haystack.components.builders.prompt_builder import PromptBuilder from haystack.document_stores.in_memory import InMemoryDocumentStore from haystack_integrations.components.generators.togetherai import TogetherAIGenerator docstore InMemoryDocumentStore() docstore.write_documents([ Document(contentRome is the capital of Italy), Document(contentParis is the capital of France) ]) query What is the capital of France? template Given the following information, answer the question. Context: {% for document in documents %} {{ document.content }} {% endfor %} Question: {{ query }}? pipe Pipeline() pipe.add_component(retriever, InMemoryBM25Retriever(document_storedocstore)) pipe.add_component(prompt_builder, PromptBuilder(templatetemplate)) pipe.add_component(llm, TogetherAIGenerator(modelmeta-llama/Llama-3.3-70B-Instruct-Turbo)) pipe.connect(retriever, prompt_builder.documents) pipe.connect(prompt_builder, llm) result pipe.run({ prompt_builder: {query: query}, retriever: {query: query} }) print(result) {llm: {replies: [The capital of France is Paris.], meta: [{model: meta-llama/Llama-3.3-70B-Instruct-Turbo, ...}]}}PromptBuilder的模板语法与更多用法可参考 PromptBuilder 文档。源码级原理继承链与客户端行为要真正理解这两个组件值得回到基类源码确认几个关键行为客户端初始化延迟到warm_upOpenAIChatGenerator在构造时仅保存参数真正的同步/异步 OpenAI 客户端在warm_up()/warm_up_async()时才按需创建见 openai.py。这意味着组件可以在不触发网络连接的情况下安全地实例化、序列化与反序列化。超时与重试的默认值注入_client_kwargs()方法openai.py展示了默认值的最终来源——OPENAI_TIMEOUT默认 30.0与OPENAI_MAX_RETRIES默认 5随后连同base_url、api_key一起传给 OpenAI SDK。这正是 API 参考中未设置时取环境变量说法的实现依据。消息归一化与流式分块run内部先调用_normalize_messages处理输入再根据是否设置回调决定走流式_handle_stream_response逐 chunk 触发streaming_callback还是非流式路径最终统一转换为ChatMessage列表返回。StreamingChunk与FinishReason等类型定义在 haystack/dataclasses/streaming_chunk.py。工具调用链路工具列表在初始化时做重名校验_check_duplicate_tool_names在warm_up时统一预热warm_up_tools调用时扁平化后随请求发送模型返回的工具调用被解析进ChatMessage的ToolCall字段从而支撑 Agent 式多轮工具编排。选型建议与注意事项聊天场景选TogetherAIChatGenerator纯文本补全选TogetherAIGenerator前者接受ChatMessage列表、天然适合多轮对话与工具调用后者接受字符串、适合一次性的文本补全。若对话历史或工具调用不是刚需二者皆可。另可参考 如何选择合适的生成器 的对比说明。从最新文档看TogetherAIGenerator已被标记为弃用官方推荐改用TogetherAIChatGenerator——后者同样接受纯字符串输入run会将字符串归一化为单条 user 消息且功能完全覆盖前者。新项目建议直接以TogetherAIChatGenerator为入口。response_format与流式不可混用 Pydantic 模型如需同时启用结构化输出与流式response_format必须传 JSON Schema 而非 Pydantic 模型。默认端点与模型组件默认指向https://api.together.xyz/v1与meta-llama/Llama-3.3-70B-Instruct-Turbo实际可用模型清单以 Together AI 官方文档为准。密钥管理优先通过TOGETHER_API_KEY环境变量注入密钥避免密钥硬编码进代码或 Pipeline 配置序列化to_dict时 API Key 以Secret形式保留配合 Haystack 的 Secret 管理 机制使用。延伸阅读本集成 API 参考docs-website/reference_versioned_docs/version-2.20/integrations-api/togetherai.mdTogetherAIChatGenerator 使用文档TogetherAIGenerator 使用文档基类实现OpenAIChatGenerator 源码消息与流式数据类ChatMessage 源码、StreamingChunk 源码工具体系Tool 文档、Toolset 文档【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考