tmp
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { tool } from "@langchain/core/tools";
|
||||
import z from "zod";
|
||||
import { DBModel } from "../../../../models/index.js";
|
||||
|
||||
const hospitalInfoQueryTool = tool(
|
||||
async ({ hospitalName, department, doctorName }) => {
|
||||
try {
|
||||
if (!hospitalName) {
|
||||
return { success: false, error: "hospitalName 不能为空" };
|
||||
}
|
||||
|
||||
const filter = { name: { $regex: hospitalName, $options: "i" } };
|
||||
const total = await DBModel.Organization.countDocuments(filter);
|
||||
if (total === 0) {
|
||||
return { success: false, error: `未找到名称包含「${hospitalName}」的机构` };
|
||||
}
|
||||
|
||||
// 医院总量小,一次最多取 10 家,命中过多时由调用方细化名称
|
||||
const orgs = await DBModel.Organization.find(filter).limit(10).lean();
|
||||
|
||||
const data = orgs.map((org) => {
|
||||
const fa = org.forAgent ?? {};
|
||||
let departments = fa.departments ?? [];
|
||||
let doctors = fa.doctors ?? [];
|
||||
if (department) {
|
||||
departments = departments.filter((d) => d.name?.includes(department));
|
||||
doctors = doctors.filter((d) => d.department?.includes(department));
|
||||
}
|
||||
if (doctorName) {
|
||||
doctors = doctors.filter((d) => d.name?.includes(doctorName));
|
||||
}
|
||||
return {
|
||||
_id: org._id,
|
||||
name: org.name,
|
||||
level: org.level ?? "",
|
||||
address: org.address ?? {},
|
||||
infoUpdatedAt: fa.updatedAt ?? null,
|
||||
overview: fa.overview ?? "",
|
||||
photos: fa.photos ?? [],
|
||||
departments,
|
||||
doctors,
|
||||
guides: fa.guides ?? {},
|
||||
};
|
||||
});
|
||||
|
||||
return { success: true, total, data };
|
||||
} catch (error) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "hospital_info_query",
|
||||
description:
|
||||
"查询医院就医信息:医院总览(门诊/挂号/缴费/医保/交通)、科室(位置/电话/就诊提示)、医生(职称/擅长/号别/坐班)、场景指南(初诊/住院/检查须知/老人服务)、照片。按医院名称模糊查询,可按科室、医生名过滤。最多返回 10 家医院信息。",
|
||||
schema: z.object({
|
||||
hospitalName: z.string().describe("医院名称,支持模糊匹配(如 协和)"),
|
||||
department: z.string().optional().describe("科室名称过滤(如 风湿免疫科、放射科)"),
|
||||
doctorName: z.string().optional().describe("医生姓名过滤"),
|
||||
}),
|
||||
}
|
||||
);
|
||||
|
||||
export { hospitalInfoQueryTool };
|
||||
Reference in New Issue
Block a user