【爆肝万字】SalesGPT 完全指南(一):从零搭建你的第一个 AI 销售代理
1. 从零搭建 AI 销售代理为什么选 LangChain LiteLLM FastAPI 这套组合如果你正在找一个能真正跑起来的 AI 销售代理方案SalesGPT 这个开源项目值得花时间研究。它不是一个只会闲聊的机器人而是一个能识别销售阶段、生成对应话术、支持多轮跟进的上下文感知代理。我第一次接触它的时候最直观的感受是它把销售流程拆成了可编程的阶段而不是让模型自由发挥。SalesGPT 的核心能力可以概括为三点。第一是阶段感知它内置了从介绍、资质确认、价值主张、需求分析、方案呈现、异议处理、促成成交到结束对话的完整链路AI 会根据对话内容自动判断当前处于哪个阶段然后切换对应的话术策略。第二是工具调用你可以让它查产品目录、生成支付链接、发邮件、约日程。第三是多模型支持通过 LiteLLM 这个统一接口层你可以用 OpenAI、Anthropic、Azure也可以接本地部署的开源模型。这套方案适合谁电商客服团队想自动回答产品咨询并引导下单B2B 销售想初步筛选线索并预约演示SaaS 获客团队想做产品介绍和试用引导甚至医疗预约、教育培训的学员跟进都能套用这个框架。技术栈上后端是 Python FastAPI LangChain模型层是 LiteLLM向量库用 ChromaDB前端可选 Next.js部署用 Docker Compose。我实测下来最容易卡住的地方不是代码本身而是模型接入的配置。SalesGPT 默认走 OpenAI 的接口但国内开发者往往需要更灵活的模型路由方案。这时候 LiteLLM 的价值就体现出来了——它允许你在不改动业务代码的前提下把请求转发到不同的模型提供商。下面我会从项目目录、依赖清单、环境变量模板开始一步步带你搭出一个可对话的 AI 销售代理并用 curl 验证接口、用日志确认模型路由生效。整个搭建过程分为几个阶段先准备环境和依赖再配置模型接入层然后写 FastAPI 服务最后验证对话接口。每个阶段我都会给出可复制的命令和配置片段你跟着操作就能跑通。2. TaoToken 前置准备模型接入层怎么配才不踩坑在开始写代码之前需要先把模型接入这一层理清楚。SalesGPT 通过 LiteLLM 调用大模型而 LiteLLM 需要一个兼容 OpenAI 协议的 Base URL 和 API Key。我试过几种接入方式最后发现用 TaoToken 的 API 网关来统一管理模型路由是最省事的——它兼容 OpenAI 接口规范LiteLLM 可以直接对接不需要额外写适配层。你需要先拿到两样东西API Key 和 Base URL。API Key 在控制台的 API Keys 页面创建Base URL 固定为https://taotoken.net/api。注意这个地址不要加 UTM 参数直接用在代码里。拿到 Key 之后建议先建一个项目目录把环境变量统一管理。我习惯用.env文件配合python-dotenv加载。下面是我实际使用的目录结构salesgpt-demo/ ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI 入口 │ ├── agent.py # SalesGPT 代理封装 │ └── config.py # 配置加载 ├── configs/ │ └── coffee_agent.json # 销售代理配置文件 ├── .env # 环境变量不要提交到 git ├── .env.example # 环境变量模板 ├── requirements.txt └── run.sh # 启动脚本依赖清单我整理了一份最小可用的版本写在requirements.txt里salesgpt0.1.0 langchain0.1.0 langchain-community0.0.20 litellm1.30.0 fastapi0.110.0 uvicorn[standard]0.27.0 python-dotenv1.0.0 pydantic2.0.0安装命令python3 -m venv env source env/bin/activate pip install -r requirements.txt环境变量模板.env.example长这样# 模型接入配置 OPENAI_API_KEYyour_taotoken_api_key_here OPENAI_API_BASEhttps://taotoken.net/api GPT_MODELgpt-3.5-turbo # SalesGPT 配置 USE_TOOLS_IN_APIFalse CONFIG_PATHconfigs/coffee_agent.json这里有个关键点LiteLLM 默认会读OPENAI_API_KEY和OPENAI_API_BASE这两个环境变量。你把 TaoToken 的 Key 填进去Base URL 指向https://taotoken.net/apiLiteLLM 就会把请求发到这个网关由网关去路由到具体的模型。这样你不需要改 SalesGPT 的源码也不需要动 LiteLLM 的配置。如果你用的是 Claude 系列模型模型名可以写成claude-3-sonnet-20240229这种格式LiteLLM 会自动识别并走对应的路由。具体支持哪些模型名可以在接入文档里查。我建议先用gpt-3.5-turbo跑通流程确认链路没问题之后再换更强的模型。还有一个容易忽略的点CONFIG_PATH指向的 JSON 文件必须存在否则 SalesGPT 初始化时会报错。下一节我会给出完整的配置文件内容。3. 可复制配置FastAPI 服务 SalesGPT 代理 JSON 配置片段这一节是核心我会把 FastAPI 服务、SalesGPT 代理封装、JSON 配置文件三部分都写出来你直接复制就能用。先看销售代理的 JSON 配置。在configs/coffee_agent.json里写入{ salesperson_name: 咖啡小助手, salesperson_role: 产品顾问, company_name: 醇香咖啡, company_business: 醇香咖啡是一家专业的咖啡机品牌我们致力于为家庭和办公室提供高品质的咖啡体验。我们的产品线涵盖全自动咖啡机、半自动咖啡机、咖啡豆及周边配件。, company_values: 我们相信一杯好咖啡能开启美好的一天。我们致力于用最优质的产品和服务让每个人都能在家享受专业级的咖啡体验。, conversation_purpose: 了解客户是否有购买咖啡机的需求并推荐合适的产品。, conversation_type: chat, use_custom_prompt: False }这个配置定义了代理的名字、角色、公司背景、对话目标。conversation_type设为chat表示文字对话如果是电话场景可以改成call。接下来是代理封装app/agent.pyimport os from dotenv import load_dotenv from salesgpt.agents import SalesGPT from langchain_community.chat_models import ChatLiteLLM load_dotenv() def create_agent(config_path: str None): config_path config_path or os.getenv(CONFIG_PATH, configs/coffee_agent.json) model_name os.getenv(GPT_MODEL, gpt-3.5-turbo) llm ChatLiteLLM( temperature0.4, model_namemodel_name, api_baseos.getenv(OPENAI_API_BASE), api_keyos.getenv(OPENAI_API_KEY), ) agent SalesGPT.from_llm( llm, use_toolsFalse, verboseTrue, config_pathconfig_path, ) agent.seed_agent() return agent注意ChatLiteLLM的初始化参数里我显式传了api_base和api_key这样即使环境变量没加载成功也能保证请求走对地址。verboseTrue会输出详细的日志方便你确认模型路由是否生效。然后是 FastAPI 入口app/main.pyfrom fastapi import FastAPI, HTTPException from pydantic import BaseModel from app.agent import create_agent app FastAPI(titleSalesGPT API) class ChatRequest(BaseModel): message: str class ChatResponse(BaseModel): reply: str stage: str agent create_agent() app.post(/chat, response_modelChatResponse) def chat(req: ChatRequest): try: agent.human_step(req.message) agent.step() reply agent.conversation_history[-1] stage agent.current_stage or unknown return ChatResponse(replyreply, stagestage) except Exception as e: raise HTTPException(status_code500, detailstr(e)) app.get(/health) def health(): return {status: ok}启动命令uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload如果你想让代理在每次请求时都保持独立的对话历史需要把 agent 实例改成按 session 管理。上面的简化版适合单用户测试生产环境建议用字典存 session_id 到 agent 的映射。还有一个细节agent.current_stage这个属性在不同版本的 SalesGPT 里可能叫法不同如果报 AttributeError可以改成从agent.conversation_history里解析阶段信息或者直接去掉 stage 字段。配置写完之后先别急着启动检查一下.env文件里的OPENAI_API_BASE是不是https://taotoken.net/apiOPENAI_API_KEY是不是你创建的那个 Key。确认无误后再跑 uvicorn。4. 验证请求用 curl 测对话接口用日志确认模型路由服务启动之后第一件事是验证接口能不能通。我用 curl 发一个 POST 请求curl -X POST http://localhost:8000/chat \ -H Content-Type: application/json \ -d {message: 你好我想了解一下咖啡机}如果一切正常你会看到类似这样的返回{ reply: 您好我是醇香咖啡的产品顾问咖啡小助手。请问您平时喝咖啡多吗主要是在家还是办公室使用呢, stage: 1 }stage字段显示1说明代理识别出当前处于介绍阶段。你再发一条curl -X POST http://localhost:8000/chat \ -H Content-Type: application/json \ -d {message: 我在家喝想要一台全自动的}返回的stage可能会变成4表示进入了需求分析阶段。这就是 SalesGPT 的阶段感知在起作用。接下来确认模型路由是否生效。看 uvicorn 的日志输出如果verboseTrue你会看到 LiteLLM 打印的请求信息包括api_base和model。我实测下来日志里会出现类似这样的行LiteLLM completion() model gpt-3.5-turbo; provider openai如果api_base显示的是https://taotoken.net/api说明请求确实走了 TaoToken 的网关。如果显示的是默认的 OpenAI 地址那就要检查环境变量有没有加载成功。还有一个验证方法在 TaoToken 控制台的日志页面看请求记录。每次 curl 调用之后控制台里应该会出现对应的请求条目包括模型名、token 消耗、响应时间。这个页面在 console 里可以找到。如果你想测试流式输出SalesGPT 也支持。把 FastAPI 的接口改成StreamingResponse然后调用agent.astep()的异步版本。不过流式输出对前端要求高一些建议先把同步版本跑通再折腾。验证过程中如果遇到 401 错误大概率是 API Key 没配对。检查.env里的OPENAI_API_KEY是不是完整复制了有没有多余的空格。如果遇到local proxy failed之类的报错说明 Base URL 写错了确认是https://taotoken.net/api而不是其他地址。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节我整理了几个实际踩过的坑都是接入过程中高频出现的报错。401 Unauthorized。这个最常见原因是 API Key 无效或没传对。排查步骤第一确认.env文件里的OPENAI_API_KEY是完整的 Key没有换行或空格第二确认load_dotenv()在create_agent()之前执行第三如果用了 Docker确认环境变量传进了容器。我遇到过一种情况是.env文件编码不对导致 Key 读进来带了 BOM 头改成 UTF-8 无 BOM 就好了。local proxy failed。这个报错通常出现在 LiteLLM 尝试连接 Base URL 的时候。原因可能是OPENAI_API_BASE写成了https://taotoken.net/api/带了尾部斜杠或者写成了http而不是https。正确的写法是https://taotoken.net/api不带尾部斜杠。另外确认一下网络能正常访问这个地址可以用curl https://taotoken.net/api测试连通性。Error reading choices。这个报错说明 LiteLLM 收到了响应但解析不出choices字段。常见原因是模型名写错了比如把gpt-3.5-turbo写成了gpt-3.5网关返回了错误信息而不是正常的 completion 结构。解决办法是检查GPT_MODEL环境变量确保模型名在支持列表里。如果用的是 Claude 模型模型名要写成claude-3-sonnet-20240229这种完整格式。OAuth 相关报错。如果你在配置里用了需要 OAuth 认证的模型提供商可能会遇到 token 过期或 scope 不足的问题。SalesGPT 本身不处理 OAuth 流程它依赖 LiteLLM 的认证机制。最简单的办法是换成 API Key 认证的模型或者用 TaoToken 的网关来统一管理认证这样你只需要一个 Key 就能访问多个模型。还有一个不太常见但很烦人的问题config_path指向的 JSON 文件路径不对。SalesGPT 初始化时会读这个文件如果路径是相对路径它相对于当前工作目录解析。建议用绝对路径或者在启动脚本里先cd到项目根目录。排查的时候把verbose设为True能省很多事。LiteLLM 会打印请求的完整 URL、headers、body你能直接看到请求发到了哪里、带了什么参数。如果日志里没有这些信息检查一下ChatLiteLLM的初始化参数有没有传对。6. 下一步从单轮对话到多轮跟进与工具调用跑通基础对话之后你可以开始扩展功能。SalesGPT 支持工具调用比如查产品目录、生成支付链接、发邮件。开启方式是在from_llm里把use_tools设为True然后在配置里指定工具列表。工具的实现需要你自己写框架只提供调用接口。多轮跟进的关键是对话历史的管理。SalesGPT 用END_OF_TURN标记每轮结束用END_OF_CALL标记整个对话结束。你可以在 FastAPI 里加一个/session/{session_id}的接口把每个用户的对话历史存起来下次请求时恢复。这样代理就能记住之前聊过的内容实现真正的多轮跟进。如果你想把代理接入到现有的客服系统FastAPI 的接口可以直接被前端调用。前端传用户消息后端返回代理回复和当前阶段前端根据阶段显示不同的 UI 提示。比如阶段 7 是促成成交前端可以弹出一个「立即购买」的按钮。模型选择上我建议先用gpt-3.5-turbo跑通流程确认业务逻辑没问题之后再换成更强的模型来提升话术质量。切换模型只需要改.env里的GPT_MODEL不需要动代码。如果你需要长期跑编码或 Agent 任务可以考虑 Coding Plan 方案它在 token 消耗和响应速度上更适合高频调用。最后提醒一点生产环境一定要加限流和鉴权。FastAPI 可以用slowapi做限流用fastapi-security做 API Key 鉴权。别把没有保护的接口直接暴露到公网否则很容易被刷爆。整个搭建过程的核心就是三件事配好模型接入层、写好代理配置、验证接口连通性。你跟着上面的步骤操作应该能在半小时内跑出一个可对话的 AI 销售代理。遇到报错就对照第 5 节排查大部分问题都能解决。

相关新闻

openclaw 部署指南:手动 Docker 详细版 + TaoToken 统一 Key 接入

openclaw 部署指南:手动 Docker 详细版 + TaoToken 统一 Key 接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 23:57:52 阅读更多 →
Claude Code Skills 完全指南:从 SKILL.md 到 PPT 生成实战(附 TaoToken 配置)

Claude Code Skills 完全指南:从 SKILL.md 到 PPT 生成实战(附 TaoToken 配置)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 23:57:52 阅读更多 →
VS Code 可视化开发 Avalonia:把 settings 改到 TaoToken 的配置与验证

VS Code 可视化开发 Avalonia:把 settings 改到 TaoToken 的配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 23:56:52 阅读更多 →

最新新闻

LayoutLM v3深度解析:多模态文档智能模型微调实战

LayoutLM v3深度解析:多模态文档智能模型微调实战

每次看到开源社区放出的文档智能模型有实质更新,我都要停下来仔细研究一番,LayoutLM系列就是这中间绕不开的名字。这个系列从最初把文本、布局、图像三种模态塞进同一个预训练框架开始,一步步变成了表格解析、票据识别、合同信息抽取这些场景…

2026/10/18 0:46:29 阅读更多 →
Event2Mind:让机器从事件文本中推理意图与反应

Event2Mind:让机器从事件文本中推理意图与反应

每次读到关于事件理解的研究,我都会习惯性地先想一个问题:机器读一句话,真的“读懂了”吗?拿“这个人被公司开除了”来说,字面上是一个解雇事件,但稍微有点常识的人都会接着想:他慌不慌&#xf…

2026/10/18 0:46:29 阅读更多 →
向量与矩阵范数详解:从L1/L2到谱范数的机器学习应用指南

向量与矩阵范数详解:从L1/L2到谱范数的机器学习应用指南

1. 为什么我们要关心“范数”这个数学工具第一次接触“范数”这个词,很多人会觉得它离实际开发很远,像是数学系课本里才会出现的抽象概念。但如果你做过机器学习、数值计算、信号处理,甚至只是用过正则化去调一个过拟合的模型,那你…

2026/10/18 0:46:29 阅读更多 →
多层网络关键节点识别:超邻接矩阵与GNN实战指南

多层网络关键节点识别:超邻接矩阵与GNN实战指南

简介:这份文档面向人工智能、大模型与复杂网络分析方向的学习者和研究者,系统梳理多层网络建模与关键节点智能识别技术。内容从多层网络的定义、模型分类与应用领域切入,逐步展开关键节点的定义、重要性及常见识别方法,并深入讲解…

2026/10/18 0:46:29 阅读更多 →
集团企业指标体系落地指南:从指标字典到数据治理的完整路径

集团企业指标体系落地指南:从指标字典到数据治理的完整路径

简介:《大型集团企业指标体系建设方案》PPT面向集团企业管理者、战略规划与运营管理岗位,是一套可直接套用的指标体系构建模板。内容从建设背景与意义切入,提出SMART指标原则,重点讲解战略目标、业务板块、运营管理、支持保障四个…

2026/10/18 0:46:29 阅读更多 →
NPDP BOK第二版:七大知识领域解析与产品开发实战应用

NPDP BOK第二版:七大知识领域解析与产品开发实战应用

简介:这是PDMA(产品发展与管理协会)官方编译的NPDP知识体系指南第二版,面向计划参加NPDP认证考试的产品经理与产品开发专业人士,是系统了解产品创新与管理核心内容的权威参考书。全书围绕七大领域展开:策略…

2026/10/18 0:45:28 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →