当前位置:首页 > 技术分享

AI Chat 演示程序 支持 OpenAI 和 Ollama API,实现了流式响应、Markdown 格式支持、连续会话和 标签处理

admin2个月前 (02-04)技术分享153

AI Chat 演示程序

这是一个基于 PHP 和 HTML 开发的 AI 聊天演示程序,支持 OpenAI 和 Ollama API,实现了流式响应、Markdown 格式支持、连续会话和 标签处理等功能。

开源仓库

  • Gitee 仓库地址https://gitee.com/web/ai-php-demo

  • 演示地址https://tool.bitefu.net/ai/

功能特点

  • 支持多种 API:同时支持 OpenAI 和 Ollama API

  • 流式响应:实现了实时消息返回,提供打字机效果

  • Markdown 支持:解析和显示常见的 Markdown 语法,包括表格、代码块、列表等

  • 连续会话:支持上下文对话,AI 可以根据历史消息生成响应

  • 参数配置:可自定义 API Key、模型、温度等参数

  • 模型管理:支持获取 OpenAI 和 Ollama 的可用模型列表

  • 测试连接:可测试当前配置是否可用,提供详细的错误信息

  • 自定义模型:支持使用自定义模型名称

  • 头像显示:为用户和机器人消息显示不同的头像

  • 标签支持:支持处理 标签,显示为可折叠的思路过程

  • 数学公式支持:支持简单的数学公式显示

系统要求

  • PHP 5.6+

  • 浏览器(支持现代 JavaScript,如 Chrome、Firefox、Edge 等)

安装和使用

1. 克隆项目

git clone https://gitee.com/web/ai-php-demo.gitcd ai-php-demo

2. 启动本地服务器

使用 PHP 内置服务器:

php -S localhost:8000

或使用其他 Web 服务器,将项目目录设置为网站根目录。

3. 访问演示页面

在浏览器中打开:

http://localhost:8000

4. 配置 API 参数

  1. 点击 "设置" 标签页

  2. 选择 API 类型(OpenAI 或 Ollama)

  3. 填写相应的参数:

    • OpenAI:需要填写 API Key

    • Ollama:无需 API Key,使用默认 URL 即可

  4. 点击 "保存设置" 按钮

5. 获取模型列表

点击 "获取模型列表" 按钮,系统会自动获取并填充可用的模型。

6. 测试连接

点击 "测试连接" 按钮,系统会测试当前配置是否可用,并提供详细的错误信息。

7. 开始聊天

返回 "聊天" 标签页,在输入框中输入消息,点击 "发送" 按钮即可开始聊天。

API 接口文档

1. 聊天接口

请求方式:POST

请求 URL/api.php

请求参数

参数类型必选描述
messagestring用户消息内容
settingsobjectAPI 设置
settings.apiTypestringAPI 类型,可选值:openai, ollama,默认:openai
settings.apiKeystringOpenAI API Key,使用 OpenAI 时必选
settings.apiUrlstringAPI URL,默认:OpenAI 使用 https://api.openai.com/v1/chat/completions,Ollama 使用 http://localhost:11434/api/chat
settings.modelstring模型名称
settings.temperaturenumber温度参数,默认:0.7
settings.maxTokensnumber最大 tokens,默认:1000
settings.systemPromptstring系统提示,默认:你是一个 AI 的助手。
chatHistoryarray对话历史,格式:[{role: "user", content: "消息内容"}, {role: "assistant", content: "消息内容"}]
streamboolean是否使用流式响应,默认:true

请求示例

{
  "message": "你好",
  "settings": {
    "apiType": "openai",
    "apiKey": "your-api-key",
    "model": "gpt-3.5-turbo",
    "temperature": 0.7,
    "systemPrompt": "你是一个 AI 的助手。"
  },
  "chatHistory": [],
  "stream": true
}

响应

  • 流式响应:逐块返回 AI 生成的内容

  • 非流式响应:一次性返回完整的 AI 生成内容

错误响应

当请求失败时,会返回错误信息,例如:

错误:API Key 不能为空
错误:HTTP 状态码 401

2. 获取模型列表接口

请求方式:POST

请求 URL/api.php

请求参数

参数类型必选描述
actionstring固定值:get_models
apiTypestringAPI 类型,可选值:openai, ollama
apiKeystringOpenAI API Key,使用 OpenAI 时必选
apiUrlstringAPI URL,默认:OpenAI 使用 https://api.openai.com/v1/models,Ollama 使用 http://localhost:11434/api/tags

请求示例

{  "action": "get_models",  "apiType": "openai",  "apiKey": "your-api-key"}

响应示例

{
  "success": true,
  "models": [
    {
      "name": "gpt-3.5-turbo",
      "model": "gpt-3.5-turbo"
    },
    {
      "name": "gpt-4",
      "model": "gpt-4"
    }
  ]
}


错误响应示例

{  "success": false,  "error": "API Key 不能为空"}

项目结构

ai-php-demo/
├── index.html    # 前端页面
├── api.php       # 后端处理脚本
└── README.md     # 说明文档

技术实现

前端

  • HTML5:页面结构

  • CSS3:样式设计,包括响应式布局和美观的聊天界面

  • JavaScript:交互逻辑,包括消息发送、流式响应处理、Markdown 解析等

  • Fetch API:发送 HTTP 请求到后端

  • localStorage:存储设置和对话历史

  • ReadableStream API:处理流式响应

后端

  • PHP 5.6+:处理 API 请求

  • cURL:发送 HTTP 请求到 OpenAI 或 Ollama API

  • 流式响应:实现实时消息返回

  • 类结构:使用 OpenAIChat 类封装所有功能,便于直接调用

核心功能实现

  1. 流式响应

    • 前端使用 ReadableStream API 处理流式数据

    • 后端使用 cURL 的 CURLOPT_WRITEFUNCTION 回调函数处理流式响应

  2. Markdown 解析

    • 前端实现了完整的 Markdown 解析功能

    • 支持表格、代码块、列表、引用等常见 Markdown 语法

  3. 连续会话

    • 前端维护对话历史数组

    • 每次发送消息时包含历史消息

    • 后端处理历史消息,确保 AI 能够理解上下文

  4. 标签支持

    • 前端实现了 标签的解析和处理

    • 显示为可折叠的思路过程区块

  5. 错误处理

    • 前端和后端都实现了详细的错误处理

    • 测试连接功能提供详细的错误信息

常见问题

1. 连接失败

  • OpenAI:检查 API Key 是否正确,网络是否能访问 OpenAI API

  • Ollama:检查 Ollama 服务是否运行,URL 是否正确

2. 模型列表获取失败

  • OpenAI:确保 API Key 有足够的权限

  • Ollama:确保 Ollama 服务正在运行

3. 流式响应不工作

  • 检查浏览器是否支持 ReadableStream API

  • 确保服务器配置支持长连接

4. Markdown 表格解析问题

  • 确保表格格式正确,使用 | 分隔单元格

  • 表头和分隔线之间不要有空白行

5. 对话历史过长

  • 系统会自动限制对话历史的长度,只保留最近的 10 条消息

  • 可以点击 "清空历史" 按钮手动清空对话历史


扫描二维码推送至手机访问。

版权声明:本文由小刚刚技术博客发布,如需转载请注明出处。

本文链接:https://blog.bitefu.net/post/729.html

分享给朋友:

“AI Chat 演示程序 支持 OpenAI 和 Ollama API,实现了流式响应、Markdown 格式支持、连续会话和 标签处理” 的相关文章

解决 SVN Skipped 'xxx' -- Node remains in conflict

更新命令:svn up提示代码:意思就是说 ,这个文件冲突了,你要解决下Updating '.': Skipped 'data/config.php' -- …

[Windows] Adobe Flash Player 34.0.0.92及可用版修改方法

[Windows] Adobe Flash Player 34.0.0.92及可用版修改方法

随着 2021 年的到来,Adobe Flash Player 也迎来了告别,Adobe 在 2020 年 12 月 31 日后将不再支持 Flash Player。其实早在 2017 年,Adobe 公司就已宣布,计划在 2020 年底逐…

超高性比的斐讯盒子T1,刷第三方YYF固件机教程超级详细版

超高性比的斐讯盒子T1,刷第三方YYF固件机教程超级详细版

家里面买了斐讯盒子T1,必不可少的就是刷机,刷机一直爽,一直刷机一直爽,这样的快乐一般人体会不到。原来斐讯盒子N1,T1,还有斐讯K2P路由器也变成了性价比超高的东东,而且众多大神也带来了超多可玩性非常高的固件和破解。楼主今天扒到了相关超高…

centos 配置Let's Encrypt 泛域名https证书

centos 配置Let's Encrypt 泛域名https证书

前言2018年1月份Letsencrypt可以申请泛域名证书,这让我们部署多域名、多站点https省了很多功夫,终于可以不用维护多个域名的https证书。笔者以acme.sh为例,手把手教你配置https证书~本教程适用于centos 6.…

系统小技巧:微软版“Ghost” Windows FFU 系统安装还原

系统小技巧:微软版“Ghost” Windows FFU 系统安装还原

在日常的维护中,系统的备份和还原是大家经常需要操作的事情。虽然Windows 10已经提供很多的工具,如系统还原、WIM备份/还原,VHD备份等。不过这些工具大多是基于文件的备份/还原。我们以前经常的使用的Ghost则是基于扇区的备份/还原…

PHP AES加解密 (ECB模式/sha1prng算法/PKCS5Padding和PKCS7Padding补码) ECB 模式不需求设置 iv

php7+ 版本/**  * [AesSecurity aes加密,支持PHP7+]  * 算法模式:ECB  * 密钥长度:128  * 补…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。