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);
}