聊天作家
此笔记本提供了 Writer 聊天入门的快速概述。
Writer 有多种聊天模式。您可以在 Writer 文档中找到有关其最新模型及其成本、上下文窗口和支持的输入类型的信息。
概述
集成详细信息
| 类 | 包 | 本地化 | 序列 化 | JS 支持 | 软件包下载 | 最新包装 |
|---|---|---|---|---|---|---|
| ChatWriter | langchain-writer | ❌ | ❌ | ❌ |
模型特点
| 工具调用 | 结构化输出 | JSON 模式 | 图像输入 | 音频输入 | 视频输入 | 令牌级流式处理 | 本机异步 | Token 使用情况 | 日志 |
|---|---|---|---|---|---|---|---|---|---|
| ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |
凭据
注册 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
实例
现在我们可以实例化我们的 model 对象以生成聊天补全:
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()method 不会使用绑定工具创建新实例,而是将收到的tools和tool_choice在初始类实例属性中,在 Palmyra LLM 调用期间将它们作为参数传递,同时使用ChatWriter调用。这种方法允许支持不同的工具类型,例如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 模型(包括成本、上下文窗口和支持的输入类型)和工具的信息。