MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

基于LLM的红绿灯信号控制(logisim红绿灯设计)

2025-01-29 15:58 huorong 精选文章 4 ℃ 0 评论

--0 背景

最近项目中考虑使用LLM来进行红绿灯信号控制,考虑的是这种涉及调度策略,逻辑分析的工作,交由LLM来执行分析效果会不会好一点,因此做了这个尝试。

--1 框架设计

该系统的核心框架由以下几个模块组成:

Traffic Flow Sim: 交通流仿真模块,演绎交通车在路口的交汇、冲突以及收到红绿灯之后的响应。

LLMClient:负责与LLM模型的交互,支持同步和异步调用,确保系统能够高效地处理多个请求。

LLMClientManager:管理多个LLM客户端实例,支持动态注册、注销和查询客户端,确保系统的灵活性和可扩展性。

TscLLMPromptGenerator:根据输入的交通数据生成符合LLM要求的提示词,两段提示词 user 和 system。

TextUtils:提供文本处理工具,如去除代码块、JSON解析等,确保LLM输出的结果能够被正确解析和处理。

gRPC:通过GRPC协议与外部系统进行通信,提供高效的远程调用接口,确保系统能够与其他交通管理系统无缝集成。

--2 通讯设计

系统采用GRPC(Google Remote Procedure Call)作为通讯协议,具有以下优势:

  • 高效性:GRPC基于HTTP/2协议,支持多路复用和流式传输,能够高效处理大量并发请求。
  • 跨语言支持:GRPC支持多种编程语言,便于与其他系统进行集成。
  • 强类型接口:通过Protobuf定义接口和消息格式,确保通讯的可靠性和一致性。

在系统中,GRPC服务负责接收外部系统的交通数据请求,调用LLM模型生成信号灯控制方案,并将结果返回给调用方。通过GRPC的多线程处理机制,系统能够同时处理多个请求,确保高并发场景下的性能。

--3 提示词设计

提示词设计是系统的关键环节,直接影响LLM模型的理解和输出质量。系统采用了两段式提示词设计,基于proto定义:

  • 系统提示词(System Prompt):定义了交通信号灯控制的任务规则、思考步骤、流向类型和组合定义等,确保模型能够准确理解交通信号控制的复杂逻辑。
  • 用户提示词(User Prompt):根据实时交通数据动态生成,包含当前路口ID、流向组合、相位信息、交通流量、历史相位和约束条件等,确保模型能够基于最新数据生成合理的信号灯控制方案。

系统能够将复杂的交通信号控制任务转化为LLM模型能够理解的提示词,确保模型输出的准确性和合理性。

--4 提示词生成

提示词生成模块(TscLLMPromptGenerator)负责将输入的交通数据转换为符合LLM要求的提示词。该模块的主要功能包括:

  • 加载提示词模板:从文件中加载系统提示词和用户提示词模板。
  • 格式化交通数据:将输入的交通数据(如路口ID、流向组合、当前相位、交通流量等)格式化,填充到用户提示词模板中。
  • 生成最终提示词:将系统提示词和格式化后的用户提示词组合成最终的提示词列表,供LLM模型使用。

通过这种模块化设计,系统能够灵活应对不同的交通场景,确保提示词的生成过程高效且准确。

--5 LLM调用封装

LLM调用封装模块(LLMClient)负责与LLM模型的交互,支持同步和异步调用。其主要功能包括:

  • 同步调用:通过同步接口调用LLM模型,适用于单次请求场景。
  • 异步调用:通过异步接口调用LLM模型,适用于高并发场景,能够同时处理多个请求。
  • 模型信息展示:提供模型信息的展示功能,便于系统调试和监控。
  • 支持多种模型调用:支持本地Ollama 和 远程API 调用,通过yaml文件管理模型
models:
  deepseek-chat:
    base_url: "https://api.deepseek.com/v1"
    model: "deepseek-chat"
    api_key: "your-deepseek-api-key"
  ollama-local:
    base_url: "http://localhost:11434"
    model: "ollama-model"
    api_key: "your-ollama-api-key"

通过封装LLM调用接口,系统能够灵活选择同步或异步调用方式,确保在不同场景下的性能和效率。

--6 整体运行效果

  1. 在实际运行中,系统能够根据实时交通数据动态生成信号灯控制方案,提高了交通通行效率同时保证各相位通行公平性,但是似乎对于通行效率而言,LLM会比较容易忽略公平性。
  2. 单次调用耗时大约是4s ~ 6s,耗时还是有的,采用异步调用时,在本次相位结束前10s调用LLM请求。
  3. 代码中支持了并发的操作,接下来会尝试让LLM处理多个路口,看效果如何。

Tags:yaml 格式化

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言