Documentation Index
Fetch the complete documentation index at: https://langchain-zh.cn/llms.txt
Use this file to discover all available pages before exploring further.
Mistral AI 是一个提供其强大开源模型托管服务的平台。
本文将帮助您开始使用 Mistral 聊天模型。有关 ChatMistralAI 所有功能和配置的详细文档,请参阅 API 参考。
集成详情
模型特性
下表标题中的链接提供了如何使用特定功能的指南。
要访问 Mistral AI 模型,您需要创建一个 Mistral AI 账户,获取 API 密钥,并安装 @langchain/mistralai 集成包。
访问 Mistral 控制台 注册并生成 API 密钥。完成后,设置 MISTRAL_API_KEY 环境变量:
export MISTRAL_API_KEY="your-api-key"
如果您希望自动追踪模型调用,还可以通过取消注释以下行来设置 LangSmith API 密钥:
# export LANGSMITH_TRACING="true"
# export LANGSMITH_API_KEY="your-api-key"
LangChain ChatMistralAI 集成位于 @langchain/mistralai 包中:
npm install @langchain/mistralai @langchain/core
实例化
现在我们可以实例化模型对象并生成聊天补全:
import { ChatMistralAI } from "@langchain/mistralai"
const llm = new ChatMistralAI({
model: "mistral-large-latest",
temperature: 0,
maxRetries: 2,
// 其他参数...
})
向 Mistral 发送聊天消息时,需要遵循以下要求:
- 第一条消息 不能 是助手(ai)消息。
- 消息 必须 在用户和助手(ai)消息之间交替。
- 消息 不能 以助手(ai)或系统消息结尾。
const aiMsg = await llm.invoke([
[
"system",
"你是一个将英语翻译成法语的助手。请翻译用户的句子。",
],
["human", "I love programming."],
])
aiMsg
AIMessage {
"content": "J'adore la programmation.",
"additional_kwargs": {},
"response_metadata": {
"tokenUsage": {
"completionTokens": 9,
"promptTokens": 27,
"totalTokens": 36
},
"finish_reason": "stop"
},
"tool_calls": [],
"invalid_tool_calls": [],
"usage_metadata": {
"input_tokens": 27,
"output_tokens": 9,
"total_tokens": 36
}
}
console.log(aiMsg.content)
J'adore la programmation.
工具调用
Mistral 的 API 支持其部分模型的工具调用。您可以在此页面查看哪些模型支持工具调用。
以下示例演示了如何使用它:
import { ChatMistralAI } from "@langchain/mistralai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import * as z from "zod";
import { tool } from "@langchain/core/tools";
const calculatorSchema = z.object({
operation: z
.enum(["add", "subtract", "multiply", "divide"])
.describe("要执行的操作类型。"),
number1: z.number().describe("要操作的第一个数字。"),
number2: z.number().describe("要操作的第二个数字。"),
});
const calculatorTool = tool((input) => {
return JSON.stringify(input);
}, {
name: "calculator",
description: "一个简单的计算器工具",
schema: calculatorSchema,
});
// 将工具绑定到模型
const modelWithTool = new ChatMistralAI({
model: "mistral-large-latest",
}).bindTools([calculatorTool]);
const calcToolPrompt = ChatPromptTemplate.fromMessages([
[
"system",
"你是一个总是需要使用计算器的助手。",
],
["human", "{input}"],
]);
// 将提示、模型和输出解析器链接在一起
const chainWithCalcTool = calcToolPrompt.pipe(modelWithTool);
const calcToolRes = await chainWithCalcTool.invoke({
input: "2 + 2 等于多少?",
});
console.log(calcToolRes.tool_calls);
[
{
name: 'calculator',
args: { operation: 'add', number1: 2, number2: 2 },
type: 'tool_call',
id: 'DD9diCL1W'
}
]
Mistral AI 支持三个事件的自定义钩子:beforeRequest、requestError 和 response。每种钩子类型的函数签名示例如下:
const beforeRequestHook = (req: Request): Request | void | Promise<Request | void> => {
// 在 Mistral 处理请求之前运行的代码
};
const requestErrorHook = (err: unknown, req: Request): void | Promise<void> => {
// 当 Mistral 处理请求时发生错误时运行的代码
};
const responseHook = (res: Response, req: Request): void | Promise<void> => {
// 在 Mistral 发送成功响应之前运行的代码
};
要将这些钩子添加到聊天模型中,可以将它们作为参数传递,它们会自动添加:
import { ChatMistralAI } from "@langchain/mistralai"
const modelWithHooks = new ChatMistralAI({
model: "mistral-large-latest",
temperature: 0,
maxRetries: 2,
beforeRequestHooks: [ beforeRequestHook ],
requestErrorHooks: [ requestErrorHook ],
responseHooks: [ responseHook ],
// 其他参数...
});
或者在实例化后手动分配和添加它们:
import { ChatMistralAI } from "@langchain/mistralai"
const model = new ChatMistralAI({
model: "mistral-large-latest",
temperature: 0,
maxRetries: 2,
// 其他参数...
});
model.beforeRequestHooks = [ ...model.beforeRequestHooks, beforeRequestHook ];
model.requestErrorHooks = [ ...model.requestErrorHooks, requestErrorHook ];
model.responseHooks = [ ...model.responseHooks, responseHook ];
model.addAllHooksToHttpClient();
addAllHooksToHttpClient 方法会清除所有当前添加的钩子,然后分配整个更新后的钩子列表,以避免钩子重复。
可以逐个移除钩子,也可以一次性清除模型中的所有钩子。
model.removeHookFromHttpClient(beforeRequestHook);
model.removeAllHooksFromHttpClient();
API 参考
有关 ChatMistralAI 所有功能和配置的详细文档,请参阅 API 参考。