智能舌诊应用开发:结合通义千问与OpenAI库

基于图像识别的中医AI舌面诊技术,全面开放API对接 只需三步即可生成中医体质报告:用户拍摄自己的舌部、面部照片,上传后系统立刻检测,给出分析报告,检测有效率可以达到90%以上。现已全面开放API对接,可以方便快捷的集成在网页、app、小程序等。 阅读详情

项目介绍

所有的项目都是基于 TailwindCSS 实现了响应式,同时支持网页端和移动端的显示效果。

这期尝试开发的 AI 应用是使用通义千问的大模型 API,开发一个 AI 看舌苔的应用。

image.png

整个项目的操作流程比较简单,第一屏用户上传自己的舌头的照片, 保存到 OSS 中。然后将 OSS 保存的图片发送给通义千问的大模型(这里采用了 qwen-vl + qwen-max 两个大模型),让大模型生成我们的前端 JSON 数据并返回

image.png

整个项目使用到的技术栈如下:

  • 前端

    • [Nuxt.js]:基于 Vue 的 SSR 和 SSG 框架
    • [Tailwind CSS]: 原子性的 CSS 框架,能很方便的的实现样式的搭建
    • [VantUI]:轻量、可定制的移动端组件库
    • [Supabase]:目前基于的 MemFire Cloud 的 supabase 方案
  • 后端

    • [Midway.js]:阿里出的 Node.js 框架
    • [Supabase]:目前基于的 MemFire Cloud 的 supabase 方案,实现数据库存储、OSS、鉴权
  • AI

    • [OpenAI]: OpenAI 的 Node.js SDK
    • [阿里云 DashScope]:支持通义千问的能力直接调用

前端开发

前端使用是Nuxt3,首页的前端代码如下,核心是两个组件 UploadForm.vue 和 ReportData.vue。分别对应上面提到的上传页面和报告页面

<template>
  <div class="ai-shetai_page h-full">
    _<!-- 页面信息 -->_
    <Head>
      <Title>AI夜市·看看舌苔Demo</Title>
      <Meta
        name="description"
        content="AI夜市: 一个AI看舌苔👅的Demo应用,大模型采用的阿里通义千问qwen-plus(用于文本生成)+ qwen-vl-max(用于图像理解)。"
      />
      <Style
        type="text/css"
        children="body { background-color: white; }"
      ></Style>
    </Head>

    _<!-- 主体 -->_
    <main class="h-full flex">
      _<!-- 左侧 -->_
      <div class="flex hidden lg:block">
        <img
          class="h-screen"
          style="max-width: fit-content"
          src="/images/ai-girl-shetou.png"
          alt="doctor-girl"
        />
      </div>
      _<!-- 右侧 -->_
      <div class="flex-grow h-full overflow-y-auto p-8 lg:px-16 lg:py-14">
        <div class="max-w-2xl m-auto">
          <h2
            class="flex items-center text-3xl lg:text-5xl text-slate-800 font-bold"
          >
            <span>AI·看看舌苔</span>
            <img class="w-12 h-12 rounded-full ml-2" src="/images/logo.png" />
          </h2>
          <p class="text-sm mt-4 text-slate-700">
            一个AI看舌苔👅的Demo应用,大模型采用的阿里通义千问qwen-plus(用于文本生成)
            + qwen-vl-max(用于图像理解)。
          </p>
          <p class="text-sm mt-0 text-slate-700">
            大模型Token很贵,需充值一丢丢token进行体验😚。你如果是开发者👨‍💻,也可以获取源代码自行部署,目前各大模型都有免费token!
          </p>
          <div class="bg-white mt-8 rounded-lg p-4 max-w-full lg:max-w-2xl">
            _<!-- 上传舌头照片 -->_
            <UploadForm v-if="type === 'upload'" />
            _<!-- 舌象分析 -->_
            <ReportData v-else />
          </div>
        </div>
      </div>
    </main>
  </div>
</template>

<script setup>
import { toRefs } from "vue";
import useProjectShetaiStore from "@/store/shetai";

const projectShetaiStore = useProjectShetaiStore();
const { type } = toRefs(projectShetaiStore);
</script>

<style>
.ai-shetai_page {
  background-image: linear-gradient(
    45deg,
    #ff9a9e 0%,
    #fad0c4 99%,
    #fad0c4 100%
  );
}
</style>

上传页面

image.png

UploadForm.vue 上传组件所对应的代码如下,上传采用的是 vant 的上传组件。

<template>
  <div>
    _<!-- 上传照片 -->_
    <div>
      <label
        for="username"
        class="block text-sm font-medium leading-6 text-gray-900"
        >上传你的👅照片</label
      >
      <van-uploader
        class="mt-2"
        v-model="fileList"
        reupload
        max-count="1"
        accept="image/*"
        max-size="5 * 1024 * 1024"
        :after-read="afterRead"
        @delete="onDelete"
      />
    </div>
    _<!-- 生成报告的按钮 -->_
    <div class="mt-4">
      <van-button
        type="primary"
        class="!bg-pink-400 border !border-pink-400"
        :class="{
          'cursor-wait': isGenerating,
        }"
        :disabled="isDisabled"
        @click="projectShetaiStore.generateReport(uploadUrl)"
        >生成报告</van-button
      >
    </div>

    _<!-- 生成时的loading效果 -->_
    <van-overlay :show="isGenerating">
      <div class="mt-[25vh]" @click.stop>
        <CubeLoading
          textCSS="text-white text-center leading-6 text-sm mt-4"
          text="AI正在分析诊断中🔍<br/> 这一步耗时比较久(可能30s - 60s),请耐心等待!🙏"
        />
      </div>
    </van-overlay>
  </div>
</template>

<script setup>
import { computed, toRefs } from "vue";
import { BUCEKT } from "@/utils/constants";
import useUpload from "@/composables/useUpload";
import useProjectShetaiStore from "@/store/shetai";

_// 上传文件_
const { fileList, uploadUrl, afterRead, onDelete } = useUpload(BUCEKT.SHE_TAI);

_// 生成报告_
const projectShetaiStore = useProjectShetaiStore();
const { isGenerating } = toRefs(projectShetaiStore);

_// 是否禁用生成报告的按钮_
const isDisabled = computed(() => !uploadUrl.value || isGenerating.value);
</script>

图片上传到 OSS 的逻辑,我是采用的开源的 Supabase 方案,核心的上传代码逻辑封装到了 @/composables/useUpload.js 中。我它的代码逻辑如下:

import { ref, toRefs } from "vue";
import moment from "moment";
import { nanoid } from "nanoid";
import { showFailToast, showSuccessToast } from "vant";
import { useSupabase } from "@/composables/useSupabase";

const useUpload = (bucketName) => {
  _// supabase实例_
  const supabase = useSupabase();
  _// 文件列表_
  const fileList = ref([]);
  _// 文件上传成功地址_
  const uploadUrl = ref("");

  async function uploadImageToOSS(vantFile) {
    const { file } = vantFile;
    const filename = file.name;
    const date = moment().format("YYYY-MM-DD");
    const uid = nanoid(10);
    const PATH = `images/${date}/${uid}-${filename}`;

    const { data, error } = await supabase.storage
      .from(bucketName)
      .upload(PATH, file, {
        cacheControl: "3600",
        upsert: false,
      });

    return {
      data,
      error,
    };
  }

  _// 读取文件完毕触发的回调_
  async function afterRead(vantFile) {
    vantFile.status = "uploading";
    const res = await uploadImageToOSS(vantFile);

    if (res.error) {
      vantFile.status = "failed";
      const errorMsg = res.error.error || res.error.message || "上传失败";
      showFailToast(errorMsg);
    } else {
      const { data } = supabase.storage
        .from(bucketName)
        .getPublicUrl(res.data.path);

      const { publicUrl } = data;
      vantFile.status = "done";
      uploadUrl.value = publicUrl;

      showSuccessToast("上传成功");
    }
  }

  _// 删除文件触发的回调_
  function onDelete() {
    uploadUrl.value = "";
  }

  return {
    fileList,
    uploadUrl,
    afterRead,
    onDelete,
  };
};

export default useUpload;

这边 Supabase 方案采用的是 [MemfireDB] 的方案,因为它提供了很好的国内访问性,而且开发者具有创建 2 个免费额度的权益。

我很安利独立开发者使用 Supabase 开发项目,因为它提供了数据库、OSS 存储和登录鉴权方案,只需要调用一个函数就能实现后端功能,能够极大的提高我们的开发效率,对前端同学非常友好。

并且不像 Google 提供的 Firebase,国内的访问性不佳,我们可以采用一套技术栈,实现国内和海外的 Supabase 方案同构。

报告页面

image.png

上传成功后就可以点击生成报告,因为大模型的响应时间比较久,我这边没有考虑增加 stream 返回数据等相关优化。所以增加了一个 loading 的动效。上传组件 ReportData.vue 的源码如下:

<template>
  <div>
    <h3 class="font-medium">分析报告</h3>
    <div class="mt-4 bg-slate-50 px-4 py-2 rounded-lg text-sm">
      {{ comment }}
    </div>
    <div class="mt-4">
      <div
        class="flex items-center mt-2 text-sm border px-4 py-4 rounded text-gray-800"
        v-for="(item, index) in diagnosis"
        :key="item.id"
      >
        <div class="flex-grow">
          <div class="font-medium">{{ item.id }}:{{ item.name }}</div>
          <div class="mt-2 flex">
            <i class="rounded-full w-1 h-1 bg-pink-500 mt-2 mr-2 flex-none"></i
            >特点:{{ item.feature }}
          </div>
          <div class="mt-2 flex">
            <i class="rounded-full w-1 h-1 bg-pink-500 mt-2 mr-2 flex-none"></i
            >诊断:{{ item.diagnosis }}
          </div>
        </div>
        <div class="flex-none rounded-full border p-1 border-pink-400 ml-2">
          <img class="w-8 h-8 rounded-full" :src="`/images/${index + 1}.jpg`" />
        </div>
      </div>
    </div>

    <div class="mt-4 flex justify-end">
      <van-button
        type="primary"
        class="!bg-pink-400 border !border-pink-400"
        :class="{
          'cursor-wait': isGenerating,
        }"
        @click="() => projectShetaiStore.clearCache()"
        >再测一次</van-button
      >
    </div>
  </div>
</template>

<script setup>
import { computed, toRefs } from "vue";
import useProjectShetaiStore from "@/store/shetai";

const projectShetaiStore = useProjectShetaiStore();
const { reportData } = toRefs(projectShetaiStore);

function parseAIJSON(aiContent) {
  const content = aiContent.replace(/\\n/g, "");
  const regex = /```json\s([\s\S]*?)\s```/;
  const matches = content.match(regex);

  if (matches && matches.length) {
    try {
      const jsonString = matches[1];
      const data = JSON.parse(jsonString);

      return data;
    } catch (error) {
      console.error(error);
      return null;
    }
  } else {
    return null;
  }
}

const data = computed(() => {
  let json = parseAIJSON(reportData.value);
  return json;
});

const comment = computed(() => {
  if (data.value && data.value.comment) {
    return data.value.comment;
  } else {
    return "AI分析失败,请稍后再试。";
  }
});

const diagnosis = computed(() => {
  if (data.value && data.value.data) {
    const keys = Object.keys(data.value.data);
    const result = keys.map((key) => {
      const item = data.value.data[key];
      return {
        id: key,
        name: item.name,
        feature: item.feature,
        diagnosis: item.diagnosis,
      };
    });

    return result;
  } else {
    return [];
  }
});
</script>

后端 + 大模型

后端采用的是 Midway,调用通义千问模型前,我们需要去[阿里云 DashScope]申请 OpenAIKey,填写到我们的环境变量里面。阿里云送了很慷慨的 token 额度,我们不需要考虑费用问题,根本用不完!

openai 库

通义千问的大语言模型是支持了 openai 库的兼容的(qwen-vl 视觉模型还暂时不支持),这边你可以调用 /api/test,顺利的话就能够获取到通义千问返回的数据。

image.png

import OpenAI from 'openai';
import { Inject, Controller, Get } from '@midwayjs/core';
import { Context } from '@midwayjs/koa';
import { ApiService } from '../service/api.service';
import { env } from '../config/config.env';

@Controller('/api/')
export class APIController {
  @Inject()
  ctx: Context;

  @Inject()
  apiService: ApiService;

  _/**_
_   * 测试模型的连接(本地环境可以用)_
_   */_
  @Get('/test')
  async getTest() {
    _// 判断是否是开发环境(避免生产环境导致token的消耗)_
    const isDev = env === 'development';

    if (!isDev) {
      return {
        success: false,
        info: '非开发环境不可用,避免token消耗',
      };
    }

    _// 调用的参数_
    const params: OpenAI.Chat.ChatCompletionCreateParams = {
      messages: [{ role: 'user', content: '你好啊,你是谁?你能做什么?' }],
      model: 'qwen-plus',
    };

    _// 数据返回_
    return this.apiService.getQwenChat(params);
  }
}

编写 prompt

这边的 prompt 核心逻辑都在 /api/shetai 这个 controller 所对应的代码中

import { Inject, Controller, Post, Body } from '@midwayjs/core';
import { Context } from '@midwayjs/koa';
import OpenAI from 'openai';
import { IQwenVlData } from '../types/index';
import { ShetaiService } from '../service/shetai.service';

const SHENZHI_DATA = require('../jsons/shezhi.data.json');
const SHETAI_DATA = require('../jsons/shetai.data.json');

@Controller('/api/shetai')
export class APIController {
  @Inject()
  ctx: Context;

  @Inject()
  apiService: ShetaiService;

  _/**_
_   * 实现舌苔诊断_
_   */_
  @Post('/diagnosis')
  async getDiagnosis(@Body() body: any) {
    const { imageUrl } = body;
    if (!imageUrl) {
      return {
        success: false,
        info: '缺少图片参数',
      };
    }
    _// 调用 API_
    const vlBody = {
      model: 'qwen-vl-max',
      parameters: {
        top_p: 0.7,
        top_k: 50,
      },
      input: {
        messages: [
          {
            role: 'user',
            content: [
              {
                image: imageUrl,
              },
              {
                text: `假设你是一个专业的老中医,非常擅长进行舌诊,你目前正在填写我们医院规定的舌诊病例,病例要求填写的5项方面(苔质、苔色、舌色、舌形、舌神)。你需要从图片中仔细的观察用户的舌头情况,并填写完成这5项。
1. 舌质:舌苔的厚薄,是否能看到舌体本身?舌苔是否湿润,适中还是干燥粗糙?舌苔是否细腻不易挂去?并给出结论舌质是薄苔, 厚苔, 润苔, 滑苔, 燥苔, 糙苔, 腻苔, 腐苔, 剥苔, 类剥苔, 花剥苔, 地图舌, 镜面舌哪种?
2. 苔色:舌苔的颜色是白色苔、薄白苔、薄白润苔、薄白干苔、薄白滑苔、白厚苔、白厚燥苔、白厚腻苔、积粉苔、薄黄苔、深黄苔、焦黄苔、黄腻苔、黄燥苔、灰黑干苔,还是灰黑润苔?
2. 舌色:舌头的颜色是淡红舌, 淡白舌, 枯白舌, 红舌, 绛舌, 紫舌, 绛紫舌, 淡紫舌, 瘀斑、瘀点舌, 青舌?是否有斑块?
3. 舌形:判断是老舌(舌头表面粗糙,颜色暗淡,看起来较老), 淡嫩舌, 红嫩舌, 胖大舌, 齿痕舌, 肿胀舌, 红瘦舌, 淡瘦舌, 点、刺舌, 裂纹舌(舌头表面有不同形状的裂纹,有的被舌苔覆盖,有的没有)
4. 舌神:判断舌头的神态是荣舍(舌头颜色鲜红且有光泽,活动自如)还是枯舌(舌头颜色暗淡无光,活动不灵活)?
                `,
              },
            ],
          },
        ],
      },
    };

    _// 调用qwen-vl模型_
    const qWenVLData: IQwenVlData = await this.apiService.getQwenVLMax(vlBody);

    if (qWenVLData) {
      const { usage, output } = qWenVLData;

      this.ctx.logger.info('qwen-vl-max模型的token消耗:', usage);

      _// 调用 qwen-max模型的参数_
      const params: OpenAI.Chat.ChatCompletionCreateParams = {
        messages: [
          {
            role: 'system',
            content: `你是一个专业的老中医,非常擅长进行舌诊,通过观察舌象以了解病情的诊察方法。所谓舌象,是指舌质和舌苔这两大块的形象。
舌质包括:舌神、舌色、舌形三类。这三类中又具有具体的判定标准,数据如下的JSON: \`\`\`json\n${JSON.stringify(
              SHENZHI_DATA
            )}\n\`\`\`
舌态包括:苔质、苔色两类。这两类中又具有具体的判定标准,数据如下的JSON: \`\`\`json\n${JSON.stringify(
              SHETAI_DATA
            )}\n\`\`\`
你需要根据用户传来的对舌头的描述内容,来判断最符合舌质和舌态的具体情况。并返回以下的JSON格式给到用户,JSON的格式符合typescript的interaface接口,定义如下:
interface DiagnosisResponse {
  comment: string,
  data: {
    // 苔质
    苔质: {
      name: string;
      feature: string;
      diagnosis: string;
    };
    // 苔色
    苔色: {
      name: string;
      feature: string;
      diagnosis: string;
    },
    // 舌神
    舌神: {
      name: string;
      feature: string;
      diagnosis: string;
    };
    // 舌色
    舌色: {
      name: string;
      feature: string;
      diagnosis: string;
    };
    // 舌形
    舌形: {
      name: string;
      feature: string;
      diagnosis: string;
    };
  };
};
其中的comment字段需要包含下面4点,请都放在comment字段中成为一段话!:
1.总结用户舌头的特点
2.诊断状态
3.饮食建议
4.生活方式建议
其中的data字段是苔质、苔色、舌神、舌色、舌形的具体诊断情况的映射关系,你需要根据用户的描述内容,来判断最符合的一个判定标准,请务必按照JSON的格式返回,否则我会被开除医院的!
`,
          },
          {
            role: 'user',
            _// qwen-vl-max模型的回复(对于舌头的细节描述)_
            content: output.choices[0].message.content[0].text,
          },
        ],
        model: 'qwen-plus',
      };

      _// 请求qwen-max模型_
      const qWenMaxData = await this.apiService.getQwenChat(params);
      const content = qWenMaxData.choices[0].message?.content;

      this.ctx.logger.info('qwen-max模型的token消耗:', qWenMaxData?.usage);

      return {
        success: !!content,
        data: content,
      };
    } else {
      return {
        success: false,
        info: '调用qwen-vl-max失败',
      };
    }
  }
}

可以看到我分别调用了 qwen-vl-max 和 qwen-plus 两个模型。

qwen-vl-max 是通义千问的视觉理解模型,它也支持文字大模型的能力,我本来尝试的是使用它直接理解照片,并且给出前端需要的 JSON。但是我发现它的文本生成能力没有 qwen-plus 稳定和出色,经常会出现给不出指定的 JSON,甚至开始胡说的问题,但是使用 qwen-plus 就基本不会出现。

顺便说下如何让大模型输出 JSON,然后在服务端和后端解析 JSON 这方面在 AI 应用的开发中是十分重要的。有不了解的朋友可看[《 大语言模型下的 JSON 数据格式交互 》],讲的很明白!

这是后端返回的数据,我们前端拿到进行一定程度的文本解析就可以使用

image.png

这边解析大模型返回的 json 数据的函数如下:

function parseAIJSON(aiContent) {
  const content = aiContent.replace(/\\n/g, "");
  const regex = /```json\s([\s\S]*?)\s```/;
  const matches = content.match(regex);

  if (matches && matches.length) {
    try {
      const jsonString = matches[1];
      const data = JSON.parse(jsonString);

      return data;
    } catch (error) {
      console.error(error);
      return null;
    }
  } else {
    return null;
  }
}

总结

这是一个相对比较简单的 AI 应用 Demo,但是也正是因为 AI 大模型的加持,才能让整个开发过程变得如此的简单,如果没有大模型提供的 API 能力,后端实现部分还是相对而言很复杂的。

我们不仅需要训练一个能够识别舌苔的视觉理解模型,让视觉理解模型输出这个舌象的特征数据。我们还要在舌诊的数据库中,自己根据特征数据,手挫对应的特征结果。

可以看到,目前在 AI 大模型的加持下, 前端开发一些有趣、个性化的应用变得真的十分简单。之后我会基于国内的大模型(豆包、Kimi、通义、智谱清言等),并结合 LangChain 的开源工具,开发更多有意思的大模型应用(9 月前会更新完 10 个 AI 应用 + 视频)。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

Qwen2.5-Max Qwen2.5-Max不仅在技术上实现了重大突破,还为未来的技术发展和应用奠定了坚实的基础。从更高效的模型优化到多模态AI技术的发展,再到智能客服、内容创作、医疗健康等多个领域的广泛应用,Qwen2.5-Max的未来充满无限可能。 阅读详情

相关推荐

1.25 大模型API使用实战:OpenAI、DeepSeek、通义千问API调用详解

本文详细介绍了主流大模型API的调用方法,包括OpenAI、DeepSeek和通义千问。内容涵盖API调用的通用流程、具体实现代码示例以及最佳实践建议。文章通过模拟代码演示了各平台的API调用方式,并强调了密钥安全、错误处理和成本控制等重要注意事项。最后提出了关于API安全管理和优化使用的思考题,为开发者提供了实用的API集成指南。

yonggeit的博客 4187

别只关注deepseek了,阿里发布qwen2.5-max,比deepseek更好更稳定,排名超越deepseek

就在 DeepSeek v3 发布一个月后,阿里云通义千问团队放出了 Qwen2.5 系列的最强旗舰模型——,在世界公认的 Arena 榜单上,。Arena 榜单通过匿名方式将大模型两两配对,用户可以在不知情的情况下进行测试,依据实际对话体验来投票评价模型的能力。因此,Chatbot Arena LLM Leaderboard 被业界视为最公正和权威的榜单之一,也是全球顶级大模型的重要竞赛平台。

2401_85390073的博客 1676

通义千问联网搜索功能深度解析

摘要:本文对比了通义千问(Qwen)两种API对接方式的差异。官方API直连方案通过直接调用DashScope的/text-generation/generation端点并设置enable_search参数,可成功触发联网搜索功能;而使用OpenAI兼容接口(/compatible-mode/v1)时,即使传递了enable_search参数,服务端也可能忽略该参数。关键区别在于官方API能正确处理联网搜索参数,而兼容接口可能不支持该功能。要实现可靠联网搜索,必须使用官方API端点并正确配置参数。

2301_78209919的博客 2028

中医舌诊开放平台API接口之H5页面集成示例(安卓版)ai-tongue-h5-android

中医舌诊H5集成示例(安卓版) 中医舌诊H5集成使用示例 介绍 此文档适用于安卓开发集成中医舌诊H5应用 点击进入官网

2871

基于贝叶斯网络的中医辨证人工智能系统在舌诊和脉诊中的应用价值.pdf

基于贝叶斯网络的中医辨证人工智能系统在舌诊和脉诊中的应用价值.pdf

中医舌诊系统 - 一个基于AI的中医舌诊分析和知识库系统.zip

智慧医药系统(smart-medicine)是一个基于 SpringBoot 开发的标准 Java Web 项目。整体页面非常的简约大气,整合了目前非常火爆的 AIGC 生成式 AI(选用的阿里的通义千问大语言模型)技术充当智能医生,以此提升系统的 B 格,整体来看是一个偏向百科查询类的系统,功能设计的较为简单,便于初学者理解和学习,也适合学校中的项目答辩或者毕业设计。

通义千问模型接入 openJiuwen 平台及智能体落地全流程

分层适配不同基础:入门类范本聚焦 “流程完整性”,以截图 + 关键配置标注的形式降低新手门槛;实战类范本侧重 “场景落地性”,通过主题化案例(如新春祝福、文本编辑)提供可复用的提示词与工作流模板;进阶类范本直击 “复杂功能突破”,聚焦工作流编排与问题排查,适配有深度开发需求的用户。强化实操参考价值:所有范本均以 “步骤化教学 + 关键细节标注” 为核心,重点突出模型配置、API 密钥获取、工作流设计等核心环节,部分范本提供完整代码 / 配置示例,可直接复用为自身写作或开发的基础框架。覆盖多元应用场景。

2501_94186029的博客 1965

(源码)基于Python Flask框架的舌诊系统.zip

# 基于Python Flask框架的舌诊系统 ## 项目简介 本项目是基于Python Flask框架开发的舌诊系统,借助接收用户上传的舌头图片,运用机器学习模型开展体质预测工作,还能为用户提供个性化的舌诊报告。 ## 项目的主要特性和功能 1. 用户登录用户可通过微信小程序授权登录,系统利用微信小程序的code获取openid并保存至数据库。 2. 舌诊图片上传用户能通过API接口上传舌头图片,系统对图片处理分析,判断是否含舌头并进行体质预测。 3. 体质信息获取系统依据用户上传的舌头图片及相关信息,借助机器学习模型进行体质分类并给出预测结果。 4. 个人信息保存用户可通过API接口保存性别、年龄、身高、体重等个人信息,助力系统提供更精准的体质预测。 ## 安装使用步骤 ### 环境安装

阿里云起诉山寨通义千问App一审胜诉;苹果成为2023年智能手机销售冠军;Win 11彻底消灭写字板 | 极客头条

极客头条」—— 技术人员的新闻圈!CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。整理 | 梦依丹出品 | CSDN(ID:CSDNnews)

极客日报 2万+

无人机避障——感知篇(采用Mid360复现Fast-lio)

本文介绍了在Ubuntu 18.04和ROS Melodic环境下,使用Xavier-nx电脑和Livox Mid-360激光雷达编译和运行FAST-LIO工程的步骤,包括创建工作空间、编译驱动和FAST-LIO源码,以及运行launch文件进行建图的过程。

weixin_45390670的博客 3533

告别Root!用Termux+ADB在Android上玩转自动化(保姆级教程)

本文详细介绍了如何在非Root环境下使用Termux和ADB实现Android自动化操作,无需Root权限即可运行自动化脚本。通过Termux搭建Linux终端环境,结合ADB无线调试和Python脚本,实现点击、滑动、截图等自动化功能,适用于定时任务、自动签到等场景。

weixin_42548888的博客 519

基于 LangChain 实现通义千问 + Tavily 搜索 Agent 的简单实践

本文介绍了如何利用LangChain框架结合通义千问大模型和Tavily实时搜索引擎构建智能问答Agent。该系统能够自动判断问题类型,决定是否调用Tavily进行实时搜索获取最新信息,或直接由大模型回答通用知识问题。文章详细展示了环境配置、API设置、Tavily搜索集成方法,以及如何通过LangChain的Agent模块实现智能工具选择机制。测试案例表明,该系统能有效区分需要实时搜索的问题(如天气查询)和通用知识问题(如首都名称),为语言模型应用提供了实时知识增强的解决方案。

发现问题,面对问题,分析问题,解决问题,总结问题 1931

【图神经网络】从0到1使用PyG手把手创建异构图

异构图的准确定义如下:异构图(Heterogeneous Graphs):一个异构图GGG有一组节点V=v1,v2,...,vnV=v_1,v_2,...,v_nV=v1​,v2​,...,vn​和一组边E=e1,e2,...,emE=e_1,e_2,...,e_mE=e1​,e2​,...,em​组成,其中每个节点和每条边都对应着一种类型,用TvT_vTv​表示节点类型的集合,TeT_eTe​表示边类型的集合,一个异构图有两个映射函数,分别将每个节点映射到其对应的类型ϕv:V→Tv\phi_v:V\rig

小哲的博客 7819

学生党专属:通义千问3体验方案,比网吧充值还便宜

本文介绍了基于星图GPU平台自动化部署通义千问3-4B-Instruct-2507镜像的高效方案,特别适合学生党低成本完成AI毕设。该平台支持一键启动、vLLM加速推理与OpenAI兼容API调用,可快速实现模型微调与应用开发。典型场景如构建智能代码助手,通过自然语言生成带注释的Python函数,轻松集成至Web项目,助力毕业设计高效落地。

StarlightOwl56的博客 1082

AI时代,程序员何去何从?别慌,看完这篇你就明白了

AI时代程序员的发展方向 摘要:随着AI代码助手的普及,程序员行业面临变革。本文通过实际案例展示AI写代码的能力与局限:AI能生成基础功能代码(如RESTful API、数据处理脚本),但缺乏业务理解、系统设计和复杂逻辑处理能力。程序员的核心价值在于需求分析、架构设计、性能优化等高层能力。未来程序员应: 掌握AI工具提升效率 专注于创新和架构设计 培养业务理解能力 持续学习新技术 AI不会取代程序员,但会淘汰不会使用AI的程序员。建议开发者拥抱AI工具,将其作为助手而非威胁,聚焦高价值工作。

yunque_xianguang的博客 898

WRF气象建模实战:如何为JRA55非标准数据定制Vtable文件?

本文详细介绍了为WRF气象模型定制Vtable文件以支持JRA55非标准数据(特别是积雪数据)的完整实战流程。文章深入解析了WPS数据流中Vtable的核心映射逻辑,提供了从GRIB文件诊断、Vtable编写到METGRID.TBL调优的通用方法论,帮助用户解决非标准气象数据源适配的关键技术挑战。

c8d9e0f1的博客 670

阿里通义千问API调用量全球第四,超越OpenAI与Meta

【摘要】阿里巴巴通义千问API调用量以10.4%市场份额超越OpenAI和Meta,跃居全球第四,标志着中国AI的国际崛起与开源模型的影响力提升。

欢迎来到运通链达的官方博客!我们深度探讨人工智能技术与应用,贯彻科技向善理念,推动科技进步与社会福祉和谐共生。 1977

我用 Python 监听了自己的键盘,生成击键热力图,看看每天到底在“摸鱼”还是“搬砖”?

数据采集(监听)、持久化(I/O)与可视化展示,必须是三个完全独立的模块,这符合单一职责原则。在多线程读写 Python 字典时,锁住的时间要尽可能短,防止 I/O 线程把高频的监听线程阻塞住。这类涉及底层的代码与“键盘记录木马”只有一线之隔。永远不要把击键记录通过网络上传,所有数据必须localhost消化。人脑对枯燥的 JSON 日志是不敏感的,但对颜色和空间极其敏感。这也是为什么 Prometheus + Grafana 是标配。使用ctypes。

BUG猿的博客 188

通义千问Qwen整合指南:阿里系模型的最佳实践

通过Anything LLM整合阿里云通义千问系列模型,构建安全可控的企业级智能问答系统。利用RAG技术将私有文档转化为可检索知识,结合Qwen-Max等模型实现精准回答,支持多租户隔离、自动化更新与审计追踪,已在实际项目中显著降低培训成本与IT咨询量。

weixin_33205138的博客 1121

KingSCADA实现按钮点击效果

哈喽,你好啊,我是雷工!在做SCADA项目的时候,按钮是不可缺少的功能,但软件自带的按钮太丑,已经无法满足现如今客户对界面美观度的要求。这时候就需要UI小姐姐设计美观大气的SCADA界面,但UI设计的按钮切图放到程序中只是图片素材,当添加了按钮功能时,虽然能实现按钮功能,但没有任何点击效果;当遇到有需要连锁条件才能点击的按钮时,操作员无法区分是有连锁点击了没反应,还是系统界面卡死了导致的没点击成功,这时候有点击效果就能很好的区分这种问题。本篇介绍一种实现按钮点击效果的方法,以下为操作过程。

做有价值的事,积累有价值的笔记! 2750

1、信息与物理世界:“It from Bit”还是“Bit from It”?

这篇博文探讨了物理学与信息理论之间的深刻联系,从惠勒提出的“It from Bit”概念出发,讨论了信息是否是物质世界的基础,或者物质是否是信息的来源。文章回顾了2013年举办的征文竞赛以及众多学者对这一问题的不同观点,涵盖了量子理论、热力学、计算机科学、黑洞物理以及时空本质等多个领域。同时,文章还分析了信息理论在哲学层面的含义,并展望了其在未来理论、实验和应用研究中的潜力与方向。

water的专栏 284

LobeChat接入通义千问实战:完整步骤+截图演示

本文详细介绍如何通过Docker快速部署LobeChat并接入通义千问,利用OpenAI兼容接口实现本地化AI对话系统,涵盖配置步骤、安全策略、性能优化及成本控制,适用于中文场景下的私有化部署需求。

weixin_42571280的博客 705

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

手把手教你部署支持DeepSeek/通义千问的API网关

本文介绍了如何在星图GPU平台上自动化部署支持OpenAI API格式的AI网关镜像,实现统一接口访问DeepSeek、通义千问等主流大模型。该方案能显著简化多模型应用开发流程,典型应用场景包括构建智能客服系统,根据问题类型自动选择最合适的模型进行响应。

weixin_36149538的博客 986

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

通义千问 2.5 发布,成为中国最强开源大模型_通义千问2.5

在 GPT-4 面世一年多后,不少大模型已经开始跟上 OpenAI 的脚步。今天阿里云的通义千问模型也进化到了 2.5 版本。在 2.5 版本中,模型在理解力、逻辑推理、指令执行和编程能力方面都有显著提升,分别比上一版本提高了 9%、16%、19% 和 10%,在中文处理能力上,通义千问更是持续保持行业领先地位。通义还推出了一个拥有 1100 亿参数的开源模型 Qwen1.5-110B,该模型在多个基准测试中超越了 Meta 的 Llama-3-70B 模型。

2401_84208172的博客 2180

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

太强了!集成SpringAI、并结合Ollama、OpenAI、DeepSeek、通义千问等多个AI模型,全能AI智能分析项目!

在深度学习浪潮的推动下,AI大模型(Large AI Models)的研发与应用成为当今人工智能领域最具颠覆性和前沿性的研究方向。它们通常由亿级至千亿级参数构成,经过海量数据预训练后具备强大的表示学习能力与泛化能力。与传统模型相比,AI大模型在多任务、多模态、少样本学习等方面展现出显著优势,正在被广泛应用于自然语言处理、计算机视觉、医疗诊断、推荐系统等诸多领域。

weixin_58753619的博客 919

62元, 3D打印外壳,搞定国产开源Moji智能 AI 助手,可接入 DeepSeek、通义千问和OpenAI...

获取项目源码,文末联系小编Moji智能AI助手是一款基于乐鑫ESP32-S3集成了Wi-Fi和蓝牙功能的,后台接入大模型服务的一个贴心的伙伴。它不仅是智能工具,更是一个能够倾听用户需求的小助手,致力于为每一天增添温暖和便利。无论是在解决问题还是分享快乐,Moji 都以独特的智慧和温柔的方式,使科技更加有温度,生活更美好。Moji智能AI助手功能介绍Moji智能AI助手可以搭载多种开源AI大模型( ...

2210
上一篇: Llama3:在线体验媲美GPT4的三种方式
下一篇: IT项目经理转行大模型,项目经理的进来,你想知道的都在这里非常详细
大模型入门教程
博客等级 码龄2年 1万+粉丝 2778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值