1. 心理咨询智能客服小程序,零代码基础也能跑通
心理咨询机构的客服有个很现实的痛点:访客往往在深夜、周末情绪最需要出口的时候来咨询,问的多是预约流程、收费标准、咨询师资质、隐私保护这类标准问题。人工客服不可能 24 小时在线,而且每次回答的口径还容易不一致。我接触过几家做心理服务的小团队,他们最想要的就是一个能先挡在前面的智能客服,把重复问题接住,真正需要人工介入时再转接。
这篇要做的,就是用 TRAE 搭配 GLM-4.6,从零搭一个心理咨询智能客服小程序原型。你不需要懂 Python,也不需要懂小程序语法,只要能把需求说清楚,剩下的交给 AI 编程助手。整套路径覆盖三块:需求怎么拆、对话逻辑怎么设计、小程序怎么接入后端。最后我会给出一份可复制的 TRAE 项目配置骨架和 GLM-4.6 接入参数,并带你做一次本地运行和对话效果验证,确保你跑通第一个能用的原型。
适合谁看:完全没写过代码但想验证 AI 应用的产品同学、心理咨询机构的运营负责人、想快速做 demo 的创业者。读完你能得到一个能对话、能返回知识库答案的智能客服雏形,而不是一堆看不懂的报错。
2. 前置准备:TRAE 项目骨架与 GLM-4.6 接入参数
在动手之前,先把两件事定下来:一是 TRAE 里的项目规则,二是 GLM-4.6 的调用入口。TRAE 的核心玩法是给 AI 助手设定角色和项目规则,这样它生成的代码才会落在你约定的框架里,而不是每次给你换一套技术栈。
2.1 在 TRAE 里设定项目规则
打开 TRAE,新建一个项目,然后在项目规则里写清楚这几条约束。你可以直接复制下面这段作为项目规则:
项目名称:心理咨询智能客服 后端语言:Python 3.9 后端框架:FastAPI 前端框架:uni-app(一套代码覆盖微信、抖音小程序) 接口风格:RESTful,统一前缀 /api/v1 配置管理:所有密钥和 ID 放在 .env 文件,不硬编码 代码注释:每个函数写清楚用途和参数这段规则的作用是给 AI 划边界。我试过不写规则直接问,AI 一会儿给 Flask 一会儿给 Django,改起来反而更累。写清楚之后,它生成的main.py、config.py、router.py结构基本一致,你只需要填密钥就能跑。
2.2 拿到 GLM-4.6 的调用凭证
GLM-4.6 通过标准 API 调用,你需要准备三样东西:API Key、智能体 ID、知识库 ID。API Key 在控制台的 API Keys 页面生成,智能体和知识库在平台里创建后各自有独立 ID。
如果你还没开通,可以走这个入口:注册后进入控制台,在 API Keys 页面创建密钥。地址是 https://taotoken.net/api ,控制台和密钥管理在 https://taotoken.net/console ,密钥页在 https://taotoken.net/api-keys 。模型对话调试可以用 https://taotoken.net/model-chat ,接入文档在 https://taotoken.net/doc 。
拿到之后,在项目根目录建一个.env文件,内容长这样:
GLM_API_KEY=你的APIKey GLM_AGENT_ID=你的智能体ID GLM_KNOWLEDGE_ID=你的知识库ID GLM_BASE_URL=https://taotoken.net/api注意:.env不要提交到公开仓库,这是最容易踩的坑。很多新手直接把 Key 写进代码里,结果一分享就泄露了。
2.3 知识库和智能体的关系
这里有个概念要理清,不然你会像我第一次那样绕弯路。知识库是“教材”,智能体是“学了教材的客服”。你先把心理咨询机构的资料(服务项目、收费、咨询师介绍、预约流程、隐私政策)整理成 Markdown 或 PDF,上传到知识库,平台会自动解析和向量化。然后在智能体配置里把知识库挂上去,这样调用智能体 API 时它就会参考知识库回答,不需要你单独再调一次知识库 API。
我一开始就是分开调了两个接口,结果答案重复又混乱。后来把知识库直接绑到智能体上,只调智能体 API,输出就干净多了。
3. 可复制配置:后端 FastAPI 骨架与对话逻辑
这一章是核心,给你一份能直接跑的配置骨架。你不需要逐行理解,照着建文件、填内容即可。
3.1 目录结构
在 TRAE 里让 AI 生成项目时,最终目录大概是这样:
backend/ ├── app/ │ ├── main.py │ ├── core/ │ │ ├── config.py │ │ └── exceptions.py │ ├── api/ │ │ ├── router.py │ │ └── chat.py │ └── services/ │ └── glm_service.py ├── requirements.txt └── .env3.2 配置文件 config.py
from pydantic_settings import BaseSettings class Settings(BaseSettings): app_name: str = "心理咨询智能客服" glm_api_key: str = "" glm_agent_id: str = "" glm_knowledge_id: str = "" glm_base_url: str = "https://taotoken.net/api" class Config: env_file = ".env" settings = Settings()3.3 对话服务 glm_service.py
这是整个项目的“大脑”,负责把用户问题发给 GLM-4.6 智能体并拿回答案。
import httpx from app.core.config import settings async def ask_agent(question: str, history: list = None) -> str: url = f"{settings.glm_base_url}/v1/agents/{settings.glm_agent_id}/chat" headers = { "Authorization": f"Bearer {settings.glm_api_key}", "Content-Type": "application/json" } payload = { "messages": (history or []) + [{"role": "user", "content": question}], "knowledge_id": settings.glm_knowledge_id, "temperature": 0.3 } async with httpx.AsyncClient(timeout=30) as client: resp = await client.post(url, json=payload, headers=headers) resp.raise_for_status() data = resp.json() return data["choices"][0]["message"]["content"]temperature设成 0.3 是有意的。心理咨询场景要的是稳定、可复现的回答,不是创意写作。温度太高,同一个问题两次回答口径不一致,访客会困惑。
3.4 对话接口 chat.py
from fastapi import APIRouter from pydantic import BaseModel from app.services.glm_service import ask_agent router = APIRouter() class ChatRequest(BaseModel): question: str history: list = [] @router.post("/chat") async def chat(req: ChatRequest): answer = await ask_agent(req.question, req.history) return {"code": 0, "answer": answer}3.5 主入口 main.py
from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.api.router import router app = FastAPI(title="心理咨询智能客服API") app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) app.include_router(router, prefix="/api/v1") @app.get("/health") async def health(): return {"status": "healthy"}跨域配置必须加,否则小程序前端请求会被浏览器拦截,你会看到一堆 CORS 报错。
3.6 依赖文件 requirements.txt
fastapi==0.110.0 uvicorn==0.29.0 httpx==0.27.0 pydantic-settings==2.2.14. 验证请求:本地运行与对话效果确认
配置写完了,现在跑起来看效果。这一步能帮你确认后端真的通了,而不是自我感觉良好。
4.1 启动后端服务
在 TRAE 终端里执行:
cd backend pip install -r requirements.txt uvicorn app.main:app --reload --host 0.0.0.0 --port 8000看到Uvicorn running on http://0.0.0.0:8000就说明服务起来了。--reload会在你改代码后自动重启,开发阶段很方便。
4.2 用 curl 验证对话接口
新开一个终端,发一条测试请求:
curl -X POST http://127.0.0.1:8000/api/v1/chat \ -H "Content-Type: application/json" \ -d '{"question":"你们晚上有咨询师在线吗?","history":[]}'如果返回类似下面的结构,说明链路通了:
{ "code": 0, "answer": "我们的在线咨询时间为每天 9:00-22:00,夜间如需紧急支持,可拨打心理援助热线。" }4.3 小程序端接入
前端用 uni-app 模板,在聊天页面里把请求指向你的后端地址。核心代码就一段:
uni.request({ url: 'http://127.0.0.1:8000/api/v1/chat', method: 'POST', data: { question: userInput, history: chatHistory }, success: (res) => { chatHistory.push({ role: 'assistant', content: res.data.answer }) } })在 HBuilderX 里运行到微信小程序模拟器,输入问题,看到客服回复就说明前后端打通了。第一次跑大概率会遇到黑屏或请求失败,别慌,看下一章的排查。
5. 本篇常见错排查
这一章是我踩过的坑,按出现频率排序。
5.1 401 或 403:密钥没生效
最常见的原因是.env文件没被读取,或者 Key 填错了。检查两点:一是.env和config.py在同一层级能被找到;二是 Key 前后没有多余空格。改完.env后要重启服务,--reload不会自动重载环境变量。
5.2 知识库答案不生效
如果你发现回答是模型自己编的,而不是知识库里的内容,先确认知识库有没有绑定到智能体上。在智能体配置页找到知识库关联项,勾选你的知识库。绑定后只调智能体 API 即可,不要再单独调知识库接口,否则会出现答案拼接混乱。
5.3 小程序请求被拦截
浏览器和小程序模拟器都会做跨域检查。后端main.py里的CORSMiddleware必须加,allow_origins开发阶段可以设["*"],上线前改成具体域名。如果还是失败,检查请求地址是不是写成了localhost,小程序模拟器有时解析不了,换成127.0.0.1更稳。
5.4 服务启动报模块找不到
多半是pip install没在正确的虚拟环境里执行。确认你cd到了backend目录,并且requirements.txt里的包都装上了。如果用了 conda 或 venv,先激活环境再装。
5.5 AI 改代码改乱了方向
这是用 TRAE 时特有的坑。AI 有时会自作主张重构你的目录结构,或者换掉你定好的框架。遇到这种情况,直接中断它的操作,把项目规则再贴一遍,明确告诉它“不要改目录结构,只修改 chat.py”。我试过几次,及时纠正比让它跑完再回滚省事得多。
6. 后续接入与长期编码建议
跑通原型只是第一步。如果你打算把这个智能客服真正用起来,接下来要做的是把本地地址换成可访问的服务地址,并在小程序后台配置合法域名。这部分官方文档写得很清楚,照着做就行。
对于需要长期迭代、频繁改代码的场景,比如你要不断调整对话逻辑、加新功能,建议用 Coding Plan 这类面向编码场景的方案,配合 TRAE 的智能体工作流,改起来会顺很多。入口在 https://taotoken.net/coding-plan 。如果你更想先验证模型对话效果,可以先用模型对话页调试提示词,地址是 https://taotoken.net/model-chat 。接入过程中遇到接口报错,优先查接入文档 https://taotoken.net/doc ,大部分参数问题那里都有说明。
最后说个真实体会:零代码基础做 AI 应用,最大的障碍不是技术,而是不敢开始。你不需要先学完 Python 再动手,带着一个明确的目标,让 AI 当领航员,在实践中遇到问题再解决问题,反而学得更快。我见过太多人卡在“等我学完再开始”,结果一直没开始。先跑通一个能对话的原型,哪怕它很粗糙,你就已经跨过了最难的那道门槛。