entari-plugin-llm
entari-plugin-llm 是一个用于 Entari 框架的 LLM(大语言模型)插件,提供对话、函数调用(Tool Call)、会话管理、视觉输入以及若干内置实用工具(如图像识别、网页处理等)。
插件默认使用 Agno 的原厂模型适配器:OpenAI 兼容端点走 OpenAIChat / OpenAILike,Anthropic、Gemini、DashScope、Bedrock 等走各自的原生 SDK。LiteLLM 仅作为长尾 provider 的可选兜底,不再是核心依赖。
主要特性
- 基于 Agno 原生适配器的聊天能力(支持流式与非流式)。
- 支持“函数调用”机制(Tool Call),可以把插件内的订阅函数自动注册为 LLM 可调用的工具。
- 会话与上下文持久化(使用 Agno 的 SQLite 会话存储)。
- 支持视觉(image)输入的模型调用(可通过
vision显式声明)。 - 支持 Agno 原生 Skills:按模型或全局启用,
auto按需加载,always直接注入格式约束。 - 兼容旧版 LiteLLM 风格的
provider/model模型名,升级后配置无需立即改写。 - 可配置的模型/提示/工具调用策略,通过
Config加载与热重载(ConfigReload)。
要求
-
Python >= 3.11
-
依赖见
pyproject.toml中的dependencies(推荐使用 pdm 或 uv 等现代包管理器)。 -
核心依赖已包含
openai,因此 OpenAI 以及所有 OpenAI 兼容端点开箱可用。 -
其他原厂 SDK 按需安装:
pip install "entari-plugin-llm[anthropic]" # Claude pip install "entari-plugin-llm[google]" # Gemini / Vertex AI pip install "entari-plugin-llm[aws-bedrock]" # AWS Bedrock pip install "entari-plugin-llm[mistral]" # Mistral pip install "entari-plugin-llm[cohere]" # Cohere pip install "entari-plugin-llm[groq]" # Groq pip install "entari-plugin-llm[ollama]" # Ollama pip install "entari-plugin-llm[cerebras]" # Cerebras
-
费用估算(可选):
pip install "entari-plugin-llm[pricing]"
该可选依赖组包含
genai-prices。插件会优先使用 provider 返回的RunOutput.metrics.cost;只有 provider 没有返回费用时,才用genai-prices按 token 数估算。未安装时仍会正常统计 token,费用显示为“未统计”。 -
长尾 provider 可以继续使用 LiteLLM 兜底:
pip install "entari-plugin-llm[litellm]"
该可选依赖组包含
litellm与mcp。未安装时插件仍可正常加载;只有实际用到未适配的 provider 时才会提示安装。
快速开始
- 克隆仓库:
git clone https://github.com/ArcletProject/entari-plugin-llm.git
cd entari-plugin-llm
- 安装依赖(使用 pdm,或使用 pip 在虚拟环境中安装):
pdm sync
# 或者使用 uv:
uv sync
- 运行本地示例(运行 Entari 应用):
python main.py
说明:main.py 通过 Entari.load("") 加载当前目录下的 Entari 配置并启动服务 —— 在实际部署时请提供合适的配置文件与环境变量(例如模型的 API key、base_url 等)。
配置模型
每个模型都可以单独设置 provider、api_key、base_url、vision 与 extra;未设置时回退到全局 api_key / base_url。
entari_plugin_llm:
api_key: ${OPENAI_API_KEY}
base_url: https://api.openai.com/v1
models:
- name: gpt-4o
- name: deepseek-chat
provider: deepseek
api_key: ${DEEPSEEK_API_KEY}
- name: kimi-k2
provider: moonshot
api_key: ${MOONSHOT_API_KEY}
- name: glm-4.5
provider: zhipu
api_key: ${ZHIPU_API_KEY}
- name: qwen-plus
provider: dashscope
api_key: ${DASHSCOPE_API_KEY}
- name: Qwen/Qwen2.5-VL-72B-Instruct
provider: siliconflow
api_key: ${SILICONFLOW_API_KEY}
vision: true
- name: claude-sonnet-4
provider: anthropic
api_key: ${ANTHROPIC_API_KEY}
- name: gemini-2.5-pro
provider: google
api_key: ${GOOGLE_API_KEY}
- name: my-gateway-model
provider: openai-compatible
base_url: https://gateway.example.com/v1
api_key: ${GATEWAY_API_KEY}
- name: local-model
provider: vllm
base_url: http://localhost:8000/v1
- name: llama3.2
provider: ollama
base_url: http://localhost:11434
provider 解析顺序
- 显式配置的
provider。 - 旧版 LiteLLM 风格的
provider/model前缀(如deepseek/deepseek-chat、anthropic/claude-sonnet-4)。 base_url的域名(如api.deepseek.com、api.siliconflow.cn)。- 模型名前缀(如
gpt-、claude-、gemini-、qwen、deepseek、kimi)。 - 未识别且配置了自定义
base_url时,使用OpenAILike作为通用 OpenAI 兼容端点。 - 其余情况回退到 LiteLLM。
常用 provider 名称:openai、openai-compatible、anthropic、google、vertexai、dashscope、deepseek、siliconflow、moonshot、groq、openrouter、xai、together、fireworks、perplexity、sambanova、cerebras、nebius、mistral、cohere、ollama、vllm、lmstudio、zhipu、minimax、volcengine、hunyuan、stepfun、yi、baichuan、sensenova、qianfan、spark、aws-bedrock、litellm。
旧配置迁移
旧的 LiteLLM 模型名可以直接保留,插件会在工厂中解析前缀并映射到原生适配器:
models:
- name: deepseek/deepseek-chat # 等价于 provider: deepseek + name: deepseek-chat
- name: anthropic/claude-sonnet-4
如果某个 provider 没有原生适配器,或原生 SDK 未安装但 LiteLLM 已安装,插件会自动降级到 LiteLLM。
视觉能力
Agno 没有统一的能力查询接口,因此插件使用以下规则:
vision: true/vision: false优先,适合显式覆盖。- 未设置时根据 provider 与模型名推断;无法识别时按不支持处理。
- 常见视觉模型(
gpt-4o、claude-3/4、gemini、*-vl、glm-4v、kimi-latest等)会被自动识别。
技能(Skills)
插件使用 Agno 原生的 Skills / LocalSkills。技能是独立的 SKILL.md 目录,不需要把大段提示词复制进 entari.yml。
entari_plugin_llm:
# 全局默认技能,所有未单独配置 skills 的模型都会继承
skills:
- xml-output
models:
- name: gpt-4o
# 覆盖全局技能;空列表 [] 表示该模型关闭所有技能
skills:
- name: xml-output
mode: always
- ./my-skills
支持两种模式:
auto(默认):Agno 只在系统提示中放入技能名称与描述,模型需要时通过get_skill_instructions工具加载完整指令;同时提供 reference 与 script 工具。always:插件把该技能的完整指令直接拼进系统提示,适合“每次回答都必须遵守”的输出格式约束。
内置技能:
xml-output:要求模型返回单个、转义正确的 XML 文档,默认根节点为<result>。
自定义技能可以指向包含 SKILL.md 的单个技能目录,或包含多个技能子目录的父目录。技能不需要额外依赖;未启用时不会向 Agent 注入任何 skill 工具或提示。
注意:always 只是把指令放进系统提示,仍然是提示词约束,不是 XML Schema 校验。如果 XML 需要被程序严格解析,建议继续使用 structured output 生成数据,再自行序列化为 XML,或对模型输出做校验与重试。
额外参数
extra 中的键如果与适配器的构造字段同名(如 temperature、max_tokens、reasoning_effort),会作为构造参数传入;其余键会合并进 request_params。运行时通过 llm.generate(..., temperature=0.3) 传入的参数优先级最高。
models:
- name: gpt-4o
extra:
temperature: 0.2
max_tokens: 4096
request_params:
seed: 42
对于 GPT-5 / o 系列等不接受采样参数的模型,插件会自动忽略 temperature、top_p、frequency_penalty、presence_penalty 并输出一条警告。
基本用法(示例)
作为插件使用时,包会在导入时通过 metadata() 注册插件信息,并在运行时加载配置、工具与服务。你可以在代码中直接引用导出的服务:
from entari_plugin_llm import llm
# 在异步上下文中调用
resp = await llm.generate("Hello world")
工具与函数调用(Tool)
- 插件将符合 arclet.letoderea 订阅器规范的函数自动注册为可被 LLM 调用的工具。
- 工具的参数与文档由函数的 docstring 与类型注解自动生成 JSON Schema,以便 LLM 在函数调用时进行参数填充。
配置与热重载
插件使用 Config 对象管理模型、提示词、上下文长度以及工具调用的最大循环步数。修改 Entari 插件配置并触发 ConfigReload 事件可以热重载这些设置。
Token 与费用统计
插件直接读取 Agno 原生 RunOutput.metrics:
total_tokens:全局与会话统计保持一致,不依赖 LiteLLM 的 callback。cost:优先使用 provider 返回的费用(例如 OpenRouter、部分 OpenAI 兼容端点)。如果 provider 没有返回,且安装了pricing可选依赖,则通过genai-prices根据模型名与 input/output/cache token 数估算。- 未知模型、
genai-prices未安装或价格数据不匹配时,费用显示为“未统计”,不会影响正常对话。 - 费用以 USD 显示(provider 返回值或
genai-prices估算);genai-prices使用的是其内置价格快照,实际账单请以 provider 为准。
项目结构(重要文件与目录)
src/entari_plugin_llm/- 插件实现代码__init__.py- 插件元信息与自动注册config.py- 模型与插件配置model_factory.py- provider → Agno 原生适配器工厂,含 LiteLLM 兜底capabilities.py- 视觉能力推断pricing.py- provider cost 读取与genai-prices可选费用估算skills.py- Agno Skills 的解析、加载与auto/always模式_litellm.py- LiteLLM 可选依赖的懒加载入口skills/- 内置技能目录(如skills/xml-output/SKILL.md)service.py- LLM 服务实现(Agent 调用、工具调用处理、vision、token/费用统计等)handlers/- Entari 事件处理器(chat、command、check 等)tools/- 插件提供的工具注册逻辑与内置工具(如 image_vision、webpage_processor)
main.py- 一个简单的启动示例pyproject.toml- 项目与依赖配置
开发与调试
在开发过程中你可以编辑 entari.yml 或插件配置,并使用 Entari 的配置热重载来应用更改。
运行单元测试:
python -m unittest discover -s tests -v
贡献
欢迎提交 issue 与 PR。请遵循仓库的编码风格与测试规范,尽量在 PR 中包含说明与复现步骤。
许可证
本项目遵循 MIT 许可证(见 pyproject.toml 中的 license 字段)。
联系方式
作者: RF-Tar-Railt, KomoriDev(详见 src/entari_plugin_llm/__init__.py 中的作者信息)
更多信息
请参阅 pyproject.toml 中的依赖与可选依赖(如浏览器、各 provider SDK、genai-prices 费用估算、LiteLLM 兜底等)以获取额外功能支持。
Metadata
Release files for entari-plugin-llm 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| entari_plugin_llm-0.4.0.tar.gz | 53.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| entari_plugin_llm-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 111.6 kB
Release files / entari_plugin_llm-0.4.0.tar.gz
| Download URL | entari_plugin_llm-0.4.0.tar.gz |
|---|---|
| Size | 53.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dbd60cf4a2a9d371a558c6c5003783ed73eb9f808452c433c7d9f0430df4ee6c
|
|
BLAKE2b-256 checksum How to use checksums |
cb93da19e3974e9289d4b546dae51a69744c7b7c09e4299d51725ffdf183fb5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
pdm/2.28.0 CPython/3.11.7 Windows/10
|
Release files / entari_plugin_llm-0.4.0-py3-none-any.whl
| Download URL | entari_plugin_llm-0.4.0-py3-none-any.whl |
|---|---|
| Size | 58.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
92ac687e738e6c9ff25e19d10cd40513f04a9bf0050e623193b3c07090e56627
|
|
BLAKE2b-256 checksum How to use checksums |
6ba64cf03c459d55a96c790e7cae9b598c40d8ee22a7bada6c63c6b2b0151ef9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
pdm/2.28.0 CPython/3.11.7 Windows/10
|
Security for entari-plugin-llm 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.