以编程方式使用文档

AgentMailLoaderAgentMail 收件箱流式传输消息为 LangChain Document文档——每条消息一个文档,纯文本正文作为 page_content, sender / subject / labels / thread / attachment metadata on metadata。对于将收件箱索引到向量存储中以便通过 RAG 处理电子邮件非常有用。

概述

AgentMailLoaderlangchain-agentmail

设置

安装包:

pip install -qU langchain-agentmail

设置您的 AgentMail API 密钥(在以下位置获取) agentmail.to):

if not os.environ.get("AGENTMAIL_API_KEY"):
    os.environ["AGENTMAIL_API_KEY"] = getpass.getpass("AgentMail API key:\n")

实例化

from langchain_agentmail import AgentMailLoader

loader = AgentMailLoader(
    inbox_id="ib_abc123",
    labels=["inbox"],  # optional — filter messages by label
    limit=100,         # optional — cap the number of messages loaded
)

加载

docs = loader.load()
print(docs[0].page_content[:200])
print(docs[0].metadata)

每个 Document 包含以下元数据键(如果存在):

  • - inbox_id, message_id, thread_id
  • - from, to, cc, subject, labels, timestamp
  • - has_attachments, attachments:列表 {attachment_id, filename, content_type, size}

要下载附件字节,请将加载器与 AgentMailGetAttachmentTool 配对——它返回一个预签名下载 URL。

延迟加载

对于较大的收件箱,一次流式传输一个文档而不是实例化完整列表:

for doc in loader.lazy_load():
    print(doc.metadata["subject"])

索引到向量存储

from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings

docs = AgentMailLoader(inbox_id="ib_abc123", limit=200).load()

store = InMemoryVectorStore.from_documents(docs, OpenAIEmbeddings())
retriever = store.as_retriever(search_kwargs={"k": 5})

retriever.invoke("Q3 invoice from acme")

API 参考

包源代码位于 github.com/agentmail-to/langchain-agentmail.