AskIt 是一个灵活的 asyncio Python 库和 CLI 工具,旨在让各种 LLM 模型通过调用 Model Context Protocol(MCP)服务器的服务,以及调用本地定义的 Python 函数来扩展自身能力。项目采用 Apache License 2.0 许可。
主要特点
- 简单轻量
- 可同时连接多个 MCP 服务器
- 支持 STDIO、SSE 和 Streamable-HTTP 类型的 MCP 服务器
- 支持对以任何语言编写的 MCP 服务器进行工具使用/函数调用
- 支持对本地定义的 Python 函数进行工具使用/函数调用
- 支持多个 LLM 提供商:目前支持 OpenAI 和 XAI(Grok),Anthropic、Ollama 和 LMStudio 支持即将推出
- 可选支持流式 LLM 响应
- 通过环境变量安全存储 API 密钥
安装
使用 AskIt MCP 需要系统安装 Python 3.11+。建议使用 Python 版本管理器。然后可以通过 pip 安装该包。
AskIt CLI 快速上手
使用 AskIt 最简单的方式是通过其集成的命令行界面(CLI)工具。CLI 允许用户使用自然语言查询与 MCP 服务器和 LLM 交互,从而轻松访问和操作来自各种来源的数据。
以下命令将利用默认的 OpenAI 模型(gpt-4o-mini)与配置的 LLM 进入“chat-eval”循环。只需将 OpenAI API 密钥作为命令行参数提供即可。
也可以将 OpenAI API 密钥作为提供商特定的环境变量提供。
可以使用命令行选项指定不同的模型或提供商。例如使用 XAI 提供商(Grok)和特定模型。需要将 XAI API 密钥作为环境变量或命令行参数提供。
更多关于提供商特定环境变量的信息可查阅项目文档。
将 MCP 服务器连接到 AskIt
可以通过在当前工作目录中创建 mcp_config.json 文件来连接多个 MCP 服务器。该文件应包含要连接的 MCP 服务器的配置。AskIt CLI 将自动加载此配置并连接到指定的 MCP 服务器。
仓库根目录提供了示例文件 mcp_config.json.example 作为参考。可以复制该文件为 mcp_config.json 并根据需要进行修改。
可以添加任意数量的 MCP 服务器,客户端将连接到所有服务器,并将其工具提供给配置的 LLM。AskIt 支持两种主要类型的 MCP 服务器:stdio 和 Streamable HTTP。前者用于位于本地机器上的 MCP 服务器,后者可用于访问远程托管的 MCP 服务器。
有许多第三方 MCP 服务器可用,可在 Model Context Protocol Servers 仓库或 Awesome MCP Servers 仓库中找到不错的列表。
设置好一些 MCP 服务器并运行后,可以启动 AskIt CLI,它会自动连接到配置的 MCP 服务器。然后可以像上一节那样启动 CLI,但此时 LLM 将能够与配置的 MCP 服务器交互。
API 快速上手
也可以在自己的应用程序中将 AskIt 作为 Python 库使用。以下是编程使用的简单示例,参见 example_simple.py。
MCP 服务器与 API
也可以使用 AskIt API 连接 MCP 服务器。只需添加对 await askit.load_mcp_config() 的调用,如下例所示。这将从当前工作目录的 mcp_config.json 文件加载 MCP 服务器,并将其工具提供给配置的 LLM。
使用 API 进行函数调用
使用 AskIt,可以轻松让 LLM 直接访问你编写的自定义 Python 函数(无需费力创建 MCP 服务器)。只需按下述方式定义函数,并通过 prompt 方法的 tools 参数传入。LLM 随后能够根据需要调用这些函数。在这个快速示例中,我们定义了一个返回当前时间的函数,并使其对配置的 LLM 可用。LLM 可以调用此函数获取当前时间。可以传入任意数量的函数,LLM 将能够根据需要调用它们。
请注意函数上的类型注解以及文档字符串。LLM 使用它们来理解如何调用函数以及函数返回什么。参见 example_simple_with_functions.py。
AskIt API 设计简单易用。主类是 AskIt,提供与 LLM 和 MCP 服务器交互的方法。
如果未提供参数,AskIt 实例将使用所提供环境变量中的默认值。也可以传入自定义系统提示、模型、API 密钥、基础 URL 和提供商。
OpenAI 提供商的默认模型是 gpt-4o-mini,XAI 提供商的默认模型是 grok-4-latest。可以通过传入 model 参数覆盖这些默认值。
对于 OPENAI,当前支持的模型列表可在此处找到;对于 XAI(Grok),当前支持的模型列表可在此处找到。
要提示 LLM,可以使用 askit.prompt() 方法。该方法接受字符串提示并返回 LLM 的响应。
该方法向配置的 LLM 发送提示并返回响应。还可以提供 LLM 可调用的工具(函数)列表,并指定是否流式传输响应。messages 参数可用于提供将包含在提示上下文中的消息列表。这对于维护对话历史或为 LLM 提供额外上下文很有用。prompt 方法会自动将提示和响应追加到提供的 messages 列表中,从而轻松在多次调用 prompt 方法时维护对话历史。关于如何使用 messages 参数的良好示例,参见 example_simple_chat.py。
如果传入 stream=True,响应将是一个异步生成器,在收到响应时逐块产出。这对于长时间运行的提示或希望实时显示响应时很有用。参见 example_streaming.py。
此方法从 JSON 文件加载 MCP 配置。配置应包含要连接的 MCP 服务器,如“将 MCP 服务器连接到 AskIt”一节所述。
其他示例
可以在仓库根目录中找到符合 example_*.py 模式的其他 API 示例。这些示例演示了各种其他用例。
环境变量
AskIt MCP 使用环境变量安全存储 API 密钥和配置设置。还可以在当前工作目录中使用标准 .env 文件设置这些环境变量。AskIt CLI 将自动从此文件加载环境变量。作为参考,仓库根目录提供了名为 .env.example 的文件。可以复制该文件为 .env 并根据需要进行修改。
通用环境变量
- ASKIT_SYSTEM_PROMPT - 可选,为 AskIt 配置默认系统提示
- ASKIT_PROVIDER - 可选,为 AskIt 配置默认提供商 ["OPENAI", "XAI"],默认为 "OPENAI"
提供商特定环境变量
- OPENAI_API_KEY - 为 OpenAI 提供商指定 your_openai_api_key_here
- OPENAI_BASE_URL - 可选,为 OpenAI 提供商配置不同的基础 URL
- OPENAI_MODEL - 可选,为 OpenAI 提供商配置不同的模型,默认为 "gpt-4o-mini"
- XAI_API_KEY - 为 XAI 提供商指定 your_xai_api_key_here
- XAI_BASE_URL - 可选,为 XAI 提供商配置不同的基础 URL
- XAI_MODEL - 可选,为 XAI 提供商配置不同的模型,默认为 "grok-3-latest"
OpenAI API 密钥(或其他受支持提供商的 API 密钥)
贡献
欢迎贡献!请随时提交 Pull Request。
许可
Apache License 2.0