技术背景介绍
Zapier Natural Language Actions(NLA)提供了一种通过自然语言接口访问Zapier平台上5000多个应用和20000多个操作的方法。通过NLA,你可以将自然语言翻译成具体的API调用并获取简化的输出。这使得在复杂的多应用环境中进行自动化操作变得更加轻松。然而需要注意的是,Zapier NLA将在2023年11月17日停用。
核心原理解析
NLA的核心思想是通过类似OAuth的设置窗口暴露一组操作,用户可以通过REST API调用这些操作。它支持API Key和OAuth两种形式的认证方式:
- API Key:适用于开发者账户的快速启动和测试。
- OAuth:适合用户面对的应用场景,需要终端用户授权访问其连接的账户。
本文将重点介绍如何在服务端使用API Key进行操作。
代码实现演示
下面的示例代码展示了如何使用LangChain与Zapier NLA集成,通过简单的顺序链处理工作流。
import os
from langchain.chains import LLMChain, SimpleSequentialChain, TransformChain
from langchain_community.tools.zapier.tool import ZapierNLARunAction
from langchain_community.utilities.zapier import ZapierNLAWrapper
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
# 设置OpenAI和Zapier API的密钥
os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # 请替换为你的OpenAI API Key
os.environ["ZAPIER_NLA_API_KEY"] = "your-zapier-nla-api-key" # 请替换为你的Zapier NLA API Key
# 初始化Zapier NLA Wrapper
zapier = ZapierNLAWrapper()
actions = zapier.list()
# Gmail邮件查找操作
def nla_gmail(inputs):
action = next(
(a for a in actions if a["description"].startswith("Gmail: Find Email")), None
)
return {
"email_data": ZapierNLARunAction(
action_id=action["id"],
zapier_description=action["description"],
params_schema=action["params"],
).run(inputs["instructions"])
}
gmail_chain = TransformChain(
input_variables=["instructions"],
output_variables=["email_data"],
transform=nla_gmail,
)
# 生成草稿回复
template = """You are an assistant who drafts replies to an incoming email. Output draft reply in plain text (not JSON).
Incoming email:
{email_data}
Draft email reply:"""
prompt_template = PromptTemplate(input_variables=["email_data"], template=template)
reply_chain = LLMChain(llm=OpenAI(temperature=0.7), prompt=prompt_template)
# 发送草稿回复到Slack
SLACK_HANDLE = "@YourName"
def nla_slack(inputs):
action = next(
(
a for a in actions
if a["description"].startswith("Slack: Send Direct Message")
),
None,
)
instructions = f'Send this to {SLACK_HANDLE} in Slack: {inputs["draft_reply"]}'
return {
"slack_data": ZapierNLARunAction(
action_id=action["id"],
zapier_description=action["description"],
params_schema=action["params"],
).run(instructions)
}
slack_chain = TransformChain(
input_variables=["draft_reply"],
output_variables=["slack_data"],
transform=nla_slack,
)
# 执行完整的顺序链
GMAIL_SEARCH_INSTRUCTIONS = "Grab the latest email from Silicon Valley Bank"
overall_chain = SimpleSequentialChain(
chains=[gmail_chain, reply_chain, slack_chain], verbose=True
)
overall_chain.run(GMAIL_SEARCH_INSTRUCTIONS)
应用场景分析
这种整合方式非常适合在企业环境中实现自动化工作流。例如,自动处理客户邮件,并在Slack中通知相关小组成员。这不仅提高了效率,还确保了信息的及时传递。
实践建议
- 安全性:API密钥应妥善保管,不随源码一起发布。
- 扩展性:可以根据具体业务需求,扩展支持更多操作。
- 调试:使用‘verbose=True’选项可以帮助调试工作流问题。
如果遇到问题欢迎在评论区交流。
—END—