From 9693c71e523c774c465b42996c43ba0f2caf6835 Mon Sep 17 00:00:00 2001 From: "C.C." <fanweixiao@gmail.com> Date: Wed, 29 Jan 2025 21:16:26 +0800 Subject: [PATCH 01/15] docs: add yomo framework readme --- docs/yomo/README.md | 146 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 docs/yomo/README.md diff --git a/docs/yomo/README.md b/docs/yomo/README.md new file mode 100644 index 0000000..1b727c1 --- /dev/null +++ b/docs/yomo/README.md @@ -0,0 +1,146 @@ +# YoMo Framework - Deepseek Provider + +YoMo is an open-source LLM Function Calling Framework for building Geo-distributed AI agents. Built atop QUIC Transport Protocol and Strongly-typed Stateful Serverless architecture, makes your AI agents low-latency, reliable, secure, and easy. + +## 🚀 Getting Started + +Let's implement a function calling serverless `sfn-get-ip-latency`: + +### Step 1. Install CLI + +```bash +curl -fsSL https://get.yomo.run | sh +``` + +### Step 2. Start the server + +Prepare the configuration as `my-agent.yaml` + +```yaml +name: ai-zipper +host: 0.0.0.0 +port: 9000 + +auth: + type: token + token: SECRET_TOKEN + +bridge: + ai: + server: + addr: 0.0.0.0:9000 ## Restful API endpoint + provider: deepseek ## LLM API Service we will use + + providers: + deepseek: + api_key: <DEEPSEEK_API_KEY> + model: deepseek-reasoner +``` + +Start the server: + +```sh +YOMO_LOG_LEVEL=debug yomo serve -c my-agent.yaml +``` + +### Step 3. Write the function + +First, let's define what this function do and how's the parameters required, these will be combined to prompt when invoking LLM. + +```golang +type Parameter struct { + Domain string `json:"domain" jsonschema:"description=Domain of the website,example=example.com"` +} + +func Description() string { + return `if user asks ip or network latency of a domain, you should return the result of the giving domain. try your best to dissect user expressions to infer the right domain names` +} + +func InputSchema() any { + return &Parameter{} +} +``` + +Create a Stateful Serverless Function to get the IP and Latency of a domain: + +```golang +func Handler(ctx serverless.Context) { + var msg Parameter + ctx.ReadLLMArguments(&msg) + + // get ip of the domain + ips, _ := net.LookupIP(msg.Domain) + + // get ip[0] ping latency + pinger, _ := ping.NewPinger(ips[0].String()) + pinger.Count = 3 + pinger.Run() + stats := pinger.Statistics() + + val := fmt.Sprintf("domain %s has ip %s with average latency %s", msg.Domain, ips[0], stats.AvgRtt) + ctx.WriteLLMResult(val) +} + +``` + +Finally, let's run it + +```bash +$ yomo run app.go + +time=2025-01-29T21:43:30.583+08:00 level=INFO msg="connected to zipper" component=StreamFunction sfn_id=B0ttNSEKLSgMjXidB11K1 sfn_name=fn-get-ip-from-domain zipper_addr=localhost:9000 +time=2025-01-29T21:43:30.584+08:00 level=INFO msg="register ai function success" component=StreamFunction sfn_id=B0ttNSEKLSgMjXidB11K1 sfn_name=fn-get-ip-from-domain zipper_addr=localhost:9000 name=fn-get-ip-from-domain tag=16 +``` + +### Done, let's have a try + +```sh +$ curl -i http://127.0.0.1:9000/v1/chat/completions -H "Content-Type: application/json" -d '{ + "messages": [ + { + "role": "system", + "content": "You are a test assistant." + }, + { + "role": "user", + "content": "Compare website speed between Nike and Puma" + } + ], + "stream": false +}' + +HTTP/1.1 200 OK +Content-Length: 944 +Connection: keep-alive +Content-Type: application/json +Date: Wed, 29 Jan 2025 13:30:14 GMT +Keep-Alive: timeout=4 +Proxy-Connection: keep-alive + +{ + "Content": "Based on the data provided for the domains nike.com and puma.com which include IP addresses and average latencies, we can infer the following about their website speeds: + - Nike.com has an IP address of 13.225.183.84 with an average latency of 65.568333 milliseconds. + - Puma.com has an IP address of 151.101.194.132 with an average latency of 54.563666 milliseconds. + + Comparing these latencies, Puma.com is faster than Nike.com as it has a lower average latency. + + Please be aware, however, that website speed can be influenced by many factors beyond latency, such as server processing time, content size, and delivery networks among others. To get a more comprehensive understanding of website speed, you would need to consider additional metrics and possibly conductreal-time speed tests.", + "FinishReason": "stop" +} +``` + +### Full Example Code + +[Full LLM Function Calling Codes](https://github.com/yomorun/llm-function-calling-examples) + +## 🎯 Focuses on Geo-distributed AI Inference Infra + +It’s no secret that today’s users want instant AI inference, every AI +application is more powerful when it response quickly. But, currently, when we +talk about `distribution`, it represents **distribution in data center**. The AI model is +far away from their users from all over the world. + +If an application can be deployed anywhere close to their end users, solve the +problem, this is **Geo-distributed System Architecture**: + +<img width="580" alt="yomo geo-distributed system" src="https://user-images.githubusercontent.com/65603/162367572-5a0417fa-e2b2-4d35-8c92-2c95d461706d.png"> From 9f9414d4440ed3293ab0dbbc20e0ccd4142087de Mon Sep 17 00:00:00 2001 From: "C.C." <fanweixiao@gmail.com> Date: Wed, 29 Jan 2025 21:20:26 +0800 Subject: [PATCH 02/15] add yomo to readme --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index d781998..238b74c 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,11 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/anda/README.md">Anda</a> </td> <td>A Rust framework for AI agent development, designed to build a highly composable, autonomous, and perpetually memorizing network of AI agents.</td> </tr> + <tr> + <td><img src="https://yomo.run/yomo-logo.png" alt="Icon" width="64" height="auto" /></td> + <td><a href="https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/yomo/README.md">YoMo</a></td> + <td>Stateful Serverless LLM Function Calling Framework with Strongly-typed Language Support</td> + </tr> </table> ### RAG frameworks From 3607d68c364aa8b91f412663fd6c8f673976b1b5 Mon Sep 17 00:00:00 2001 From: "C.C." <fanweixiao@gmail.com> Date: Wed, 29 Jan 2025 21:23:20 +0800 Subject: [PATCH 03/15] add yomo to README_CN --- README_cn.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README_cn.md b/README_cn.md index 567a9e9..0a603f2 100644 --- a/README_cn.md +++ b/README_cn.md @@ -122,6 +122,11 @@ <td> <a href="https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/anda/README_cn.md">Anda</a> </td> <td>一个专为 AI 智能体开发设计的 Rust 语言框架,致力于构建高度可组合、自主运行且具备永久记忆能力的 AI 智能体网络。</td> </tr> + <tr> + <td><img src="https://yomo.run/yomo-logo.png" alt="Icon" width="64" height="auto" /></td> + <td><a href="https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/yomo/README.md">YoMo</a></td> + <td>Stateful Serverless LLM Function Calling Framework with Strongly-typed Language Support</td> + </tr> </table> ### RAG 框架 From 32936daf19392d0b5e5ab16ff0d694844b400c11 Mon Sep 17 00:00:00 2001 From: Anderson <andersonby@163.com> Date: Mon, 3 Feb 2025 14:19:47 +0800 Subject: [PATCH 04/15] docs: add deepseek-tokenizer to integration list --- README.md | 5 +++++ README_cn.md | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/README.md b/README.md index d781998..2481d79 100644 --- a/README.md +++ b/README.md @@ -333,4 +333,9 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="docs/promptfoo/README.md"> promptfoo </a> </td> <td> Test and evaluate LLM prompts, including DeepSeek models. Compare different LLM providers, catch regressions, and evaluate responses. </td> </tr> + <tr> + <td> </td> + <td> <a href="https://github.com/AndersonBY/deepseek-tokenizer"> deepseek-tokenizer </a> </td> + <td> An efficient and lightweight tokenization library for DeepSeek models, relying solely on the `tokenizers` library without heavy dependencies like `transformers`. </td> + </tr> </table> \ No newline at end of file diff --git a/README_cn.md b/README_cn.md index 567a9e9..53043f7 100644 --- a/README_cn.md +++ b/README_cn.md @@ -252,4 +252,9 @@ <td> <a href="docs/promptfoo/README.md"> promptfoo </a> </td> <td> 测试和评估LLM提示,包括DeepSeek模型。比较不同的LLM提供商,捕获回归,并评估响应。 </td> </tr> + <tr> + <td> </td> + <td> <a href="https://github.com/AndersonBY/deepseek-tokenizer"> deepseek-tokenizer </a> </td> + <td> 一个高效的轻量级tokenization库,仅依赖`tokenizers`库,不依赖`transformers`等重量级依赖。 </td> + </tr> </table> From 33711a91f957a854336c84e497d4b8ffe80ede5b Mon Sep 17 00:00:00 2001 From: Xiaomckedou233 <xiaomckedou233@xiaomcserver.top> Date: Thu, 6 Feb 2025 10:55:16 +0800 Subject: [PATCH 05/15] Correct the STranslate link in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c349dcd..4c4964f 100644 --- a/README.md +++ b/README.md @@ -152,8 +152,8 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati </tr> <tr> <td> <img src="https://github.com/ZGGSONG/STranslate/raw/main/img/favicon.svg" alt="Icon" width="64" height="auto" /> </td> - <td> <a href="https://bobtranslate.com/">STranslate</a></td> - <td> <a href="https://bobtranslate.com/">STranslate</a>(Windows) is a ready-to-go translation ocr tool developed by WPF </td> + <td> <a href="https://stranslate.zggsong.com/en/">STranslate</a></td> + <td> <a href="https://stranslate.zggsong.com/en/">STranslate</a>(Windows) is a ready-to-go translation ocr tool developed by WPF </td> </tr> <tr> From 8aab8ef95d9f17712078667c057e9250e462a01f Mon Sep 17 00:00:00 2001 From: Xiaomckedou233 <xiaomckedou233@xiaomcserver.top> Date: Thu, 6 Feb 2025 10:57:50 +0800 Subject: [PATCH 06/15] Correct the STranslate link in README_cn.md --- README_cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README_cn.md b/README_cn.md index 56fbe04..19c6ee1 100644 --- a/README_cn.md +++ b/README_cn.md @@ -120,8 +120,8 @@ </tr> <tr> <td> <img src="https://github.com/ZGGSONG/STranslate/raw/main/img/favicon.svg" alt="Icon" width="64" height="auto" /> </td> - <td> <a href="https://bobtranslate.com/">STranslate</a></td> - <td> <a href="https://bobtranslate.com/">STranslate</a>(Windows) 是 WPF 开发的一款即用即走的翻译、OCR工具 </td> + <td> <a href="https://stranslate.zggsong.com/">STranslate</a></td> + <td> <a href="https://stranslate.zggsong.com/">STranslate</a>(Windows) 是 WPF 开发的一款即用即走的翻译、OCR工具 </td> </tr> <tr> <td> <img src="https://www.gptaiflow.tech/logo.png" alt="gpt-ai-flow-logo" width="64" height="auto" /> </td> From 83a9d80abffbe15d371a6e942404661908d3ddb3 Mon Sep 17 00:00:00 2001 From: KomoriDev <mute231010@gmail.com> Date: Thu, 6 Feb 2025 11:04:40 +0800 Subject: [PATCH 07/15] docs: add nonebot to integration list --- README.md | 5 +++++ README_cn.md | 5 +++++ README_ja.md | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/README.md b/README.md index c349dcd..b5ff145 100644 --- a/README.md +++ b/README.md @@ -246,6 +246,11 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="https://github.com/RockChinQ/LangBot">LangBot<br/>(QQ, Lark, WeCom)</a> </td> <td> LLM-based IM bots framework, supports QQ, Lark, WeCom, and more platforms.</td> </tr> + <tr> + <td> <img src="https://nonebot.dev/logo.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://github.com/KomoriDev/nonebot-plugin-deepseek">NoneBot<br/>(QQ, Lark, Discord, TG, etc.)</a> </td> + <td> Based on NoneBot framework, provide intelligent chat and deep thinking functions, supports QQ, Lark, Discord, TG, and more platforms.</td> + </tr> </table> ### Browser Extensions diff --git a/README_cn.md b/README_cn.md index 56fbe04..45d7f92 100644 --- a/README_cn.md +++ b/README_cn.md @@ -181,6 +181,11 @@ <td> <a href="https://github.com/RockChinQ/LangBot">LangBot<br/>(QQ, 企微, 飞书)</a> </td> <td> 大模型原生即时通信机器人平台,适配 QQ / QQ频道 / 飞书 / OneBot / 企业微信(wecom) 等多种消息平台 </td> </tr> + <tr> + <td> <img src="https://nonebot.dev/logo.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://github.com/KomoriDev/nonebot-plugin-deepseek"">NoneBot<br/>(QQ, 飞书, Discord, TG, etc.)</a> </td> + <td> 基于 NoneBot 框架,支持智能对话与深度思考功能。适配 QQ / 飞书 / Discord, TG 等多种消息平台 </td> + </tr> </table> ### 浏览器插件 diff --git a/README_ja.md b/README_ja.md index f6a06e7..5323452 100644 --- a/README_ja.md +++ b/README_ja.md @@ -173,6 +173,11 @@ DeepSeek APIを人気のソフトウェアに統合します。APIキーを取 <td> <a href="https://github.com/RockChinQ/QChatGPT">QChatGPT<br/>(QQ)</a> </td> <td> 高い安定性、プラグインサポート、リアルタイムネットワーキングを備えたQQチャットボット。 </td> </tr> + <tr> + <td> <img src="https://nonebot.dev/logo.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://github.com/KomoriDev/nonebot-plugin-deepseek"">NoneBot<br/>(QQ, Lark, Discord, TG, etc.)</a> </td> + <td> NoneBotフレームワークを基に、インテリジェントな会話と深い思考機能をサポートします。QQ/飛書/Discord/Telegram等多种多様なメッセージプラットフォームに対応しています </td> + </tr> </table> ### ブラウザ拡張機能 From e2375de2ec2b5d7583d141fd9b2d3b3d66902c8e Mon Sep 17 00:00:00 2001 From: Prateek Sachan <ps@prateeksachan.com> Date: Thu, 6 Feb 2025 10:24:36 +0530 Subject: [PATCH 08/15] adding bolna integration for deepseek --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c349dcd..1eebc40 100644 --- a/README.md +++ b/README.md @@ -396,6 +396,11 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="https://github.com/djcopley/ShellOracle/"> ShellOracle </a> </td> <td> A terminal utility for intelligent shell command generation. </td> </tr> + <tr> + <td> <img src="https://avatars.githubusercontent.com/u/178783630?s=200&v=4" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://github.com/bolna-ai/bolna/"> Bolna </a> </td> + <td> Use DeepSeek as the LLM for conversational voice AI agents</td> + </tr> <tr> <td> <img src="https://github.com/deepseek-ai/awesome-deepseek-integration/assets/59196087/c1e47b01-1766-4f7e-bfe6-ab3cb3991c30" alt="Icon" width="64" height="auto" /> </td> <td> <a href="https://github.com/deepseek-ai/awesome-deepseek-integration/tree/main/docs/siri_deepseek_shortcut"> siri_deepseek_shortcut </a> </td> From de82a34a9bff9b942e4b863d9dedfd33d79bea82 Mon Sep 17 00:00:00 2001 From: oinze <oinchain@gmail.com> Date: Thu, 6 Feb 2025 14:34:41 +0800 Subject: [PATCH 09/15] Added a description to the RSSFlow browser extension. --- README.md | 5 +++++ README_cn.md | 5 +++++ README_ja.md | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/README.md b/README.md index c349dcd..3a37a35 100644 --- a/README.md +++ b/README.md @@ -286,6 +286,11 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="https://www.ncurator.com/"> Ncurator </a> </td> <td> Knowledge Base AI Q&A Assistant - Let AI help you organize and analyze knowledge</td> </tr> + <tr> + <td> <img src="https://github.com/oinzen/RSSFlow-doc/blob/main/docs/images/en/icon64.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://rssflow.oinchain.com"> RssFlow </a> </td> + <td>An intelligent RSS reader browser extension with AI-powered RSS summarization and multi-dimensional feed views. Supports DeepSeek model configuration for enhanced content understanding. </td> + </tr> </table> ### VS Code Extensions diff --git a/README_cn.md b/README_cn.md index 56fbe04..5f630bd 100644 --- a/README_cn.md +++ b/README_cn.md @@ -221,6 +221,11 @@ <td> <a href="https://www.ncurator.com/"> 馆长 </a> </td> <td> 知识库AI问答助手 - 让AI帮助你整理与分析知识</td> </tr> + <tr> + <td> <img src="https://github.com/oinzen/RSSFlow-doc/blob/main/docs/images/en/icon64.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://rssflow.oinchain.com"> RssFlow </a> </td> + <td>一款智能的RSS阅读器浏览器扩展,具有AI驱动的RSS摘要和多维度订阅视图功能。支持配置DeepSeek模型以增强内容理解能力。</td> + </tr> </table> ### VS Code 插件 diff --git a/README_ja.md b/README_ja.md index f6a06e7..41498dd 100644 --- a/README_ja.md +++ b/README_ja.md @@ -208,6 +208,11 @@ DeepSeek APIを人気のソフトウェアに統合します。APIキーを取 <td> <a href="https://fluent.thinkstu.com/"> FluentRead </a> </td> <td> 誰もが母国語のような読書体験を持つことができる革新的なオープンソースのブラウザ翻訳プラグイン </td> </tr> + <tr> + <td> <img src="https://github.com/oinzen/RSSFlow-doc/blob/main/docs/images/en/icon64.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://rssflow.oinchain.com"> RssFlow </a> </td> + <td>AIを活用したRSS要約と多次元フィードビューを備えたインテリジェントなRSSリーダーブラウザ拡張機能。コンテンツ理解を強化するためのDeepSeekモデル設定をサポートしています。</td> + </tr> </table> ### VS Code拡張機能 From e414782004b9d8d27198762b47a92d19b106febe Mon Sep 17 00:00:00 2001 From: Bartupso <147986893+Bartupso@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:31:37 +0300 Subject: [PATCH 10/15] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c349dcd..c192143 100644 --- a/README.md +++ b/README.md @@ -209,6 +209,11 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="https://github.com/bob-robert-ai/bob/blob/main/alice/readme.md">Alice</a> </td> <td>An autonomous AI agent on ICP, leveraging LLMs like DeepSeek for on-chain decision-making. Alice combines real-time data analysis with a playful personality to manage tokens, mine BOB, and govern ecosystems.</td> </tr> + <tr> + <td> <img src="https://github.com/Upsonic/Upsonic/blob/9d2e6d43b44defc6744817330625661ca3a2184e/Upsonic%20pp.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://github.com/Upsonic/Upsonic">Upsonic</a> </td> + <td>Upsonic offers a cutting-edge enterprise-ready agent framework where you can orchestrate LLM calls, agents, and computer use to complete tasks cost-effectively.</td> + </tr> </table> ### RAG frameworks From 13738e4169e9c7f9e110422747134101b9959556 Mon Sep 17 00:00:00 2001 From: aryan <agarwalaryan139@gmail.com> Date: Thu, 6 Feb 2025 22:09:23 +0530 Subject: [PATCH 11/15] feat: sendai agent kit --- README.md | 10 +++ README_cn.md | 10 +++ README_ja.md | 10 +++ docs/solana-agent-kit/README.md | 67 +++++++++++++++++++ docs/solana-agent-kit/assets/sendai-logo.png | Bin 0 -> 26768 bytes 5 files changed, 97 insertions(+) create mode 100644 docs/solana-agent-kit/README.md create mode 100644 docs/solana-agent-kit/assets/sendai-logo.png diff --git a/README.md b/README.md index c349dcd..338fbd7 100644 --- a/README.md +++ b/README.md @@ -221,6 +221,16 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati </tr> </table> +### Solana frameworks + +<table> + <tr> + <td> <img src="./docs/solana-agent-kit/assets/sendai-logo.png" alt="Icon" width="128" height="auto" /> </td> + <td> <a href="https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/ragflow/README.md"> Solana Agent Kit </a> </td> + <td>An open-source toolkit for connecting AI agents to Solana protocols. Now, any agent, using any Deepseek LLM, can autonomously perform 60+ Solana actions: </td> + </tr> +</table> + ### Synthetic data curation diff --git a/README_cn.md b/README_cn.md index 56fbe04..812e6ae 100644 --- a/README_cn.md +++ b/README_cn.md @@ -168,6 +168,16 @@ </tr> </table> +### Solana 框架 + +<table> + <tr> + <td> <img src="./docs/solana-agent-kit/assets/sendai-logo.png" alt="Icon" width="128" height="auto" /> </td> + <td> <a href="https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/ragflow/README.md"> Solana Agent Kit </a> </td> + <td>一个用于连接 AI 智能体到 Solana 协议的开源工具包。现在,任何使用 Deepseek LLM 的智能体都可以自主执行 60+ 种 Solana 操作:</td> + </tr> +</table> + ### 即时通讯插件 <table> diff --git a/README_ja.md b/README_ja.md index f6a06e7..692893f 100644 --- a/README_ja.md +++ b/README_ja.md @@ -160,6 +160,16 @@ DeepSeek APIを人気のソフトウェアに統合します。APIキーを取 </tr> </table> +### Solanaフレームワーク + +<table> + <tr> + <td> <img src="./docs/solana-agent-kit/assets/sendai-logo.png" alt="Icon" width="128" height="auto" /> </td> + <td> <a href="https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/ragflow/README.md"> Solana Agent Kit </a> </td> + <td>AIエージェントをSolanaプロトコルに接続するためのオープンソースツールキット。DeepSeek LLMを使用する任意のエージェントが、60以上のSolanaアクションを自律的に実行できます。</td> + </tr> +</table> + ### IMアプリケーションプラグイン <table> diff --git a/docs/solana-agent-kit/README.md b/docs/solana-agent-kit/README.md new file mode 100644 index 0000000..07ca47c --- /dev/null +++ b/docs/solana-agent-kit/README.md @@ -0,0 +1,67 @@ +# README + +<img src="assets/sendai-logo.png" width="64" height="auto" alt="logo"> + +--- + +An open-source toolkit for connecting AI agents to Solana protocols. Now, any agent, using any model can autonomously perform 60+ Solana actions: + + +## STEP1. + +Apply a token from [deepseek open platform](https://platform.deepseek.com/) + +## STEP 2 + +Intialize the DeepSeek LLM + +``` +import { ChatDeepSeek } from "@langchain/deepseek"; + +const deepseek = new ChatDeepSeek({ + model: "deepseek-chat", + temperature: 0, +}); +``` + +## STEP 3 + +Intialize the Solana Agent Kit with DeepSeek + +```typescript +const solanaAgent = new SolanaAgentKit( + process.env.SOLANA_PRIVATE_KEY!, + process.env.RPC_URL!, + { + OPENAI_API_KEY: process.env.OPENAI_API_KEY!, + HELIUS_API_KEY: process.env.HELIUS_API_KEY!, + PERPLEXITY_API_KEY: process.env.PERPLEXITY_API_KEY!, + }, +); + +const tools = createSolanaTools(solanaAgent); + +const agent = createReactAgent({ + llm: deepseek, + tools, + checkpointSaver: memory, + messageModifier: ` + You are a helpful agent that can interact onchain using the Solana Agent Kit. You are + empowered to interact onchain using your tools. If you ever need funds, you can request them from the + faucet. If not, you can provide your wallet details and request funds from the user. If there is a 5XX + (internal) HTTP error code, ask the user to try again later. If someone asks you to do something you + can't do with your currently available tools, you must say so, and encourage them to implement it + themselves using the Solana Agent Kit, recommend they go to https://www.solanaagentkit.xyz for more information. Be + concise and helpful with your responses. Refrain from restating your tools' descriptions unless it is explicitly requested. + `, +}); + +const stream = await agent.stream( + { messages: [new HumanMessage(userInput)] }, + config, +); +``` + +More guides can be found in the [Solana Agent Kit](https://docs.solanaagentkit.xyz/v0/introduction) + + \ No newline at end of file diff --git a/docs/solana-agent-kit/assets/sendai-logo.png b/docs/solana-agent-kit/assets/sendai-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..638b96267b1b304cd02d577d525e5b3f1742c028 GIT binary patch literal 26768 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 D%O8LD literal 0 HcmV?d00001 From d996da0002f87369a50053f2f76c92d8b37e490f Mon Sep 17 00:00:00 2001 From: siddharth Sambharia <siddharth.s@portkey.ai> Date: Fri, 7 Feb 2025 09:06:41 +0530 Subject: [PATCH 12/15] Update README.md with Portkey-AI --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c349dcd..ff8afde 100644 --- a/README.md +++ b/README.md @@ -406,6 +406,11 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="https://github.com/rubickecho/n8n-deepseek"> n8n-nodes-deepseek </a> </td> <td> An N8N community node that supports direct integration with the DeepSeek API into workflows. </td> </tr> + <tr> + <td> <img src="https://framerusercontent.com/images/TSKshn2UFdTyvUi85EDMIXrXgs.png?scale-down-to=512" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://github.com/Portkey-AI/gateway"> Portkey AI </a> </td> + <td> Portkey is a unified API for interacting with over 1600+ LLM models, offering advanced tools for control, visibility, and security in your DeepSeek apps. Python & Node SDK available. </td> + </tr> <tr> <td> <img src="https://framerusercontent.com/images/8rF2JOaZ8l9AvM4H6ezliw44aI.png" alt="Icon" width="64" height="auto" /> </td> <td> <a href="https://github.com/BerriAI/litellm"> LiteLLM </a> </td> From dde3ec893d7d2d3be59f228cf28caa1daf2da8cc Mon Sep 17 00:00:00 2001 From: Duke <emersonalmeidax@gmail.com> Date: Fri, 7 Feb 2025 22:17:34 -0300 Subject: [PATCH 13/15] Fix table --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c349dcd..82c80db 100644 --- a/README.md +++ b/README.md @@ -155,12 +155,10 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="https://bobtranslate.com/">STranslate</a></td> <td> <a href="https://bobtranslate.com/">STranslate</a>(Windows) is a ready-to-go translation ocr tool developed by WPF </td> </tr> - - <tr> + <tr> <td> <img src="https://github.com/user-attachments/assets/5e16beb0-993e-47bf-807e-7c8804b313a2" alt="Asp Client" width="64" height="auto" /> </td> <td> <a href="https://github.com/Anwar-alhitar/Deepseek.Asp.Client/blob/master/README.md">ASP Client</a> </td> <td><a href="https://github.com/Anwar-alhitar/Deepseek.Asp.Client/blob/master/README.md">Deepseek.ASPClient</a> is a lightweight ASP.NET wrapper for the Deepseek AI API, designed to simplify AI-driven text processing in .NET applications.. </td> - </tr> <tr> <td> <img src="https://www.gptaiflow.tech/logo.png" alt="gpt-ai-flow-logo" width="64" height="auto" /> </td> @@ -185,6 +183,7 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="docs/16x_prompt/README.md">16x Prompt</a> </td> <td> <a href="https://prompt.16x.engineer/">16x Prompt</a> is an AI coding tool with context management. It helps developers manage source code context and craft prompts for complex coding tasks on existing codebases.</td> </tr> + </table> ### AI Agent frameworks From 333a8ae0f83d9318d94930d7c3a49c0054b443de Mon Sep 17 00:00:00 2001 From: zoupingshi <hangfachang@outlook.com> Date: Sat, 8 Feb 2025 12:01:14 +0800 Subject: [PATCH 14/15] fix wrong url in README_cn.md Signed-off-by: zoupingshi <hangfachang@outlook.com> --- README_cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_cn.md b/README_cn.md index 56fbe04..53fd25e 100644 --- a/README_cn.md +++ b/README_cn.md @@ -50,7 +50,7 @@ </tr> <tr> <td> <img src="https://raw.githubusercontent.com/rss-translator/RSS-Translator/main/core/static/favicon.ico" alt="Icon" width="64" height="auto" /> </td> - <td> <a href="hhttps://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/rss_translator/README_cn.md"> RSS翻译器 </a> </td> + <td> <a href="https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/docs/rss_translator/README_cn.md"> RSS翻译器 </a> </td> <td> 开源、简洁、可自部署的RSS翻译器 </td> </tr> <tr> From 5dff82fefc2a9912230d7c6330905c624ad6bdac Mon Sep 17 00:00:00 2001 From: Xsc <59879111@qq.com> Date: Sat, 8 Feb 2025 17:02:00 +0800 Subject: [PATCH 15/15] Update README_cn.md (#182) * Update README_cn.md * Update README.md --- README.md | 5 +++++ README_cn.md | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/README.md b/README.md index 3abe37a..af426d9 100644 --- a/README.md +++ b/README.md @@ -480,4 +480,9 @@ English/[简体中文](https://github.com/deepseek-ai/awesome-deepseek-integrati <td> <a href="https://youtu.be/T1my2gqi-7Q"> GPTLocalost </a> </td> <td> Use DeepSeek-R1 in Microsoft Word Locally. No inference costs. </td> </tr> + <tr> + <td> <img src="https://github.com/suqicloud/wp-ai-chat/raw/main/ic_logo.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://github.com/suqicloud/wp-ai-chat"> WordPress ai助手 </a> </td> + <td> Docking Deepseek api for WordPress site ai conversation assistant, post generation, post summary plugin. </td> + </tr> </table> diff --git a/README_cn.md b/README_cn.md index 6e74026..f92bfed 100644 --- a/README_cn.md +++ b/README_cn.md @@ -330,4 +330,9 @@ <td> <a href="https://github.com/hustcer/deepseek-review"> deepseek-review </a> </td> <td> 🚀 使用 Deepseek 进行代码审核,支持 GitHub Action 和本地 🚀 </td> </tr> + <tr> + <td> <img src="https://github.com/suqicloud/wp-ai-chat/raw/main/ic_logo.png" alt="Icon" width="64" height="auto" /> </td> + <td> <a href="https://github.com/suqicloud/wp-ai-chat"> WordPress ai助手 </a> </td> + <td> 对接Deepseek api用于WordPress站点的ai对话助手、ai文章生成、ai文章总结插件。 </td> + </tr> </table>