import { initializeAgentExecutorWithOptions } from "@langchain/classic/agents";
import { OpenAI } from "@langchain/openai";
import {
GmailCreateDraft,
GmailGetMessage,
GmailGetThread,
GmailSearch,
GmailSendMessage,
} from "@langchain/community/tools/gmail";
import { StructuredTool } from "@langchain/core/tools";
export async function run() {
const model = new OpenAI({
temperature: 0,
apiKey: process.env.OPENAI_API_KEY,
});
// 这些是Gmail工具的默认参数
// const gmailParams = {
// credentials: {
// clientEmail: process.env.GMAIL_CLIENT_EMAIL,
// privateKey: process.env.GMAIL_PRIVATE_KEY,
// // 需要 (privateKey + clientEmail) 或 accessToken
// accessToken: "一个访问令牌或获取访问令牌的函数",
// },
// scopes: ["https://mail.google.com/"], // 如果使用访问令牌则不需要
// };
// 对于自定义参数,请取消注释上面的代码,将值替换为您自己的值,并将其传递给下面的工具
const tools: StructuredTool[] = [
new GmailCreateDraft(),
new GmailGetMessage(),
new GmailGetThread(),
new GmailSearch(),
new GmailSendMessage(),
];
const gmailAgent = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "structured-chat-zero-shot-react-description",
verbose: true,
});
const createInput = `为我创建一个Gmail草稿,以便编辑一封来自一只渴望与疏远的朋友(一只猫)合作进行一些研究的、有感知能力的鹦鹉视角的信。但在任何情况下都不得发送该消息。`;
const createResult = await gmailAgent.invoke({ input: createInput });
// 创建结果 {
// output: '我已为您创建了一个草稿邮件供您编辑。草稿ID为 r5681294731961864018。'
// }
console.log("创建结果", createResult);
const viewInput = `你能在我的草稿中搜索最新的邮件吗?`;
const viewResult = await gmailAgent.invoke({ input: viewInput });
// 查看结果 {
// output: "您草稿中最新的邮件来自 hopefulparrot@gmail.com,主题为 '合作机会'。邮件正文如下:'亲爱的 [朋友],希望这封信能让你安好。我写信给你,是希望重燃我们的友谊,并讨论一起合作进行一些研究的可能性。我知道我们过去有过分歧,但我相信我们可以搁置分歧,为了更大的利益而合作。期待你的回复。此致,[鹦鹉]'"
// }
console.log("查看结果", viewResult);
}