使用LiveKit+Qwen2.5+Deepgram搭建智能语音助手

1个月前 (04-07)学习150

公司什么都想做,前几天领导想做一个语音问答助手,通过语音问问题后,可以语音回答问题。

然后就开始折腾了,最开始想自己搭一套语音识别工具,然后调用ollama的llm模型,最后再搭一套tts的服务,来实现。

悲催的第一步就卡住了,本地测试的语音识别效果还行,部署到服务器上测试就各种识别不准确,不是少识别就是乱识别,很烦人。后来换了个思路,在往上找找有没有开源的直接可以使用的框架。

额,赶巧了,LiveKit Agents最近刚发布,就是提供在线语音视频智能体的。

LiveKit官网文档

GitHub

 

就试了下,效果还可以。只是有个缺点,现在调用的stt和tts模型只有第三方服务商的,我使用的deepgram的,模型调用的本地ollama的qwen2.5:latest。

接下来就是折腾步骤了。

一、部署LiveKit服务

打开Livekit github地址

 

我是在电脑商测试的,所以下载这个,按服务器和cpu类型选择对应的包。

下载下来解压

 

在安装目录运行以下命令启动服务

livekit-server --dev

有报错不影响,能正常显示以下内容就行

 

二、安装客户端

我使用的python代码,打开python sdk 的 GitHub地址

下载下来以后,安装环境。这个在GitHub上有详细说明,按步骤来就行。

安装好以后用他给的示例代码,创建token

from livekit import api
import os

token = api.AccessToken('devkey','secret') \
    .with_identity("identity") \
    .with_name("user1") \
    .with_grants(api.VideoGrants(
        room_join=True,
        room="my-room",
    )).to_jwt()

print(token)

创建房间

from livekit import api
import asyncio

async def main():
    lkapi = api.LiveKitAPI("http://127.0.0.1:7880", "devkey", "secret")
    room_info = await lkapi.room.create_room(
        api.CreateRoomRequest(name="my-room"),
    )
    print(room_info)
    results = await lkapi.room.list_rooms(api.ListRoomsRequest())
    print(results)
    await lkapi.aclose()

asyncio.run(main())

输出结果,房间名字是 my-room

sid: "RM_jYvSNCHDhc9n"
name: "my-room"
empty_timeout: 300
creation_time: 1743989876
turn_password: "WIAbJXQeI7GLpc6nFxFY556S28HBFj3XYQvhl9M3zTV"
enabled_codecs {
  mime: "audio/opus"
}
enabled_codecs {
  mime: "audio/red"
}
enabled_codecs {
  mime: "video/VP8"
}
enabled_codecs {
  mime: "video/H264"
}
enabled_codecs {
  mime: "video/VP9"
}
enabled_codecs {
  mime: "video/AV1"
}
enabled_codecs {
  mime: "video/rtx"
}
departure_timeout: 20
creation_time_ms: 1743989876781

rooms {
  sid: "RM_jYvSNCHDhc9n"
  name: "my-room"
  empty_timeout: 300
  creation_time: 1743989876
  turn_password: "WIAbJXQeI7GLpc6nFxFY556S28HBFj3XYQvhl9M3zTV"
  enabled_codecs {
    mime: "audio/opus"
  }
  enabled_codecs {
    mime: "audio/red"
  }
  enabled_codecs {
    mime: "video/VP8"
  }
  enabled_codecs {
    mime: "video/H264"
  }
  enabled_codecs {
    mime: "video/VP9"
  }
  enabled_codecs {
    mime: "video/AV1"
  }
  enabled_codecs {
    mime: "video/rtx"
  }
  departure_timeout: 20
  creation_time_ms: 1743989876781
}

如果有以上结果就表示服务创建成功了。

三、网站测试

这一步主要是为了可以直观的看到运行结果,并且为后续语音聊天做准备

打开 测试网站

把第二部创建的token和访问地址放到对应位置,注意地址是ws开头,不要按提示的来。点击连接,如果出现以下内容,说明通了。

四、Agents准备工作

这一步是准备需要的环境,Ollama安装就不介绍了,网上很多,有个需要注意的点是,在选模型的时候需要有tools的。就像下面这样的。因为调用需要。

我选的是qwen2.5 7b的的也可以选择其他的,看你电脑配置。

准备 deepgram 的 api_key ,因为stt和tts都使用的第三方服务的,所以需要申请api_key

支持的所有stt和tts的服务都在这儿,也可以选择其他的。我为了方便选的deepgram。

登录deepgram 官网

点API Keys,创建新的api key。

五、搭建Live Agents

我还是使用python,git地址.,按照git文档安装环境就行。

以下是我写的一个示例 csagtnes.py,修改对应的apikey就行。

from livekit.agents import (
    JobContext,
    RunContext,
    WorkerOptions,
    cli,
    function_tool,
)
from livekit.agents.voice import AgentSession, Agent, room_io
from livekit.plugins import deepgram, openai, silero,cartesia

@function_tool
async def lookup_weather(
    context: RunContext,
    location: str,
):
    """Used to look up weather information."""

    return {"weather": "sunny", "temperature": 70}


async def entrypoint(ctx: JobContext):
    await ctx.connect()

    agent = Agent(
        instructions="You are a friendly voice assistant built by LiveKit.",
        tools=[lookup_weather],
    )
    session = AgentSession(
        vad=silero.VAD.load(),
        stt=deepgram.STT(model="nova-2-finance",api_key='aaaaaaaa',language='zh-CN'),
        llm=openai.LLM.with_ollama(model="qwen2.5:latest",base_url='http://127.0.0.1:11434/v1'),
        tts=deepgram.TTS(api_key='aaaaaaaa'),
    )

    await session.start(agent=agent, room=ctx.room,room_input_options=room_io.RoomInputOptions())
    await session.generate_reply()


if __name__ == "__main__":
    cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))

然后在命令行执行以下代码。

python csagtnes.py connect --url="ws://localhost:7880" --api-key="devkey" --api-secret="secret" --room="my-room" --log-level="DEBUG" 

执行完以后的效果

然后就可以在上面那个测试的网站看到又有新用户加进来了,接下来就可以你一句他一句的愉快聊天了。

在命令行可以看到实时转中文的记录,当然看不懂,他是base64的。

到此,还有最后一个问题没解决,就是他回答用的是英文语音,我找了下,deepgram目前对接的tts模型都是英文的,还没有中文,有兴趣的小伙伴可以找找其他服务商的tts服务,看有没有支持中文语音的。

分享到: