Skip to content

Commit

Permalink
Feat/0.2.2.2 (#275)
Browse files Browse the repository at this point in the history
rule base
  • Loading branch information
yaojin3616 authored Jan 18, 2024
2 parents a0b971b + cb10ffc commit 999c2dc
Show file tree
Hide file tree
Showing 10 changed files with 184 additions and 27 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

<p align="center">
<a href="./README.md">简体中文</a> |
<a href="./README_ENG.md">English</a>
<a href="./README_ENG.md">English</a> |
<a href="./README_JPN.md">日本語</a>
</p>
<p align="center">
<a href="https://dataelem.feishu.cn/wiki/ZxW6wZyAJicX4WkG0NqcWsbynde"><img src="https://img.shields.io/badge/docs-Wiki-brightgreen"></a>
Expand Down
1 change: 1 addition & 0 deletions README_ENG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<p align="center">
<a href="./README.md">简体中文</a> |
<a href="./README_ENG.md">English</a> |
<a href="./README_JPN.md">日本語</a>
</p>


Expand Down
145 changes: 145 additions & 0 deletions README_JPN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
<img src="https://www.dataelem.com/nstatic/bisheng.png" alt="Bisheng banner">

<p align="center">
<a href="./README.md">简体中文</a> |
<a href="./README_ENG.md">English</a> |
<a href="./README_JPN.md">日本語</a>
</p>


<div class="column" align="middle">
<!-- <a href="https://bisheng.slack.com/join/shared_invite/"> -->
<!-- <img src="https://img.shields.io/badge/Join-Slack-orange" alt="join-slack"/> -->
</a>
<!-- <img src="https://img.shields.io/github/license/bisheng-io/bisheng" alt="license"/> -->
<!-- <img src="https://img.shields.io/docker/pulls/bisheng-io/bisheng" alt="docker-pull-count" /> -->
</div>

# Bisheng へようこそ

## Bisheng とは

Bisheng は、LLM アプリケーション開発のための主要なオープンソースプラットフォームです。Bisheng は、LLM アプリケーションの開発を強化し、加速し、ユーザーが最高の経験を持つ次世代のアプリケーション開発モードに入るのを支援します。

"Bisheng" は可動活字印刷の発明者であり、人類の知識の普及に大きな役割を果たしました。"Bisheng" もまた、インテリジェントアプリケーションの広範な着陸のための強力なサポートを提供することができることを願っています。一緒に参加しましょう。

Bishengは2023年8月末にApache 2.0 Licenseの下でリリースされた。


## 主な特徴

- 利便性: ビジネスパーソンでも、LLM を中心としたインテリジェントなアプリケーションを、あらかじめ設定されたアプリケーションテンプレートに基づき、シンプルで直感的なフォーム入力によって素早く構築することができます。
- 柔軟性: LLM テクノロジーに精通した方には、LLM テクノロジーエコシステムの最新トレンドに沿った数百の開発コンポーネントを提供しています。視覚的で柔軟なプロセスオーケストレーション機能により、単純なプロンプトプロジェクトだけでなく、あらゆるタイプの LLM アプリケーションを開発することができます。
- 信頼性とエンタープライズレベル: 同様のオープンソースプロジェクトの多くは、実験的なテストシナリオにしか適しておらず、高同時実行下での高可用性、アプリケーションの操作と効果の継続的な反復と最適化、実際のビジネスシナリオに適合する実用的な機能など、実際の本番環境で使用するためのエンタープライズレベルの機能が欠けています。これらは ByteDance プラットフォームの差別化された機能である。さらに、企業内のデータ品質にはばらつきがある。すべてのデータを真に活用するためには、包括的な非構造化データガバナンス能力が必要であり、これこそが、私たちのチームが過去数年にわたって蓄積してきた中核的機能なのです。Bisheng のデモ環境では、関連コンポーネントを通じてこれらの機能に直接アクセスすることができ、これらの機能は無料で無制限です。


## 製品アプリケーション

Bishengプラットフォームでは、様々なLLMアプリケーションを構築することができます:

分析レポート生成:

- 📃 契約審査レポート生成
- 🏦 信用調査レポート生成
- 📈 IPO 分析レポート生成
- 💼 インテリジェント投資アドバイザリーレポート生成
- 👀 文書要約生成


ナレッジベース Q&A:

- 👩‍💻 ユーザーマニュアル Q&A
- 👩‍🔬 調査報告書ナレッジベース Q&A
- 🗄 法規と規則 Q&A
- 💊 「中国薬局方」知識 Q&A
- 📊 株価データベース Q&A


対話:

- 🎭 面接官のロールプレイ
- 📍 小本集(赤本)コピーライティングアシスタント
- 👩‍🎤 外国語教師のロールプレイ
- 👨‍🏫 履歴書最適化アシスタント


要素の抽出:

- 📄 契約書からの主要要素の抽出
- 🏗️ エンジニアリングレポート要素抽出
- 🗂️ 一般的なメタデータの抽出
- 🎫 カードと請求書からのキーエレメントの抽出


様々なアプリケーションを構築する方法については、[アプリケーションケース](https://m7a7tqsztt.feishu.cn/wiki/ZfkmwLPfeiAhQSkK2WvcX87unxc)を参照してください。

私たちは、実際の企業シナリオにおいて、「対話」は数ある対話形式のひとつに過ぎないと考えています。
将来的には、プロセスの自動化や検索など、より多くのアプリケーションのサポートも追加していく予定です。


## クイックスタート

### Bisheng を始める

- [Bisheng のインストール](https://m7a7tqsztt.feishu.cn/wiki/BSCcwKd4Yiot3IkOEC8cxGW7nPc)


### ソースからの Bisheng のコンパイル

- [Bisheng のコンパイル](https://dataelem.feishu.cn/wiki/EKdDw0IkyiNSAEkzc29cqKnmn7c)

より多くのコンテンツを入手するには、[開発ドキュメント](https://m7a7tqsztt.feishu.cn/wiki/ITmJwMXVliBnzpkW3nkcqPVrnse)をお読みください。


## コントリビュート

Bisheng へのコントリビュートは、どなたでも歓迎いたします。
パッチの送信とコントリビュートのワークフローの詳細については、[Guidelines for Contributing]((https://github.com/dataelement/bisheng/blob/main/CONTRIBUTING.md)) を参照してください。
[コミュニティリポジトリ](https://github.com/dataelement/community)を参照し、私たちのガバナンスについて学び、より多くのコミュニティリソースにアクセスしてください。

<!-- ### All contributors -->

<!-- Do not remove end of hero-bot -->
<br>

## Bisheng ドキュメント

インストール、開発、デプロイ、管理に関する詳しいガイドは、[Bisheng Documentation](https://m7a7tqsztt.feishu.cn/wiki/ZxW6wZyAJicX4WkG0NqcWsbynde) を参照。


## コミュニティ

- 私たちの [Slack](https://www.dataelem.com/) チャンネルに参加して、提案や問題を共有してください。
- また、[FAQ](https://m7a7tqsztt.feishu.cn/wiki/XdGCwkDJviC0Z8klbdbcF790n9b) のページでは、よくある質問とその回答をご覧いただけます。
- また、[ディスカッショングループ](https://github.com/dataelement/bisheng/discussions)に参加して質問やディスカッションをすることもできます。


<!-- Bisheng のメールを購読する:
- [Technical Steering Committee](https://www.dataelem.com/)
- [Technical Discussions](https://www.dataelem.com/)
- [Announcement](https://www.dataelem.com/) -->

Bisheng をソーシャルメディアでフォローする:

<!-- - [知乎](https://www.zhihu.com/org/bisheng-io)
- [CSDN](http://bishengio.blog.csdn.net/)
- [Bilibili](http://space.bilibili.com/xxxxx) -->
- Bisheng 技術交流 WeChat グループ

<img src="https://www.dataelem.com/nstatic/qrcode.png" alt="Wechat QR Code">

## 参加しましょう

DataElem Inc. は、Bisheng プロジェクトの運営会社です。アルゴリズム開発者、開発者、フルスタックエンジニアを募集しています。
次世代インテリジェントアプリケーション開発プラットフォームの構築に向け、共に取り組みましょう。


## 謝辞

Bisheng は以下のライブラリを使用しています:

- オープンソースのモデル推論フレームワーク [Triton](https://github.com/triton-inference-server) に感謝します。
- オープンソースの LLM アプリケーション開発ライブラリ [LangChain](https://github.com/langchain-ai/langchain) に感謝します。
- オープンソースの非構造化データ解析エンジン [unstructured](https://github.com/Unstructured-IO/unstructured) に感謝します。
- オープンソースの LangChain 可視化ツール [langflow](https://github.com/logspace-ai/langflow) に感謝します。
19 changes: 10 additions & 9 deletions src/backend/bisheng/chat/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,19 @@ def add_message(
message: ChatMessage,
):
"""Add a message to the chat history."""
t1 = time.time()
from bisheng.database.models.message import ChatMessage
message.flow_id = client_id
message.chat_id = chat_id
if chat_id and (message.message or message.intermediate_steps
or message.files) and message.type != 'stream':
msg = message.copy()
msg.message = str(msg.message) if isinstance(msg.message, dict) else msg.message
files = json.dumps(msg.files) if msg.files else ''
msg.__dict__.pop('files')
db_message = ChatMessage(files=files, **msg.__dict__)
logger.info(f'chat={db_message} time={time.time()-t1}')
with session_getter() as seesion:
from bisheng.database.models.message import ChatMessage
msg = message.copy()
msg.message = str(msg.message) if isinstance(msg.message, dict) else msg.message
files = json.dumps(msg.files) if msg.files else ''
msg.__dict__.pop('files')
db_message = ChatMessage(files=files, **msg.__dict__)
logger.info(f'chat={db_message}')
seesion.add(db_message)
seesion.commit()
seesion.refresh(db_message)
Expand Down Expand Up @@ -232,8 +233,8 @@ async def handle_websocket(
**process_param)

# 处理任务状态
complete_normal = await thread_pool.as_completed()
autoComplete = await autogen_pool.as_completed()
complete_normal = await thread_pool.as_completed(key_list)
autoComplete = await autogen_pool.as_completed(key_list)
complete = complete_normal + autoComplete
# if async_task and async_task.done():
# logger.debug(f'async_task_complete result={async_task.result}')
Expand Down
2 changes: 1 addition & 1 deletion src/backend/bisheng/database/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def _create_engine(self) -> 'Engine':
connect_args = {'check_same_thread': False}
else:
connect_args = {}
return create_engine(self.database_url, connect_args=connect_args, pool_pre_ping=True)
return create_engine(self.database_url, connect_args=connect_args, pool_size=100, max_overflow=20, pool_pre_ping=True)

def __enter__(self):
self._session = Session(self.engine)
Expand Down
15 changes: 9 additions & 6 deletions src/backend/bisheng/utils/threadpool.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import concurrent.futures
import threading
import time
from typing import Dict, List, Tuple
from typing import Dict, List, Set, Tuple

from loguru import logger

Expand Down Expand Up @@ -68,14 +68,16 @@ def start_loop(self, loop):
asyncio.set_event_loop(loop)
loop.run_forever()

async def as_completed(self) -> List[Tuple[str, concurrent.futures.Future]]:
async def as_completed(self,
key_list: Set[str]) -> List[Tuple[str, concurrent.futures.Future]]:
with self.lock:
completed_futures = []
for k, lf in list(self.future_dict.items()):
for f in lf:
if f.done():
completed_futures.append((k, f))
self.future_dict[k].remove(f)
if k in key_list:
completed_futures.append((k, f))
self.future_dict[k].remove(f)
if len(lf) == 0:
self.future_dict.pop(k)

Expand All @@ -86,8 +88,9 @@ async def as_completed(self) -> List[Tuple[str, concurrent.futures.Future]]:
# 获取task
task = f.result()
if task.done():
completed_futures.append((k, task))
self.async_task[k].remove(f)
if k in key_list:
completed_futures.append((k, task))
self.async_task[k].remove(f)
else:
pending_count += 1
if len(lf) == 0:
Expand Down
2 changes: 1 addition & 1 deletion src/backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ include = ["./bisheng/*", "bisheng/**/*"]
bisheng = "bisheng.__main__:main"

[tool.poetry.dependencies]
bisheng_langchain = "0.2.2.1"
bisheng_langchain = "0.2.2.2"
bisheng_pyautogen = "0.1.19"
minio = "7.2.0"
loguru = "^0.7.1"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import asyncio
from typing import Any, Callable, Dict, List, Union

from langchain.callbacks.manager import Callbacks
Expand Down Expand Up @@ -41,7 +42,12 @@ async def aroute(
inputs: Union[Dict[str, Any], Any],
callbacks: Callbacks = None,
) -> Route:
result = await self.rule_function(inputs)
"""Route the inputs to the next chain based on the rule function."""
# 如果是异步function,那么就用await
if asyncio.iscoroutinefunction(self.rule_function):
result = await self.rule_function(inputs)
else:
result = self.rule_function(inputs)
if not result.get('destination') or not result:
return Route(None, result['next_inputs'])
return Route(result['destination'], result['next_inputs'])
14 changes: 7 additions & 7 deletions src/bisheng-langchain/experimental/fin_glm/rule_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def input_keys(self):

def _validate_outputs(self, outputs: Dict[str, Any]) -> None:
super()._validate_outputs(outputs)
if not isinstance(outputs["next_inputs"], dict):
if not isinstance(outputs['next_inputs'], dict):
raise ValueError

def _call(
Expand All @@ -23,8 +23,8 @@ def _call(
) -> Route:
result = self.rule_function(inputs)
if not result.get('destination'):
return Route(None, result["next_inputs"])
return Route(result["destination"], result["next_inputs"])
return Route(None, result['next_inputs'])
return Route(result['destination'], result['next_inputs'])

def route(
self,
Expand All @@ -33,8 +33,8 @@ def route(
) -> Route:
result = self.rule_function(inputs)
if not result.get('destination'):
return Route(None, result["next_inputs"])
return Route(result["destination"], result["next_inputs"])
return Route(None, result['next_inputs'])
return Route(result['destination'], result['next_inputs'])

async def aroute(
self,
Expand All @@ -43,5 +43,5 @@ async def aroute(
) -> Route:
result = await self.rule_function(inputs)
if not result.get('destination'):
return Route(None, result["next_inputs"])
return Route(result["destination"], result["next_inputs"])
return Route(None, result['next_inputs'])
return Route(result['destination'], result['next_inputs'])
2 changes: 1 addition & 1 deletion src/bisheng-langchain/version.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
v0.2.2
v0.2.2.2

0 comments on commit 999c2dc

Please sign in to comment.