聊天撰稿人
本笔记提供了一个关于如何开始使用 Writer 聊天模型的快速概述。
Writer 拥有多种聊天模型。您可以在 Writer 文档中找到关于其最新模型的信息,包括成本、上下文窗口和支持的输入类型。
概述
集成详情
| 类别 | 包 | 本地 | 可序列化 | JS 支持 | 包下载量 | 最新包版本 | 
|---|---|---|---|---|---|---|
| ChatWriter | langchain-writer | ❌ | ❌ | ❌ | 
模型特性
| 工具调用 | 结构化输出 | JSON 模式 | 图片输入 | 音频输入 | 视频输入 | 逐令牌流式传输 | 原生异步 | 令牌使用量 | 对数概率 | 
|---|---|---|---|---|---|---|---|---|---|
| ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | 
凭证
注册 Writer AI Studio 并遵循此快速入门以获取 API 密钥。然后,设置 WRITER_API_KEY 环境变量
import getpass
import os
if not os.getenv("WRITER_API_KEY"):
    os.environ["WRITER_API_KEY"] = getpass.getpass("Enter your Writer API key: ")
如果您想获取模型调用的自动化追踪,您还可以通过取消注释下方内容来设置您的 LangSmith API 密钥
# os.environ["LANGSMITH_TRACING"] = "true"
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
安装
ChatWriter 可通过 langchain-writer 包获取。使用以下命令安装:
%pip install -qU langchain-writer
实例化
现在我们可以实例化模型对象,以便生成聊天补全。
from langchain_writer import ChatWriter
llm = ChatWriter(
    model="palmyra-x-004",
    temperature=0,
    max_tokens=None,
    timeout=None,
    max_retries=2,
)
使用
要使用该模型,您需要传入一个消息列表并调用 invoke 方法。
messages = [
    (
        "system",
        "You are a helpful assistant that translates English to French. Translate the user sentence.",
    ),
    ("human", "I love programming."),
]
ai_msg = llm.invoke(messages)
ai_msg
然后,您可以访问消息的内容。
print(ai_msg.content)
流式传输
您也可以流式传输响应。首先,创建一个流:
messages = [
    (
        "system",
        "You are a helpful assistant that translates English to French. Translate the user sentence.",
    ),
    ("human", "I love programming. Sing a song about it"),
]
ai_stream = llm.stream(messages)
ai_stream
然后,遍历该流以获取分块。
for chunk in ai_stream:
    print(chunk.content, end="")
工具调用
Palmyra X 004 等 Writer 模型支持工具调用,这允许您描述工具及其参数。模型将返回一个 JSON 对象,其中包含要调用的工具以及该工具的输入。
绑定工具
使用 ChatWriter.bind_tools,您可以轻松地将 Pydantic 类、字典模式、LangChain 工具,甚至函数作为工具传递给模型。在底层,这些会被转换为工具模式,如下所示:
{
    "name": "...",
    "description": "...",
    "parameters": {...}  # JSONSchema
}
这些将在每次模型调用时传递。
例如,要使用一个获取给定位置天气的工具,您可以定义一个 Pydantic 类并将其传递给 ChatWriter.bind_tools。
from pydantic import BaseModel, Field
class GetWeather(BaseModel):
    """Get the current weather in a given location"""
    location: str = Field(..., description="The city and state, e.g. San Francisco, CA")
llm.bind_tools([GetWeather])
然后,您可以使用该工具调用模型。
ai_msg = llm.invoke(
    "what is the weather like in New York City",
)
ai_msg
最后,您可以访问工具调用并执行您的函数。
print(ai_msg.tool_calls)
关于工具绑定的注意事项
ChatWriter.bind_tools() 方法不会创建绑定了工具的新实例,而是将接收到的 tools 和 tool_choice 存储在初始类实例属性中,以便在使用 ChatWriter 调用 Palmyra LLM 时将其作为参数传递。这种方法支持不同类型的工具,例如 function 和 graph。Graph 是远程调用的 Writer Palmyra 工具之一。欲了解更多信息,请访问我们的文档。
有关 LangChain 中工具使用的更多信息,请访问 LangChain 工具调用文档。
批量处理
您还可以批量处理请求并设置 max_concurrency。
ai_batch = llm.batch(
    [
        "How to cook pancakes?",
        "How to compose poem?",
        "How to run faster?",
    ],
    config={"max_concurrency": 3},
)
ai_batch
然后,遍历批次以获取结果。
for batch in ai_batch:
    print(batch.content)
    print("-" * 100)
异步使用
上述所有功能(调用、流式传输、批量处理、工具调用)也支持异步使用。
提示模板
提示模板有助于将用户输入和参数转换为语言模型的指令。您可以像这样使用带提示模板的 ChatWriter:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate(
    [
        (
            "system",
            "You are a helpful assistant that translates {input_language} to {output_language}.",
        ),
        ("human", "{input}"),
    ]
)
chain = prompt | llm
chain.invoke(
    {
        "input_language": "English",
        "output_language": "German",
        "input": "I love programming.",
    }
)
API 参考
有关所有 ChatWriter 功能和配置的详细文档,请前往 API 参考。
更多资源
您可以在 Writer 文档中找到有关 Writer 模型(包括成本、上下文窗口和支持的输入类型)和工具的信息。