AutoGPT 平台 Ask Wolfram 集成详解:基于 Wolfram Alpha LLM API 的问答与计算块
【免费下载链接】AutoGPTAutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.项目地址: https://gitcode.com/GitHub_Trending/au/AutoGPT
AutoGPT Platform 提供可视化 Agent 编排能力,其中「Ask Wolfram」块封装了 Wolfram Alpha 的计算知识引擎接口,让你在自定义工作流里直接用自然语言完成数学、科学、地理等事实性问答与复杂计算。阅读本文后,你将掌握该块的定位、输入输出契约、底层 HTTP 调用实现、凭据配置方法以及将其接入业务流的实践方案。
块定位:是什么与解决什么问题
在 Wolfram 集成文档 中,该集成被概括为:
Blocks for querying Wolfram Alpha's computational knowledge engine.
即针对 Wolfram Alpha「计算知识引擎」的查询块族。当前仓库只落地了一个块Ask Wolfram,用于向 Wolfram Alpha 提出自然语言问题并返回可直接展示或继续参与流程处理的计算结果。
从功能上看它属于「搜索引擎 / 信息检索」类能力:在 docs/integrations/README.md 的Search and Information Retrieval分组中,它与其他信息检索块(Exa 系列等)并列;同时它已被登记进文档导航 docs/integrations/SUMMARY.md,可在侧边栏按「Wolfram LLM API」条目索引到。
适用场景
| 场景 | 说明 |
|---|---|
| 事实性问答 | 面向数学、科学、地理等确定性事实提问,获取准确答案 |
| 计算与换算 | 复杂数学运算、单位换算、公式求值 |
| 数据查询 | 人口统计、化学属性、历史日期等结构化事实数据 |
需要注意:Wolfram Alpha 擅长的是可计算的确定性知识,而非开放式创作或主观观点,因此它适合作为 Agent 流程中的"算力/知识外挂"节点,输出结果是纯文本字符串(plain string),便于拼接、渲染或交给下游 LLM 进一步加工。
块的输入与输出契约
按 关联文档 的声明,Ask Wolfram 块契约如下。
Inputs
| 输入 | 描述 | 类型 | 是否必填 |
|---|---|---|---|
| question | 要提出的问题 | str | 是 |
另外从源码实现看,该块还隐含一个必选字段:credentials(Wolfram Alpha 凭据),见下文「凭据配置」一节。
Outputs
| 输出 | 描述 | 类型 |
|---|---|---|
| error | 操作失败时的错误信息 | str |
| answer | 问题的计算结果 | str |
文档把error与answer并列声明为两个输出端口。需要指出的是(详见源码解析一节):当请求失败时,底层实现抛出的异常会由执行器转为错误信号,正常路径上真正产出的是answer文本。
源码级实现解析
仓库中该集成仅有少量源码文件,链路非常清晰,是理解 AutoGPT Platform 外部 API 块开发范式的极佳样例:
- 块定义:autogpt_platform/backend/backend/blocks/wolfram/llm_api.py
- HTTP 调用:autogpt_platform/backend/backend/blocks/wolfram/_api.py
Provider 声明与凭据元数据
块定义文件的开头先声明了 Wolfram 作为凭据提供者(provider):
wolfram = ( ProviderBuilder("wolfram") .with_description("Computational knowledge engine") .with_api_key("WOLFRAM_APP_ID", "Wolfram Alpha App ID") .with_base_cost(1, BlockCostType.RUN) .build() )这段代码包含三层关键信息:
- 环境变量约定:外部服务名
wolfram,API Key 环境变量名为WOLFRAM_APP_ID(对应 Wolfram Alpha 开发者控制台的 App ID),并带有人类可读名称 "Wolfram Alpha App ID"; - 计费成本:每次执行(
BlockCostType.RUN)的基础成本为 1 个成本单位; - 凭据字段生成:
wolfram.credentials_field(...)随后被嵌入输入 schema:
class Input(BlockSchemaInput): credentials: CredentialsMetaInput = wolfram.credentials_field( description="Wolfram Alpha API credentials" ) question: str = SchemaField(description="The question to ask")在可视化编辑器中,连接该块时会弹出凭据配置,用户选择或新建 Wolfram 凭据后即可在后续所有运行中复用。
块本体与运行入口
class AskWolframBlock(Block): def __init__(self): super().__init__( id="b7710ce4-68ef-4e82-9a2f-f0b874ef9c7d", description="Ask Wolfram Alpha a question", categories={BlockCategory.SEARCH}, input_schema=self.Input, output_schema=self.Output, ) async def run( self, input_data: Input, *, credentials: APIKeyCredentials, **kwargs ) -> BlockOutput: answer = await llm_api_call(credentials, input_data.question) yield "answer", answer要点:
- 固定块 ID:
b7710ce4-68ef-4e82-9a2f-f0b874ef9c7d用于持久化工作流对块的引用,不应改动; - 分类
BlockCategory.SEARCH:与上文文档分组中的 "Search and Information Retrieval" 一致; - 异步执行:
run是 async 方法,通过yield "answer", answer产出输出,这是标准BlockOutput流式写法; - 凭据注入:声明为 APIKeyCredentials 后,
_api.py里通过credentials.api_key.get_secret_value()拿到密钥明文并拼进请求参数。
底层 HTTP 调用
核心逻辑集中在 _api.py:
async def llm_api_call(credentials: APIKeyCredentials, question: str) -> str: params = {"appid": credentials.api_key.get_secret_value(), "input": question} response = await Requests().get( "https://www.wolframalpha.com/api/v1/llm-api", params=params ) if not response.ok: raise ValueError(f"API request failed: {response.status} {response.text()}") answer = response.text() if response.text() else "" return answer实现细节值得展开说明:
- 端点为 Wolfram Alpha 的 LLM API:
https://www.wolframalpha.com/api/v1/llm-api。该接口专门面向 LLM/Agent 集成场景,返回纯文本短答案(而非完整 API 的结构化 XML/JSON 结果),因此天然适合作为文本流中的一个节点。 - 两个查询参数:
appid:开发者账号下申请的 Wolfram Alpha App ID;input:用户自然语言问题原文。
- 失败即抛出:只要响应非 OK(
not response.ok),就会抛出ValueError,错误信息包含 HTTP 状态码与响应体文本。结合文档的输出表看,这一异常最终会被执行引擎映射为块的错误信号/error输出,供上游错误处理分支捕获。 - 空结果兜底:若 200 响应体为空,则返回空字符串
"",保证下游不会拿到None。
凭据配置与运行前提
使用该块需要满足两个前提:
- 申请 Wolfram Alpha App ID:在 Wolfram Alpha 开发者生态中为应用创建 App ID(对应上文的
WOLFRAM_APP_ID)。该密钥按官方渠道管理,请注意保密——AutoGPT 平台通过 APIKeyCredentials 与密钥安全模块统一托管,不会以明文出现在工作流定义里。 - 在平台内配置凭据:运行工作流前,在 Ask Wolfram 块的凭据字段中选择/新建一个 Wolfram 凭据(输入 App ID)。凭据会加密存储并按需注入,运行时才被解密为请求参数。
提示:凭据存储与校验相关的基础设施位于 autogpt_platform/autogpt_libs/autogpt_libs/api_key/keysmith.py,采用带盐哈希等手段保护密钥,说明平台对第三方凭据做了统一的安全管控。
实战接入:把 Ask Wolfram 编入 Agent 工作流
在 AutoGPT 可视化编辑器中,接入方式一般是:
- 从块面板拖入Ask Wolfram;
- 在
question输入端口接入上游数据:可以接用户输入块(如 Agent Short Text Input)让最终用户在对话中自由提问,也可以接LLM 文本输出或字典取值块,把上一层模型生成的查询字符串交给 Wolfram 求值; - 配置 Wolfram 凭据(App ID);
- 把
answer输出接到下游,例如:- 接Agent Output / LLM:让大模型基于 Wolfram 的确定性答案组织回复,形成「LLM 组织语言 + Wolfram 保证计算准确性」的组合;
- 接条件判断(逻辑块):
error输出可用于触发重试或兜底分支,例如当 Wolfram 服务不可用时改走纯 LLM 回答。
组合示例逻辑:
用户提问(question) └─> Ask Wolfram ──answer──> LLM 组织回复 ──> 输出给用户 └─error──> 兜底/重试分支这种「确定性计算引擎 + 生成式语言模型」的搭配,可显著缓解 LLM 在算术、单位换算与事实数值上的幻觉问题。
使用边界与注意事项
- 答案形态是纯文本:
answer为适合展示或继续处理的字符串(如llm_api_call直接返回响应文本)。如需结构化数据(分步解答、图表、多结果)应改用 Wolfram Alpha 完整 API,而不是本块所使用的v1/llm-api端点。 - 空结果不等于失败:Wolfram 无法作答时可能返回空文本,块不会报错,需要业务层自行判断空串并处理。
- 失败路径走异常:网络错误或非 200 状态会抛
ValueError(错误信息形如API request failed: <status> <body>),在图上表现为错误信号,可按需接错误处理。 - 凭据与配额:App ID 与计费/配额绑定,高频调用前建议核对官方限制;平台侧已把该块单次运行成本设定为 1 个基础 RUN 成本单位。
延伸阅读
- 集成完整文档:Wolfram LLM API
- 块源码:llm_api.py / _api.py
- 文档目录索引:docs/integrations/SUMMARY.md 与 docs/integrations/README.md(Search and Information Retrieval 分组)
- 平台块开发范式:更多输入/输出与逻辑类块见 docs/integrations/block-integrations/basic.md,如需自定义块可参考 Block SDK 指南
【免费下载链接】AutoGPTAutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.项目地址: https://gitcode.com/GitHub_Trending/au/AutoGPT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考