pandasai-litellm 集成指南用 LiteLLM 为 PandasAI 接入任意大模型【免费下载链接】pandas-aiChat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pandas-ai导读pandasai-litellm 是 PandasAI 官方提供的 LLM 扩展它通过 LiteLLM 这个统一调用层将 OpenAI、Anthropic、Azure OpenAI、Gemini、本地部署模型等一百多种大模型接入 PandasAI 的对话式数据分析流程。读完本文你将掌握如何安装pandasai-litellm、如何用LiteLLM(model...)一行代码切换底层模型、如何通过额外参数精细控制模型行为以及这个扩展在 PandasAI 内部的真实调用链路与测试保障。一、扩展是什么一条「模型无关」的接入通道PandasAI 核心库pandasai本身不绑定任何具体厂商的模型它只定义一个抽象的LLM基类见 pandasai/llm/base.py真正的模型接入由一个个扩展包完成。pandasai-litellm就是其中之一其官方定位在 extensions/llms/litellm/README.md 中写得很明确This extension integrates LiteLLM with PandasAI.它的全部价值在于PandasAI 只跟 LiteLLM 打交道而 LiteLLM 负责把请求转发到具体的模型供应商。因此你的业务代码几乎不需要改动只要更换LiteLLM(model...)中的模型标识就能在不同厂商、不同模型之间平滑切换——这正是扩展目录下 extensions/llms/litellm 存在的原因。二、安装与版本约束官方 README 推荐使用 poetry 安装poetry add pandasai-litellm使用 pip 同样可以与主仓库 README 的安装方式一致pip install pandasai-litellm从 extensions/llms/litellm/pyproject.toml 可以看到本扩展的依赖约束安装前请确认你的环境满足依赖版本要求说明Python3.8,3.12与 PandasAI 主库一致主仓库 README 要求3.8 3.11pandasai3.0.0b4需要 PandasAI 3.0 及以上的LLM抽象接口litellm^1.61.20LiteLLM 统一调用层扩展包名pandasai-litellm当前版本0.0.1MIT 协议与主库同作者维护。安装后即可在代码中导入from pandasai_litellm.litellm import LiteLLM三、快速上手把 LiteLLM 模型设为 PandasAI 的默认 LLM以主仓库 README 中的用法为例该用法在 README.md 中有完整演示三步即可完成「提问式数据分析」import pandasai as pai from pandasai_litellm.litellm import LiteLLM # 1. 初始化 LiteLLM指定要用的模型 llm LiteLLM(modelgpt-4.1-mini, api_keyYOUR_OPENAI_API_KEY) # 2. 把 LLM 写入 PandasAI 全局配置 pai.config.set({ llm: llm }) # 3. 加载数据并直接提问 df pai.read_csv(data/companies.csv) response df.chat(What is the average revenue by region?) print(response)这里的关键是把LiteLLM实例塞进pai.config.set(...)。在 pandasai/config.py 中可以看到全局Config含有一个llm: Optional[LLM] None字段同时还有save_logs、verbose、max_retries等可配置项ConfigManager.set()会把传入的 dict 转成Config对象。Agent 启动时会检查该字段如果为None会提示「请配置 OpenAI 或 LiteLLM 的 key」见 pandasai/agent/base.py 中config.llm is None的校验分支所以这一行配置是「能不能跑起来」的前提。3.1 换个模型 换个字符串由于接入的是 LiteLLMmodel参数可以是 LiteLLM 支持的任何模型标识。例如# OpenAI 系列 LiteLLM(modelgpt-4o) # Anthropic 系列 LiteLLM(modelclaude-3-5-sonnet-20241022) # 本地 / 开源模型通过 vLLM、Ollama 等网关 LiteLLM(modelollama/llama3.1)从源码看model只是原样透传给 LiteLLM 的completion()调用具体能连哪些供应商、需要哪些鉴权环境变量都遵循 LiteLLM 自身的命名规范与约定。四、源码解剖LiteLLM 包装类是怎么工作的扩展的核心实现只有一个文件extensions/llms/litellm/pandasai_litellm/litellm.py类名也叫LiteLLM它直接继承 PandasAI 的LLM抽象基类。整个类的设计极其精简我们来逐段拆解。4.1 初始化模型名 透传参数def __init__(self, model: str, **kwargs): super().__init__(api_keyNone) self.model model self.params kwargs logging.getLogger(LiteLLM).setLevel(logging.ERROR)model必填的模型标识字符串**kwargs任意额外参数会被原样收进self.params最终作为completion()的关键字参数透传例如temperature、max_tokens、api_key等注意super().__init__(api_keyNone)包装类自身不持有 api_key鉴权信息完全交给 LiteLLM 去解析环境变量或params中的api_key顺手把LiteLLM这个名字的 logger 级别压到ERROR避免每次调用打印过多调试日志。4.2 type 属性供 PandasAI 识别与日志输出property def type(self) - str: return flitellm这个属性在 pandasai/llm/base.py 中只是抛「未实现」异常的占位子类必须重写。它会被 Agent 用于日志输出——pandasai/agent/base.py 里有Running PandasAI with {self._state.config.llm.type} LLM...这样的日志文案也就是说启动时会看到Running PandasAI with litellm LLM...。4.3 call 方法真正的请求入口def call(self, instruction: BasePrompt, context: AgentState None) - str: memory context.memory if context else None self.last_prompt self.prepend_system_prompt(instruction.to_string(), memory) return ( completion( modelself.model, messages[{content: self.last_prompt, role: user}], **self.params, ) .choices[0] .message.content )这条调用链清晰展现了扩展与 PandasAI 核心的分工instruction是一个BasePrompt对象to_string()得到提示词文本prepend_system_prompt是基类提供的方法pandasai/llm/base.py当存在AgentState.memory对话历史时会在用户提示词前拼接由GenerateSystemMessagePrompt生成系统提示让模型知道「它是 PandasAI 的 AI 助手、正在回答什么数据问题」没有 memory 时则原样返回组装成 OpenAI 风格的messages[{content: ..., role: user}]连同**self.params一起交给 LiteLLM 的completion()从响应中取choices[0].message.content作为最终文本返回。也就是说这个扩展约等于「把 LiteLLM 的 ChatCompletion 调用封装成了 PandasAI 的LLM.call()接口」。之后 PandasAI 的代码生成流程generate_code等会在这个返回文本基础上继续处理见基类中call→_extract_code的衔接。4.4 对话记忆的传递call()的第二个参数是AgentState其中挂载了memory。通过context.memory取出历史会话后prepend_system_prompt会把系统提示拼进每一轮请求——这是 PandasAI 支持多轮追问比如先问「平均营收」再追问「按区域拆分」的底层机制之一。不传 context 时也能工作memory 为 None直接使用裸提示词这保持了LiteLLM作为通用 LLM 包装类的灵活性。五、鉴权与容错测试用例给出的约定扩展自带的单元测试在 extensions/llms/litellm/tests/test_litellm.py它不仅是回归保障更直接揭示了运行时约定环境变量优先测试用patch(os.environ, {OPENAI_API_KEY: key})模拟了环境变量场景。对 OpenAI 系模型LiteLLM 会去环境变量读取OPENAI_API_KEY缺失 key 会抛AuthenticationErrortest_missing_api_key验证了「未设置任何 key 时调用会抛出The api_key client option must be set」的错误test_invalid_api_key验证了错误 key 会报Incorrect API key provided调用参数可验证test_successful_completionmock 掉completion()后断言了messages与model的透传正确性——modelgpt-3.5-turbo必须原样到达completion()且消息结构严格为[{content: ..., role: user}]额外参数确实生效test_completion_with_extra_params用LiteLLM(modelgpt-3.5-turbo, extra_param10)验证了extra_param10会出现在completion()的 kwargs 中。这组测试意味着你可以放心地把api_key写在环境变量里如export OPENAI_API_KEY...也可以像主 README 那样直接LiteLLM(modelgpt-4.1-mini, api_key...)传入同时任何你追加的参数temperature、top_p、max_tokens、stream等都会被忠实透传给 LiteLLM。六、更多实战场景6.1 多 DataFrame 联合提问LiteLLM实例的用法与单表完全一致区别只在于把多个表交给pai.chatimport pandasai as pai from pandasai_litellm.litellm import LiteLLM llm LiteLLM(modelgpt-4.1-mini, api_keyYOUR_OPENAI_API_KEY) pai.config.set({llm: llm}) employees_df pai.DataFrame({ EmployeeID: [1, 2, 3, 4, 5], Name: [John, Emma, Liam, Olivia, William], Department: [HR, Sales, IT, Marketing, Finance] }) salaries_df pai.DataFrame({ EmployeeID: [1, 2, 3, 4, 5], Salary: [5000, 6000, 4500, 7000, 5500] }) pai.chat(Who gets paid the most?, employees_df, salaries_df) # 输出Olivia gets paid the most.6.2 在 Docker 沙箱中运行如果你的环境对代码执行安全性有要求可以搭配pandasai-docker沙箱使用——PandasAI 会生成 Python 代码沙箱负责在隔离容器中执行。LiteLLM的接入方式不变pip install pandasai-dockerimport pandasai as pai from pandasai_docker import DockerSandbox from pandasai_litellm.litellm import LiteLLM llm LiteLLM(modelgpt-4.1-mini, api_keyYOUR_OPENAI_API_KEY) pai.config.set({llm: llm}) sandbox DockerSandbox() sandbox.start() employees_df pai.DataFrame({...}) salaries_df pai.DataFrame({...}) pai.chat(Who gets paid the most?, employees_df, salaries_df, sandboxsandbox) sandbox.stop()更完整的示例可以参考仓库根目录的 examples 目录含quickstart.ipynb、docker_sandbox.ipynb等 notebook。七、适用前提与注意事项版本要求本扩展要求pandasai 3.0.0b4、litellm ^1.61.20、Python3.8 ~ 3.11与旧版 PandasAI 2.x 的接口并不兼容升级前请对照 迁移指南 确认接口差异鉴权归属包装类自身不持有密钥super().__init__(api_keyNone)所有鉴权最终由 LiteLLM 处理——要么通过环境变量如OPENAI_API_KEY、ANTHROPIC_API_KEY要么在构造LiteLLM时作为api_key...关键字参数传入模型标识model字符串会被原样透传请严格使用 LiteLLM 的模型命名规范如provider/model形式拼写错误将导致请求失败日志行为构造时会自动把LiteLLM命名空间下的 logger 级别设为ERROR如需调试可在自己代码中重新调整响应结构扩展硬编码取choices[0].message.content这是 OpenAI 兼容 ChatCompletion 的标准响应结构使用与之兼容的模型时无需额外处理。八、小结pandasai-litellm用约 40 行核心代码完成了 PandasAI 与 LiteLLM 的对接继承LLM基类、重写type与call、透传模型名与额外参数。得益于 LiteLLM 强大的供应商适配能力你可以把 PandasAI 的「对话式数据分析」能力挂到几乎任意主流大模型上而这一切在业务代码层面的成本只有一个LiteLLM(model...)。想进一步深入推荐按以下路径阅读本仓库源码扩展实现extensions/llms/litellm/pandasai_litellm/litellm.py测试用例extensions/llms/litellm/tests/test_litellm.py抽象基类pandasai/llm/base.py全局配置pandasai/config.pyAgent 启动与 LLM 校验pandasai/agent/base.py【免费下载链接】pandas-aiChat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pandas-ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考