Git Product home page Git Product logo

binnong / meet-libai Goto Github PK

View Code? Open in Web Editor NEW
995.0 9.0 111.0 12.4 MB

​ 李白 :bust_in_silhouette: 作为唐代杰出诗人,其诗歌作品在**文学史上具有重要地位。近年来,随着数字技术和人工智能的快速发展,传统文化普及推广的形式也面临着创新与变革。国内外对于李白诗歌的研究虽已相当深入,但在数字化、智能化普及方面仍存在不足。因此,本项目旨在通过构建李白知识图谱,结合大模型训练出专业的AI智能体,以生成式对话应用的形式,推动李白文化的普及与推广。

License: GNU General Public License v3.0

HTML 3.95% Python 95.13% Shell 0.92%

meet-libai's Introduction

libai avatar

「遇见李白」meet-libai logo meet-libai


Release Notes License: GPL v3 Open in Dev Containers Open in GitHub Codespaces GitHub star chart Dependency Status Open Issues

🚦 哔哩哔哩详细视频介绍和引导

1. 项目背景

​ 李白 👤 作为唐代杰出诗人,其诗歌作品在**文学史上具有重要地位。近年来,随着数字技术和人工智能的快速发展,传统文化普及推广的形式也面临着创新与变革。国内外对于李白诗歌的研究虽已相当深入,但在数字化、智能化普及方面仍存在不足。因此,本项目旨在通过构建李白知识图谱,结合大模型训练出专业的AI智能体,以生成式对话应用的形式,推动李白文化的普及与推广。

​ 随着人工智能技术的发展,知识图谱技术也得到了广泛的应用。知识图谱是一种基于语言知识库的语义表示模型,它能够将结构化的知识表示为图的形式,从而使得机器能够更好地理解和处理自然语言。 ​ 在知识图谱技术的基础上,开发一个问答系统可以利用知识图谱中的知识来回答用户的问题。该系统可以利用知识图谱来构建以诗人李白为核心的古诗词文化知识图谱 🌐 ,并实现基于该知识图谱的问答功能。另外,对图谱进行可视化探索,以更好地理解知识图谱的结构和内容。同时提供,大模型以及rag检索增强的代码实现。

2. 项目目标

2.1 🥇 收集整理李白诗歌及其相关文化资料:通过文献调研、数据挖掘等方法,全面收集李白的诗歌作品、生平事迹、历史背景等相关资料,为构建李白知识图谱提供基础数据。

2.2 🥈 构建李白知识图谱:利用自然语言处理、信息抽取等技术,对收集到的资料进行整理和分析,构建出一个完整的李白知识图谱。该图谱将涵盖李白的生平、诗歌风格、艺术成就等多个方面,为后续的AI智能体训练提供丰富的知识库。

2.3 🥉 训练专业的AI智能体:基于构建好的李白知识图谱,利用大模型技术训练出具有专业水平的AI智能体。该智能体将具备对李白诗歌的深入理解和鉴赏能力,能够与用户进行高质量的互动。

2.4 4️⃣开发生成式对话应用:在训练好的AI智能体基础上,开发一款生成式对话应用。该应用将能够实现与用户的实时互动,为用户提供个性化的李白诗歌鉴赏体验。

3. 项目技术栈

  • Python

  • PyTorch

  • Transformers

  • fastAPI

  • DGL

  • DGL-KE

  • Neo4j

  • AC自动机

  • RAG

  • langchain

  • edge-tts

  • modelscope

  • gradio

  • zhipuai

4. 项目功能

  • 数据预处理:对古诗词数据进行清洗、分词、构建知识图谱

  • 知识图谱构建:利用知识图谱技术构建以李白为核心的古诗词文化知识图谱

    • 问答系统构建:利用知识图谱中的知识来回答用户的问题
      • 图谱可视化:对知识图谱进行可视化探索,以更好地理解知识图谱的结构和内容
  • ♨️图谱问答思路:

    • 😸普通流式问答

    • ♻️ 关系型问答:

      • 李白和杜甫的关系是什么
    • 📦属性问答:

      • 李白生于哪一年
    • 🎁 生成语音、图像:

      • 请生成李白在江边喝酒的图片

      • 请生成春望这首诗的语音

5. 项目现状

  • 构建了一个基于知识图谱的问答系统,该系统能够利用知识图谱中的知识来回答用户的问题。
  • 对图谱进行可视化探索,以更好地理解知识图谱的结构和内容。
  • 提供大模型以及rag检索增强的代码实现。

6. 项目挑战

  • 知识图谱的构建和维护
  • 问答系统的实现和优化
  • 图谱的可视化探索
  • 大模型以及rag检索增强的代码实现

7. 项目展望

  • 进一步优化问答系统的回答质量和效率
  • 探索其他类型的问答任务,如常识 问题、知识推理等
  • 持续更新和维护知识图谱,以保持其准确性、完整性和有效性

8. 项目技术架构

通过本项目的实施,我们不仅实现了基于知识图谱的问答系统,还积累了丰富的实践经验和知识图谱技术应用经验。在未来的工作中,我们将不断优化问答系统的回答质量和效率,并探索其他类型的问答任务,以满足更多用户的需求。同时,我们将继续更新和维护知识图谱,以保持其准确性、完整性和有效性,为知识图谱技术的发展和应用做出贡献 。以下是项目技术架构图: code_flow

9. 项目代码结构

请点击这里跳转,代码结构🏙️

10. 核心函数

get_ans


底层主要依赖

如何启动项目

1. 配置第三方大模型api key

​ :key:使用智普ai开放平台,请跳转到该平台,申请api key。然后,将api key填入.env文件中。

2. 创建python环境(>=python3.10)

  • 使用conda来管理python环境,所以请先安装conda (Install Conda):smile_cat:

  • 使用conda命令来创建python环境

    #Create a new environment: Use the following command to create a new Python environment with a specific vesion.(当然国内你可能需要配置conda和pip镜像)
    
    conda create --name myenv python=3.10
    
    #This will create a new environment named myenv with the specified Python version.
    #Activate the environment: Once the environment is created, you need to activate it. 
    
    conda activate myenv
    
  • 安装依赖包

    pip install -r requirements.txt

3. 建立图数据库Hello, World: Neo4j, Inc.

  • 请根据以下指引,安装neo4j

使用docker安装Docker · GitHub

You can start a Neo4j container like this:

docker run \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j/data:/data \
    neo4j:5.12.0

which allows you to access neo4j through your browser at http://localhost:7474.

This binds two ports (7474 and 7687) for HTTP and Bolt access to the Neo4j API. A volume is bound to /data to allow the database to be persisted outside the container.

By default, this requires you to login with neo4j/neo4j and change the password. You can, for development purposes, disable authentication by passing --env=NEO4J_AUTH=none to docker run.

  • 当然,也可以不使用docker,直接在你的操作系统上安装neo4j并启动服务即可。

  • 安装完成后,将数据导入neo4j 😈

⚠️注:由于数据的建立和规整涉及第三方版权,本项目不提供完整李白的数据,只提供示例数据

Cypher query 语句如下:

# 创建`李白`节点
CREATE (p:`人物`:`唐`{name: '李白', PersonId:32540})

# 创建‘高力士’节点
CREATE (p:`人物`:`唐`{name: '高力士', PersonId:32541})
                      
# 创建李白和高力士的关系
MATCH (a:`人物`:`唐` {PersonId: 32540}), (b:`人物`:`唐` {PersonId: 32541})
CREATE (a)-[r:`李白得罪高力士` {since: 2022, strength: 'strong', Notes: '《李太白全集》卷三五《李太白年譜》:天寶三載,甲申。(五月改"年"爲"載"。四十四歲)太白在翰林,代草王言。然性嗜酒,多沉飮,有時召令撰述,方在醉中,不可待,左右以水沃面,稍解,卽令秉筆,頃之而成。帝甚才之,數侍宴飮。因沉醉引足令高力士脫靴,力士恥之,因摘其詩句以激太眞妃。帝三欲官白,妃輒沮之。又爲張垍讒譖,公自知不爲親近所容,懇求還山,帝乃賜金放歸。又引《松窗錄》:會高力士終以脫靴爲深恥,異日,太眞妃重吟前詞,力士戲曰:"比以妃子怨李白深入骨髓,何反拳拳如是?"太眞妃驚曰:"何翰林學士能辱人如斯!"力士曰:"以飛燕指妃子,是賤之甚矣!"太眞妃深然之。上嘗三欲命李白官,卒爲宮中所捍而止。'}]->(b)
RETURN r

以上数据导入完毕之后,再导入元数据节点(改节点用于记录数据版本号的基本信息)

CREATE (meta_node:Meta{
    id: 'meta-001',
    title: 'libai-graph meta node',
    text: 'store some meta info',
    timestamp: datetime(),
    version: 1,
    status: 'active'
})
  • 确认neo4j数据正常之后,配置config文件(以config-local.yaml为例) 📟 (连接数据库的url,用户名,密码)
neo4j:
  url: bolt://localhost:7687
  database: neo4j
  username: neo4j
  password: *****
# 注意: 以上参数,根据你的数据库实际连接为准

4. 配置文件

有3个配置文件(根据你的需求,决定使用哪个配置,如果没有对应的配置文件,可以拷贝./config/config-local.yaml作为副本,再修改):

部署环境配置./config/config-deploy.yaml 测试环境配置./config/config-dev.yaml 本地开发配置./config/config-local.yaml

在项目根目录下**新建**.env文件作为环境变量配置,并在文件中指定启用哪个环境配置,下面给出一个完整的.env内容

#PY_ENVIRONMENT=dev
PY_ENVIRONMENT=local # 启用本地开发环境
#PY_ENVIRONMENT=deploy
PY_DEBUG=true

# ---------注意-----------------------------------
# 如下模型中只能使用其中的某一个模型,不能同时配置多个模型
# 去对应的官网申请api-key,并替换YOUR API-KEY
# 也可以使用ollama本地运行的模型,api-key设置为ollama
# ⚠️文生图的模型暂时使用zhipuai,因此要配置zhipuai的api-key
# -----------------------------------------------

# 智普ai
LLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
LLM_API_KEY=YOUR API-KEY
MODEL_NAME=glm-4

# kimi
#LLM_BASE_URL=https://api.moonshot.cn/v1
#LLM_API_KEY=YOUR API-KEY
#MODEL_NAME=moonshot-v1-8k

# 百川大模型
#LLM_BASE_URL=https://api.baichuan-ai.com/v1/
#LLM_API_KEY=YOUR API-KEY
#MODEL_NAME=Baichuan4

# 通义千问
#LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
#LLM_API_KEY=YOUR API-KEY
#MODEL_NAME=qwen-long

# 零一万物
#LLM_BASE_URL=https://api.lingyiwanwu.com/v1
#LLM_API_KEY=YOUR API-KEY
#MODEL_NAME=yi-large

# deepseek
# LLM_BASE_URL=https://api.deepseek.com
# LLM_API_KEY=ollama
# MODEL_NAME=deepseek-chat

# 豆包
#LLM_BASE_URL=https://ark.cn-beijing.volces.com/api/v3/
#LLM_API_KEY=YOUR API-KEY
# 注意:对于豆包api,model_name参数填入ENDPOINT_ID,具体申请操作在豆包api官网提供。
#MODEL_NAME=

# ollama
#LLM_BASE_URL=http://localhost:11434/v1/
#LLM_API_KEY=ollama
#MODEL_NAME=qwen2:0.5b

#文生图模型,暂时使用zhipuai
#OPENAI_API_KEY=YOUR API-KEY
ZHIPUAI_API_KEY=YOUR API-KEY

# 这里填入你的组织名
ORGANIZATION_NAME= xxx团队

5. 白话文搜古文、古文搜古文

😃由于涉及到内存问题,这个两个服务独立部署。目前暂不开源,感兴趣的读者,可以自己按照如下接口规则独立开发。如果没有这个服务接口,不影响程序运行。

古文搜古文,接口访问示例:

    data = {
        "text": '床前明月光', # 古文
        "conf_key": "chinese-classical", # 预留参数
        "group": "default", # 预留参数
        "size": 5, # 返回个数
        "searcher": 3 # 预留参数
    }
    resp = requests.post("http://172.16.67.150:18880/api/search/nl", data=json.dumps(data))

接口返回数据示例:

{
  "retCode": 0,
  "errMsg": null,
  "values": [
    {
      "value": "Ming##@##申佳允##@##天际秋云薄|床前明月光|无由一化羽|回立白苍苍##@##秋兴集古 其八##@##苍苍 天际 秋云 明月",
      "score": 1.0000004768371582
    },
    {
      "value": "Tang##@##李白##@##床前明月光|疑是地上霜|举头望山月|低头思故乡##@##静夜思##@##山月 霜 明月 低头",
      "score": 1.0000004768371582
    },
    {
      "value": "tang##@##李白##@##床前明月光|疑是地上霜|举头望明月|低头思故乡##@##静夜思##@##霜 光 明月 低头",
      "score": 1.0000004768371582
    },
    {
      "value": "Ming##@##高启##@##堂上织流黄|堂前看月光|羞见天孙度|低头入洞房##@##子夜四时歌 其三##@##天孙 月光 洞房 低头",
      "score": 0.7958479523658752
    },
    {
      "value": "Ming##@##黄渊耀##@##凉风落柳梢|微云淡河面|怀中明月光|多赊不为贱##@##夜坐##@##凉风 柳梢 明月 微云",
      "score": 0.7571470737457275
    }
  ]
}

score表示得分,value表示一条数据,value中的的各个字段值用##@##隔开 ["朝代","作者", "完整诗篇", "篇名", "关键词"]

6. 程序启动(三种方式)

  • 后台启动 🍼

启动shell脚本为restart.sh

> chmod +x ./restart.sh
> ./restart.sh

启动成功后可以访问

python app.py

启动成功后可以访问 🔍

python webui.py

启动成功后可以访问 📦

7. 调用程序api构建图数据库的实体索引(在本地创建ac自动机),这一步成功后才可使用图数据

访问api: http://localhost:18881/docs 打开如下图所示, 然后点击build model:

all_api

接着填写如下如下参数后,点击execute:

graph_entity_build

8.知识图谱构建演示demo

1.按照前面的步骤启动程序之后(程序保持运行),运行根目录下的graph_demo_ui.py:

python graph_demo_ui.py
  1. 访问地址:

    http://127.0.0.1:80
    

    如下图在左侧输入原始文本,以英文逗号结尾自动触发构建过程(需要一定的时间等待)! graph_entity_build


🚦 哔哩哔哩详细视频介绍和引导

Coffee 🍮

如果你愿意,你可以**打赏**我 Providing Encouragement And Support To Help People - Icon, HD Png Download  , Transparent Png Image - PNGitem,不在乎数量,你的一个不小心的举动是我前进的动力 keep going arrow succes challenge color icon vector illustration 28086542  Vector Art at Vecteezy,业余时间搬砖实属不易。

meet-libai's People

Contributors

binnong avatar danyow-cheung avatar

Stargazers

Ji Wang avatar Anonymous avatar bresai avatar  avatar bopo.wang avatar  avatar Chengyuan Liu avatar  avatar  avatar 李若畅 avatar  avatar Bai Zhenhan avatar xuxiandi avatar Du Hongyuan avatar  avatar  avatar  avatar monkey_D_Lufei avatar Alex avatar  avatar frank avatar  avatar  avatar 龙一野 avatar  avatar kevin avatar winterfx avatar shilei avatar xiaolong7713 avatar Yao yao avatar victor avatar Yao SONG avatar jianglin avatar Raider avatar  avatar NeoX avatar 123 avatar  avatar  avatar  avatar iamzuowei avatar LogicNorthSea avatar JoeGoodyLv avatar  avatar yjc avatar  avatar  avatar Andy Si avatar  avatar linyh avatar  avatar bode avatar WakeUp6xx avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar HamasterXu avatar hacker avatar RayLen avatar Darwin avatar ZAmbitiousQ avatar  avatar silent avatar  avatar  avatar  avatar easing's give ups avatar  avatar  avatar  avatar Daijiangfeng avatar MasterMonster avatar  avatar  avatar Bo Zhao avatar JackyLUO1991 avatar itaban avatar OxygenLu avatar  avatar 美滋滋 avatar  avatar Guangtao Lyu ( 吕光涛 ) avatar mrxirzzz avatar Bill Zhang avatar  avatar  avatar  avatar  avatar rain_zhao avatar Inzaghi avatar  avatar st01cs avatar xRunda avatar  avatar Kit avatar Franklin avatar

Watchers

Alex avatar  avatar 张昕伟 avatar  avatar  avatar  avatar  avatar  avatar  avatar

meet-libai's Issues

提问报错:model.model_error.ModelLoadError: Failed to load model: model info file not found

ic| message: '您好'
ic| question_type: <QuestionType.HELLO: 7>
2024-06-24 17:06:08.108 | INFO | model.graph_entity.search_model:reload:75 - loading entity searcher [version:0]
Traceback (most recent call last):
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\queueing.py", line 495, in call_prediction
output = await route_utils.call_process_api(
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\route_utils.py", line 235, in call_process_api
output = await app.get_blocks().process_api(
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\blocks.py", line 1627, in process_api
result = await self.call_function(
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\blocks.py", line 1185, in call_function
prediction = await utils.async_iteration(iterator)
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\utils.py", line 514, in async_iteration
return await iterator.anext()
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\utils.py", line 640, in asyncgen_wrapper
response = await iterator.anext()
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\chat_interface.py", line 490, in _stream_fn
first_response = await async_iteration(generator)
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\utils.py", line 514, in async_iteration
return await iterator.anext()
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\utils.py", line 507, in anext
return await anyio.to_thread.run_sync(
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\anyio\to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\anyio_backends_asyncio.py", line 2177, in run_sync_in_worker_thread
return await future
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\anyio_backends_asyncio.py", line 859, in run
result = context.run(func, *args)
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\gradio\utils.py", line 490, in run_sync_iterator_async
return next(iterator)
File "D:\Graduate\LLM\meet-libai\qa\interaction.py", line 18, in chat_libai
answers = get_answer(message, history)
File "D:\Graduate\LLM\meet-libai\qa\answer.py", line 25, in get_answer
entities = check_entity(question)
File "D:\Graduate\LLM\meet-libai\qa\question_parser.py", line 43, in check_entity
code, msg, results = search(question)
File "D:\Graduate\LLM\meet-libai\model\graph_entity\search_service.py", line 14, in search
results, msg = INSTANCE.search(query)
File "D:\Program Files\anaconda\envs\myenv\lib\site-packages\multipledispatch\dispatcher.py", line 439, in call
return func(self.obj, *args, **kwargs)
File "D:\Graduate\LLM\meet-libai\model\graph_entity\search_model.py", line 164, in search
INSTANCE.reload()
File "D:\Graduate\LLM\meet-libai\model\graph_entity\search_model.py", line 77, in reload
self._load_model_info(version)
File "D:\Graduate\LLM\meet-libai\model\model_base.py", line 184, in _load_model_info
raise ModelLoadError("model info file not found")
model.model_error.ModelLoadError: Failed to load model: model info file not found

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.