功能说明

AI 历史对话 基于请求头实现用户身份识别,并自动缓存对应用户的历史对话,且在后续对话中自动填充到上下文。同时支持用户主动查询历史对话。

Note

路径后缀匹配 ai-history/query 时,会返回历史对话

运行属性

插件执行阶段:默认阶段 插件执行优先级:650

配置字段

名称数据类型填写要求默认值Description
identityHeaderstringoptional”Authorization”身份解析对应的请求头,可用 Authorization,X-Mse-Consumer等
fillHistoryCntintegeroptional3默认填充历史对话轮次
cacheKeyPrefixstringoptional”higress-ai-history:“Redis缓存Key的前缀
cacheTTLintegeroptional0缓存的过期时间,单位是秒,默认值为0,即永不过期
redis.serviceNamestringrequired-redis 服务名称,带服务类型的完整 FQDN 名称,例如 my-redis.dns、redis.my-ns.svc.cluster.local
redis.servicePortintegeroptional6379redis 服务端口
redis.timeoutintegeroptional1000请求 redis 的超时时间,单位为毫秒
redis.usernamestringoptional-登陆 redis 的用户名
redis.passwordstringoptional-登陆 redis 的密码

用法示例

配置信息

  1. redis:
  2. serviceName: my-redis.dns
  3. timeout: 2000

请求示例

自动填充请求示例:

第一轮请求:

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. -H Authorization: Bearer sk-Nzf7RtkdS4s0zFyn5575124129254d9bAf9473A5D7D06dD3
  4. data-raw ‘{“model”:”qwen-long”,”frequency_penalty”:0,”max_tokens”:800,”stream”:false,”messages”:[
  5. {
  6. role”: user”,
  7. content”: Higress 可以替换 Nginx 吗?”
  8. }
  9. ],”presence_penalty”:0,”temperature”:0.7,”top_p”:0.95}’

请求填充之后:

第一轮请求,无填充。和原始请求一致。

第一轮响应:

  1. {
  2. id”: 02f4c621-820e-97d4-a905-1e3d0d8f59c6”,
  3. choices”: [
  4. {
  5. index”: 0,
  6. message”: {
  7. role”: assistant”,
  8. content”: Higress Nginx 虽然都有作为网关的功能,但它们的设计理念和应用场景有所不同。Nginx 更多是作为一个高性能的 HTTP 和反向代理服务器被大家熟知,而 Higress 是一个云原生网关,除了基础的路由转发能力外,还集成了服务网格、可观测性、安全管理等众多云原生特性。\n\n因此,如果你想在云原生环境中部署应用,并且希望获得现代应用所需的高级功能,比如服务治理、灰度发布、熔断限流、安全认证等功能,那么 Higress 可以作为一个很好的 Nginx 替代方案。但如果是较为简单的静态网站或者仅需要基本的反向代理功能,传统的 Nginx 配置可能会更为简单直接。”
  9. },
  10. finish_reason”: stop
  11. }
  12. ],
  13. created”: 1724077770,
  14. model”: qwen-long”,
  15. object”: chat.completion”,
  16. usage”: {
  17. prompt_tokens”: 7316,
  18. completion_tokens”: 164,
  19. total_tokens”: 7480
  20. }
  21. }

第二轮请求:

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. -H Authorization: Bearer sk-Nzf7RtkdS4s0zFyn5575124129254d9bAf9473A5D7D06dD3
  4. data-raw ‘{“model”:”qwen-long”,”frequency_penalty”:0,”max_tokens”:800,”stream”:false,”messages”:[
  5. {
  6. role”: user”,
  7. content”: Spring Cloud GateWay 呢?”
  8. }
  9. ],”presence_penalty”:0,”temperature”:0.7,”top_p”:0.95}’

请求填充之后:

第二轮请求,自动填充上一轮的历史对话。

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. -H Authorization: Bearer sk-Nzf7RtkdS4s0zFyn5575124129254d9bAf9473A5D7D06dD3
  4. data-raw ‘{“model”:”qwen-long”,”frequency_penalty”:0,”max_tokens”:800,”stream”:false,”messages”:[
  5. {
  6. role”: user”,
  7. content”: Higress 可以替换 Nginx 吗?”
  8. },
  9. {
  10. role”: assistant”,
  11. content”: Higress Nginx 虽然都有作为网关的功能,但它们的设计理念和应用场景有所不同。Nginx 更多是作为一个高性能的 HTTP 和反向代理服务器被大家熟知,而 Higress 是一个云原生网关,除了基础的路由转发能力外,还集成了服务网格、可观测性、安全管理等众多云原生特性。\n\n因此,如果你想在云原生环境中部署应用,并且希望获得现代应用所需的高级功能,比如服务治理、灰度发布、熔断限流、安全认证等功能,那么 Higress 可以作为一个很好的 Nginx 替代方案。但如果是较为简单的静态网站或者仅需要基本的反向代理功能,传统的 Nginx 配置可能会更为简单直接。”
  12. },
  13. {
  14. role”: user”,
  15. content”: Spring Cloud GateWay 呢?”
  16. }
  17. ],”presence_penalty”:0,”temperature”:0.7,”top_p”:0.95}’

每轮请求只需要带上当前问题,以及当前需要填充的历史对话轮数,即可自动完成历史对话填充。

获取历史数据示例:

  1. -H Accept: application/json, text/event-stream \
  2. -H Content-Type: application/json \
  3. -H Authorization: Bearer sk-Nzf7RtkdS4s0zFyn5575124129254d9bAf9473A5D7D06dD3

响应示例:

  1. [
  2. {
  3. role”: user”,
  4. content”: Higress 可以替换 Nginx 吗?”
  5. },
  6. {
  7. role”: assistant”,
  8. content”: Higress Nginx 虽然都有作为网关的功能,但它们的设计理念和应用场景有所不同。Nginx 更多是作为一个高性能的 HTTP 和反向代理服务器被大家熟知,而 Higress 是一个云原生网关,除了基础的路由转发能力外,还集成了服务网格、可观测性、安全管理等众多云原生特性。\n\n因此,如果你想在云原生环境中部署应用,并且希望获得现代应用所需的高级功能,比如服务治理、灰度发布、熔断限流、安全认证等功能,那么 Higress 可以作为一个很好的 Nginx 替代方案。但如果是较为简单的静态网站或者仅需要基本的反向代理功能,传统的 Nginx 配置可能会更为简单直接。”
  9. },
  10. {
  11. role”: user”,
  12. content”: SpringCloud GateWay 呢?”
  13. },
  14. {
  15. role”: assistant”,
  16. content”: “与 Spring Cloud Gateway 相比,Higress 也是一个 API 网关,但它们之间存在一些关键的区别:\n\n- 设计理念Spring Cloud Gateway 主要针对微服务架构中的服务间通信和路由,它作为 Spring Cloud 生态系统的一部分,更加专注于 Java 开发者的微服务场景。而 Higress 作为云原生网关,不仅关注服务间的通信,还提供了一系列云原生功能,如服务网格、可观测性、安全管理等。\n- 部署方式Spring Cloud Gateway 通常作为微服务应用的一部分运行在应用服务器内,而 Higress 通常以独立的微服务或者容器化服务的形式部署在 Kubernetes 环境中,适用于现代云原生部署模型。\n- 扩展性和集成Higress 提供了更广泛的集成和支持,例如与 IstioKubernetes 等生态系统的深度集成,这使得它可以更好地适应复杂的云原生环境。\n\n因此,如果你的应用程序是基于 Spring Cloud 构建的,并且你想要一个轻量级的、易于集成的服务网关,那么 Spring Cloud Gateway 可能是一个合适的选择。但是,如果你正在构建或重构云原生应用,并且需要更强大的路由规则、服务治理、可观测性等功能,那么 Higress 将是一个更好的选择。”
  17. },
  18. {
  19. role”: user”,
  20. content”: Higress 可以替换 Nginx 吗?”
  21. },
  22. {
  23. role”: assistant”,
  24. content”: Higress Nginx 虽然都有作为网关的功能,但它们的设计理念和应用场景有所不同。Nginx 更多是作为一个高性能的 HTTP 和反向代理服务器被大家熟知,而 Higress 是一个云原生网关,除了基础的路由转发能力外,还集成了服务网格、可观测性、安全管理等众多云原生特性。\n\n因此,如果你想在云原生环境中部署应用,并且希望获得现代应用所需的高级功能,比如服务治理、灰度发布、熔断限流、安全认证等功能,那么 Higress 可以作为一个很好的 Nginx 替代方案。但如果是较为简单的静态网站或者仅需要基本的反向代理功能,传统的 Nginx 配置可能会更为简单直接。”
  25. }
  26. ]

返回三个历史对话,如果未传入 cnt 默认返回所有缓存历史对话。