English | 中文
积流成江 (Streams to River)是一款英语学习应用。该产品的初衷是通过将日常所见的英语单词、句子和相关的上下文进行记录、提取和管理, 结合 艾宾浩斯遗忘曲线,进行周期性的学习和记忆。
在开发过程中,深度采用了 TRAE 进行代码的开发和调试、注释和单测的编写,通过 coze workflow 快速集成了图像转文字、实时聊天、语音识别、单词划线等大模型能力。
Streams to River 是一个基于 Hertz 和 Kitex 框架构建的单词学习与语言处理微服务系统。该系统提供从 API 服务到 RPC 实现的完整解决方案, 包含用户认证、单词管理、复习进度跟踪、实时聊天、语音识别和图像转文本等核心功能模块。
系统采用前后端分离的微服务架构,主要分为以下几层:

| 类别 | 技术/框架 | 说明 |
|---|---|---|
| HTTP 框架 | Hertz | 高性能的 Golang HTTP 框架,用于构建 API 服务 |
| RPC 框架 | Kitex | 高性能、强可扩展的 Golang RPC 框架,用于构建微服务 |
| 数据存储 | MySQL | 关系型数据库,用于持久化存储用户数据、单词信息等 |
| 缓存服务 | Redis | 内存数据库,用于缓存热点数据,提高系统性能 |
| 通信协议 | HTTP/RESTful | 用于前端与 API 服务层的通信 |
| RPC | 用于 API 服务层与 RPC 服务层的通信 | |
| WebSocket | 用于实时通信,如语音识别服务 | |
| Server-Sent Events (SSE) | 用于流式通信,如实时聊天功能 | |
| AI/ML 集成 | 大语言模型 (LLM) | 用于智能聊天、内容生成和单词高亮等功能 |
| 语音识别 (ASR) | 用于将语音转换为文本 | |
| 图像处理 | 用于图像转文本功能 | |
| 监控与可观测性 | OpenTelemetry | 用于系统监控、指标收集和性能分析 |
| 安全 | JWT | 用于用户认证和授权 |
| 部署与服务发现 | 服务注册与发现 | 用于微服务的注册和发现 |
| 动态配置管理 | 用于系统配置的动态管理 |
用户管理模块负责用户的注册、登录和信息管理,主要功能包括:
单词学习系统是系统的核心功能模块,负责单词的管理、复习和标签管理,主要功能包括:
智能聊天模块基于大语言模型 (LLM),提供实时聊天功能,主要特点包括:
多模态处理模块集成了语音识别和图像转文本功能,为用户提供多种输入方式:
文档服务模块提供系统的 API 文档和使用指南,主要功能包括:
系统监控与管理模块负责系统的监控、配置管理和日志处理,主要功能包括:
更多参见 repome
更新配置文件 stream2river
LLM:
ChatModel:
# 你需要到火山方舟平台 https://console.volcengine.com/ark/region:ark+cn-beijing/model/detail?Id=doubao-1-5-pro-32k 申请一个豆包最新的文本Pro模型,获取他们最新的 api_key 和 model_id
APIKey: ""
Model: ""
Coze:
BaseURL: "https://api.coze.cn"
# 以下字段参考 rpcservice/biz/chat/coze/README.md 配置
WorkflowID: ""
Auth: ""
Token: ""
ClientID:
PublishKey:
PrivateKey:
更新配置文件 stream2river
LLM:
AsrModel:
# 可以先提前阅读"一句话识别"接入文档:https://www.volcengine.com/docs/6561/80816,并且前往火山方舟平台接入一句话识别能力 https://console.volcengine.com/speech/service/15,并填写平台提供的以下AppID / Token / Cluster
AppID: ""
Token: ""
Cluster: ""
VisionModel:
# 你需要到火山方舟平台 https://console.volcengine.com/ark/region:ark+cn-beijing/model/detail?Id=doubao-1-5-vision-lite 申请一个豆包最新的Vision lite模型,获取他们最新的 api_key 和 model_id
APIKey: ""
Model: ""
# JWT_SECRET 用于签署和验证 JWT 令牌,必须是一个长且随机的字符串
# 建议使用至少32字节(256位)的随机字符串
# 可以使用以下命令生成安全随机字符串:
# openssl rand -base64 32
# 或者在Python中使用: import secrets; print(secrets.token_urlsafe(32))
JWT_SECRET: your_secret_key
提前安装好 docker 和 docker-compose,见 https://docs.docker.com/engine/install/ 和 https://docs.docker.com/compose/install/ 。
启动 docker service后,在项目根目录执行 ./dockerfile/run.sh,等待服务启动即完成后端服务搭建。
参考 client/README_CN.md 文档。
参考 Coze 配置 文档。
实现一个获取待背单词的功能。其基本逻辑如下:
- 从 words_recite_record 表里面,取出当前 user(user_id为调用者传参)的所有记录里面 next_review_time 早于当前时间的所有记录
- 每一条记录,通过他们的 word_id 从 words 表里面拿到详细信息。
- 每条记录,生成3种类型的复习题目。每个题目,包含题干和4个答案选项。
- 第一种类型:选择正确的中文含义,实现逻辑为,题干是 words 表里面的 word_name。选项包含两部分,其中一个是 words 表里面这个单词的 explains 选项。另外从 answer_list 数据表里面再随机找3个答案。选择方法为,先从 answer_list 表里面,找到 user 等于当前用户的记录中,order_id 最大的一个。然后随机从1到最大的 order_id 里面选3个 order_id,把这3条记录中的 description 字段作为选项。注意,还要实现一个除重逻辑
- 第二种类型:选择正确的英文含义,可定义为常量 CHOOSE_EN。实现逻辑和上面的相似。区别为:题干是 words 表里面的 explains。选项是 answer_list 里面的 word_name
- 第三种类型:根据读音选择正确的中文含义,可定义常量 PRONOUNCE_CHOOSE,实现逻辑也和第一个类似。区别为:题干是 words 表里面的 pronounce_us。选项是 answer_list 里面的 description
生成的代码链接:review_list.go
版权所有 (c) 2025 Bytedance Ltd. and/or its affiliates。保留所有权利。
根据 MIT 许可证授权。