mcp开发一个中医药材科普

实操

csharp 复制代码
uv init mcp-zhongyi   // 执行uv init mcp-weather命令初始化项目
cd mcp-zhongyi
uv venv   // 创建虚拟环境
.venv\Scripts\activate   // Linux下使用source .venv/bin/activate激活
uv add mcp
uv add requests
uv add openai
uv add zhipuai

代码

server.py

python 复制代码
import json
import requests
from typing import Any, List, Dict
from mcp.server.fastmcp import FastMCP
from openai import OpenAI

# 初始化MCP服务器
mcp = FastMCP("ZhongyiServer")
client = OpenAI(api_key="自己的deepseekkey", base_url="https://api.deepseek.com")

@mcp.tool()
async def get_yaocaiInfo(yaocai: str):
    """
    输入指定药材的名称,返回当前药材信息
    :param yaocai: 药材名称
    :return: json格式的药材信息
    """
    try:
        # 构建提示词
        prompt = f"""请以JSON格式返回关于"{yaocai}"的中药材信息,包含以下字段:
        1. name: 药材名称
        2. property: 药性(寒、热、温、凉)
        3. taste: 药味(酸、苦、甘、辛、咸)
        4. meridian: 归经
        5. function: 功效主治
        6. usage: 用法用量
        请确保返回的是合法的JSON格式。
        """
        
        # 调用DeepSeek API
        response = client.chat.completions.create(
            model="deepseek-chat",
            messages=[
                {"role": "system", "content": "你是一个专业的中医药专家,请提供准确的中药材信息。"},
                {"role": "user", "content": prompt}
            ],
            stream=False
        )
        
        # 获取回复并确保是JSON格式
        result = response.choices[0].message.content
        # 尝试解析JSON,如果失败则返回原始文本
        try:
            return json.loads(result)
        except json.JSONDecodeError:
            return {"error": "无法解析为JSON格式", "raw_content": result}
            
    except Exception as e:
        return {"error": f"获取药材信息出错:{str(e)}"}

if __name__ == "__main__":
    mcp.run(transport="sse")
python 复制代码
import json
import requests
from typing import Any, List, Dict
from mcp.server.fastmcp import FastMCP
from openai import OpenAI
from zhipuai import ZhipuAI

# 初始化MCP服务器
mcp = FastMCP("ZhongyiServer")
client = OpenAI(api_key="deepseek的apikey", base_url="https://api.deepseek.com")
clientZhiPu = ZhipuAI(api_key="智谱的apikey")
@mcp.tool()
async def get_yaocaiInfo(yaocai: str):
    """
    输入指定药材的名称,返回当前药材信息
    :param yaocai: 药材名称
    :return: json格式的药材信息
    """
    try:
        # 构建提示词
        prompt = f"""请以JSON格式返回关于"{yaocai}"的中药材信息,包含以下字段:
        1. name: 药材名称
        2. property: 药性(寒、热、温、凉)
        3. taste: 药味(酸、苦、甘、辛、咸)
        4. meridian: 归经
        5. function: 功效主治
        6. usage: 用法用量
        请确保返回的是合法的JSON格式。
        """
        
        # 调用DeepSeek API
        response = client.chat.completions.create(
            model="deepseek-chat",
            messages=[
                {"role": "system", "content": "你是一个专业的中医药专家,请提供准确的中药材信息。"},
                {"role": "user", "content": prompt}
            ],
            stream=False
        )
        
        # 获取回复并确保是JSON格式
        result = response.choices[0].message.content
        # 尝试解析JSON,如果失败则返回原始文本
        try:
            return json.loads(result)
        except json.JSONDecodeError:
            return {"error": "无法解析为JSON格式", "raw_content": result}
            
    except Exception as e:
        return {"error": f"获取药材信息出错:{str(e)}"}

# 添加一个工具,获取药材的图片
@mcp.tool()
async def get_yaocai_image(yaocai: str):
    """
    输入指定药材的名称,返回当前药材的图片
    :param yaocai: 药材名称
    :return: 药材的图片URL
    """
    try:
        # 构建提示词
        prompt = f"高清晰度的{yaocai}中药材实物图片,清晰展示其外观特征,包括颜色、形状和质地,白色背景,专业医药参考图"
        
        # 调用智谱AI的图像生成API
        response = clientZhiPu.images.generations(
            model="cogview-4-250304",  # 使用最新的图像生成模型
            prompt=prompt,
        )
        
        # 返回生成的图片URL
        return {
            "success": True,
            "image_url": response.data[0].url,
            "yaocai": yaocai
        }
            
    except Exception as e:
        return {
            "success": False,
            "error": f"获取药材图片出错:{str(e)}",
            "yaocai": yaocai
        }

if __name__ == "__main__":
    mcp.run(transport="sse")

相关内容

1.智谱apikey:www.bigmodel.cn/invite?icod...

2.deepseek的key:platform.deepseek.com/

注意

  1. 出现问题重新开关一下
相关推荐
馒头不想说话8 分钟前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥2 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马2 小时前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头3 小时前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen3 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健3 小时前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒3 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端
LuHang4 小时前
从天地图切换到高德地图:一次真实的底图迁移实战
前端·vue.js·cesium
用户360055579004 小时前
Kestrel_VLLM - 27 · 寄存器常驻与融合发射:两次「少发一次」
前端
前端小万4 小时前
用"道法术器"重构你和 AI 的协作方式
前端·人工智能·程序员