在互联网医院、在线问诊、陪诊平台中,越来越多团队开始接入大模型。
但很快就会踩坑:
- 大模型胡乱回答医疗问题(幻觉严重)
- 回答不可控,无法做分诊
- 无法沉淀为结构化病历
- 数据合规风险高
所以真正能上线商用的 AI 问诊系统,一定不是“纯对话机器人”,而是:
大模型 + 医疗知识库 + 分诊规则引擎 + 医疗业务系统 的组合架构
本文从 系统架构 → 核心模块 → 关键代码实现 → 落地经验,完整拆解一套可商用的 AI 问诊系统开发方案。
一、整体系统架构设计
推荐标准分层架构:
用户层(小程序 / App / H5)
↓
问诊对话服务(Chat Service)
↓
AI能力层
├─ 大模型推理(LLM)
├─ 医疗知识库(RAG)
├─ 症状识别NLP
├─ 分诊规则引擎
↓
业务系统层
├─ 医生排班
├─ 挂号系统
├─ 电子病历
├─ 处方系统
├─ 支付系统
核心思想只有一句话:
LLM 负责理解语言,知识库负责提供事实,规则引擎负责决策。
千万不要让大模型直接“做判断”。
二、医疗知识库(RAG)落地方案
为什么必须做知识库?
医疗场景不能依赖模型“记忆”,必须:
- 可追溯
- 可更新
- 可审核
- 可控回答来源
所以必须使用:
RAG(Retrieval-Augmented Generation)
流程:
问题 → 向量检索 → 找到医学资料 → 拼接Prompt → 再交给大模型生成
1. 构建医疗知识向量库
示例(Python + FAISS):
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
model = SentenceTransformer("moka-ai/m3e-base")
docs = [
"发烧超过38.5度持续三天建议就医",
"胸闷胸痛可能与心血管疾病有关",
"儿童咳嗽超过一周需排查肺炎"
]
embeddings = model.encode(docs)
index = faiss.IndexFlatL2(768)
index.add(np.array(embeddings).astype("float32"))
2. 问题检索
def search_knowledge(query):
q_emb = model.encode([query])
D, I = index.search(np.array(q_emb).astype("float32"), 3)
return [docs[i] for i in I[0]]
3. 拼接 Prompt
def build_prompt(question, knowledge):
context = "\n".join(knowledge)
return f"""
你是一名专业医生助理,只能依据以下医学资料回答:
资料:
{
context}
问题:
{
question}
请给出安全、保守、医学合规的建议。
"""
这样就避免模型“胡说八道”。
三、问诊对话服务设计
真实线上系统不会每次都完整对话。
必须:
- 会话上下文管理
- 多轮追问
- 症状结构化
1. 会话缓存设计(Redis)
import redis
import json
r = redis.Redis()
def save_session(uid, msg):
key = f"chat:{uid}"
history = r.get(key)
history = json.loads(history) if history else []
history.append(msg)
r.set(key, json.dumps(history), ex=3600)
2. 症状结构化抽取(NLP)
import re
def extract_symptoms(text):
rules = {
"发烧": r"发烧|高烧",
"咳嗽": r"咳嗽|咳痰",
"胸痛": r"胸痛|胸闷"
}
result = []
for k, pattern in rules.items():
if re.search(pattern, text):
result.append(k)
return result
输出:
["发烧", "咳嗽"]
方便后续自动分诊。
四、智能分诊规则引擎
注意:
分诊必须规则化,不能交给大模型。
示例规则:
TRIAGE_RULES = {
("发烧", "咳嗽"): "呼吸内科",
("胸痛",): "心内科",
}
def triage(symptoms):
for rule, dept in TRIAGE_RULES.items():
if all(s in symptoms for s in rule):
return dept
return "全科"
输出:
呼吸内科
然后自动推荐医生 + 排班。
五、调用大模型生成回答
示例(OpenAI API 风格):
from openai import OpenAI
client = OpenAI()
def ask_llm(prompt):
res = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "user", "content": prompt}],
temperature=0.2
)
return res.choices[0].message.content
六、完整问诊流程串联
def chat(uid, question):
knowledge = search_knowledge(question)
prompt = build_prompt(question, knowledge)
answer = ask_llm(prompt)
symptoms = extract_symptoms(question)
dept = triage(symptoms)
return {
"answer": answer,
"department": dept
}
前端展示:
AI建议:多喝水,观察体温变化,如持续发烧建议就医
推荐科室:呼吸内科
这才是可商用结果,而不是单纯聊天。
七、生产级落地建议(关键经验)
实战中你一定要注意:
- 大模型必须私有化或国产化部署
- 所有回答加免责声明
- 关键决策必须规则化
- 病历必须结构化存储
- 日志全量审计(合规要求)
否则:
上线容易,合规审核一定过不了。
八、总结
一句话总结:
真正的 AI 问诊系统不是 AI 多聪明,而是:
- 知识库是否权威
- 规则是否可控
- 数据是否合规
- 是否能接入挂号/处方/支付闭环
大模型只是“语言接口”,不是核心决策者。
如果你在做:
- 互联网医院
- 陪诊平台
- 药店问诊
- 医疗 SaaS
- 海外医疗平台
这种 RAG + 规则引擎 + 医疗系统集成架构 才是长期可持续方案。