AI留学咨询配置:从零搭建可用的咨询机器人
想自己配一个能回答留学选校、专业方向、申请材料等常见问题的 AI 咨询助手,核心工作是把大模型接口、提示词和知识库三部分串起来。
本文按零基础可执行的方式,讲清在 Linux 服务器上完成 AI留学咨询配置 的步骤,包括环境准备、配置修改、启动验证和出错排查。
以下操作以 Ubuntu 22.04 和 Python 3.10 为例,其他发行版注意替换包管理命令。
先确认你的服务器和账号条件
开始前需要一台能访问外网的 Linux 服务器,建议 2 核 4G 起步,因为本地不跑模型,只做请求转发和知识库检索,配置不用太高。
确认服务器能正常解析域名:
curl -I https://api.openai.com
如果返回 HTTP/2 200 或类似状态,说明外网出口正常;
如果卡住或超时,先检查安全组出站规则和 DNS 设置。
另外准备一个可用的大模型 API Key,以及一个存放留学资料的目录,比如 ~/data/liuxue_docs,里面放 .txt 或 .md 格式的院校介绍、申请流程说明。
没有现成资料也可以先用几段手工整理的问答文本测试。
安装 Python 环境和依赖包
登录服务器后,先更新软件源并安装基础工具:
sudo apt update
sudo apt install -y python3 python3-pip python3-venv git
验证版本:
python3 --version
输出应为 Python 3.10.x 或更高。
接着创建独立虚拟环境,避免污染系统包:
cd ~
python3 -m venv ai-advisor
source ai-advisor/bin/activate
激活后命令行前会出现 (ai-advisor)。
然后安装常用库:
pip install openai langchain chromadb sentence-transformers
如果下载速度慢,可以临时换用国内镜像源,例如在命令后加 -i https://pypi.tuna.tsinghua.edu.cn/simple,但要注意镜像同步可能有延迟。
写配置文件接入模型和知识库
在项目目录下新建 config.py,把 API Key 和知识库路径集中管理:
# config.py
API_KEY = "你的_API_Key"
BASE_URL = "https://api.openai.com/v1"
MODEL_NAME = "gpt-3.5-turbo"
DOC_DIR = "/home/ubuntu/data/liuxue_docs"
如果使用兼容 OpenAI 接口的其他服务商,把 BASE_URL 换成对应地址即可,模型名也要改成服务商支持的名称。
接着写一个最小问答脚本 ask.py,先不接知识库,只测试模型连通性:
from openai import OpenAI
from config import API_KEY, BASE_URL, MODEL_NAME
client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
resp = client.chat.completions.create(
model=MODEL_NAME,
messages=[{"role": "user", "content": "去英国读计算机硕士一般要准备哪些材料?"}]
)
print(resp.choices[0].message.content)
保存后运行:
python ask.py
能打印出一段中文回答,说明 API 配置成功。
如果报 AuthenticationError,优先检查 Key 是否复制完整、是否有多余空格。
把留学资料接入知识库
只靠模型自身知识容易给出过时或笼统的回答,建议把整理好的资料做成向量库。
用 LangChain 加载文档并切分:
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from config import API_KEY, DOC_DIR
loader = DirectoryLoader(DOC_DIR, glob="**/*.md")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
embeddings = OpenAIEmbeddings(api_key=API_KEY)
vectordb = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")
vectordb.persist()
print(f"已写入 {len(chunks)} 个片段")
运行前确认 DOC_DIR 路径存在且里面有文件。
切分长度 chunk_size 不要设得过大,500 左右适合问答场景;
如果资料里表格多,可以适当调大到 800。
之后在 ask.py 中先检索再拼提示词:
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
vectordb = Chroma(persist_directory="./chroma_db", embedding_function=OpenAIEmbeddings(api_key=API_KEY))
question = "申请澳洲硕士需要什么语言成绩?"
docs = vectordb.similarity_search(question, k=3)
context = "\n".join([d.page_content for d in docs])
prompt = f"根据以下资料回答问题,资料没有提到的内容不要编造:\n{context}\n\n问题:{question}"
再把 prompt 发给模型即可。
这样回答会优先引用你提供的资料,减少胡编。
容易踩坑的几个地方
API Key 不要写进公开仓库。config.py 建议加入 .gitignore,
或在服务器上用环境变量读取,
例如 os.getenv("OPENAI_API_KEY"),
避免泄露后产生额外费用。
知识库文件编码要统一。
中文资料保存为 UTF-8,否则加载时可能报 UnicodeDecodeError。
可以用 file -i 文件名 检查编码。
向量库重建后要确认持久化目录。Chroma.from_documents 每次运行会新增数据,重复执行可能导致片段重复。
调试阶段可以删掉 chroma_db 目录再重建,正式环境建议先清空再写入。
模型返回内容为空。
先检查 messages 是否为空、max_tokens 是否设得太小,以及服务商是否对免费额度做了限制。
验证配置是否真的可用
完成上述步骤后,用三个问题做一次快速验证:一个资料里明确写到的申请截止日期、一个资料里没有的冷门问题、一个需要多步推理的问题。
预期结果是:第一个能准确引用资料,第二个模型会说明资料未覆盖而不是硬编,第三个能给出分步骤回答。
如果回答明显偏离资料,先检查检索返回的片段是否相关,可以打印 docs 内容确认;
如果检索结果正确但回答仍跑偏,再调整提示词中“不要编造”的约束位置,放在问题前面通常更有效。
AI留学咨询配置 的核心不是把模型接上就结束,而是让知识库、切分参数和提示词三者配合稳定。
建议先在测试目录跑通全流程,再迁移到正式服务器,并定期更新资料目录后重建向量库。