mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-09 23:17:59 -05:00
Compare commits
1097 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cae0e85826 | ||
|
|
fa9c97816b | ||
|
|
4bc37db547 | ||
|
|
15138629cb | ||
|
|
ace83ebcae | ||
|
|
b33ae5bff9 | ||
|
|
dc6052578d | ||
|
|
4adbae03e7 | ||
|
|
3509ce8ce4 | ||
|
|
7aae108b87 | ||
|
|
980a6d8347 | ||
|
|
745eaff622 | ||
|
|
35d857ef2e | ||
|
|
6e63eafb79 | ||
|
|
896f7bb0a0 | ||
|
|
97f69a24e1 | ||
|
|
1a2c4040aa | ||
|
|
4ad9be0836 | ||
|
|
0bf2bce368 | ||
|
|
0d881ecc00 | ||
|
|
7e6a5dc7e2 | ||
|
|
c1a3500bde | ||
|
|
561b6f2778 | ||
|
|
cdfee16b8a | ||
|
|
9f6cb1becf | ||
|
|
dca8745c44 | ||
|
|
c35c8d1f31 | ||
|
|
87c00cec6d | ||
|
|
17edf0405b | ||
|
|
79461840c3 | ||
|
|
e76fc8c2da | ||
|
|
e9150a53e3 | ||
|
|
f9f84111cb | ||
|
|
01ffee8e7c | ||
|
|
367189fe15 | ||
|
|
7de9e5fb19 | ||
|
|
10652eb9b8 | ||
|
|
010753d170 | ||
|
|
bf1c178282 | ||
|
|
6a664663cf | ||
|
|
333442909b | ||
|
|
67c993d743 | ||
|
|
38dd2d0f23 | ||
|
|
5ee6345120 | ||
|
|
dd1985c99c | ||
|
|
39356f3d74 | ||
|
|
1ec5b1bdad | ||
|
|
bcc75376e5 | ||
|
|
448e9ea835 | ||
|
|
a63f3a3d8d | ||
|
|
3ff6509028 | ||
|
|
2ae30f1399 | ||
|
|
0e65a8a31d | ||
|
|
d1f5c69e6b | ||
|
|
c468ecbc72 | ||
|
|
97257ca49f | ||
|
|
6daeb77740 | ||
|
|
f79e87e4c2 | ||
|
|
18599ac3c3 | ||
|
|
e49cde7766 | ||
|
|
7146ce512d | ||
|
|
1b7e883b10 | ||
|
|
e03c036a10 | ||
|
|
7e8ac5c27f | ||
|
|
c12b3d2550 | ||
|
|
d381a69c9f | ||
|
|
928581f387 | ||
|
|
2c7c8d582e | ||
|
|
426873245f | ||
|
|
ca6ff7edb6 | ||
|
|
094dae3d3f | ||
|
|
2ee27f972e | ||
|
|
0b2ef5e3a6 | ||
|
|
67ac3ff84b | ||
|
|
8ed2c5ec53 | ||
|
|
2ace06f239 | ||
|
|
20a272c8c3 | ||
|
|
0d86eaa3a1 | ||
|
|
aa0a33e60f | ||
|
|
603b5471a3 | ||
|
|
ab8d822edf | ||
|
|
5bb9b46554 | ||
|
|
994eb8db2a | ||
|
|
fbb164db98 | ||
|
|
dd8f633f9f | ||
|
|
6d1b172a3e | ||
|
|
b7876ca466 | ||
|
|
68df95906f | ||
|
|
760219dcce | ||
|
|
f1b83c1988 | ||
|
|
2f97782df0 | ||
|
|
7cb303e713 | ||
|
|
8eaa83fe21 | ||
|
|
5c92d5d456 | ||
|
|
aa01e7e58a | ||
|
|
a3c76da636 | ||
|
|
cf19c895bb | ||
|
|
c017027000 | ||
|
|
73d779ad79 | ||
|
|
25781279e2 | ||
|
|
6fada45cd8 | ||
|
|
e640102797 | ||
|
|
16f5819941 | ||
|
|
d83865c635 | ||
|
|
6b4ebbac6e | ||
|
|
708321d0bf | ||
|
|
e4d35afe1f | ||
|
|
1d74ccfeda | ||
|
|
545e590ce5 | ||
|
|
93f9293f2c | ||
|
|
b5570c1c0e | ||
|
|
225571c49a | ||
|
|
a1c518e4e1 | ||
|
|
04922fe5c9 | ||
|
|
8e70a61ba9 | ||
|
|
abae6b96b5 | ||
|
|
bff1852a85 | ||
|
|
7327b448e5 | ||
|
|
eb1e90bb7f | ||
|
|
3905d1cb81 | ||
|
|
cd084e8236 | ||
|
|
5d96484501 | ||
|
|
6747a497fc | ||
|
|
2df65527d3 | ||
|
|
d0b69455e2 | ||
|
|
6028b1f5c0 | ||
|
|
658cf11299 | ||
|
|
6312df3a07 | ||
|
|
9de7a00373 | ||
|
|
325a666a8b | ||
|
|
2149f5e36d | ||
|
|
009e1da5f1 | ||
|
|
6101493f12 | ||
|
|
4b5c2b43e9 | ||
|
|
bd402cdda5 | ||
|
|
0c30646a2d | ||
|
|
53792b9a1d | ||
|
|
48f86e66f4 | ||
|
|
fd422b5d0d | ||
|
|
17cf72834d | ||
|
|
3122b506fd | ||
|
|
a31305b7ee | ||
|
|
4f26a7aa73 | ||
|
|
a06ae0d2e7 | ||
|
|
ab97ac5a77 | ||
|
|
ac8bf96eee | ||
|
|
d4165f5be6 | ||
|
|
994c35f62c | ||
|
|
4ce6bc94c3 | ||
|
|
ba21d274ec | ||
|
|
d73a97ffa2 | ||
|
|
f2ec43e4f9 | ||
|
|
3e5d3735dc | ||
|
|
172d51e061 | ||
|
|
1ad31c92ac | ||
|
|
065fc5b87b | ||
|
|
3798c56e8c | ||
|
|
c591433248 | ||
|
|
f0186593a1 | ||
|
|
6cf02b9b5a | ||
|
|
2dc75b1ac1 | ||
|
|
d3f7ef4ac4 | ||
|
|
9a6cc78332 | ||
|
|
ea8762e99b | ||
|
|
cff0a8718e | ||
|
|
abca73106d | ||
|
|
afb99fbaf1 | ||
|
|
4d973ffb01 | ||
|
|
8841e9bd6b | ||
|
|
3d4b9f0665 | ||
|
|
c48039f97f | ||
|
|
8f7b11f089 | ||
|
|
ae670a7819 | ||
|
|
a5c224e4b0 | ||
|
|
0785f6e920 | ||
|
|
cf4a935575 | ||
|
|
521316bb8c | ||
|
|
d357280003 | ||
|
|
adf8c2244c | ||
|
|
ebfdb9ce3b | ||
|
|
784992f347 | ||
|
|
5218dd41b9 | ||
|
|
07e70409c7 | ||
|
|
07ba17422b | ||
|
|
d45324bb83 | ||
|
|
ced64129da | ||
|
|
1e14743391 | ||
|
|
a0bb754c8c | ||
|
|
851031239d | ||
|
|
3811b509ef | ||
|
|
abb835d22d | ||
|
|
f2a046ff24 | ||
|
|
bd6d4a91a3 | ||
|
|
21beca8fd5 | ||
|
|
0a86eda853 | ||
|
|
60a061e38a | ||
|
|
ab71fcfc49 | ||
|
|
864622c1dc | ||
|
|
8668622d66 | ||
|
|
53dd277cfe | ||
|
|
0e8e8c7a47 | ||
|
|
47da5eb6e8 | ||
|
|
37dcde2afc | ||
|
|
e31627c7c2 | ||
|
|
57c98d86ba | ||
|
|
0f7dfe084a | ||
|
|
afc1632830 | ||
|
|
56eee2c2d2 | ||
|
|
fc558a8eef | ||
|
|
c68cadfb84 | ||
|
|
95d93a2532 | ||
|
|
59b2023124 | ||
|
|
a672f17136 | ||
|
|
1de59668e4 | ||
|
|
26243b99e8 | ||
|
|
fce1423d05 | ||
|
|
3656d3d7ad | ||
|
|
581929bc01 | ||
|
|
11d8188415 | ||
|
|
36c98d18e9 | ||
|
|
0cf87e650d | ||
|
|
baef8d77f9 | ||
|
|
b74ab46820 | ||
|
|
533b4c53e0 | ||
|
|
c2d668c3eb | ||
|
|
1a5d5ddffa | ||
|
|
9de0d91f9a | ||
|
|
3db73ff721 | ||
|
|
9ffb48ee02 | ||
|
|
1f2a317ac2 | ||
|
|
a618d289d8 | ||
|
|
461d7b2342 | ||
|
|
4273161c0f | ||
|
|
54d42b33eb | ||
|
|
2c2c32c64b | ||
|
|
65e861822c | ||
|
|
12135d2aa8 | ||
|
|
f75c807580 | ||
|
|
9ea7ea79e9 | ||
|
|
5bbb349d8a | ||
|
|
ea09fcecb7 | ||
|
|
9ccb7600f9 | ||
|
|
ee17cf461a | ||
|
|
43cb124d97 | ||
|
|
76889fde26 | ||
|
|
7780d9b32b | ||
|
|
4a703a02cb | ||
|
|
a969d09782 | ||
|
|
0bc778130f | ||
|
|
df3d532495 | ||
|
|
f4f8fc051e | ||
|
|
76fac13f3d | ||
|
|
a3838302e0 | ||
|
|
4310dd6c15 | ||
|
|
813a0fb741 | ||
|
|
7e23e942d7 | ||
|
|
7fcbafab97 | ||
|
|
056dc2879c | ||
|
|
1aec32b7e2 | ||
|
|
316c9704af | ||
|
|
4e3a3bd1b1 | ||
|
|
36773e8cdb | ||
|
|
7ac89e35a1 | ||
|
|
faa094195a | ||
|
|
69319d21cd | ||
|
|
8362fd7a83 | ||
|
|
39ad793a9a | ||
|
|
921c755711 | ||
|
|
41ec75fcad | ||
|
|
f2502f5e48 | ||
|
|
f3c4f7e20a | ||
|
|
f578f43c9a | ||
|
|
5c73038023 | ||
|
|
92132024ca | ||
|
|
ed11456de3 | ||
|
|
8739a3d378 | ||
|
|
ca015deea9 | ||
|
|
fd6d927228 | ||
|
|
6ac59a3264 | ||
|
|
aa84c75360 | ||
|
|
ebb8cf8bf9 | ||
|
|
cadfcdbfbd | ||
|
|
7d62c200fa | ||
|
|
df646256b3 | ||
|
|
7c73f5ffe0 | ||
|
|
bb5f40a027 | ||
|
|
5ae5429296 | ||
|
|
fcf128f6db | ||
|
|
56543dafb4 | ||
|
|
7cc4574913 | ||
|
|
3f900947ce | ||
|
|
bda8ee772a | ||
|
|
104d34cc9e | ||
|
|
06e9a6b302 | ||
|
|
fed4e507cc | ||
|
|
389456e0f3 | ||
|
|
c720f23d9b | ||
|
|
89f7d2b943 | ||
|
|
923c05239c | ||
|
|
3424a338b7 | ||
|
|
51b1e97fa2 | ||
|
|
ab74b13802 | ||
|
|
861ab1446a | ||
|
|
e6f519a5a6 | ||
|
|
8226e7b40a | ||
|
|
b177b291cf | ||
|
|
9c3b43325b | ||
|
|
973a5c6497 | ||
|
|
78437c688e | ||
|
|
3b74250335 | ||
|
|
c68800c772 | ||
|
|
5403665fa9 | ||
|
|
3d3443f68e | ||
|
|
e5c0b14367 | ||
|
|
a495516901 | ||
|
|
1f9b4a8ef0 | ||
|
|
3372829c30 | ||
|
|
45372aece5 | ||
|
|
ed9b9ad83f | ||
|
|
766279bb8b | ||
|
|
1038e148c3 | ||
|
|
8b78200991 | ||
|
|
c8f4791582 | ||
|
|
6c9e0ec88b | ||
|
|
bbbf1c2941 | ||
|
|
efc487a845 | ||
|
|
5786909c5e | ||
|
|
833c5fefd5 | ||
|
|
79dd1ccb9f | ||
|
|
730164abee | ||
|
|
25b2c45ec0 | ||
|
|
780870c48e | ||
|
|
fdfa935a09 | ||
|
|
917552f041 | ||
|
|
4846f6c60d | ||
|
|
be810013c7 | ||
|
|
1ee4263e60 | ||
|
|
60c4668682 | ||
|
|
a268fb7c04 | ||
|
|
6c606750f5 | ||
|
|
e13adab14f | ||
|
|
44bc12b474 | ||
|
|
991f0442e9 | ||
|
|
2ebfb576ae | ||
|
|
11a7be54f2 | ||
|
|
f5219d03c3 | ||
|
|
f0643e01b4 | ||
|
|
77b0c5b9ed | ||
|
|
9dbd44e555 | ||
|
|
9ea9f2d52e | ||
|
|
4cd707fadb | ||
|
|
f0b07428bc | ||
|
|
8c9e182e10 | ||
|
|
33dd59f7a7 | ||
|
|
53ee9f99db | ||
|
|
0f2a125eae | ||
|
|
e107363ea7 | ||
|
|
7e364a7977 | ||
|
|
35a37d8b45 | ||
|
|
2b52d88cee | ||
|
|
abad3620a3 | ||
|
|
a37c6bc812 | ||
|
|
cd1bd95952 | ||
|
|
4c9fdbe7fb | ||
|
|
2c47cf4161 | ||
|
|
db1cf8a6db | ||
|
|
c6912095f7 | ||
|
|
154d9eef6a | ||
|
|
c2ded1f3e1 | ||
|
|
ff43528d35 | ||
|
|
692ba69864 | ||
|
|
cb7ce8659b | ||
|
|
5caef3a37d | ||
|
|
a6888da124 | ||
|
|
07b0597f4f | ||
|
|
71e2994f9d | ||
|
|
9973b2c165 | ||
|
|
d9e5777538 | ||
|
|
dd74267313 | ||
|
|
1db72dc823 | ||
|
|
da707fa491 | ||
|
|
9ffaf305bd | ||
|
|
26e6286fda | ||
|
|
c795fc83aa | ||
|
|
cea42f5135 | ||
|
|
6fd6f921dc | ||
|
|
7530fb9a4e | ||
|
|
9a5b035822 | ||
|
|
0c0b6bf967 | ||
|
|
5d74db53ff | ||
|
|
b39bdfd55e | ||
|
|
6b185be9a4 | ||
|
|
214a0358b6 | ||
|
|
bbb5e53e43 | ||
|
|
79e932fed9 | ||
|
|
9ad36c0e34 | ||
|
|
2771c688ff | ||
|
|
d58ceb4bce | ||
|
|
69773c3174 | ||
|
|
1619d63f2a | ||
|
|
9aa1fe8037 | ||
|
|
1b7c111c46 | ||
|
|
bdfb56b262 | ||
|
|
4a7de31eee | ||
|
|
adfe56c720 | ||
|
|
72e3efa875 | ||
|
|
b40fa3aa6e | ||
|
|
f924edde3a | ||
|
|
073030bfaa | ||
|
|
871f4e8e18 | ||
|
|
091343a132 | ||
|
|
63c66bfc31 | ||
|
|
445ca78395 | ||
|
|
d75cc1ed84 | ||
|
|
5a8a703ecb | ||
|
|
6f64188b8d | ||
|
|
60a9a25553 | ||
|
|
52fa388f81 | ||
|
|
5c56cbd558 | ||
|
|
dc19525a6f | ||
|
|
3873f44875 | ||
|
|
09b95f41ea | ||
|
|
af60ccd188 | ||
|
|
eb75afd115 | ||
|
|
fdb8256468 | ||
|
|
570c07bf2a | ||
|
|
5c16e7d390 | ||
|
|
bd38062705 | ||
|
|
d7fd4a9618 | ||
|
|
d972bab206 | ||
|
|
f254d70624 | ||
|
|
8748e1d5f9 | ||
|
|
133a32e6d3 | ||
|
|
97b6bcc43d | ||
|
|
42917ce641 | ||
|
|
5f6d219223 | ||
|
|
bab74307f4 | ||
|
|
16aaa37dad | ||
|
|
c6166a9483 | ||
|
|
0258a1b4ce | ||
|
|
4d4aefa346 | ||
|
|
a0cf003abf | ||
|
|
2e027dd77d | ||
|
|
6133db53d0 | ||
|
|
03bb437e09 | ||
|
|
9f02f88bf5 | ||
|
|
7a1711282e | ||
|
|
58613888b0 | ||
|
|
f1fe2f52cc | ||
|
|
7d05999a70 | ||
|
|
bf07240cfa | ||
|
|
0c7a8efc8d | ||
|
|
f081f5a73c | ||
|
|
72c07e8ad2 | ||
|
|
e1f04f42f8 | ||
|
|
fd9e61f85a | ||
|
|
f1934fe76b | ||
|
|
ac41bf8c17 | ||
|
|
56ffb538a0 | ||
|
|
2e8f051e58 | ||
|
|
9f0993ed57 | ||
|
|
472a22cc94 | ||
|
|
da04ea0e9f | ||
|
|
d4f412af92 | ||
|
|
70fa628a2a | ||
|
|
b159d63fbb | ||
|
|
5dfe9330bb | ||
|
|
4107948554 | ||
|
|
7ebc87564d | ||
|
|
8aa0ed19f1 | ||
|
|
f7573fadb1 | ||
|
|
8016af60f4 | ||
|
|
8fccd5c20d | ||
|
|
8de06b63d1 | ||
|
|
1c818b2e3e | ||
|
|
1a7de84c7a | ||
|
|
a2dea384a4 | ||
|
|
1c3e923f1b | ||
|
|
e1d5e38528 | ||
|
|
3c7b3e1a4b | ||
|
|
bc455d5bf4 | ||
|
|
2a333c7cf7 | ||
|
|
41cc0cdadc | ||
|
|
70aeb0c298 | ||
|
|
83f113984d | ||
|
|
56ede1c980 | ||
|
|
df16382a19 | ||
|
|
e271ed86b6 | ||
|
|
785b86a32e | ||
|
|
e5e8082de4 | ||
|
|
8a08afd733 | ||
|
|
ebb25469ab | ||
|
|
a2040322e7 | ||
|
|
a8be7e9fb3 | ||
|
|
aedf5e70b0 | ||
|
|
503268ebcd | ||
|
|
9a4de1f0c6 | ||
|
|
43a3416347 | ||
|
|
7f39cd0f23 | ||
|
|
658942deb3 | ||
|
|
061bd6d5a8 | ||
|
|
0ec91f9010 | ||
|
|
db581dc727 | ||
|
|
87e0586d0a | ||
|
|
9a7c58c8a2 | ||
|
|
004cd3339d | ||
|
|
9bd3491eac | ||
|
|
fd3ca87c38 | ||
|
|
d264a6ade8 | ||
|
|
de93e167af | ||
|
|
85cdca28f1 | ||
|
|
75963eb851 | ||
|
|
ed7d7a7101 | ||
|
|
d5c13b72e9 | ||
|
|
e164e32c5b | ||
|
|
7461ddf8f7 | ||
|
|
f94258ef83 | ||
|
|
05e689bc60 | ||
|
|
a3a5bf1d76 | ||
|
|
e43e78fb48 | ||
|
|
1b0d304a87 | ||
|
|
94368eb1c2 | ||
|
|
062e2a2c40 | ||
|
|
746b87743a | ||
|
|
9f2ff7e9cd | ||
|
|
be65bf795f | ||
|
|
aeef2b7e2b | ||
|
|
6ec5cf46e2 | ||
|
|
4880d34786 | ||
|
|
2bba20129f | ||
|
|
64cd60d63a | ||
|
|
696ef12c80 | ||
|
|
063734f02c | ||
|
|
41b1357afb | ||
|
|
221a473ccc | ||
|
|
48b32a346c | ||
|
|
6ab9fa76a1 | ||
|
|
b613010a26 | ||
|
|
1035aca71e | ||
|
|
eb51d6d3f5 | ||
|
|
f3880ad8ed | ||
|
|
936705f04c | ||
|
|
4819b88ac1 | ||
|
|
e71a736400 | ||
|
|
58e764c1dd | ||
|
|
dc5cccdee3 | ||
|
|
cb48174f96 | ||
|
|
f9312c5855 | ||
|
|
6c12104a2e | ||
|
|
9f0673b285 | ||
|
|
18332b9dc4 | ||
|
|
f1d6b9ca1b | ||
|
|
1e0df7466d | ||
|
|
e8b05ae420 | ||
|
|
38e1747130 | ||
|
|
ab85c1a215 | ||
|
|
9c3bcbabf9 | ||
|
|
6161bb8dbc | ||
|
|
eb79986b69 | ||
|
|
9f810e8c29 | ||
|
|
63b4a81acc | ||
|
|
545ec791df | ||
|
|
3bd7a6c402 | ||
|
|
2e2be9bf38 | ||
|
|
7d45306999 | ||
|
|
63f3871f60 | ||
|
|
9a565f48b1 | ||
|
|
f327d0479a | ||
|
|
fae123754d | ||
|
|
bab4b9f041 | ||
|
|
608964a8b3 | ||
|
|
5b53cc2be6 | ||
|
|
914f1cdd47 | ||
|
|
fb6f5553bb | ||
|
|
84f095d40d | ||
|
|
bc1c1d1751 | ||
|
|
1c68523aa7 | ||
|
|
b253454723 | ||
|
|
03607bbc8b | ||
|
|
12bb0b4589 | ||
|
|
1b929c72a5 | ||
|
|
27e49217cc | ||
|
|
b4faf08c20 | ||
|
|
578129c6e6 | ||
|
|
c2593900d4 | ||
|
|
8d7f3a50d1 | ||
|
|
b8ad42f511 | ||
|
|
ae43381d84 | ||
|
|
13608a8bbc | ||
|
|
95a8d6410c | ||
|
|
08720d926c | ||
|
|
308f39e8b9 | ||
|
|
5b1f948686 | ||
|
|
cb17691c01 | ||
|
|
c00b18594e | ||
|
|
95efae9035 | ||
|
|
b12e415fea | ||
|
|
510ce4b7da | ||
|
|
abed816afd | ||
|
|
6f390c0d1d | ||
|
|
9c12ddf491 | ||
|
|
27ef45f717 | ||
|
|
0414aa5f6d | ||
|
|
93f68a9092 | ||
|
|
727e5e8763 | ||
|
|
4964495abb | ||
|
|
40d3ce5e10 | ||
|
|
a251122601 | ||
|
|
9e8d2f7c7d | ||
|
|
eeb1a340b2 | ||
|
|
c91c132e88 | ||
|
|
5028930b9f | ||
|
|
b565babe1f | ||
|
|
2f57d8a884 | ||
|
|
a173f6a7ab | ||
|
|
af1c7dc39d | ||
|
|
17e493b3b5 | ||
|
|
a84c55772d | ||
|
|
5ddfe1b709 | ||
|
|
022a61b77a | ||
|
|
386644e9f9 | ||
|
|
14e1c179dc | ||
|
|
67b0b1258c | ||
|
|
258419ddc4 | ||
|
|
dc69ea522b | ||
|
|
8b35cf5558 | ||
|
|
4197e50d78 | ||
|
|
0dd7735251 | ||
|
|
8ddc1d8eda | ||
|
|
e90138a651 | ||
|
|
d783ba6fb7 | ||
|
|
a599d3ae0a | ||
|
|
ca468dcbcd | ||
|
|
fe82166ebc | ||
|
|
4433100a47 | ||
|
|
92a998df0e | ||
|
|
a7c8f5dfe9 | ||
|
|
e392ca43aa | ||
|
|
a217daca3c | ||
|
|
21ffa5048b | ||
|
|
78f45a587a | ||
|
|
d8a7aaaf88 | ||
|
|
5158a00b54 | ||
|
|
31d909bb82 | ||
|
|
8417a98be0 | ||
|
|
f5a64f400e | ||
|
|
2ae9cbc17f | ||
|
|
919cf0b58e | ||
|
|
560d184c31 | ||
|
|
e4fbb67833 | ||
|
|
7f0f902204 | ||
|
|
7739917941 | ||
|
|
d94bfd9a91 | ||
|
|
d919073bea | ||
|
|
80076012c6 | ||
|
|
f2b1c7332d | ||
|
|
b923c247ca | ||
|
|
cdfb2fcd4c | ||
|
|
5ee66252ed | ||
|
|
7b73dfb462 | ||
|
|
d7a2c0747c | ||
|
|
24c22537bb | ||
|
|
ddefbaab38 | ||
|
|
b05a9b1493 | ||
|
|
11264edc2c | ||
|
|
fb5d5d9e64 | ||
|
|
732df0494e | ||
|
|
06b1d82781 | ||
|
|
3d5d7474ed | ||
|
|
27794e59b3 | ||
|
|
88668fed84 | ||
|
|
fe5402a6d7 | ||
|
|
c436c2e378 | ||
|
|
60e905c520 | ||
|
|
1e55a0e044 | ||
|
|
e142753d64 | ||
|
|
61deb02959 | ||
|
|
e52862166d | ||
|
|
8f71684dcb | ||
|
|
92fe353f44 | ||
|
|
4c6c7272c5 | ||
|
|
55a9adfdda | ||
|
|
bdfe7e9b99 | ||
|
|
27c248a70c | ||
|
|
19ca9c78b4 | ||
|
|
b13f339327 | ||
|
|
aade4bf3ae | ||
|
|
b7185c9ee8 | ||
|
|
ca4b483ce3 | ||
|
|
adead6336b | ||
|
|
2d83bbf769 | ||
|
|
fd96e446ae | ||
|
|
8b095105ee | ||
|
|
4bb1237027 | ||
|
|
46f84e83e9 | ||
|
|
487f0328c9 | ||
|
|
b223e45de9 | ||
|
|
0c5e70fc23 | ||
|
|
bb759368d9 | ||
|
|
a7a2056b5f | ||
|
|
1213a64ecd | ||
|
|
39444afcdc | ||
|
|
a030329fd5 | ||
|
|
1420f4857b | ||
|
|
b1b8654236 | ||
|
|
d13a06e2c5 | ||
|
|
29d0732002 | ||
|
|
e8c51e99a2 | ||
|
|
7192cdef6f | ||
|
|
8a9bc4e929 | ||
|
|
d65bdaf546 | ||
|
|
348b524d86 | ||
|
|
0361397879 | ||
|
|
ff2b1d33c8 | ||
|
|
db22e26662 | ||
|
|
38f5aae0fb | ||
|
|
36eb04dab5 | ||
|
|
f8000a747a | ||
|
|
9a954d1830 | ||
|
|
f16d759d8d | ||
|
|
dad72e3100 | ||
|
|
4285b36a42 | ||
|
|
6967ac0417 | ||
|
|
027614f373 | ||
|
|
b4b6895efa | ||
|
|
5b7c07c283 | ||
|
|
db4ad80a4c | ||
|
|
0023e8df80 | ||
|
|
c81f881855 | ||
|
|
2f726fa9f3 | ||
|
|
4d3dee7f0f | ||
|
|
7860894007 | ||
|
|
52ffc39194 | ||
|
|
f666ccad43 | ||
|
|
95dfe9e6d2 | ||
|
|
91a4c6d588 | ||
|
|
5f9bfdde06 | ||
|
|
0bd480cfe4 | ||
|
|
1afdeed244 | ||
|
|
e216b176ac | ||
|
|
f0e605f5fa | ||
|
|
4c85e34d2b | ||
|
|
7e174f239a | ||
|
|
af0dcf7efd | ||
|
|
617ea25ab4 | ||
|
|
b7d536b7bc | ||
|
|
e83745fcaf | ||
|
|
3887733da5 | ||
|
|
614d826217 | ||
|
|
a0a4b21000 | ||
|
|
1f6dcd8465 | ||
|
|
30538d9380 | ||
|
|
6149489483 | ||
|
|
9ede001202 | ||
|
|
209d822ce9 | ||
|
|
31d9e2a4a8 | ||
|
|
e5080febd5 | ||
|
|
529fd44405 | ||
|
|
717b4dd2ff | ||
|
|
8aa86e0e9d | ||
|
|
148f0a6da3 | ||
|
|
14f422ef5e | ||
|
|
f27cb18883 | ||
|
|
e102b6cf17 | ||
|
|
50595c5c49 | ||
|
|
3c61bc167a | ||
|
|
ef681d8a04 | ||
|
|
df4971a876 | ||
|
|
f269fc9776 | ||
|
|
c65384d715 | ||
|
|
24e19a83a5 | ||
|
|
5c487f59f9 | ||
|
|
c45da7b93e | ||
|
|
cfc261d646 | ||
|
|
763d0de5d5 | ||
|
|
eade867d98 | ||
|
|
4a26b061a4 | ||
|
|
8176b37d89 | ||
|
|
610ea0b689 | ||
|
|
3c1914c566 | ||
|
|
218041dba3 | ||
|
|
a2827a52c0 | ||
|
|
6ca8311a76 | ||
|
|
37c4f835dd | ||
|
|
0b01d4bc78 | ||
|
|
a5883171f9 | ||
|
|
c2f786e40b | ||
|
|
3421eaec27 | ||
|
|
f6b25bf727 | ||
|
|
aa343fb62f | ||
|
|
cc249c2dd0 | ||
|
|
f1734766c3 | ||
|
|
e37f362459 | ||
|
|
bb9291aecc | ||
|
|
5dc3ba3379 | ||
|
|
684a8020d4 | ||
|
|
9097c520a5 | ||
|
|
bacb6f3831 | ||
|
|
2a0224f6ae | ||
|
|
6cb15a620a | ||
|
|
c7b77bd303 | ||
|
|
c0b8e1aca3 | ||
|
|
82cb609bb7 | ||
|
|
07cd6f9e49 | ||
|
|
c53e950269 | ||
|
|
2ce68aedf5 | ||
|
|
88282378ea | ||
|
|
1b3b85f4c4 | ||
|
|
4b60bba992 | ||
|
|
4aaa68d21b | ||
|
|
776ae06671 | ||
|
|
ccf5c2f6d8 | ||
|
|
02c41127c2 | ||
|
|
d1fe209d29 | ||
|
|
ee66c15ed9 | ||
|
|
d9046042af | ||
|
|
4fffc66ee0 | ||
|
|
a3159bcebc | ||
|
|
2354909ef9 | ||
|
|
caccb61362 | ||
|
|
3c7e7949d9 | ||
|
|
537fbdb2ce | ||
|
|
3460a7b39e | ||
|
|
d75751bbe6 | ||
|
|
2c9a4f4c3e | ||
|
|
767b63c57d | ||
|
|
b58d8773c9 | ||
|
|
3af1a6e100 | ||
|
|
840a028f92 | ||
|
|
7bc644a478 | ||
|
|
70a51006f6 | ||
|
|
17513d77ea | ||
|
|
6dc8b17bed | ||
|
|
70a5f4ec31 | ||
|
|
b9fa50b4de | ||
|
|
97021559cc | ||
|
|
76c0c56689 | ||
|
|
850447a604 | ||
|
|
0f21fbf705 | ||
|
|
3e45d793f1 | ||
|
|
5167deb75c | ||
|
|
02b7899861 | ||
|
|
7e4669108f | ||
|
|
ede224a15f | ||
|
|
5cf7d025db | ||
|
|
b4eda8fe6a | ||
|
|
60e2e6c735 | ||
|
|
c635b19548 | ||
|
|
f3bc1fc250 | ||
|
|
0bf9ce0b9e | ||
|
|
e22f0123a3 | ||
|
|
231bfb9add | ||
|
|
cac9ad250d | ||
|
|
78b5ae7b3d | ||
|
|
016cd6750c | ||
|
|
3b982533d1 | ||
|
|
1604ce4d7c | ||
|
|
86168f1a87 | ||
|
|
5d7fc5382c | ||
|
|
7a5aeadbb7 | ||
|
|
f4e627a9f7 | ||
|
|
b0c1547198 | ||
|
|
d19632aec3 | ||
|
|
35ac68f579 | ||
|
|
9c14f5f8fc | ||
|
|
d50db1d3fb | ||
|
|
b3960ad77a | ||
|
|
805b245ca9 | ||
|
|
bf0ea10e62 | ||
|
|
9be41b4b73 | ||
|
|
f08a51cc34 | ||
|
|
2f8d9eaede | ||
|
|
e37a8681e0 | ||
|
|
e93a5ce646 | ||
|
|
fe5ce5a374 | ||
|
|
3a48980916 | ||
|
|
b42c43ae87 | ||
|
|
5fec81320c | ||
|
|
2d5da6e25b | ||
|
|
5d17ed830b | ||
|
|
2a7b4da969 | ||
|
|
c43b03935c | ||
|
|
0da8a7068a | ||
|
|
f5f65fd8d1 | ||
|
|
754d768070 | ||
|
|
05c83e27b9 | ||
|
|
244c086ef2 | ||
|
|
f8cfdba5ee | ||
|
|
82d491d1b6 | ||
|
|
7c00f07d8f | ||
|
|
bbde2be093 | ||
|
|
bf9b3fdc99 | ||
|
|
e4523961ea | ||
|
|
02cecd5745 | ||
|
|
00334e501f | ||
|
|
0049644224 | ||
|
|
8764954282 | ||
|
|
76a04251a7 | ||
|
|
99105841b1 | ||
|
|
0fb2f7c44e | ||
|
|
1a719470b8 | ||
|
|
9584f3cb57 | ||
|
|
9239954029 | ||
|
|
7b50eccc89 | ||
|
|
70899852a3 | ||
|
|
c85adf695d | ||
|
|
a05ba867cd | ||
|
|
24a3b9a167 | ||
|
|
936d2d31e2 | ||
|
|
fb40d25234 | ||
|
|
c3fe758991 | ||
|
|
793e9262bd | ||
|
|
391c3efa14 | ||
|
|
d30e116781 | ||
|
|
7182f35702 | ||
|
|
0a5bf5a821 | ||
|
|
d084ecdcb1 | ||
|
|
76df2b9cd9 | ||
|
|
37786d371e | ||
|
|
aa2577be91 | ||
|
|
726901cb31 | ||
|
|
49a8a0551d | ||
|
|
59b68d21be | ||
|
|
c7ee74ecf8 | ||
|
|
00f893e318 | ||
|
|
567f7a5e10 | ||
|
|
b0cc595434 | ||
|
|
7bc61702ec | ||
|
|
c6907c2921 | ||
|
|
77bbdc1089 | ||
|
|
96438c3a54 | ||
|
|
10a4566614 | ||
|
|
10ab1b4041 | ||
|
|
fc7171b038 | ||
|
|
f3a405364f | ||
|
|
1eda44d605 | ||
|
|
282345b983 | ||
|
|
5febdfbe82 | ||
|
|
30f793072b | ||
|
|
79d8dcb198 | ||
|
|
87344117cb | ||
|
|
dcf6e10b5b | ||
|
|
7080b9eccc | ||
|
|
391925a178 | ||
|
|
f93a1bf837 | ||
|
|
0d4849b812 | ||
|
|
215e1e9831 | ||
|
|
2c86679bd7 | ||
|
|
7a5169f01b | ||
|
|
d829ab2747 | ||
|
|
46d23bd278 | ||
|
|
a0893946dd | ||
|
|
9b284c82ce | ||
|
|
c8bc9dbb55 | ||
|
|
2784b9686f | ||
|
|
78395f6ded | ||
|
|
81d96ef746 | ||
|
|
a137df338c | ||
|
|
fc93a30843 | ||
|
|
c9d826e7d6 | ||
|
|
222f97f097 | ||
|
|
ddac090485 | ||
|
|
1c9198c226 | ||
|
|
6946db9eb6 | ||
|
|
01881d0db4 | ||
|
|
33ac68ba2e | ||
|
|
10584e17ec | ||
|
|
4ed6a70350 | ||
|
|
3e1d7e718c | ||
|
|
6ffe5421c0 | ||
|
|
ada5f5162e | ||
|
|
798cdd1a56 | ||
|
|
43d60e9670 | ||
|
|
5de5ff5baa | ||
|
|
7b50046fbf | ||
|
|
44c8f0556a | ||
|
|
060b676313 | ||
|
|
44f10488db | ||
|
|
9c8e0d8dcf | ||
|
|
ad91e59d38 | ||
|
|
316985c664 | ||
|
|
6986a4edf9 | ||
|
|
36cd271984 | ||
|
|
d024f8da89 | ||
|
|
8e6101b0e3 | ||
|
|
86d94074ac | ||
|
|
e9892d7f32 | ||
|
|
a0b27570f7 | ||
|
|
590764e5dc | ||
|
|
a0f80c8102 | ||
|
|
0f2dd48887 | ||
|
|
dc1433eecf | ||
|
|
d9e99a4fab | ||
|
|
7d640823c3 | ||
|
|
de2ce6fcb7 | ||
|
|
2e77d4625a | ||
|
|
a94f61702c | ||
|
|
c5727ef018 | ||
|
|
e17cdc9698 | ||
|
|
4239810bb2 | ||
|
|
a9196314d7 | ||
|
|
51120c8fd5 | ||
|
|
88d8a1b104 | ||
|
|
50cbc890c2 | ||
|
|
b2450530d1 | ||
|
|
3b82e7d224 | ||
|
|
ca6884cdc2 | ||
|
|
2fb0894c2a | ||
|
|
6e682f5f47 | ||
|
|
84b9d766e9 | ||
|
|
7169f33a84 | ||
|
|
79bea155b3 | ||
|
|
80a7bf5e5f | ||
|
|
334f12c602 | ||
|
|
819c0cc8eb | ||
|
|
38afdeb83a | ||
|
|
cbfe9a69fe | ||
|
|
ad4060aa92 | ||
|
|
6afb453fc0 | ||
|
|
8e6057a39e | ||
|
|
76253de031 | ||
|
|
4d03c8b6ac | ||
|
|
28dd9e89f8 | ||
|
|
3e809d24c4 | ||
|
|
3f468dc302 | ||
|
|
911f2881de | ||
|
|
b74e71a47a | ||
|
|
ae38f20367 | ||
|
|
b1126e3d6a | ||
|
|
ef8ae60afd | ||
|
|
8ec194a604 | ||
|
|
950e055a8d | ||
|
|
79b761c022 | ||
|
|
45c92067e2 | ||
|
|
8c268e23dd | ||
|
|
0c8a773e56 | ||
|
|
c77a21e9b4 | ||
|
|
5664890065 | ||
|
|
328d361a70 | ||
|
|
afcc66afc6 | ||
|
|
0015dc93de | ||
|
|
6d380c28e3 | ||
|
|
a94fd8703f | ||
|
|
b9b662bf6d | ||
|
|
a5b809c8e9 | ||
|
|
31ccaa5227 | ||
|
|
d2cf31b42c | ||
|
|
4cd80947bd | ||
|
|
33123c6361 | ||
|
|
6170b80086 | ||
|
|
bacf733503 | ||
|
|
6f8f307a5d | ||
|
|
1ebcaf5bfd | ||
|
|
47090713ef | ||
|
|
f5cbcfb514 | ||
|
|
2a4590e649 | ||
|
|
533f765c34 | ||
|
|
0af7fb2a7a | ||
|
|
b29827c4ee | ||
|
|
8f75e795f2 | ||
|
|
1ec9770df3 | ||
|
|
c8b2c9ea63 | ||
|
|
fd82b99c5c | ||
|
|
f2894e645e | ||
|
|
18ce26616e | ||
|
|
c7866c8388 | ||
|
|
ef31a2fe7b | ||
|
|
717e17d02a | ||
|
|
e57d3f79a1 | ||
|
|
0b055623a0 | ||
|
|
96fdfbc3e6 | ||
|
|
a66c1e3b16 | ||
|
|
4bbc2b243c | ||
|
|
0621caf5a5 | ||
|
|
f07cffd264 | ||
|
|
1152a264bc | ||
|
|
274ebdf4eb | ||
|
|
43cb4cbf15 | ||
|
|
38b169cc31 | ||
|
|
38efb9a871 | ||
|
|
575a482273 | ||
|
|
7010c2d45a | ||
|
|
db369fed55 | ||
|
|
76c22e9164 | ||
|
|
626dafae49 | ||
|
|
2c7806feaa | ||
|
|
230143af3c | ||
|
|
c27698f7b3 | ||
|
|
5326f2f63c | ||
|
|
c47f8719e9 | ||
|
|
3580241d93 | ||
|
|
0fc0f683a6 | ||
|
|
d79cad4c52 | ||
|
|
a92ee8bf46 | ||
|
|
1438028982 | ||
|
|
fcc590c02b | ||
|
|
01e9016dbc |
@@ -1,4 +1,4 @@
|
||||
# Sim Studio Development Environment Bashrc
|
||||
# Sim Development Environment Bashrc
|
||||
# This gets sourced by post-create.sh
|
||||
|
||||
# Enhanced prompt with git branch info
|
||||
@@ -17,15 +17,27 @@ alias ...="cd ../.."
|
||||
alias pgc="PGPASSWORD=postgres psql -h db -U postgres -d simstudio"
|
||||
alias check-db="PGPASSWORD=postgres psql -h db -U postgres -c '\l'"
|
||||
|
||||
# Sim Studio specific aliases
|
||||
alias logs="cd /workspace/sim && tail -f logs/*.log 2>/dev/null || echo 'No log files found'"
|
||||
alias sim-start="cd /workspace/sim && npm run dev"
|
||||
alias sim-migrate="cd /workspace/sim && npx drizzle-kit push"
|
||||
alias sim-generate="cd /workspace/sim && npx drizzle-kit generate"
|
||||
alias sim-rebuild="cd /workspace/sim && npm run build && npm start"
|
||||
# Sim specific aliases
|
||||
alias logs="cd /workspace/apps/sim && tail -f logs/*.log 2>/dev/null || echo 'No log files found'"
|
||||
alias sim-start="cd /workspace && bun run dev"
|
||||
alias sim-migrate="cd /workspace/apps/sim && bunx drizzle-kit push"
|
||||
alias sim-generate="cd /workspace/apps/sim && bunx drizzle-kit generate"
|
||||
alias sim-rebuild="cd /workspace && bun run build && bun run start"
|
||||
alias docs-dev="cd /workspace/apps/docs && bun run dev"
|
||||
|
||||
# Default to sim directory
|
||||
cd /workspace/sim 2>/dev/null || true
|
||||
# Turbo related commands
|
||||
alias turbo-build="cd /workspace && bunx turbo run build"
|
||||
alias turbo-dev="cd /workspace && bunx turbo run dev"
|
||||
alias turbo-test="cd /workspace && bunx turbo run test"
|
||||
|
||||
# Bun specific commands
|
||||
alias bun-update="cd /workspace && bun update"
|
||||
alias bun-add="cd /workspace && bun add"
|
||||
alias bun-pm="cd /workspace && bun pm"
|
||||
alias bun-canary="bun upgrade --canary"
|
||||
|
||||
# Default to workspace directory
|
||||
cd /workspace 2>/dev/null || true
|
||||
|
||||
# Welcome message - only show once per session
|
||||
if [ -z "$SIM_WELCOME_SHOWN" ]; then
|
||||
@@ -33,13 +45,25 @@ if [ -z "$SIM_WELCOME_SHOWN" ]; then
|
||||
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🚀 Welcome to Sim Studio development environment!"
|
||||
echo "🚀 Welcome to Sim development environment!"
|
||||
echo ""
|
||||
echo "Available commands:"
|
||||
echo " sim-start - Start the development server"
|
||||
echo " sim-migrate - Push schema changes to the database"
|
||||
echo " sim-generate - Generate new migrations"
|
||||
echo " sim-rebuild - Build and start the production server"
|
||||
echo " sim-start - Start all apps in development mode"
|
||||
echo " sim-migrate - Push schema changes to the database for sim app"
|
||||
echo " sim-generate - Generate new migrations for sim app"
|
||||
echo " sim-rebuild - Build and start all apps"
|
||||
echo " docs-dev - Start only the docs app in development mode"
|
||||
echo ""
|
||||
echo "Turbo commands:"
|
||||
echo " turbo-build - Build all apps using Turborepo"
|
||||
echo " turbo-dev - Start development mode for all apps"
|
||||
echo " turbo-test - Run tests for all packages"
|
||||
echo ""
|
||||
echo "Bun commands:"
|
||||
echo " bun-update - Update dependencies"
|
||||
echo " bun-add - Add a new dependency"
|
||||
echo " bun-pm - Manage dependencies"
|
||||
echo " bun-canary - Upgrade to the latest canary version of Bun"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
fi
|
||||
@@ -1,4 +1,5 @@
|
||||
FROM node:20-bullseye
|
||||
# Use the latest Bun canary image for development
|
||||
FROM oven/bun:canary
|
||||
|
||||
# Avoid warnings by switching to noninteractive
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
@@ -6,12 +7,13 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||
# Install necessary packages for development
|
||||
RUN apt-get update \
|
||||
&& apt-get -y install --no-install-recommends \
|
||||
git curl wget jq sudo postgresql-client \
|
||||
git curl wget jq sudo postgresql-client vim nano \
|
||||
bash-completion ca-certificates lsb-release gnupg \
|
||||
&& apt-get clean -y \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create a non-root user
|
||||
ARG USERNAME=node
|
||||
ARG USERNAME=bun
|
||||
ARG USER_UID=1000
|
||||
ARG USER_GID=$USER_UID
|
||||
|
||||
@@ -19,11 +21,15 @@ ARG USER_GID=$USER_UID
|
||||
RUN echo "$USERNAME ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USERNAME \
|
||||
&& chmod 0440 /etc/sudoers.d/$USERNAME
|
||||
|
||||
# Make sure we have the latest npm
|
||||
RUN npm install -g npm@latest
|
||||
# Install global packages for development
|
||||
RUN bun install -g turbo drizzle-kit typescript @types/node
|
||||
|
||||
# Install global packages
|
||||
RUN npm install -g drizzle-kit
|
||||
# Install bun completions
|
||||
RUN bun completions > /etc/bash_completion.d/bun
|
||||
|
||||
# Set up shell environment
|
||||
RUN echo "export PATH=$PATH:/home/$USERNAME/.bun/bin" >> /etc/profile
|
||||
RUN echo "source /etc/profile" >> /etc/bash.bashrc
|
||||
|
||||
# Switch back to dialog for any ad-hoc use of apt-get
|
||||
ENV DEBIAN_FRONTEND=dialog
|
||||
@@ -31,4 +37,6 @@ ENV DEBIAN_FRONTEND=dialog
|
||||
WORKDIR /workspace
|
||||
|
||||
# Expose the ports we're interested in
|
||||
EXPOSE 3000
|
||||
EXPOSE 3000
|
||||
EXPOSE 3001
|
||||
EXPOSE 3002
|
||||
@@ -1,4 +1,4 @@
|
||||
# Sim Studio Development Container
|
||||
# Sim Development Container
|
||||
|
||||
This directory contains configuration files for Visual Studio Code Dev Containers / GitHub Codespaces. Dev containers provide a consistent, isolated development environment for this project.
|
||||
|
||||
@@ -33,7 +33,7 @@ This directory contains configuration files for Visual Studio Code Dev Container
|
||||
- Run database migrations
|
||||
- Configure helpful aliases
|
||||
|
||||
5. Start the application with `sim-start` (alias for `npm run dev`)
|
||||
5. Start the application with `sim-start` (alias for `bun run dev`)
|
||||
|
||||
### Development Commands
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "Sim Studio Dev Environment",
|
||||
"name": "Sim Dev Environment",
|
||||
"dockerComposeFile": "docker-compose.yml",
|
||||
"service": "app",
|
||||
"workspaceFolder": "/workspace",
|
||||
@@ -10,14 +10,8 @@
|
||||
"settings": {
|
||||
"editor.formatOnSave": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": true
|
||||
},
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
"source.fixAll.biome": "explicit",
|
||||
"source.organizeImports.biome": "explicit"
|
||||
},
|
||||
"terminal.integrated.defaultProfile.linux": "bash",
|
||||
"terminal.integrated.profiles.linux": {
|
||||
@@ -29,16 +23,15 @@
|
||||
"terminal.integrated.shellIntegration.enabled": true
|
||||
},
|
||||
"extensions": [
|
||||
"dbaeumer.vscode-eslint",
|
||||
"esbenp.prettier-vscode",
|
||||
"biomejs.biome",
|
||||
"bradlc.vscode-tailwindcss",
|
||||
"ms-vscode.vscode-typescript-next",
|
||||
"github.copilot",
|
||||
"github.copilot-chat",
|
||||
"rvest.vs-code-prettier-eslint",
|
||||
"mikestead.dotenv",
|
||||
"dsznajder.es7-react-js-snippets",
|
||||
"steoates.autoimport"
|
||||
"steoates.autoimport",
|
||||
"oven.bun-vscode"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -49,12 +42,11 @@
|
||||
|
||||
"postStartCommand": "bash -c 'if [ ! -f ~/.bashrc ] || ! grep -q \"sim-start\" ~/.bashrc; then cp .devcontainer/.bashrc ~/.bashrc; fi'",
|
||||
|
||||
"remoteUser": "node",
|
||||
"remoteUser": "bun",
|
||||
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/git:1": {},
|
||||
"ghcr.io/devcontainers-contrib/features/npm-package:1": {
|
||||
"package": "typescript",
|
||||
"ghcr.io/prulloac/devcontainer-features/bun:1": {
|
||||
"version": "latest"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
@@ -7,22 +5,69 @@ services:
|
||||
dockerfile: .devcontainer/Dockerfile
|
||||
volumes:
|
||||
- ..:/workspace:cached
|
||||
- bun-cache:/home/bun/.bun/cache:delegated
|
||||
command: sleep infinity
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
- BETTER_AUTH_URL=http://localhost:3000
|
||||
- NEXT_PUBLIC_APP_URL=http://localhost:3000
|
||||
- BUN_INSTALL_CACHE_DIR=/home/bun/.bun/cache
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
realtime:
|
||||
condition: service_healthy
|
||||
migrations:
|
||||
condition: service_completed_successfully
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "3001:3001"
|
||||
working_dir: /workspace
|
||||
healthcheck:
|
||||
test: ['CMD', 'wget', '--spider', '--quiet', 'http://127.0.0.1:3000']
|
||||
interval: 90s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
|
||||
realtime:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: .devcontainer/Dockerfile
|
||||
command: sleep infinity
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
- DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
- POSTGRES_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
- BETTER_AUTH_URL=http://localhost:3000
|
||||
- NEXT_PUBLIC_APP_URL=http://localhost:3000
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
- "3000:3000"
|
||||
working_dir: /workspace/sim
|
||||
- "3002:3002"
|
||||
working_dir: /workspace
|
||||
healthcheck:
|
||||
test: ['CMD', 'wget', '--spider', '--quiet', 'http://127.0.0.1:3002']
|
||||
interval: 90s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
|
||||
migrations:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: docker/db.Dockerfile
|
||||
environment:
|
||||
- DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
command: ['bun', 'run', 'db:migrate']
|
||||
restart: 'no'
|
||||
|
||||
db:
|
||||
image: postgres:16
|
||||
image: pgvector/pgvector:pg17
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
@@ -31,7 +76,7 @@ services:
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
- POSTGRES_DB=simstudio
|
||||
ports:
|
||||
- "5432:5432"
|
||||
- "${POSTGRES_PORT:-5432}:5432"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
interval: 5s
|
||||
@@ -39,4 +84,5 @@ services:
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
postgres-data:
|
||||
bun-cache:
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
# Exit on error, but with some error handling
|
||||
set -e
|
||||
|
||||
echo "🔧 Setting up Sim Studio development environment..."
|
||||
echo "🔧 Setting up Sim development environment..."
|
||||
|
||||
# Change to the sim directory
|
||||
cd /workspace/sim
|
||||
# Change to the workspace root directory
|
||||
cd /workspace
|
||||
|
||||
# Setup .bashrc
|
||||
echo "📄 Setting up .bashrc with aliases..."
|
||||
@@ -15,27 +15,50 @@ cp /workspace/.devcontainer/.bashrc ~/.bashrc
|
||||
echo 'if [ -f ~/.bashrc ]; then . ~/.bashrc; fi' >> ~/.profile
|
||||
|
||||
# Clean and reinstall dependencies to ensure platform compatibility
|
||||
echo "📦 Cleaning and reinstalling npm dependencies..."
|
||||
echo "📦 Cleaning and reinstalling dependencies..."
|
||||
if [ -d "node_modules" ]; then
|
||||
echo "Removing existing node_modules to ensure platform compatibility..."
|
||||
rm -rf node_modules
|
||||
rm -rf apps/sim/node_modules
|
||||
rm -rf apps/docs/node_modules
|
||||
fi
|
||||
|
||||
# Ensure Bun cache directory exists and has correct permissions
|
||||
mkdir -p ~/.bun/cache
|
||||
chmod 700 ~/.bun ~/.bun/cache
|
||||
|
||||
# Install dependencies with platform-specific binaries
|
||||
npm install || {
|
||||
echo "⚠️ npm install had issues but continuing setup..."
|
||||
echo "Installing dependencies with Bun..."
|
||||
bun install || {
|
||||
echo "⚠️ bun install had issues but continuing setup..."
|
||||
}
|
||||
|
||||
# Set up environment variables if .env doesn't exist
|
||||
if [ ! -f ".env" ]; then
|
||||
# Check for native dependencies
|
||||
echo "Checking for native dependencies compatibility..."
|
||||
NATIVE_DEPS=$(grep '"trustedDependencies"' apps/sim/package.json || echo "")
|
||||
if [ ! -z "$NATIVE_DEPS" ]; then
|
||||
echo "⚠️ Native dependencies detected. Ensuring compatibility with Bun..."
|
||||
for pkg in $(echo $NATIVE_DEPS | grep -oP '"[^"]*"' | tr -d '"' | grep -v "trustedDependencies"); do
|
||||
echo "Checking compatibility for $pkg..."
|
||||
done
|
||||
fi
|
||||
|
||||
# Set up environment variables if .env doesn't exist for the sim app
|
||||
if [ ! -f "apps/sim/.env" ]; then
|
||||
echo "📄 Creating .env file from template..."
|
||||
cp .env.example .env 2>/dev/null || echo "DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio" > .env
|
||||
if [ -f "apps/sim/.env.example" ]; then
|
||||
cp apps/sim/.env.example apps/sim/.env
|
||||
else
|
||||
echo "DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio" > apps/sim/.env
|
||||
fi
|
||||
fi
|
||||
|
||||
# Generate schema and run database migrations
|
||||
echo "🗃️ Running database schema generation and migrations..."
|
||||
echo "Generating schema..."
|
||||
npx drizzle-kit generate
|
||||
cd apps/sim
|
||||
bunx drizzle-kit generate
|
||||
cd ../..
|
||||
|
||||
echo "Waiting for database to be ready..."
|
||||
# Try to connect to the database, but don't fail the script if it doesn't work
|
||||
@@ -44,7 +67,9 @@ echo "Waiting for database to be ready..."
|
||||
while [ $timeout -gt 0 ]; do
|
||||
if PGPASSWORD=postgres psql -h db -U postgres -c '\q' 2>/dev/null; then
|
||||
echo "Database is ready!"
|
||||
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio npx drizzle-kit push
|
||||
cd apps/sim
|
||||
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio bunx drizzle-kit push
|
||||
cd ../..
|
||||
break
|
||||
fi
|
||||
echo "Database is unavailable - sleeping (${timeout}s remaining)"
|
||||
@@ -60,14 +85,15 @@ echo "Waiting for database to be ready..."
|
||||
# Add additional helpful aliases to .bashrc
|
||||
cat << EOF >> ~/.bashrc
|
||||
|
||||
# Additional Sim Studio Development Aliases
|
||||
alias migrate="cd /workspace/sim && DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio npx drizzle-kit push"
|
||||
alias generate="cd /workspace/sim && npx drizzle-kit generate"
|
||||
alias dev="cd /workspace/sim && npm run dev"
|
||||
alias build="cd /workspace/sim && npm run build"
|
||||
alias start="cd /workspace/sim && npm run start"
|
||||
alias lint="cd /workspace/sim && npm run lint"
|
||||
alias test="cd /workspace/sim && npm run test"
|
||||
# Additional Sim Development Aliases
|
||||
alias migrate="cd /workspace/apps/sim && DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio bunx drizzle-kit push"
|
||||
alias generate="cd /workspace/apps/sim && bunx drizzle-kit generate"
|
||||
alias dev="cd /workspace && bun run dev"
|
||||
alias build="cd /workspace && bun run build"
|
||||
alias start="cd /workspace && bun run dev"
|
||||
alias lint="cd /workspace/apps/sim && bun run lint"
|
||||
alias test="cd /workspace && bun run test"
|
||||
alias bun-update="cd /workspace && bun update"
|
||||
EOF
|
||||
|
||||
# Source the .bashrc to make aliases available immediately
|
||||
@@ -78,7 +104,7 @@ unset SIM_WELCOME_SHOWN
|
||||
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "✅ Sim Studio development environment setup complete!"
|
||||
echo "✅ Sim development environment setup complete!"
|
||||
echo ""
|
||||
echo "Your environment is now ready. A new terminal session will show"
|
||||
echo "available commands. You can start the development server with:"
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
# Exclude files from Docker build
|
||||
.git
|
||||
.github
|
||||
node_modules
|
||||
.next
|
||||
.vercel
|
||||
.husky
|
||||
.env
|
||||
.env.*
|
||||
npm-debug.log
|
||||
LICENSE
|
||||
NOTICE
|
||||
.prettierrc
|
||||
.prettierignore
|
||||
README.md
|
||||
.devcontainer
|
||||
.gitignore
|
||||
.husky
|
||||
.github
|
||||
.devcontainer
|
||||
.env.example
|
||||
node_modules
|
||||
26
.github/CODE_OF_CONDUCT.md
vendored
26
.github/CODE_OF_CONDUCT.md
vendored
@@ -1,4 +1,4 @@
|
||||
# Code of Conduct - Sim Studio
|
||||
# Code of Conduct - Sim
|
||||
|
||||
## Our Pledge
|
||||
|
||||
@@ -14,22 +14,22 @@ appearance, race, religion, or sexual identity and orientation.
|
||||
Examples of behaviour that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologising to those affected by our mistakes,
|
||||
- Demonstrating empathy and kindness toward other people
|
||||
- Being respectful of differing opinions, viewpoints, and experiences
|
||||
- Giving and gracefully accepting constructive feedback
|
||||
- Accepting responsibility and apologising to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
- Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behaviour include:
|
||||
|
||||
* The use of sexualised language or imagery, and sexual attention or advances
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
- The use of sexualised language or imagery, and sexual attention or advances
|
||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
@@ -55,7 +55,7 @@ representative at an online or offline event.
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behaviour may be
|
||||
reported to the community leaders responsible for enforcement at <waleed@simstudio.ai>.
|
||||
reported to the community leaders responsible for enforcement at <waleed@sim.ai>.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
@@ -112,4 +112,4 @@ the community.
|
||||
This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org/), version
|
||||
[1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct/code_of_conduct.md) and
|
||||
[2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct/code_of_conduct.md),
|
||||
and was generated by [contributing.md](https://contributing.md/generator).
|
||||
and was generated by [contributing.md](https://contributing.md/generator).
|
||||
|
||||
312
.github/CONTRIBUTING.md
vendored
312
.github/CONTRIBUTING.md
vendored
@@ -1,9 +1,9 @@
|
||||
# Contributing to Sim Studio
|
||||
# Contributing to Sim
|
||||
|
||||
Thank you for your interest in contributing to Sim Studio! Our goal is to provide developers with a powerful, user-friendly platform for building, testing, and optimizing agentic workflows. We welcome contributions in all forms—from bug fixes and design improvements to brand-new features.
|
||||
Thank you for your interest in contributing to Sim! Our goal is to provide developers with a powerful, user-friendly platform for building, testing, and optimizing agentic workflows. We welcome contributions in all forms—from bug fixes and design improvements to brand-new features.
|
||||
|
||||
> **Project Overview:**
|
||||
> Sim Studio is a monorepo containing the main application (`sim/`) and documentation (`docs/`). The main application is built with Next.js (app router), ReactFlow, Zustand, Shadcn, and Tailwind CSS. Please ensure your contributions follow our best practices for clarity, maintainability, and consistency.
|
||||
> Sim is a monorepo using Turborepo, containing the main application (`apps/sim/`), documentation (`apps/docs/`), and shared packages (`packages/`). The main application is built with Next.js (app router), ReactFlow, Zustand, Shadcn, and Tailwind CSS. Please ensure your contributions follow our best practices for clarity, maintainability, and consistency.
|
||||
|
||||
---
|
||||
|
||||
@@ -15,8 +15,6 @@ Thank you for your interest in contributing to Sim Studio! Our goal is to provid
|
||||
- [Commit Message Guidelines](#commit-message-guidelines)
|
||||
- [Local Development Setup](#local-development-setup)
|
||||
- [Adding New Blocks and Tools](#adding-new-blocks-and-tools)
|
||||
- [Local Storage Mode](#local-storage-mode)
|
||||
- [Standalone Build](#standalone-build)
|
||||
- [License](#license)
|
||||
- [Contributor License Agreement (CLA)](#contributor-license-agreement-cla)
|
||||
|
||||
@@ -57,7 +55,7 @@ We strive to keep our workflow as simple as possible. To contribute:
|
||||
```
|
||||
|
||||
7. **Create a Pull Request**
|
||||
Open a pull request against the `main` branch on GitHub. Please provide a clear description of the changes and reference any relevant issues (e.g., `fixes #123`).
|
||||
Open a pull request against the `staging` branch on GitHub. Please provide a clear description of the changes and reference any relevant issues (e.g., `fixes #123`).
|
||||
|
||||
---
|
||||
|
||||
@@ -85,7 +83,7 @@ If you discover a bug or have a feature request, please open an issue in our Git
|
||||
Before creating a pull request:
|
||||
|
||||
- **Ensure Your Branch Is Up-to-Date:**
|
||||
Rebase your branch onto the latest `main` branch to prevent merge conflicts.
|
||||
Rebase your branch onto the latest `staging` branch to prevent merge conflicts.
|
||||
- **Follow the Guidelines:**
|
||||
Make sure your changes are well-tested, follow our coding standards, and include relevant documentation if necessary.
|
||||
|
||||
@@ -130,54 +128,73 @@ Using clear and consistent commit messages makes it easier for everyone to under
|
||||
|
||||
To set up your local development environment:
|
||||
|
||||
### Option 1: Using Docker (Recommended)
|
||||
### Option 1: Using NPM Package (Simplest)
|
||||
|
||||
Docker provides a consistent development environment with all dependencies pre-configured.
|
||||
The easiest way to run Sim locally is using our NPM package:
|
||||
|
||||
1. **Clone the Repository:**
|
||||
```bash
|
||||
npx simstudio
|
||||
```
|
||||
|
||||
```bash
|
||||
git clone https://github.com/<your-username>/sim.git
|
||||
cd sim
|
||||
```
|
||||
After running this command, open [http://localhost:3000/](http://localhost:3000/) in your browser.
|
||||
|
||||
2. **Start the Docker Environment:**
|
||||
#### Options
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
- `-p, --port <port>`: Specify the port to run Sim on (default: 3000)
|
||||
- `--no-pull`: Skip pulling the latest Docker images
|
||||
|
||||
Or use the convenience script which handles environment setup and migrations:
|
||||
#### Requirements
|
||||
|
||||
```bash
|
||||
chmod +x scripts/start_simstudio_docker.sh
|
||||
./scripts/start_simstudio_docker.sh
|
||||
```
|
||||
- Docker must be installed and running on your machine
|
||||
|
||||
This will:
|
||||
### Option 2: Using Docker Compose
|
||||
|
||||
- Start a PostgreSQL database container
|
||||
- Build and run the Next.js application with hot-reloading
|
||||
- Set up all necessary environment variables
|
||||
- Apply database migrations automatically
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://github.com/<your-username>/sim.git
|
||||
cd sim
|
||||
|
||||
3. **View Logs:**
|
||||
# Start Sim
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
```bash
|
||||
docker compose logs -f simstudio
|
||||
```
|
||||
Access the application at [http://localhost:3000/](http://localhost:3000/)
|
||||
|
||||
4. **Make Your Changes:**
|
||||
- Edit files in your local directory
|
||||
- Changes will be automatically reflected thanks to hot-reloading
|
||||
#### Using Local Models
|
||||
|
||||
### Option 2: Using VS Code / Cursor Dev Containers
|
||||
To use local models with Sim:
|
||||
|
||||
1. Install Ollama and pull models:
|
||||
|
||||
```bash
|
||||
# Install Ollama (if not already installed)
|
||||
curl -fsSL https://ollama.ai/install.sh | sh
|
||||
|
||||
# Pull a model (e.g., gemma3:4b)
|
||||
ollama pull gemma3:4b
|
||||
```
|
||||
|
||||
2. Start Sim with local model support:
|
||||
|
||||
```bash
|
||||
# With NVIDIA GPU support
|
||||
docker compose --profile local-gpu -f docker-compose.ollama.yml up -d
|
||||
|
||||
# Without GPU (CPU only)
|
||||
docker compose --profile local-cpu -f docker-compose.ollama.yml up -d
|
||||
|
||||
# If hosting on a server, update the environment variables in the docker-compose.prod.yml file
|
||||
# to include the server's public IP then start again (OLLAMA_URL to i.e. http://1.1.1.1:11434)
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
### Option 3: Using VS Code / Cursor Dev Containers
|
||||
|
||||
Dev Containers provide a consistent and easy-to-use development environment:
|
||||
|
||||
1. **Prerequisites:**
|
||||
|
||||
- Visual Studio Code
|
||||
- Visual Studio Code or Cursor
|
||||
- Docker Desktop
|
||||
- [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension for VS Code
|
||||
|
||||
@@ -188,58 +205,56 @@ Dev Containers provide a consistent and easy-to-use development environment:
|
||||
git clone https://github.com/<your-username>/sim.git
|
||||
cd sim
|
||||
```
|
||||
- Open the project in VS Code
|
||||
- Open the project in VS Code/Cursor
|
||||
- When prompted, click "Reopen in Container" (or press F1 and select "Remote-Containers: Reopen in Container")
|
||||
- Wait for the container to build and initialize
|
||||
- The development environment will be set up in the `sim/` directory
|
||||
|
||||
3. **Start Developing:**
|
||||
|
||||
- Run `bun run dev:full` in the terminal or use the `sim-start` alias
|
||||
- This starts both the main application and the realtime socket server
|
||||
- All dependencies and configurations are automatically set up
|
||||
- Use the provided aliases (like `sim-start`) to run common commands
|
||||
- Your changes will be automatically hot-reloaded
|
||||
|
||||
4. **GitHub Codespaces:**
|
||||
- This setup also works with GitHub Codespaces if you prefer development in the browser
|
||||
- Just click "Code" → "Codespaces" → "Create codespace on main"
|
||||
- Just click "Code" → "Codespaces" → "Create codespace on staging"
|
||||
|
||||
### Option 3: Manual Setup
|
||||
### Option 4: Manual Setup
|
||||
|
||||
If you prefer not to use Docker or Dev Containers:
|
||||
|
||||
1. **Clone the Repository:**
|
||||
```bash
|
||||
git clone https://github.com/<your-username>/sim.git
|
||||
cd sim/sim
|
||||
cd sim
|
||||
bun install
|
||||
```
|
||||
2. **Install Dependencies:**
|
||||
|
||||
- Using NPM:
|
||||
2. **Set Up Environment:**
|
||||
|
||||
- Navigate to the app directory:
|
||||
```bash
|
||||
npm install
|
||||
cd apps/sim
|
||||
```
|
||||
|
||||
3. **Set Up Environment:**
|
||||
|
||||
- Copy `.env.example` to `.env`
|
||||
- Configure database connection and other required authentication variables
|
||||
- Configure required variables (DATABASE_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL)
|
||||
|
||||
4. **Set Up Database:**
|
||||
3. **Set Up Database:**
|
||||
|
||||
- You need a PostgreSQL instance running
|
||||
- Run migrations:
|
||||
```bash
|
||||
npm run db:push
|
||||
```
|
||||
```bash
|
||||
bunx drizzle-kit push
|
||||
```
|
||||
|
||||
5. **Run the Development Server:**
|
||||
4. **Run the Development Server:**
|
||||
|
||||
- With NPM:
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
```bash
|
||||
bun run dev:full
|
||||
```
|
||||
|
||||
6. **Make Your Changes and Test Locally.**
|
||||
This command starts both the main application and the realtime socket server required for full functionality.
|
||||
|
||||
5. **Make Your Changes and Test Locally.**
|
||||
|
||||
### Email Template Development
|
||||
|
||||
@@ -248,7 +263,7 @@ When working on email templates, you can preview them using a local email previe
|
||||
1. **Run the Email Preview Server:**
|
||||
|
||||
```bash
|
||||
npm run email:dev
|
||||
bun run email:dev
|
||||
```
|
||||
|
||||
2. **Access the Preview:**
|
||||
@@ -265,33 +280,33 @@ When working on email templates, you can preview them using a local email previe
|
||||
|
||||
## Adding New Blocks and Tools
|
||||
|
||||
Sim Studio is built in a modular fashion where blocks and tools extend the platform's functionality. To maintain consistency and quality, please follow the guidelines below when adding a new block or tool.
|
||||
Sim is built in a modular fashion where blocks and tools extend the platform's functionality. To maintain consistency and quality, please follow the guidelines below when adding a new block or tool.
|
||||
|
||||
### Where to Add Your Code
|
||||
|
||||
- **Blocks:** Create your new block file under the `/sim/blocks/blocks` directory. The name of the file should match the provider name (e.g., `pinecone.ts`).
|
||||
- **Tools:** Create a new directory under `/sim/tools` with the same name as the provider (e.g., `/sim/tools/pinecone`).
|
||||
- **Blocks:** Create your new block file under the `/apps/sim/blocks/blocks` directory. The name of the file should match the provider name (e.g., `pinecone.ts`).
|
||||
- **Tools:** Create a new directory under `/apps/sim/tools` with the same name as the provider (e.g., `/apps/sim/tools/pinecone`).
|
||||
|
||||
In addition, you will need to update the registries:
|
||||
|
||||
- **Block Registry:** Update the blocks index (`/sim/blocks/index.ts`) to include your new block.
|
||||
- **Tool Registry:** Update the tools registry (`/sim/tools/index.ts`) to add your new tool.
|
||||
- **Block Registry:** Update the blocks index (`/apps/sim/blocks/index.ts`) to include your new block.
|
||||
- **Tool Registry:** Update the tools registry (`/apps/sim/tools/index.ts`) to add your new tool.
|
||||
|
||||
### How to Create a New Block
|
||||
|
||||
1. **Create a New File:**
|
||||
Create a file for your block named after the provider (e.g., `pinecone.ts`) in the `/sim/blocks/blocks` directory.
|
||||
Create a file for your block named after the provider (e.g., `pinecone.ts`) in the `/apps/sim/blocks/blocks` directory.
|
||||
|
||||
2. **Create a New Icon:**
|
||||
Create a new icon for your block in the `/sim/components/icons.tsx` file. The icon should follow the same naming convention as the block (e.g., `PineconeIcon`).
|
||||
Create a new icon for your block in the `/apps/sim/components/icons.tsx` file. The icon should follow the same naming convention as the block (e.g., `PineconeIcon`).
|
||||
|
||||
3. **Define the Block Configuration:**
|
||||
Your block should export a constant of type `BlockConfig`. For example:
|
||||
|
||||
```typescript:/sim/blocks/blocks/pinecone.ts
|
||||
```typescript:/apps/sim/blocks/blocks/pinecone.ts
|
||||
import { PineconeIcon } from '@/components/icons'
|
||||
import { PineconeResponse } from '@/tools/pinecone/types'
|
||||
import { BlockConfig } from '../types'
|
||||
import type { BlockConfig } from '@/blocks/types'
|
||||
import type { PineconeResponse } from '@/tools/pinecone/types'
|
||||
|
||||
export const PineconeBlock: BlockConfig<PineconeResponse> = {
|
||||
type: 'pinecone',
|
||||
@@ -302,22 +317,67 @@ In addition, you will need to update the registries:
|
||||
bgColor: '#123456',
|
||||
icon: PineconeIcon,
|
||||
|
||||
// If this block requires OAuth authentication
|
||||
provider: 'pinecone',
|
||||
|
||||
// Define subBlocks for the UI configuration
|
||||
subBlocks: [
|
||||
// Block configuration options
|
||||
{
|
||||
id: 'operation',
|
||||
title: 'Operation',
|
||||
type: 'dropdown',
|
||||
layout: 'full',
|
||||
required: true,
|
||||
options: [
|
||||
{ label: 'Generate Embeddings', id: 'generate' },
|
||||
{ label: 'Search Text', id: 'search_text' },
|
||||
],
|
||||
value: () => 'generate',
|
||||
},
|
||||
{
|
||||
id: 'apiKey',
|
||||
title: 'API Key',
|
||||
type: 'short-input',
|
||||
layout: 'full',
|
||||
placeholder: 'Your Pinecone API key',
|
||||
password: true,
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
|
||||
tools: {
|
||||
access: ['pinecone_generate_embeddings', 'pinecone_search_text'],
|
||||
config: {
|
||||
tool: (params: Record<string, any>) => {
|
||||
switch (params.operation) {
|
||||
case 'generate':
|
||||
return 'pinecone_generate_embeddings'
|
||||
case 'search_text':
|
||||
return 'pinecone_search_text'
|
||||
default:
|
||||
throw new Error('Invalid operation selected')
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
inputs: {
|
||||
operation: { type: 'string', description: 'Operation to perform' },
|
||||
apiKey: { type: 'string', description: 'Pinecone API key' },
|
||||
searchQuery: { type: 'string', description: 'Search query text' },
|
||||
topK: { type: 'string', description: 'Number of results to return' },
|
||||
},
|
||||
|
||||
outputs: {
|
||||
matches: { type: 'any', description: 'Search results or generated embeddings' },
|
||||
data: { type: 'any', description: 'Response data from Pinecone' },
|
||||
usage: { type: 'any', description: 'API usage statistics' },
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
4. **Register Your Block:**
|
||||
Add your block to the blocks registry (`/sim/blocks/registry.ts`):
|
||||
Add your block to the blocks registry (`/apps/sim/blocks/registry.ts`):
|
||||
|
||||
```typescript:/sim/blocks/registry.ts
|
||||
```typescript:/apps/sim/blocks/registry.ts
|
||||
import { PineconeBlock } from './blocks/pinecone'
|
||||
|
||||
|
||||
// Registry of all available blocks
|
||||
export const registry: Record<string, BlockConfig> = {
|
||||
// ... existing blocks
|
||||
@@ -333,7 +393,7 @@ In addition, you will need to update the registries:
|
||||
### How to Create a New Tool
|
||||
|
||||
1. **Create a New Directory:**
|
||||
Create a directory under `/sim/tools` with the same name as the provider (e.g., `/sim/tools/pinecone`).
|
||||
Create a directory under `/apps/sim/tools` with the same name as the provider (e.g., `/apps/sim/tools/pinecone`).
|
||||
|
||||
2. **Create Tool Files:**
|
||||
Create separate files for each tool functionality with descriptive names (e.g., `fetch.ts`, `generate_embeddings.ts`, `search_text.ts`) in your tool directory.
|
||||
@@ -344,7 +404,7 @@ In addition, you will need to update the registries:
|
||||
4. **Create an Index File:**
|
||||
Create an `index.ts` file in your tool directory that imports and exports all tools:
|
||||
|
||||
```typescript:/sim/tools/pinecone/index.ts
|
||||
```typescript:/apps/sim/tools/pinecone/index.ts
|
||||
import { fetchTool } from './fetch'
|
||||
import { generateEmbeddingsTool } from './generate_embeddings'
|
||||
import { searchTextTool } from './search_text'
|
||||
@@ -355,9 +415,9 @@ In addition, you will need to update the registries:
|
||||
5. **Define the Tool Configuration:**
|
||||
Your tool should export a constant with a naming convention of `{toolName}Tool`. The tool ID should follow the format `{provider}_{tool_name}`. For example:
|
||||
|
||||
```typescript:/sim/tools/pinecone/fetch.ts
|
||||
import { ToolConfig, ToolResponse } from '../types'
|
||||
import { PineconeParams, PineconeResponse } from './types'
|
||||
```typescript:/apps/sim/tools/pinecone/fetch.ts
|
||||
import { ToolConfig, ToolResponse } from '@/tools/types'
|
||||
import { PineconeParams, PineconeResponse } from '@/tools/pinecone/types'
|
||||
|
||||
export const fetchTool: ToolConfig<PineconeParams, PineconeResponse> = {
|
||||
id: 'pinecone_fetch', // Follow the {provider}_{tool_name} format
|
||||
@@ -369,7 +429,18 @@ In addition, you will need to update the registries:
|
||||
provider: 'pinecone', // ID of the OAuth provider
|
||||
|
||||
params: {
|
||||
// Tool parameters
|
||||
parameterName: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm', // Controls parameter visibility
|
||||
description: 'Description of the parameter',
|
||||
},
|
||||
optionalParam: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'user-only',
|
||||
description: 'Optional parameter only user can set',
|
||||
},
|
||||
},
|
||||
request: {
|
||||
// Request configuration
|
||||
@@ -377,17 +448,14 @@ In addition, you will need to update the registries:
|
||||
transformResponse: async (response: Response) => {
|
||||
// Transform response
|
||||
},
|
||||
transformError: (error) => {
|
||||
// Handle errors
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
6. **Register Your Tool:**
|
||||
Update the tools registry in `/sim/tools/index.ts` to include your new tool:
|
||||
Update the tools registry in `/apps/sim/tools/index.ts` to include your new tool:
|
||||
|
||||
```typescript:/sim/tools/index.ts
|
||||
import { fetchTool, generateEmbeddingsTool, searchTextTool } from './pinecone'
|
||||
```typescript:/apps/sim/tools/index.ts
|
||||
import { fetchTool, generateEmbeddingsTool, searchTextTool } from '/@tools/pinecone'
|
||||
// ... other imports
|
||||
|
||||
export const tools: Record<string, ToolConfig> = {
|
||||
@@ -401,6 +469,12 @@ In addition, you will need to update the registries:
|
||||
7. **Test Your Tool:**
|
||||
Ensure that your tool functions correctly by making test requests and verifying the responses.
|
||||
|
||||
8. **Generate Documentation:**
|
||||
Run the documentation generator to create docs for your new tool:
|
||||
```bash
|
||||
./scripts/generate-docs.sh
|
||||
```
|
||||
|
||||
### Naming Conventions
|
||||
|
||||
Maintaining consistent naming across the codebase is critical for auto-generation of tools and documentation. Follow these naming guidelines:
|
||||
@@ -413,11 +487,57 @@ Maintaining consistent naming across the codebase is critical for auto-generatio
|
||||
- **Tool Exports:** Should be named `{toolName}Tool` (e.g., `fetchTool`)
|
||||
- **Tool IDs:** Should follow the format `{provider}_{tool_name}` (e.g., `pinecone_fetch`)
|
||||
|
||||
### Parameter Visibility System
|
||||
|
||||
Sim implements a sophisticated parameter visibility system that controls how parameters are exposed to users and LLMs in agent workflows. Each parameter can have one of four visibility levels:
|
||||
|
||||
| Visibility | User Sees | LLM Sees | How It Gets Set |
|
||||
|-------------|-----------|----------|--------------------------------|
|
||||
| `user-only` | ✅ Yes | ❌ No | User provides in UI |
|
||||
| `user-or-llm` | ✅ Yes | ✅ Yes | User provides OR LLM generates |
|
||||
| `llm-only` | ❌ No | ✅ Yes | LLM generates only |
|
||||
| `hidden` | ❌ No | ❌ No | Application injects at runtime |
|
||||
|
||||
#### Visibility Guidelines
|
||||
|
||||
- **`user-or-llm`**: Use for core parameters that can be provided by users or intelligently filled by the LLM (e.g., search queries, email subjects)
|
||||
- **`user-only`**: Use for configuration parameters, API keys, and settings that only users should control (e.g., number of results, authentication credentials)
|
||||
- **`llm-only`**: Use for computed values that the LLM should handle internally (e.g., dynamic calculations, contextual data)
|
||||
- **`hidden`**: Use for system-level parameters injected at runtime (e.g., OAuth tokens, internal identifiers)
|
||||
|
||||
#### Example Implementation
|
||||
|
||||
```typescript
|
||||
params: {
|
||||
query: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-or-llm', // User can provide or LLM can generate
|
||||
description: 'Search query to execute',
|
||||
},
|
||||
apiKey: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
visibility: 'user-only', // Only user provides this
|
||||
description: 'API key for authentication',
|
||||
},
|
||||
internalId: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
visibility: 'hidden', // System provides this at runtime
|
||||
description: 'Internal tracking identifier',
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
This visibility system ensures clean user interfaces while maintaining full flexibility for LLM-driven workflows.
|
||||
|
||||
### Guidelines & Best Practices
|
||||
|
||||
- **Code Style:** Follow the project's ESLint and Prettier configurations. Use meaningful variable names and small, focused functions.
|
||||
- **Code Style:** Follow the project's Biome configurations. Use meaningful variable names and small, focused functions.
|
||||
- **Documentation:** Clearly document the purpose, inputs, outputs, and any special behavior for your block/tool.
|
||||
- **Error Handling:** Implement robust error handling and provide user-friendly error messages.
|
||||
- **Parameter Visibility:** Always specify the appropriate visibility level for each parameter to ensure proper UI behavior and LLM integration.
|
||||
- **Testing:** Add unit or integration tests to verify your changes when possible.
|
||||
- **Commit Changes:** Update all related components and registries, and describe your changes in your pull request.
|
||||
|
||||
@@ -435,7 +555,7 @@ This project is licensed under the Apache License 2.0. By contributing, you agre
|
||||
|
||||
By contributing to this repository, you agree that your contributions are provided under the terms of the Apache License Version 2.0, as included in the LICENSE file of this repository.
|
||||
|
||||
In addition, by submitting your contributions, you grant Sim Studio, Inc. ("The Licensor") a perpetual, irrevocable, worldwide, royalty-free, sublicensable right and license to:
|
||||
In addition, by submitting your contributions, you grant Sim, Inc. ("The Licensor") a perpetual, irrevocable, worldwide, royalty-free, sublicensable right and license to:
|
||||
|
||||
- Use, copy, modify, distribute, publicly display, publicly perform, and prepare derivative works of your contributions.
|
||||
- Incorporate your contributions into other works or products.
|
||||
@@ -447,4 +567,4 @@ If you do not agree with these terms, you must not contribute your work to this
|
||||
|
||||
---
|
||||
|
||||
Thank you for taking the time to contribute to Sim Studio. We truly appreciate your efforts and look forward to collaborating with you!
|
||||
Thank you for taking the time to contribute to Sim. We truly appreciate your efforts and look forward to collaborating with you!
|
||||
|
||||
5
.github/ISSUE_TEMPLATE/bug_report.md
vendored
5
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG]"
|
||||
title: '[BUG]'
|
||||
labels: bug
|
||||
assignees: ''
|
||||
---
|
||||
@@ -11,6 +11,7 @@ A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
@@ -23,4 +24,4 @@ A clear and concise description of what you expected to happen.
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
Add any other context about the problem here.
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/feature_request.md
vendored
4
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: "[REQUEST]"
|
||||
title: '[REQUEST]'
|
||||
labels: feature
|
||||
assignees: ''
|
||||
---
|
||||
@@ -16,4 +16,4 @@ A clear and concise description of what you want to happen.
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
Add any other context or screenshots about the feature request here.
|
||||
|
||||
55
.github/PULL_REQUEST_TEMPLATE.md
vendored
55
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,42 +1,25 @@
|
||||
## Description
|
||||
## Summary
|
||||
Brief description of what this PR does and why.
|
||||
|
||||
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.
|
||||
Fixes #(issue)
|
||||
|
||||
Fixes # (issue)
|
||||
## Type of Change
|
||||
- [ ] Bug fix
|
||||
- [ ] New feature
|
||||
- [ ] Breaking change
|
||||
- [ ] Documentation
|
||||
- [ ] Other: ___________
|
||||
|
||||
## Type of change
|
||||
## Testing
|
||||
How has this been tested? What should reviewers focus on?
|
||||
|
||||
Please delete options that are not relevant.
|
||||
|
||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||
- [ ] Documentation update
|
||||
- [ ] Security enhancement
|
||||
- [ ] Performance improvement
|
||||
- [ ] Code refactoring (no functional changes)
|
||||
|
||||
## How Has This Been Tested?
|
||||
|
||||
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration.
|
||||
|
||||
## Checklist:
|
||||
|
||||
- [ ] My code follows the style guidelines of this project
|
||||
- [ ] I have performed a self-review of my own code
|
||||
- [ ] I have commented my code, particularly in hard-to-understand areas
|
||||
- [ ] I have added tests that prove my fix is effective or that my feature works
|
||||
- [ ] All tests pass locally and in CI (`npm test`)
|
||||
- [ ] My changes generate no new warnings
|
||||
- [ ] Any dependent changes have been merged and published in downstream modules
|
||||
- [ ] I have updated version numbers as needed (if needed)
|
||||
## Checklist
|
||||
- [ ] Code follows project style guidelines
|
||||
- [ ] Self-reviewed my changes
|
||||
- [ ] Tests added/updated and passing
|
||||
- [ ] No new warnings introduced
|
||||
- [ ] I confirm that I have read and agree to the terms outlined in the [Contributor License Agreement (CLA)](./CONTRIBUTING.md#contributor-license-agreement-cla)
|
||||
|
||||
## Security Considerations:
|
||||
|
||||
- [ ] My changes do not introduce any new security vulnerabilities
|
||||
- [ ] I have considered the security implications of my changes
|
||||
|
||||
## Additional Information:
|
||||
|
||||
Any additional information, configuration or data that might be necessary to reproduce the issue or use the feature.
|
||||
## Screenshots/Videos
|
||||
<!-- If applicable, add screenshots or videos to help explain your changes -->
|
||||
<!-- For UI changes, before/after screenshots are especially helpful -->
|
||||
|
||||
8
.github/SECURITY.md
vendored
8
.github/SECURITY.md
vendored
@@ -6,16 +6,16 @@
|
||||
| ------- | ------------------ |
|
||||
| 0.1.x | :white_check_mark: |
|
||||
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
We take the security of Sim Studio seriously. If you believe you've found a security vulnerability, please follow these steps:
|
||||
We take the security of Sim seriously. If you believe you've found a security vulnerability, please follow these steps:
|
||||
|
||||
1. **Do not disclose the vulnerability publicly** or to any third parties.
|
||||
|
||||
2. **Email us directly** at security@simstudio.ai with details of the vulnerability.
|
||||
2. **Email us directly** at security@sim.ai with details of the vulnerability.
|
||||
|
||||
3. **Include the following information** in your report:
|
||||
|
||||
- Description of the vulnerability
|
||||
- Steps to reproduce
|
||||
- Potential impact
|
||||
@@ -23,4 +23,4 @@ We take the security of Sim Studio seriously. If you believe you've found a secu
|
||||
|
||||
4. We will acknowledge receipt of your vulnerability report within 48 hours and provide an estimated timeline for a fix.
|
||||
|
||||
5. Once the vulnerability is fixed, we will notify you and publicly acknowledge your contribution (unless you prefer to remain anonymous).
|
||||
5. Once the vulnerability is fixed, we will notify you and publicly acknowledge your contribution (unless you prefer to remain anonymous).
|
||||
|
||||
98
.github/dependabot.yml
vendored
98
.github/dependabot.yml
vendored
@@ -1,98 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/sim"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "monday"
|
||||
time: "09:00"
|
||||
# Disable version updates
|
||||
open-pull-requests-limit: 0
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "security"
|
||||
commit-message:
|
||||
prefix: "fix(deps)"
|
||||
prefix-development: "chore(deps)"
|
||||
include: "scope"
|
||||
groups:
|
||||
dependencies:
|
||||
applies-to: security-updates
|
||||
patterns:
|
||||
- "*"
|
||||
|
||||
# Documentation site dependencies (/docs)
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/docs"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "wednesday"
|
||||
# Disable version updates
|
||||
open-pull-requests-limit: 0
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "security"
|
||||
commit-message:
|
||||
prefix: "docs(deps)"
|
||||
include: "scope"
|
||||
groups:
|
||||
docs-dependencies:
|
||||
applies-to: security-updates
|
||||
patterns:
|
||||
- "*"
|
||||
|
||||
# Root-level dependencies (if any)
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "friday"
|
||||
# Disable version updates
|
||||
open-pull-requests-limit: 0
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "security"
|
||||
commit-message:
|
||||
prefix: "chore(deps)"
|
||||
include: "scope"
|
||||
groups:
|
||||
root-dependencies:
|
||||
applies-to: security-updates
|
||||
patterns:
|
||||
- "*"
|
||||
|
||||
# GitHub Actions workflows
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
# Disable version updates
|
||||
open-pull-requests-limit: 0
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "security"
|
||||
commit-message:
|
||||
prefix: "ci(deps)"
|
||||
groups:
|
||||
actions:
|
||||
applies-to: security-updates
|
||||
patterns:
|
||||
- "*"
|
||||
|
||||
# Docker containers (if applicable)
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "monthly"
|
||||
# Disable version updates
|
||||
open-pull-requests-limit: 0
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "security"
|
||||
commit-message:
|
||||
prefix: "docker(deps)"
|
||||
groups:
|
||||
docker:
|
||||
applies-to: security-updates
|
||||
patterns:
|
||||
- "*"
|
||||
272
.github/workflows/ci.yml
vendored
272
.github/workflows/ci.yml
vendored
@@ -2,82 +2,214 @@ name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
branches: [main, staging]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
branches: [main, staging]
|
||||
|
||||
concurrency:
|
||||
group: ci-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
test:
|
||||
test-build:
|
||||
name: Test and Build
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: './sim/package-lock.json'
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./sim
|
||||
run: npm ci
|
||||
|
||||
- name: Fix Rollup module issue
|
||||
working-directory: ./sim
|
||||
run: |
|
||||
rm -rf node_modules package-lock.json
|
||||
npm install
|
||||
|
||||
- name: Run tests with coverage
|
||||
working-directory: ./sim
|
||||
env:
|
||||
NODE_OPTIONS: "--no-warnings"
|
||||
run: npm run test:coverage
|
||||
|
||||
- name: Build application
|
||||
working-directory: ./sim
|
||||
env:
|
||||
NODE_OPTIONS: "--no-warnings"
|
||||
NEXT_PUBLIC_APP_URL: "https://www.simstudio.ai"
|
||||
STRIPE_SECRET_KEY: "dummy_key_for_ci_only"
|
||||
STRIPE_WEBHOOK_SECRET: "dummy_secret_for_ci_only"
|
||||
RESEND_API_KEY: "dummy_key_for_ci_only"
|
||||
AWS_REGION: "us-west-2"
|
||||
run: npm run build
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
directory: ./sim/coverage
|
||||
fail_ci_if_error: false
|
||||
verbose: true
|
||||
uses: ./.github/workflows/test-build.yml
|
||||
secrets: inherit
|
||||
|
||||
migrations:
|
||||
name: Apply Database Migrations
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||
needs: test
|
||||
# Build AMD64 images and push to ECR immediately (+ GHCR for main)
|
||||
build-amd64:
|
||||
name: Build AMD64
|
||||
needs: test-build
|
||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging')
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
id-token: write
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- dockerfile: ./docker/app.Dockerfile
|
||||
ghcr_image: ghcr.io/simstudioai/simstudio
|
||||
ecr_repo_secret: ECR_APP
|
||||
- dockerfile: ./docker/db.Dockerfile
|
||||
ghcr_image: ghcr.io/simstudioai/migrations
|
||||
ecr_repo_secret: ECR_MIGRATIONS
|
||||
- dockerfile: ./docker/realtime.Dockerfile
|
||||
ghcr_image: ghcr.io/simstudioai/realtime
|
||||
ecr_repo_secret: ECR_REALTIME
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: './sim/package-lock.json'
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./sim
|
||||
run: npm ci
|
||||
|
||||
- name: Apply migrations
|
||||
working-directory: ./sim
|
||||
env:
|
||||
DATABASE_URL: ${{ secrets.DATABASE_URL }}
|
||||
run: npx drizzle-kit push
|
||||
role-to-assume: ${{ github.ref == 'refs/heads/main' && secrets.AWS_ROLE_TO_ASSUME || secrets.STAGING_AWS_ROLE_TO_ASSUME }}
|
||||
aws-region: ${{ github.ref == 'refs/heads/main' && secrets.AWS_REGION || secrets.STAGING_AWS_REGION }}
|
||||
|
||||
- name: Login to Amazon ECR
|
||||
id: login-ecr
|
||||
uses: aws-actions/amazon-ecr-login@v2
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Login to GHCR
|
||||
if: github.ref == 'refs/heads/main'
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: useblacksmith/setup-docker-builder@v1
|
||||
|
||||
- name: Generate tags
|
||||
id: meta
|
||||
run: |
|
||||
ECR_REGISTRY="${{ steps.login-ecr.outputs.registry }}"
|
||||
ECR_REPO="${{ secrets[matrix.ecr_repo_secret] }}"
|
||||
GHCR_IMAGE="${{ matrix.ghcr_image }}"
|
||||
|
||||
# ECR tags (always build for ECR)
|
||||
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
|
||||
ECR_TAG="latest"
|
||||
else
|
||||
ECR_TAG="staging"
|
||||
fi
|
||||
ECR_IMAGE="${ECR_REGISTRY}/${ECR_REPO}:${ECR_TAG}"
|
||||
|
||||
# Build tags list
|
||||
TAGS="${ECR_IMAGE}"
|
||||
|
||||
# Add GHCR tags only for main branch
|
||||
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
|
||||
GHCR_AMD64="${GHCR_IMAGE}:latest-amd64"
|
||||
GHCR_SHA="${GHCR_IMAGE}:${{ github.sha }}-amd64"
|
||||
TAGS="${TAGS},$GHCR_AMD64,$GHCR_SHA"
|
||||
fi
|
||||
|
||||
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push images
|
||||
uses: useblacksmith/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
platforms: linux/amd64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
provenance: false
|
||||
sbom: false
|
||||
|
||||
# Build ARM64 images for GHCR (main branch only, runs in parallel)
|
||||
build-ghcr-arm64:
|
||||
name: Build ARM64 (GHCR Only)
|
||||
needs: test-build
|
||||
runs-on: linux-arm64-8-core
|
||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- dockerfile: ./docker/app.Dockerfile
|
||||
image: ghcr.io/simstudioai/simstudio
|
||||
- dockerfile: ./docker/db.Dockerfile
|
||||
image: ghcr.io/simstudioai/migrations
|
||||
- dockerfile: ./docker/realtime.Dockerfile
|
||||
image: ghcr.io/simstudioai/realtime
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: useblacksmith/setup-docker-builder@v1
|
||||
|
||||
- name: Generate ARM64 tags
|
||||
id: meta
|
||||
run: |
|
||||
IMAGE="${{ matrix.image }}"
|
||||
echo "tags=${IMAGE}:latest-arm64,${IMAGE}:${{ github.sha }}-arm64" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push ARM64 to GHCR
|
||||
uses: useblacksmith/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
platforms: linux/arm64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
provenance: false
|
||||
sbom: false
|
||||
|
||||
# Create GHCR multi-arch manifests (only for main, after both builds)
|
||||
create-ghcr-manifests:
|
||||
name: Create GHCR Manifests
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
needs: [build-amd64, build-ghcr-arm64]
|
||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||
permissions:
|
||||
packages: write
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- image: ghcr.io/simstudioai/simstudio
|
||||
- image: ghcr.io/simstudioai/migrations
|
||||
- image: ghcr.io/simstudioai/realtime
|
||||
|
||||
steps:
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Create and push manifests
|
||||
run: |
|
||||
IMAGE_BASE="${{ matrix.image }}"
|
||||
|
||||
# Create latest manifest
|
||||
docker manifest create "${IMAGE_BASE}:latest" \
|
||||
"${IMAGE_BASE}:latest-amd64" \
|
||||
"${IMAGE_BASE}:latest-arm64"
|
||||
docker manifest push "${IMAGE_BASE}:latest"
|
||||
|
||||
# Create SHA manifest
|
||||
docker manifest create "${IMAGE_BASE}:${{ github.sha }}" \
|
||||
"${IMAGE_BASE}:${{ github.sha }}-amd64" \
|
||||
"${IMAGE_BASE}:${{ github.sha }}-arm64"
|
||||
docker manifest push "${IMAGE_BASE}:${{ github.sha }}"
|
||||
|
||||
# Deploy Trigger.dev (after ECR images are pushed, runs in parallel with process-docs)
|
||||
trigger-deploy:
|
||||
name: Deploy Trigger.dev
|
||||
needs: build-amd64
|
||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging')
|
||||
uses: ./.github/workflows/trigger-deploy.yml
|
||||
secrets: inherit
|
||||
|
||||
# Process docs embeddings (after ECR images are pushed, runs in parallel with trigger-deploy)
|
||||
process-docs:
|
||||
name: Process Docs
|
||||
needs: build-amd64
|
||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging')
|
||||
uses: ./.github/workflows/docs-embeddings.yml
|
||||
secrets: inherit
|
||||
|
||||
35
.github/workflows/docs-embeddings.yml
vendored
Normal file
35
.github/workflows/docs-embeddings.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
name: Process Docs Embeddings
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch: # Allow manual triggering
|
||||
|
||||
jobs:
|
||||
process-docs-embeddings:
|
||||
name: Process Documentation Embeddings
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/staging'
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: latest
|
||||
|
||||
- name: Install dependencies
|
||||
run: bun install
|
||||
|
||||
- name: Process docs embeddings
|
||||
working-directory: ./apps/sim
|
||||
env:
|
||||
DATABASE_URL: ${{ github.ref == 'refs/heads/main' && secrets.DATABASE_URL || secrets.STAGING_DATABASE_URL }}
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
run: bun run scripts/process-docs-embeddings.ts --clear
|
||||
159
.github/workflows/i18n.yml
vendored
Normal file
159
.github/workflows/i18n.yml
vendored
Normal file
@@ -0,0 +1,159 @@
|
||||
name: 'Auto-translate Documentation'
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ staging ]
|
||||
paths:
|
||||
- 'apps/docs/content/docs/en/**'
|
||||
- 'apps/docs/i18n.json'
|
||||
workflow_dispatch: # Allow manual triggers
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
translate:
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
if: github.actor != 'github-actions[bot]' # Prevent infinite loops
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Run Lingo.dev translations
|
||||
env:
|
||||
LINGODOTDEV_API_KEY: ${{ secrets.LINGODOTDEV_API_KEY }}
|
||||
run: |
|
||||
cd apps/docs
|
||||
bunx lingo.dev@latest i18n
|
||||
|
||||
- name: Check for translation changes
|
||||
id: changes
|
||||
run: |
|
||||
cd apps/docs
|
||||
git config --local user.email "action@github.com"
|
||||
git config --local user.name "GitHub Action"
|
||||
|
||||
if [ -n "$(git status --porcelain content/docs)" ]; then
|
||||
echo "changes=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "changes=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Create Pull Request with translations
|
||||
if: steps.changes.outputs.changes == 'true'
|
||||
uses: peter-evans/create-pull-request@v5
|
||||
with:
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
commit-message: "feat(i18n): update translations"
|
||||
title: "feat(i18n): update translations"
|
||||
body: |
|
||||
## Summary
|
||||
Automated translation updates triggered by changes to documentation.
|
||||
|
||||
This PR was automatically created after content changes were made, updating translations for all supported languages using Lingo.dev AI translation engine.
|
||||
|
||||
**Original trigger**: ${{ github.event.head_commit.message }}
|
||||
**Commit**: ${{ github.sha }}
|
||||
**Workflow**: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
|
||||
## Type of Change
|
||||
- [ ] Bug fix
|
||||
- [ ] New feature
|
||||
- [ ] Breaking change
|
||||
- [x] Documentation
|
||||
- [ ] Other: ___________
|
||||
|
||||
## Testing
|
||||
This PR includes automated translations for modified English documentation content:
|
||||
- 🇪🇸 Spanish (es) translations
|
||||
- 🇫🇷 French (fr) translations
|
||||
- 🇨🇳 Chinese (zh) translations
|
||||
- 🇯🇵 Japanese (ja) translations
|
||||
- 🇩🇪 German (de) translations
|
||||
|
||||
**What reviewers should focus on:**
|
||||
- Verify translated content accuracy and context
|
||||
- Check that all links and references work correctly in translated versions
|
||||
- Ensure formatting, code blocks, and structure are preserved
|
||||
- Validate that technical terms are appropriately translated
|
||||
|
||||
## Checklist
|
||||
- [x] Code follows project style guidelines (automated translation)
|
||||
- [x] Self-reviewed my changes (automated process)
|
||||
- [ ] Tests added/updated and passing
|
||||
- [x] No new warnings introduced
|
||||
- [x] I confirm that I have read and agree to the terms outlined in the [Contributor License Agreement (CLA)](./CONTRIBUTING.md#contributor-license-agreement-cla)
|
||||
|
||||
## Screenshots/Videos
|
||||
<!-- Translation changes are text-based - no visual changes expected -->
|
||||
<!-- Reviewers should check the documentation site renders correctly for all languages -->
|
||||
branch: auto-translate/staging-merge-${{ github.run_id }}
|
||||
base: staging
|
||||
labels: |
|
||||
i18n
|
||||
|
||||
verify-translations:
|
||||
needs: translate
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
if: always() # Run even if translation fails
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: staging
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
cd apps/docs
|
||||
bun install
|
||||
|
||||
- name: Build documentation to verify translations
|
||||
run: |
|
||||
cd apps/docs
|
||||
bun run build
|
||||
|
||||
- name: Report translation status
|
||||
run: |
|
||||
cd apps/docs
|
||||
echo "## Translation Status Report" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Triggered by merge to staging branch**" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
en_count=$(find content/docs/en -name "*.mdx" | wc -l)
|
||||
es_count=$(find content/docs/es -name "*.mdx" 2>/dev/null | wc -l || echo 0)
|
||||
fr_count=$(find content/docs/fr -name "*.mdx" 2>/dev/null | wc -l || echo 0)
|
||||
zh_count=$(find content/docs/zh -name "*.mdx" 2>/dev/null | wc -l || echo 0)
|
||||
ja_count=$(find content/docs/ja -name "*.mdx" 2>/dev/null | wc -l || echo 0)
|
||||
de_count=$(find content/docs/de -name "*.mdx" 2>/dev/null | wc -l || echo 0)
|
||||
|
||||
es_percentage=$((es_count * 100 / en_count))
|
||||
fr_percentage=$((fr_count * 100 / en_count))
|
||||
zh_percentage=$((zh_count * 100 / en_count))
|
||||
ja_percentage=$((ja_count * 100 / en_count))
|
||||
de_percentage=$((de_count * 100 / en_count))
|
||||
|
||||
echo "### Coverage Statistics" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **🇬🇧 English**: $en_count files (source)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **🇪🇸 Spanish**: $es_count/$en_count files ($es_percentage%)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **🇫🇷 French**: $fr_count/$en_count files ($fr_percentage%)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **🇨🇳 Chinese**: $zh_count/$en_count files ($zh_percentage%)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **🇯🇵 Japanese**: $ja_count/$en_count files ($ja_percentage%)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- **🇩🇪 German**: $de_count/$en_count files ($de_percentage%)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "🔄 **Auto-translation PR**: Check for new pull request with updated translations" >> $GITHUB_STEP_SUMMARY
|
||||
181
.github/workflows/images.yml
vendored
Normal file
181
.github/workflows/images.yml
vendored
Normal file
@@ -0,0 +1,181 @@
|
||||
name: Build and Push Images
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
id-token: write
|
||||
|
||||
jobs:
|
||||
build-amd64:
|
||||
name: Build AMD64
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- dockerfile: ./docker/app.Dockerfile
|
||||
ghcr_image: ghcr.io/simstudioai/simstudio
|
||||
ecr_repo_secret: ECR_APP
|
||||
- dockerfile: ./docker/db.Dockerfile
|
||||
ghcr_image: ghcr.io/simstudioai/migrations
|
||||
ecr_repo_secret: ECR_MIGRATIONS
|
||||
- dockerfile: ./docker/realtime.Dockerfile
|
||||
ghcr_image: ghcr.io/simstudioai/realtime
|
||||
ecr_repo_secret: ECR_REALTIME
|
||||
outputs:
|
||||
registry: ${{ steps.login-ecr.outputs.registry }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure AWS credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
role-to-assume: ${{ github.ref == 'refs/heads/main' && secrets.AWS_ROLE_TO_ASSUME || secrets.STAGING_AWS_ROLE_TO_ASSUME }}
|
||||
aws-region: ${{ github.ref == 'refs/heads/main' && secrets.AWS_REGION || secrets.STAGING_AWS_REGION }}
|
||||
|
||||
- name: Login to Amazon ECR
|
||||
id: login-ecr
|
||||
uses: aws-actions/amazon-ecr-login@v2
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Login to GHCR
|
||||
if: github.ref == 'refs/heads/main'
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: useblacksmith/setup-docker-builder@v1
|
||||
|
||||
- name: Generate tags
|
||||
id: meta
|
||||
run: |
|
||||
ECR_REGISTRY="${{ steps.login-ecr.outputs.registry }}"
|
||||
ECR_REPO="${{ secrets[matrix.ecr_repo_secret] }}"
|
||||
GHCR_IMAGE="${{ matrix.ghcr_image }}"
|
||||
|
||||
# ECR tags (always build for ECR)
|
||||
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
|
||||
ECR_TAG="latest"
|
||||
else
|
||||
ECR_TAG="staging"
|
||||
fi
|
||||
ECR_IMAGE="${ECR_REGISTRY}/${ECR_REPO}:${ECR_TAG}"
|
||||
|
||||
# Build tags list
|
||||
TAGS="${ECR_IMAGE}"
|
||||
|
||||
# Add GHCR tags only for main branch
|
||||
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
|
||||
GHCR_AMD64="${GHCR_IMAGE}:latest-amd64"
|
||||
GHCR_SHA="${GHCR_IMAGE}:${{ github.sha }}-amd64"
|
||||
TAGS="${TAGS},$GHCR_AMD64,$GHCR_SHA"
|
||||
fi
|
||||
|
||||
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push images
|
||||
uses: useblacksmith/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
platforms: linux/amd64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
provenance: false
|
||||
sbom: false
|
||||
|
||||
build-ghcr-arm64:
|
||||
name: Build ARM64 (GHCR Only)
|
||||
runs-on: linux-arm64-8-core
|
||||
if: github.ref == 'refs/heads/main'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- dockerfile: ./docker/app.Dockerfile
|
||||
image: ghcr.io/simstudioai/simstudio
|
||||
- dockerfile: ./docker/db.Dockerfile
|
||||
image: ghcr.io/simstudioai/migrations
|
||||
- dockerfile: ./docker/realtime.Dockerfile
|
||||
image: ghcr.io/simstudioai/realtime
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: useblacksmith/setup-docker-builder@v1
|
||||
|
||||
- name: Generate ARM64 tags
|
||||
id: meta
|
||||
run: |
|
||||
IMAGE="${{ matrix.image }}"
|
||||
echo "tags=${IMAGE}:latest-arm64,${IMAGE}:${{ github.sha }}-arm64" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build and push ARM64 to GHCR
|
||||
uses: useblacksmith/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
file: ${{ matrix.dockerfile }}
|
||||
platforms: linux/arm64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
provenance: false
|
||||
sbom: false
|
||||
|
||||
create-ghcr-manifests:
|
||||
name: Create GHCR Manifests
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
needs: [build-amd64, build-ghcr-arm64]
|
||||
if: github.ref == 'refs/heads/main'
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- image: ghcr.io/simstudioai/simstudio
|
||||
- image: ghcr.io/simstudioai/migrations
|
||||
- image: ghcr.io/simstudioai/realtime
|
||||
|
||||
steps:
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Create and push manifests
|
||||
run: |
|
||||
IMAGE_BASE="${{ matrix.image }}"
|
||||
|
||||
# Create latest manifest
|
||||
docker manifest create "${IMAGE_BASE}:latest" \
|
||||
"${IMAGE_BASE}:latest-amd64" \
|
||||
"${IMAGE_BASE}:latest-arm64"
|
||||
docker manifest push "${IMAGE_BASE}:latest"
|
||||
|
||||
# Create SHA manifest
|
||||
docker manifest create "${IMAGE_BASE}:${{ github.sha }}" \
|
||||
"${IMAGE_BASE}:${{ github.sha }}-amd64" \
|
||||
"${IMAGE_BASE}:${{ github.sha }}-arm64"
|
||||
docker manifest push "${IMAGE_BASE}:${{ github.sha }}"
|
||||
28
.github/workflows/migrations.yml
vendored
Normal file
28
.github/workflows/migrations.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
name: Database Migrations
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
migrate:
|
||||
name: Apply Database Migrations
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Install dependencies
|
||||
run: bun install
|
||||
|
||||
- name: Apply migrations
|
||||
working-directory: ./packages/db
|
||||
env:
|
||||
DATABASE_URL: ${{ github.ref == 'refs/heads/main' && secrets.DATABASE_URL || secrets.STAGING_DATABASE_URL }}
|
||||
run: bunx drizzle-kit migrate --config=./drizzle.config.ts
|
||||
58
.github/workflows/publish-cli.yml
vendored
Normal file
58
.github/workflows/publish-cli.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
name: Publish CLI Package
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'packages/cli/**'
|
||||
|
||||
jobs:
|
||||
publish-npm:
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Setup Node.js for npm publishing
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18'
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: packages/cli
|
||||
run: bun install
|
||||
|
||||
- name: Build package
|
||||
working-directory: packages/cli
|
||||
run: bun run build
|
||||
|
||||
- name: Get package version
|
||||
id: package_version
|
||||
working-directory: packages/cli
|
||||
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Check if version already exists
|
||||
id: version_check
|
||||
run: |
|
||||
if npm view simstudio@${{ steps.package_version.outputs.version }} version &> /dev/null; then
|
||||
echo "exists=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "exists=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Publish to npm
|
||||
if: steps.version_check.outputs.exists == 'false'
|
||||
working-directory: packages/cli
|
||||
run: npm publish --access=public
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
- name: Log skipped publish
|
||||
if: steps.version_check.outputs.exists == 'true'
|
||||
run: echo "Skipped publishing because version ${{ steps.package_version.outputs.version }} already exists on npm"
|
||||
89
.github/workflows/publish-python-sdk.yml
vendored
Normal file
89
.github/workflows/publish-python-sdk.yml
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
name: Publish Python SDK
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'packages/python-sdk/**'
|
||||
|
||||
jobs:
|
||||
publish-pypi:
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install build dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install build twine pytest requests tomli
|
||||
|
||||
- name: Run tests
|
||||
working-directory: packages/python-sdk
|
||||
run: |
|
||||
PYTHONPATH=. pytest tests/ -v
|
||||
|
||||
- name: Get package version
|
||||
id: package_version
|
||||
working-directory: packages/python-sdk
|
||||
run: echo "version=$(python -c "import tomli; print(tomli.load(open('pyproject.toml', 'rb'))['project']['version'])")" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Check if version already exists
|
||||
id: version_check
|
||||
run: |
|
||||
if pip index versions simstudio-sdk | grep -q "${{ steps.package_version.outputs.version }}"; then
|
||||
echo "exists=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "exists=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Build package
|
||||
if: steps.version_check.outputs.exists == 'false'
|
||||
working-directory: packages/python-sdk
|
||||
run: python -m build
|
||||
|
||||
- name: Check package
|
||||
if: steps.version_check.outputs.exists == 'false'
|
||||
working-directory: packages/python-sdk
|
||||
run: twine check dist/*
|
||||
|
||||
- name: Publish to PyPI
|
||||
if: steps.version_check.outputs.exists == 'false'
|
||||
working-directory: packages/python-sdk
|
||||
env:
|
||||
TWINE_USERNAME: __token__
|
||||
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
||||
run: twine upload dist/*
|
||||
|
||||
- name: Log skipped publish
|
||||
if: steps.version_check.outputs.exists == 'true'
|
||||
run: echo "Skipped publishing because version ${{ steps.package_version.outputs.version }} already exists on PyPI"
|
||||
|
||||
- name: Create GitHub Release
|
||||
if: steps.version_check.outputs.exists == 'false'
|
||||
uses: softprops/action-gh-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: python-sdk-v${{ steps.package_version.outputs.version }}
|
||||
name: Python SDK v${{ steps.package_version.outputs.version }}
|
||||
body: |
|
||||
## Python SDK v${{ steps.package_version.outputs.version }}
|
||||
|
||||
Published simstudio-sdk==${{ steps.package_version.outputs.version }} to PyPI.
|
||||
|
||||
### Installation
|
||||
```bash
|
||||
pip install simstudio-sdk==${{ steps.package_version.outputs.version }}
|
||||
```
|
||||
|
||||
### Documentation
|
||||
See the [README](https://github.com/simstudio/sim/tree/main/packages/python-sdk) for usage instructions.
|
||||
draft: false
|
||||
prerelease: false
|
||||
85
.github/workflows/publish-ts-sdk.yml
vendored
Normal file
85
.github/workflows/publish-ts-sdk.yml
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
name: Publish TypeScript SDK
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'packages/ts-sdk/**'
|
||||
|
||||
jobs:
|
||||
publish-npm:
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Setup Node.js for npm publishing
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18'
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: packages/ts-sdk
|
||||
run: bun install
|
||||
|
||||
- name: Run tests
|
||||
working-directory: packages/ts-sdk
|
||||
run: bun run test
|
||||
|
||||
- name: Build package
|
||||
working-directory: packages/ts-sdk
|
||||
run: bun run build
|
||||
|
||||
- name: Get package version
|
||||
id: package_version
|
||||
working-directory: packages/ts-sdk
|
||||
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Check if version already exists
|
||||
id: version_check
|
||||
run: |
|
||||
if npm view simstudio-ts-sdk@${{ steps.package_version.outputs.version }} version &> /dev/null; then
|
||||
echo "exists=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "exists=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Publish to npm
|
||||
if: steps.version_check.outputs.exists == 'false'
|
||||
working-directory: packages/ts-sdk
|
||||
run: npm publish --access=public
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
- name: Log skipped publish
|
||||
if: steps.version_check.outputs.exists == 'true'
|
||||
run: echo "Skipped publishing because version ${{ steps.package_version.outputs.version }} already exists on npm"
|
||||
|
||||
- name: Create GitHub Release
|
||||
if: steps.version_check.outputs.exists == 'false'
|
||||
uses: softprops/action-gh-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: typescript-sdk-v${{ steps.package_version.outputs.version }}
|
||||
name: TypeScript SDK v${{ steps.package_version.outputs.version }}
|
||||
body: |
|
||||
## TypeScript SDK v${{ steps.package_version.outputs.version }}
|
||||
|
||||
Published simstudio-ts-sdk@${{ steps.package_version.outputs.version }} to npm.
|
||||
|
||||
### Installation
|
||||
```bash
|
||||
npm install simstudio-ts-sdk@${{ steps.package_version.outputs.version }}
|
||||
```
|
||||
|
||||
### Documentation
|
||||
See the [README](https://github.com/simstudio/sim/tree/main/packages/ts-sdk) for usage instructions.
|
||||
draft: false
|
||||
prerelease: false
|
||||
54
.github/workflows/test-build.yml
vendored
Normal file
54
.github/workflows/test-build.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
name: Test and Build
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
test-build:
|
||||
name: Test and Build
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: latest
|
||||
|
||||
- name: Install dependencies
|
||||
run: bun install --frozen-lockfile
|
||||
|
||||
- name: Run tests with coverage
|
||||
env:
|
||||
NODE_OPTIONS: '--no-warnings'
|
||||
NEXT_PUBLIC_APP_URL: 'https://www.sim.ai'
|
||||
DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/simstudio'
|
||||
ENCRYPTION_KEY: '7cf672e460e430c1fba707575c2b0e2ad5a99dddf9b7b7e3b5646e630861db1c' # dummy key for CI only
|
||||
run: bun run test
|
||||
|
||||
- name: Build application
|
||||
env:
|
||||
NODE_OPTIONS: '--no-warnings'
|
||||
NEXT_PUBLIC_APP_URL: 'https://www.sim.ai'
|
||||
DATABASE_URL: 'postgresql://postgres:postgres@localhost:5432/simstudio'
|
||||
STRIPE_SECRET_KEY: 'dummy_key_for_ci_only'
|
||||
STRIPE_WEBHOOK_SECRET: 'dummy_secret_for_ci_only'
|
||||
RESEND_API_KEY: 'dummy_key_for_ci_only'
|
||||
AWS_REGION: 'us-west-2'
|
||||
ENCRYPTION_KEY: '7cf672e460e430c1fba707575c2b0e2ad5a99dddf9b7b7e3b5646e630861db1c' # dummy key for CI only
|
||||
run: bun run build
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v5
|
||||
with:
|
||||
directory: ./apps/sim/coverage
|
||||
fail_ci_if_error: false
|
||||
verbose: true
|
||||
44
.github/workflows/trigger-deploy.yml
vendored
Normal file
44
.github/workflows/trigger-deploy.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
name: Trigger.dev Deploy
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Deploy to Trigger.dev
|
||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
||||
concurrency:
|
||||
group: trigger-deploy-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
env:
|
||||
TRIGGER_ACCESS_TOKEN: ${{ secrets.TRIGGER_ACCESS_TOKEN }}
|
||||
TRIGGER_PROJECT_ID: ${{ secrets.TRIGGER_PROJECT_ID }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: latest
|
||||
|
||||
- name: Setup Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
bun-version: latest
|
||||
|
||||
- name: Install dependencies
|
||||
run: bun install
|
||||
|
||||
- name: Deploy to Trigger.dev (Staging)
|
||||
if: github.ref == 'refs/heads/staging'
|
||||
working-directory: ./apps/sim
|
||||
run: npx --yes trigger.dev@4.0.4 deploy -e staging
|
||||
|
||||
- name: Deploy to Trigger.dev (Production)
|
||||
if: github.ref == 'refs/heads/main'
|
||||
working-directory: ./apps/sim
|
||||
run: npx --yes trigger.dev@4.0.4 deploy
|
||||
|
||||
50
.gitignore
vendored
50
.gitignore
vendored
@@ -1,28 +1,23 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
*/node_modules
|
||||
docs/node_modules
|
||||
/node_modules
|
||||
/apps/**/node_modules
|
||||
/packages/**/node_modules
|
||||
/.pnp
|
||||
.pnp.*
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/versions
|
||||
/scripts/node_modules
|
||||
|
||||
# bun specific
|
||||
bun-debug.log*
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
/apps/**/coverage
|
||||
|
||||
# next.js
|
||||
/.next/
|
||||
sim/.next/
|
||||
sim/out/
|
||||
sim/build
|
||||
docs/.next/
|
||||
docs/out/
|
||||
docs/build
|
||||
/apps/**/out/
|
||||
/apps/**/.next/
|
||||
/apps/**/build
|
||||
|
||||
# production
|
||||
/build
|
||||
@@ -35,12 +30,6 @@ sim-standalone.tar.gz
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# env files
|
||||
.env
|
||||
*.env
|
||||
@@ -60,17 +49,24 @@ next-env.d.ts
|
||||
.cursorrules
|
||||
|
||||
# docs
|
||||
docs/.source
|
||||
docs/.contentlayer
|
||||
docs/.content-collections
|
||||
/apps/docs/.source
|
||||
/apps/docs/.contentlayer
|
||||
/apps/docs/.content-collections
|
||||
|
||||
# database instantiation
|
||||
**/postgres_data/
|
||||
|
||||
# file uploads
|
||||
uploads/
|
||||
|
||||
# collector configuration
|
||||
collector-config.yaml
|
||||
docker-compose.collector.yml
|
||||
start-collector.sh
|
||||
|
||||
# Turborepo
|
||||
.turbo
|
||||
|
||||
# VSCode
|
||||
.vscode
|
||||
|
||||
## Helm Chart Tests
|
||||
helm/sim/test
|
||||
i18n.cache
|
||||
|
||||
@@ -1 +1 @@
|
||||
cd sim && npx lint-staged
|
||||
bunx lint-staged
|
||||
21
Dockerfile
21
Dockerfile
@@ -1,21 +0,0 @@
|
||||
FROM node:20-alpine
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy the entire sim directory
|
||||
COPY sim/ ./
|
||||
|
||||
# Create the .env file if it doesn't exist
|
||||
RUN touch .env
|
||||
|
||||
# Install dependencies
|
||||
RUN npm install
|
||||
|
||||
# Generate database schema
|
||||
RUN npx drizzle-kit generate
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
# Run migrations and start the app
|
||||
CMD npx drizzle-kit push && npm run dev
|
||||
2
NOTICE
2
NOTICE
@@ -1,4 +1,4 @@
|
||||
Sim Studio
|
||||
Copyright 2025 Sim Studio
|
||||
|
||||
This product includes software developed for the Sim Studio project.
|
||||
This product includes software developed for the Sim project.
|
||||
282
README.md
282
README.md
@@ -1,184 +1,192 @@
|
||||
<p align="center">
|
||||
<img src="sim/public/static/sim.png" alt="Sim Studio Logo" width="500"/>
|
||||
<a href="https://sim.ai" target="_blank" rel="noopener noreferrer">
|
||||
<img src="apps/sim/public/logo/reverse/text/large.png" alt="Sim Logo" width="500"/>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center">Build and deploy AI agent workflows in minutes.</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://sim.ai" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/sim.ai-6F3DFA" alt="Sim.ai"></a>
|
||||
<a href="https://discord.gg/Hr4UWYEcTT" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/Discord-Join%20Server-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
|
||||
<a href="https://x.com/simdotai" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/twitter/follow/simstudioai?style=social" alt="Twitter"></a>
|
||||
<a href="https://docs.sim.ai" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/Docs-6F3DFA.svg" alt="Documentation"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.apache.org/licenses/LICENSE-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache-2.0"></a>
|
||||
<a href="https://discord.gg/Hr4UWYEcTT"><img src="https://img.shields.io/badge/Discord-Join%20Server-7289DA?logo=discord&logoColor=white" alt="Discord"></a>
|
||||
<a href="https://x.com/simstudioai"><img src="https://img.shields.io/twitter/follow/simstudioai?style=social" alt="Twitter"></a>
|
||||
<a href="https://github.com/simstudioai/sim/pulls"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome"></a>
|
||||
<a href="https://docs.simstudio.ai"><img src="https://img.shields.io/badge/Docs-visit%20documentation-blue.svg" alt="Documentation"></a>
|
||||
<img src="apps/sim/public/static/demo.gif" alt="Sim Demo" width="800"/>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<strong>Sim Studio</strong> is a lightweight, user-friendly platform for building AI agent workflows.
|
||||
</p>
|
||||
## Quickstart
|
||||
|
||||
## Run
|
||||
### Cloud-hosted: [sim.ai](https://sim.ai)
|
||||
|
||||
1. Run on our [cloud-hosted version](https://simstudio.ai)
|
||||
2. Self-host
|
||||
<a href="https://sim.ai" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/sim.ai-6F3DFA?logo=data:image/svg%2bxml;base64,PHN2ZyB3aWR0aD0iNjE2IiBoZWlnaHQ9IjYxNiIgdmlld0JveD0iMCAwIDYxNiA2MTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTU5XzMxMykiPgo8cGF0aCBkPSJNNjE2IDBIMFY2MTZINjE2VjBaIiBmaWxsPSIjNkYzREZBIi8+CjxwYXRoIGQ9Ik04MyAzNjUuNTY3SDExM0MxMTMgMzczLjgwNSAxMTYgMzgwLjM3MyAxMjIgMzg1LjI3MkMxMjggMzg5Ljk0OCAxMzYuMTExIDM5Mi4yODUgMTQ2LjMzMyAzOTIuMjg1QzE1Ny40NDQgMzkyLjI4NSAxNjYgMzkwLjE3MSAxNzIgMzg1LjkzOUMxNzcuOTk5IDM4MS40ODcgMTgxIDM3NS41ODYgMTgxIDM2OC4yMzlDMTgxIDM2Mi44OTUgMTc5LjMzMyAzNTguNDQyIDE3NiAzNTQuODhDMTcyLjg4OSAzNTEuMzE4IDE2Ny4xMTEgMzQ4LjQyMiAxNTguNjY3IDM0Ni4xOTZMMTMwIDMzOS41MTdDMTE1LjU1NSAzMzUuOTU1IDEwNC43NzggMzMwLjQ5OSA5Ny42NjY1IDMyMy4xNTFDOTAuNzc3NSAzMTUuODA0IDg3LjMzMzQgMzA2LjExOSA4Ny4zMzM0IDI5NC4wOTZDODcuMzMzNCAyODQuMDc2IDg5Ljg4OSAyNzUuMzkyIDk0Ljk5OTYgMjY4LjA0NUMxMDAuMzMzIDI2MC42OTcgMTA3LjU1NSAyNTUuMDIgMTE2LjY2NiAyNTEuMDEyQzEyNiAyNDcuMDA0IDEzNi42NjcgMjQ1IDE0OC42NjYgMjQ1QzE2MC42NjcgMjQ1IDE3MSAyNDcuMTE2IDE3OS42NjcgMjUxLjM0NkMxODguNTU1IDI1NS41NzYgMTk1LjQ0NCAyNjEuNDc3IDIwMC4zMzMgMjY5LjA0N0MyMDUuNDQ0IDI3Ni42MTcgMjA4LjExMSAyODUuNjM0IDIwOC4zMzMgMjk2LjA5OUgxNzguMzMzQzE3OC4xMTEgMjg3LjYzOCAxNzUuMzMzIDI4MS4wNyAxNjkuOTk5IDI3Ni4zOTRDMTY0LjY2NiAyNzEuNzE5IDE1Ny4yMjIgMjY5LjM4MSAxNDcuNjY3IDI2OS4zODFDMTM3Ljg4OSAyNjkuMzgxIDEzMC4zMzMgMjcxLjQ5NiAxMjUgMjc1LjcyNkMxMTkuNjY2IDI3OS45NTcgMTE3IDI4NS43NDYgMTE3IDI5My4wOTNDMTE3IDMwNC4wMDMgMTI1IDMxMS40NjIgMTQxIDMxNS40N0wxNjkuNjY3IDMyMi40ODNDMTgzLjQ0NSAzMjUuNiAxOTMuNzc4IDMzMC43MjIgMjAwLjY2NyAzMzcuODQ3QzIwNy41NTUgMzQ0Ljc0OSAyMTEgMzU0LjIxMiAyMTEgMzY2LjIzNUMyMTEgMzc2LjQ3NyAyMDguMjIyIDM4NS40OTQgMjAyLjY2NiAzOTMuMjg3QzE5Ny4xMTEgNDAwLjg1NyAxODkuNDQ0IDQwNi43NTggMTc5LjY2NyA0MTAuOTg5QzE3MC4xMTEgNDE0Ljk5NiAxNTguNzc4IDQxNyAxNDUuNjY3IDQxN0MxMjYuNTU1IDQxNyAxMTEuMzMzIDQxMi4zMjUgOTkuOTk5NyA0MDIuOTczQzg4LjY2NjggMzkzLjYyMSA4MyAzODEuMTUzIDgzIDM2NS41NjdaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjMyLjI5MSA0MTNWMjUwLjA4MkMyNDQuNjg0IDI1NC42MTQgMjUwLjE0OCAyNTQuNjE0IDI2My4zNzEgMjUwLjA4MlY0MTNIMjMyLjI5MVpNMjQ3LjUgMjM5LjMxM0MyNDEuOTkgMjM5LjMxMyAyMzcuMTQgMjM3LjMxMyAyMzIuOTUyIDIzMy4zMTZDMjI4Ljk4NCAyMjkuMDk1IDIyNyAyMjQuMjA5IDIyNyAyMTguNjU2QzIyNyAyMTIuODgyIDIyOC45ODQgMjA3Ljk5NSAyMzIuOTUyIDIwMy45OTdDMjM3LjE0IDE5OS45OTkgMjQxLjk5IDE5OCAyNDcuNSAxOThDMjUzLjIzMSAxOTggMjU4LjA4IDE5OS45OTkgMjYyLjA0OSAyMDMuOTk3QzI2Ni4wMTYgMjA3Ljk5NSAyNjggMjEyLjg4MiAyNjggMjE4LjY1NkMyNjggMjI0LjIwOSAyNjYuMDE2IDIyOS4wOTUgMjYyLjA0OSAyMzMuMzE2QzI1OC4wOCAyMzcuMzEzIDI1My4yMzEgMjM5LjMxMyAyNDcuNSAyMzkuMzEzWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTMxOS4zMzMgNDEzSDI4OFYyNDkuNjc2SDMxNlYyNzcuMjMzQzMxOS4zMzMgMjY4LjEwNCAzMjUuNzc4IDI2MC4zNjQgMzM0LjY2NyAyNTQuMzUyQzM0My43NzggMjQ4LjExNyAzNTQuNzc4IDI0NSAzNjcuNjY3IDI0NUMzODIuMTExIDI0NSAzOTQuMTEyIDI0OC44OTcgNDAzLjY2NyAyNTYuNjlDNDEzLjIyMiAyNjQuNDg0IDQxOS40NDQgMjc0LjgzNyA0MjIuMzM0IDI4Ny43NTJINDE2LjY2N0M0MTguODg5IDI3NC44MzcgNDI1IDI2NC40ODQgNDM1IDI1Ni42OUM0NDUgMjQ4Ljg5NyA0NTcuMzM0IDI0NSA0NzIgMjQ1QzQ5MC42NjYgMjQ1IDUwNS4zMzQgMjUwLjQ1NSA1MTYgMjYxLjM2NkM1MjYuNjY3IDI3Mi4yNzYgNTMyIDI4Ny4xOTUgNTMyIDMwNi4xMjFWNDEzSDUwMS4zMzNWMzEzLjgwNEM1MDEuMzMzIDMwMC44ODkgNDk4IDI5MC45ODEgNDkxLjMzMyAyODQuMDc4QzQ4NC44ODkgMjc2Ljk1MiA0NzYuMTExIDI3My4zOSA0NjUgMjczLjM5QzQ1Ny4yMjIgMjczLjM5IDQ1MC4zMzMgMjc1LjE3MSA0NDQuMzM0IDI3OC43MzRDNDM4LjU1NiAyODIuMDc0IDQzNCAyODYuOTcyIDQzMC42NjcgMjkzLjQzQzQyNy4zMzMgMjk5Ljg4NyA0MjUuNjY3IDMwNy40NTcgNDI1LjY2NyAzMTYuMTQxVjQxM0gzOTQuNjY3VjMxMy40NjlDMzk0LjY2NyAzMDAuNTU1IDM5MS40NDUgMjkwLjc1OCAzODUgMjg0LjA3OEMzNzguNTU2IDI3Ny4xNzUgMzY5Ljc3OCAyNzMuNzI0IDM1OC42NjcgMjczLjcyNEMzNTAuODg5IDI3My43MjQgMzQ0IDI3NS41MDUgMzM4IDI3OS4wNjhDMzMyLjIyMiAyODIuNDA4IDMyNy42NjcgMjg3LjMwNyAzMjQuMzMzIDI5My43NjNDMzIxIDI5OS45OTggMzE5LjMzMyAzMDcuNDU3IDMxOS4zMzMgMzE2LjE0MVY0MTNaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzExNTlfMzEzIj4KPHJlY3Qgd2lkdGg9IjYxNiIgaGVpZ2h0PSI2MTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==&logoColor=white" alt="Sim.ai"></a>
|
||||
|
||||
## How to Self-Host
|
||||
|
||||
There are several ways to self-host Sim Studio:
|
||||
|
||||
### Option 1: Docker Environment (Recommended)
|
||||
### Self-hosted: NPM Package
|
||||
|
||||
```bash
|
||||
# Clone your forked repository
|
||||
git clone https://github.com/YOUR_USERNAME/sim.git
|
||||
cd sim
|
||||
|
||||
# Create environment file and update with required environment variables (BETTER_AUTH_SECRET)
|
||||
cp sim/.env.example sim/.env
|
||||
|
||||
# Start Sim Studio using the provided script
|
||||
docker compose up -d --build
|
||||
|
||||
or
|
||||
|
||||
./start_simstudio_docker.sh
|
||||
npx simstudio
|
||||
```
|
||||
→ http://localhost:3000
|
||||
|
||||
After running these commands:
|
||||
#### Note
|
||||
Docker must be installed and running on your machine.
|
||||
|
||||
1. **Access the Application**:
|
||||
#### Options
|
||||
|
||||
- Open [http://localhost:3000/w/](http://localhost:3000/w/) in your browser
|
||||
- The `/w/` path is where the main workspace interface is located
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `-p, --port <port>` | Port to run Sim on (default `3000`) |
|
||||
| `--no-pull` | Skip pulling latest Docker images |
|
||||
|
||||
2. **Useful Docker Commands**:
|
||||
|
||||
```bash
|
||||
# View application logs
|
||||
docker compose logs -f simstudio
|
||||
|
||||
# Access PostgreSQL database
|
||||
docker compose exec db psql -U postgres -d simstudio
|
||||
|
||||
# Stop the environment
|
||||
docker compose down
|
||||
|
||||
# Rebuild and restart (after code changes)
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
#### Working with Local Models
|
||||
|
||||
To use local models with Sim Studio, follow these steps:
|
||||
|
||||
1. **Pull Local Models**
|
||||
|
||||
```bash
|
||||
# Run the ollama_docker.sh script to pull the required models
|
||||
./sim/scripts/ollama_docker.sh pull <model_name>
|
||||
```
|
||||
|
||||
2. **Start Sim Studio with Local Models**
|
||||
|
||||
```bash
|
||||
#Start Sim Studio with local model support
|
||||
./start_simstudio_docker.sh --local
|
||||
|
||||
# or
|
||||
|
||||
# Start Sim Studio with local model support if you have nvidia GPU
|
||||
docker compose up --profile local-gpu -d --build
|
||||
|
||||
# or
|
||||
|
||||
# Start Sim Studio with local model support if you don't have nvidia GPU
|
||||
docker compose up --profile local-cpu -d --build
|
||||
```
|
||||
|
||||
The application will now be configured to use your local models. You can access it at [http://localhost:3000/w/](http://localhost:3000/w/).
|
||||
|
||||
#### Connecting to Existing Ollama Instance
|
||||
|
||||
If you already have an Ollama instance running on your host machine, you can connect to it using one of these methods:
|
||||
|
||||
```bash
|
||||
# Method 1: Use host networking (simplest approach)
|
||||
docker compose up --profile local-cpu -d --build --network=host
|
||||
```
|
||||
|
||||
Or modify your docker-compose.yml:
|
||||
|
||||
```yaml
|
||||
# Method 2: Add host.docker.internal mapping
|
||||
services:
|
||||
simstudio:
|
||||
# ... existing configuration ...
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
environment:
|
||||
- OLLAMA_HOST=http://host.docker.internal:11434
|
||||
```
|
||||
|
||||
### Option 2: Dev Containers
|
||||
|
||||
1. Open VS Code or your favorite VS Code fork (Cursor, Windsurf, etc.)
|
||||
2. Install the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
|
||||
3. Open the project in your editor
|
||||
4. Click "Reopen in Container" when prompted
|
||||
5. The environment will automatically be set up in the `sim` directory
|
||||
6. Run `npm run dev` in the terminal or use the `sim-start` alias
|
||||
|
||||
### Option 3: Manual Setup
|
||||
|
||||
1. **Install Dependencies**
|
||||
### Self-hosted: Docker Compose
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://github.com/YOUR_USERNAME/sim.git
|
||||
cd sim/sim
|
||||
git clone https://github.com/simstudioai/sim.git
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
# Navigate to the project directory
|
||||
cd sim
|
||||
|
||||
# Start Sim
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
2. **Set Up Environment**
|
||||
Access the application at [http://localhost:3000/](http://localhost:3000/)
|
||||
|
||||
#### Using Local Models with Ollama
|
||||
|
||||
Run Sim with local AI models using [Ollama](https://ollama.ai) - no external APIs required:
|
||||
|
||||
```bash
|
||||
# Copy .env.example to .env
|
||||
cp .env.example .env
|
||||
# Start with GPU support (automatically downloads gemma3:4b model)
|
||||
docker compose -f docker-compose.ollama.yml --profile setup up -d
|
||||
|
||||
# Configure your .env file with the required environment variables:
|
||||
# - Database connection (PostgreSQL)
|
||||
# - Authentication settings (Better-Auth Secret)
|
||||
# For CPU-only systems:
|
||||
docker compose -f docker-compose.ollama.yml --profile cpu --profile setup up -d
|
||||
```
|
||||
|
||||
⚠️ **Important Notes:**
|
||||
- If `RESEND_API_KEY` is not set, verification codes for login/signup will be logged to the console.
|
||||
- You can use these logged codes for testing authentication locally.
|
||||
- For production environments, you should set up a proper email provider.
|
||||
Wait for the model to download, then visit [http://localhost:3000](http://localhost:3000). Add more models with:
|
||||
```bash
|
||||
docker compose -f docker-compose.ollama.yml exec ollama ollama pull llama3.1:8b
|
||||
```
|
||||
|
||||
3. **Set Up Database**
|
||||
### Self-hosted: Dev Containers
|
||||
|
||||
1. Open VS Code with the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
|
||||
2. Open the project and click "Reopen in Container" when prompted
|
||||
3. Run `bun run dev:full` in the terminal or use the `sim-start` alias
|
||||
- This starts both the main application and the realtime socket server
|
||||
|
||||
### Self-hosted: Manual Setup
|
||||
|
||||
**Requirements:**
|
||||
- [Bun](https://bun.sh/) runtime
|
||||
- PostgreSQL 12+ with [pgvector extension](https://github.com/pgvector/pgvector) (required for AI embeddings)
|
||||
|
||||
**Note:** Sim uses vector embeddings for AI features like knowledge bases and semantic search, which requires the `pgvector` PostgreSQL extension.
|
||||
|
||||
1. Clone and install dependencies:
|
||||
|
||||
```bash
|
||||
# Push the database schema
|
||||
npx drizzle-kit push
|
||||
git clone https://github.com/simstudioai/sim.git
|
||||
cd sim
|
||||
bun install
|
||||
```
|
||||
|
||||
4. **Start Development Server**
|
||||
2. Set up PostgreSQL with pgvector:
|
||||
|
||||
You need PostgreSQL with the `vector` extension for embedding support. Choose one option:
|
||||
|
||||
**Option A: Using Docker (Recommended)**
|
||||
```bash
|
||||
# Start PostgreSQL with pgvector extension
|
||||
docker run --name simstudio-db \
|
||||
-e POSTGRES_PASSWORD=your_password \
|
||||
-e POSTGRES_DB=simstudio \
|
||||
-p 5432:5432 -d \
|
||||
pgvector/pgvector:pg17
|
||||
```
|
||||
|
||||
**Option B: Manual Installation**
|
||||
- Install PostgreSQL 12+ and the pgvector extension
|
||||
- See [pgvector installation guide](https://github.com/pgvector/pgvector#installation)
|
||||
|
||||
3. Set up environment:
|
||||
|
||||
```bash
|
||||
# Start the development server
|
||||
npm run dev
|
||||
cd apps/sim
|
||||
cp .env.example .env # Configure with required variables (DATABASE_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL)
|
||||
```
|
||||
|
||||
5. **Open [http://localhost:3000](http://localhost:3000) in your browser**
|
||||
Update your `.env` file with the database URL:
|
||||
```bash
|
||||
DATABASE_URL="postgresql://postgres:your_password@localhost:5432/simstudio"
|
||||
```
|
||||
|
||||
4. Set up the database:
|
||||
|
||||
First, configure the database package environment:
|
||||
```bash
|
||||
cd packages/db
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Update your `packages/db/.env` file with the database URL:
|
||||
```bash
|
||||
DATABASE_URL="postgresql://postgres:your_password@localhost:5432/simstudio"
|
||||
```
|
||||
|
||||
Then run the migrations:
|
||||
```bash
|
||||
bunx drizzle-kit migrate --config=./drizzle.config.ts
|
||||
```
|
||||
|
||||
5. Start the development servers:
|
||||
|
||||
**Recommended approach - run both servers together (from project root):**
|
||||
|
||||
```bash
|
||||
bun run dev:full
|
||||
```
|
||||
|
||||
This starts both the main Next.js application and the realtime socket server required for full functionality.
|
||||
|
||||
**Alternative - run servers separately:**
|
||||
|
||||
Next.js app (from project root):
|
||||
```bash
|
||||
bun run dev
|
||||
```
|
||||
|
||||
Realtime socket server (from `apps/sim` directory in a separate terminal):
|
||||
```bash
|
||||
cd apps/sim
|
||||
bun run dev:sockets
|
||||
```
|
||||
|
||||
## Copilot API Keys
|
||||
|
||||
Copilot is a Sim-managed service. To use Copilot on a self-hosted instance:
|
||||
|
||||
- Go to https://sim.ai → Settings → Copilot and generate a Copilot API key
|
||||
- Set `COPILOT_API_KEY` environment variable in your self-hosted apps/sim/.env file to that value
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Framework**: [Next.js](https://nextjs.org/) (App Router)
|
||||
- **Runtime**: [Bun](https://bun.sh/)
|
||||
- **Database**: PostgreSQL with [Drizzle ORM](https://orm.drizzle.team)
|
||||
- **Authentication**: [Better Auth](https://better-auth.com)
|
||||
- **UI**: [Shadcn](https://ui.shadcn.com/), [Tailwind CSS](https://tailwindcss.com)
|
||||
- **State Management**: [Zustand](https://zustand-demo.pmnd.rs/)
|
||||
- **Flow Editor**: [ReactFlow](https://reactflow.dev/)
|
||||
- **Docs**: [Fumadocs](https://fumadocs.vercel.app/)
|
||||
- **Monorepo**: [Turborepo](https://turborepo.org/)
|
||||
- **Realtime**: [Socket.io](https://socket.io/)
|
||||
- **Background Jobs**: [Trigger.dev](https://trigger.dev/)
|
||||
- **Remote Code Execution**: [E2B](https://www.e2b.dev/)
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -188,6 +196,4 @@ We welcome contributions! Please see our [Contributing Guide](.github/CONTRIBUTI
|
||||
|
||||
This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.
|
||||
|
||||
##
|
||||
|
||||
<p align="center">Made with ❤️ by the Sim Studio Team</p>
|
||||
<p align="center">Made with ❤️ by the Sim Team</p>
|
||||
|
||||
39
apps/docs/.gitignore
vendored
Normal file
39
apps/docs/.gitignore
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
|
||||
# bun specific
|
||||
.bun
|
||||
bun.lockb
|
||||
bun-debug.log*
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# next.js
|
||||
/.next/
|
||||
/out/
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# env files
|
||||
.env
|
||||
*.env
|
||||
.env.local
|
||||
.env.development
|
||||
.env.test
|
||||
.env.production
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
# Fumadocs
|
||||
/.source/
|
||||
23
apps/docs/README.md
Normal file
23
apps/docs/README.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# docs
|
||||
|
||||
This is a Next.js application generated with
|
||||
[Create Fumadocs](https://github.com/fuma-nama/fumadocs).
|
||||
|
||||
Run development server:
|
||||
|
||||
```bash
|
||||
bun run dev
|
||||
```
|
||||
|
||||
Open http://localhost:3000 with your browser to see the result.
|
||||
|
||||
## Learn More
|
||||
|
||||
To learn more about Next.js and Fumadocs, take a look at the following
|
||||
resources:
|
||||
|
||||
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js
|
||||
features and API.
|
||||
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
||||
- [Fumadocs](https://fumadocs.vercel.app) - learn about Fumadocs
|
||||
- [Bun Documentation](https://bun.sh/docs) - learn about Bun features and API
|
||||
161
apps/docs/app/[lang]/[[...slug]]/page.tsx
Normal file
161
apps/docs/app/[lang]/[[...slug]]/page.tsx
Normal file
@@ -0,0 +1,161 @@
|
||||
import { findNeighbour } from 'fumadocs-core/server'
|
||||
import defaultMdxComponents from 'fumadocs-ui/mdx'
|
||||
import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/page'
|
||||
import { ChevronLeft, ChevronRight } from 'lucide-react'
|
||||
import Link from 'next/link'
|
||||
import { notFound } from 'next/navigation'
|
||||
import { StructuredData } from '@/components/structured-data'
|
||||
import { source } from '@/lib/source'
|
||||
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
export default async function Page(props: { params: Promise<{ slug?: string[]; lang: string }> }) {
|
||||
const params = await props.params
|
||||
const page = source.getPage(params.slug, params.lang)
|
||||
if (!page) notFound()
|
||||
|
||||
const MDX = page.data.body
|
||||
const baseUrl = 'https://docs.sim.ai'
|
||||
|
||||
const pageTreeRecord = source.pageTree as Record<string, any>
|
||||
const pageTree =
|
||||
pageTreeRecord[params.lang] ?? pageTreeRecord.en ?? Object.values(pageTreeRecord)[0]
|
||||
const neighbours = pageTree ? findNeighbour(pageTree, page.url) : null
|
||||
|
||||
const CustomFooter = () => (
|
||||
<div className='mt-12 flex items-center justify-between border-border border-t py-8'>
|
||||
{neighbours?.previous ? (
|
||||
<Link
|
||||
href={neighbours.previous.url}
|
||||
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
|
||||
>
|
||||
<ChevronLeft className='group-hover:-translate-x-1 h-4 w-4 transition-transform' />
|
||||
<span className='font-medium'>{neighbours.previous.name}</span>
|
||||
</Link>
|
||||
) : (
|
||||
<div />
|
||||
)}
|
||||
|
||||
{neighbours?.next ? (
|
||||
<Link
|
||||
href={neighbours.next.url}
|
||||
className='group flex items-center gap-2 text-muted-foreground transition-colors hover:text-foreground'
|
||||
>
|
||||
<span className='font-medium'>{neighbours.next.name}</span>
|
||||
<ChevronRight className='h-4 w-4 transition-transform group-hover:translate-x-1' />
|
||||
</Link>
|
||||
) : (
|
||||
<div />
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
|
||||
return (
|
||||
<>
|
||||
<StructuredData
|
||||
title={page.data.title}
|
||||
description={page.data.description || ''}
|
||||
url={`${baseUrl}${page.url}`}
|
||||
lang={params.lang}
|
||||
/>
|
||||
<DocsPage
|
||||
toc={page.data.toc}
|
||||
full={page.data.full}
|
||||
tableOfContent={{
|
||||
style: 'clerk',
|
||||
enabled: true,
|
||||
header: <div className='mb-2 font-medium text-sm'>On this page</div>,
|
||||
single: false,
|
||||
}}
|
||||
article={{
|
||||
className: 'scroll-smooth max-sm:pb-16',
|
||||
}}
|
||||
tableOfContentPopover={{
|
||||
style: 'clerk',
|
||||
enabled: true,
|
||||
}}
|
||||
footer={{
|
||||
enabled: true,
|
||||
component: <CustomFooter />,
|
||||
}}
|
||||
>
|
||||
<DocsTitle>{page.data.title}</DocsTitle>
|
||||
<DocsDescription>{page.data.description}</DocsDescription>
|
||||
<DocsBody>
|
||||
<MDX components={defaultMdxComponents} />
|
||||
</DocsBody>
|
||||
</DocsPage>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export async function generateStaticParams() {
|
||||
return source.generateParams()
|
||||
}
|
||||
|
||||
export async function generateMetadata(props: {
|
||||
params: Promise<{ slug?: string[]; lang: string }>
|
||||
}) {
|
||||
const params = await props.params
|
||||
const page = source.getPage(params.slug, params.lang)
|
||||
if (!page) notFound()
|
||||
|
||||
const baseUrl = 'https://docs.sim.ai'
|
||||
const fullUrl = `${baseUrl}${page.url}`
|
||||
|
||||
return {
|
||||
title: page.data.title,
|
||||
description:
|
||||
page.data.description || 'Sim visual workflow builder for AI applications documentation',
|
||||
keywords: [
|
||||
'AI workflow builder',
|
||||
'visual workflow editor',
|
||||
'AI automation',
|
||||
'workflow automation',
|
||||
'AI agents',
|
||||
'no-code AI',
|
||||
'drag and drop workflows',
|
||||
page.data.title?.toLowerCase().split(' '),
|
||||
]
|
||||
.flat()
|
||||
.filter(Boolean),
|
||||
authors: [{ name: 'Sim Team' }],
|
||||
category: 'Developer Tools',
|
||||
openGraph: {
|
||||
title: page.data.title,
|
||||
description:
|
||||
page.data.description || 'Sim visual workflow builder for AI applications documentation',
|
||||
url: fullUrl,
|
||||
siteName: 'Sim Documentation',
|
||||
type: 'article',
|
||||
locale: params.lang,
|
||||
alternateLocale: ['en', 'fr', 'zh'].filter((lang) => lang !== params.lang),
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary',
|
||||
title: page.data.title,
|
||||
description:
|
||||
page.data.description || 'Sim visual workflow builder for AI applications documentation',
|
||||
},
|
||||
robots: {
|
||||
index: true,
|
||||
follow: true,
|
||||
googleBot: {
|
||||
index: true,
|
||||
follow: true,
|
||||
'max-video-preview': -1,
|
||||
'max-image-preview': 'large',
|
||||
'max-snippet': -1,
|
||||
},
|
||||
},
|
||||
canonical: fullUrl,
|
||||
alternates: {
|
||||
canonical: fullUrl,
|
||||
languages: {
|
||||
en: `${baseUrl}/en${page.url.replace(`/${params.lang}`, '')}`,
|
||||
fr: `${baseUrl}/fr${page.url.replace(`/${params.lang}`, '')}`,
|
||||
zh: `${baseUrl}/zh${page.url.replace(`/${params.lang}`, '')}`,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
99
apps/docs/app/[lang]/layout.tsx
Normal file
99
apps/docs/app/[lang]/layout.tsx
Normal file
@@ -0,0 +1,99 @@
|
||||
import type { ReactNode } from 'react'
|
||||
import { defineI18nUI } from 'fumadocs-ui/i18n'
|
||||
import { DocsLayout } from 'fumadocs-ui/layouts/docs'
|
||||
import { RootProvider } from 'fumadocs-ui/provider/next'
|
||||
import { ExternalLink, GithubIcon } from 'lucide-react'
|
||||
import { Inter } from 'next/font/google'
|
||||
import Image from 'next/image'
|
||||
import Link from 'next/link'
|
||||
import { LanguageDropdown } from '@/components/ui/language-dropdown'
|
||||
import { i18n } from '@/lib/i18n'
|
||||
import { source } from '@/lib/source'
|
||||
import '../global.css'
|
||||
import { Analytics } from '@vercel/analytics/next'
|
||||
|
||||
const inter = Inter({
|
||||
subsets: ['latin'],
|
||||
})
|
||||
|
||||
const { provider } = defineI18nUI(i18n, {
|
||||
translations: {
|
||||
en: {
|
||||
displayName: 'English',
|
||||
},
|
||||
es: {
|
||||
displayName: 'Español',
|
||||
},
|
||||
fr: {
|
||||
displayName: 'Français',
|
||||
},
|
||||
zh: {
|
||||
displayName: '简体中文',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const GitHubLink = () => (
|
||||
<div className='fixed right-4 bottom-4 z-50'>
|
||||
<Link
|
||||
href='https://github.com/simstudioai/sim'
|
||||
target='_blank'
|
||||
rel='noopener noreferrer'
|
||||
className='flex h-8 w-8 items-center justify-center rounded-full border border-border bg-background transition-colors hover:bg-muted'
|
||||
>
|
||||
<GithubIcon className='h-4 w-4' />
|
||||
</Link>
|
||||
</div>
|
||||
)
|
||||
|
||||
type LayoutProps = {
|
||||
children: ReactNode
|
||||
params: Promise<{ lang: string }>
|
||||
}
|
||||
|
||||
export default async function Layout({ children, params }: LayoutProps) {
|
||||
const { lang } = await params
|
||||
|
||||
return (
|
||||
<html lang={lang} className={inter.className} suppressHydrationWarning>
|
||||
<body className='flex min-h-screen flex-col'>
|
||||
<RootProvider i18n={provider(lang)}>
|
||||
<DocsLayout
|
||||
tree={source.pageTree[lang]}
|
||||
nav={{
|
||||
title: (
|
||||
<div className='flex items-center gap-3'>
|
||||
<Image
|
||||
src='/static/logo.png'
|
||||
alt='Sim'
|
||||
width={60}
|
||||
height={24}
|
||||
className='h-6 w-auto'
|
||||
/>
|
||||
<LanguageDropdown />
|
||||
</div>
|
||||
),
|
||||
}}
|
||||
links={[
|
||||
{
|
||||
text: 'Visit Sim',
|
||||
url: 'https://sim.ai',
|
||||
icon: <ExternalLink className='h-4 w-4' />,
|
||||
},
|
||||
]}
|
||||
sidebar={{
|
||||
defaultOpenLevel: 0,
|
||||
collapsible: true,
|
||||
footer: null,
|
||||
banner: null,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</DocsLayout>
|
||||
<GitHubLink />
|
||||
<Analytics />
|
||||
</RootProvider>
|
||||
</body>
|
||||
</html>
|
||||
)
|
||||
}
|
||||
185
apps/docs/app/global.css
Normal file
185
apps/docs/app/global.css
Normal file
@@ -0,0 +1,185 @@
|
||||
@import "tailwindcss";
|
||||
@import "fumadocs-ui/css/neutral.css";
|
||||
@import "fumadocs-ui/css/preset.css";
|
||||
|
||||
@theme {
|
||||
--color-fd-primary: #802fff; /* Purple from control-bar component */
|
||||
}
|
||||
|
||||
/* Target any potential border classes */
|
||||
* {
|
||||
--fd-border-sidebar: transparent !important;
|
||||
}
|
||||
|
||||
/* Override any CSS custom properties for borders */
|
||||
:root {
|
||||
--fd-border: transparent !important;
|
||||
--fd-border-sidebar: transparent !important;
|
||||
}
|
||||
|
||||
/* Sidebar improvements for cleaner design */
|
||||
[data-sidebar] {
|
||||
--fd-sidebar-width: 280px;
|
||||
background-color: rgb(255 255 255);
|
||||
padding-top: 16px;
|
||||
}
|
||||
|
||||
/* Clean sidebar container */
|
||||
[data-sidebar] > div {
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
/* Section headers/separators styling */
|
||||
[data-sidebar] .text-sm.font-medium.text-muted-foreground,
|
||||
[data-sidebar] [data-separator] {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 6px;
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
color: rgb(115 115 115);
|
||||
border: none;
|
||||
background: none;
|
||||
}
|
||||
|
||||
/* First separator should have less top margin */
|
||||
[data-sidebar] [data-separator]:first-of-type {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
/* Clean sidebar item styling */
|
||||
[data-sidebar] a {
|
||||
padding: 8px 12px;
|
||||
margin: 1px 0;
|
||||
border-radius: 6px;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 1.4;
|
||||
transition: all 0.15s ease;
|
||||
display: block;
|
||||
color: rgb(71 85 105);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
[data-sidebar] a[data-active="true"] {
|
||||
background-color: rgba(128, 47, 255, 0.08);
|
||||
color: var(--color-fd-primary);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
[data-sidebar] a:hover:not([data-active="true"]) {
|
||||
background-color: rgb(248 250 252);
|
||||
color: rgb(51 65 85);
|
||||
}
|
||||
|
||||
/* Improve spacing between sidebar items */
|
||||
[data-sidebar] nav > * + * {
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
/* Section group styling */
|
||||
[data-sidebar] [data-folder] {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
[data-sidebar] [data-folder] > div:first-child {
|
||||
font-weight: 500;
|
||||
font-size: 13px;
|
||||
color: rgb(15 23 42);
|
||||
padding: 6px 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
/* Clean up folder toggle buttons */
|
||||
[data-sidebar] button[data-folder-toggle] {
|
||||
padding: 4px 8px 4px 12px;
|
||||
border-radius: 6px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
color: rgb(51 65 85);
|
||||
}
|
||||
|
||||
[data-sidebar] button[data-folder-toggle]:hover {
|
||||
background-color: rgb(248 250 252);
|
||||
}
|
||||
|
||||
/* Nested item indentation */
|
||||
[data-sidebar] [data-folder] a {
|
||||
padding-left: 24px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* Dark mode adjustments */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[data-sidebar] {
|
||||
background-color: rgb(2 8 23);
|
||||
}
|
||||
|
||||
[data-sidebar] a {
|
||||
color: rgb(148 163 184);
|
||||
}
|
||||
|
||||
[data-sidebar] a:hover:not([data-active="true"]) {
|
||||
background-color: rgb(30 41 59);
|
||||
color: rgb(226 232 240);
|
||||
}
|
||||
|
||||
[data-sidebar] a[data-active="true"] {
|
||||
background-color: rgba(128, 47, 255, 0.15);
|
||||
color: var(--color-fd-primary);
|
||||
}
|
||||
|
||||
[data-sidebar] .text-sm.font-medium.text-muted-foreground,
|
||||
[data-sidebar] [data-separator] {
|
||||
color: rgb(148 163 184);
|
||||
}
|
||||
|
||||
[data-sidebar] [data-folder] > div:first-child {
|
||||
color: rgb(226 232 240);
|
||||
}
|
||||
|
||||
[data-sidebar] button[data-folder-toggle] {
|
||||
color: rgb(148 163 184);
|
||||
}
|
||||
|
||||
[data-sidebar] button[data-folder-toggle]:hover {
|
||||
background-color: rgb(30 41 59);
|
||||
}
|
||||
}
|
||||
|
||||
/* Custom text highlighting styles */
|
||||
.text-highlight {
|
||||
color: var(--color-fd-primary);
|
||||
}
|
||||
|
||||
/* Override marker color for highlighted lists */
|
||||
.highlight-markers li::marker {
|
||||
color: var(--color-fd-primary);
|
||||
}
|
||||
|
||||
/* Add bottom spacing to prevent abrupt page endings */
|
||||
[data-content] {
|
||||
padding-bottom: 4rem;
|
||||
}
|
||||
|
||||
/* Alternative fallback for different Fumadocs versions */
|
||||
main article,
|
||||
.docs-page main {
|
||||
padding-bottom: 4rem;
|
||||
}
|
||||
|
||||
/* Remove any unwanted borders/outlines from video elements */
|
||||
video {
|
||||
outline: none !important;
|
||||
border-style: solid !important;
|
||||
}
|
||||
|
||||
/* Tailwind v4 content sources */
|
||||
@source '../app/**/*.{js,ts,jsx,tsx,mdx}';
|
||||
@source '../components/**/*.{js,ts,jsx,tsx,mdx}';
|
||||
@source '../content/**/*.{js,ts,jsx,tsx,mdx}';
|
||||
@source '../mdx-components.tsx';
|
||||
@source '../node_modules/fumadocs-ui/dist/**/*.js';
|
||||
21
apps/docs/app/layout.config.tsx
Normal file
21
apps/docs/app/layout.config.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared'
|
||||
|
||||
/**
|
||||
* Shared layout configurations
|
||||
*
|
||||
* you can customise layouts individually from:
|
||||
* Home Layout: app/(home)/layout.tsx
|
||||
* Docs Layout: app/docs/layout.tsx
|
||||
*/
|
||||
export const baseOptions: BaseLayoutProps = {
|
||||
nav: {
|
||||
title: (
|
||||
<>
|
||||
<svg width='24' height='24' xmlns='http://www.w3.org/2000/svg' aria-label='Logo'>
|
||||
<circle cx={12} cy={12} r={12} fill='currentColor' />
|
||||
</svg>
|
||||
My App
|
||||
</>
|
||||
),
|
||||
},
|
||||
}
|
||||
80
apps/docs/app/layout.tsx
Normal file
80
apps/docs/app/layout.tsx
Normal file
@@ -0,0 +1,80 @@
|
||||
import type { ReactNode } from 'react'
|
||||
|
||||
export default function RootLayout({ children }: { children: ReactNode }) {
|
||||
return children
|
||||
}
|
||||
|
||||
export const metadata = {
|
||||
metadataBase: new URL('https://docs.sim.ai'),
|
||||
title: {
|
||||
default: 'Sim Documentation - Visual Workflow Builder for AI Applications',
|
||||
template: '%s',
|
||||
},
|
||||
description:
|
||||
'Comprehensive documentation for Sim - the visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines by connecting blocks on a canvas—no coding required.',
|
||||
keywords: [
|
||||
'AI workflow builder',
|
||||
'visual workflow editor',
|
||||
'AI automation',
|
||||
'workflow automation',
|
||||
'AI agents',
|
||||
'no-code AI',
|
||||
'drag and drop workflows',
|
||||
'AI integrations',
|
||||
'workflow canvas',
|
||||
'AI development platform',
|
||||
],
|
||||
authors: [{ name: 'Sim Team', url: 'https://sim.ai' }],
|
||||
category: 'Developer Tools',
|
||||
classification: 'Developer Documentation',
|
||||
manifest: '/favicon/site.webmanifest',
|
||||
icons: {
|
||||
icon: [
|
||||
{ url: '/favicon/favicon-16x16.png', sizes: '16x16', type: 'image/png' },
|
||||
{ url: '/favicon/favicon-32x32.png', sizes: '32x32', type: 'image/png' },
|
||||
],
|
||||
apple: '/favicon/apple-touch-icon.png',
|
||||
shortcut: '/favicon/favicon.ico',
|
||||
},
|
||||
appleWebApp: {
|
||||
capable: true,
|
||||
statusBarStyle: 'default',
|
||||
title: 'Sim Docs',
|
||||
},
|
||||
openGraph: {
|
||||
type: 'website',
|
||||
locale: 'en_US',
|
||||
alternateLocale: ['fr_FR', 'zh_CN'],
|
||||
url: 'https://docs.sim.ai',
|
||||
siteName: 'Sim Documentation',
|
||||
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
|
||||
description:
|
||||
'Comprehensive documentation for Sim - the visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines.',
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary',
|
||||
title: 'Sim Documentation - Visual Workflow Builder for AI Applications',
|
||||
description:
|
||||
'Comprehensive documentation for Sim - the visual workflow builder for AI applications.',
|
||||
creator: '@sim_ai',
|
||||
},
|
||||
robots: {
|
||||
index: true,
|
||||
follow: true,
|
||||
googleBot: {
|
||||
index: true,
|
||||
follow: true,
|
||||
'max-video-preview': -1,
|
||||
'max-image-preview': 'large',
|
||||
'max-snippet': -1,
|
||||
},
|
||||
},
|
||||
alternates: {
|
||||
canonical: 'https://docs.sim.ai',
|
||||
languages: {
|
||||
en: '/en',
|
||||
fr: '/fr',
|
||||
zh: '/zh',
|
||||
},
|
||||
},
|
||||
}
|
||||
18
apps/docs/app/llms.mdx/[[...slug]]/route.ts
Normal file
18
apps/docs/app/llms.mdx/[[...slug]]/route.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { notFound } from 'next/navigation'
|
||||
import { type NextRequest, NextResponse } from 'next/server'
|
||||
import { getLLMText } from '@/lib/llms'
|
||||
import { source } from '@/lib/source'
|
||||
|
||||
export const revalidate = false
|
||||
|
||||
export async function GET(_req: NextRequest, { params }: { params: Promise<{ slug?: string[] }> }) {
|
||||
const { slug } = await params
|
||||
const page = source.getPage(slug)
|
||||
if (!page) notFound()
|
||||
|
||||
return new NextResponse(await getLLMText(page))
|
||||
}
|
||||
|
||||
export function generateStaticParams() {
|
||||
return source.generateParams()
|
||||
}
|
||||
11
apps/docs/app/llms.txt/route.ts
Normal file
11
apps/docs/app/llms.txt/route.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { getLLMText } from '@/lib/llms'
|
||||
import { source } from '@/lib/source'
|
||||
|
||||
export const revalidate = false
|
||||
|
||||
export async function GET() {
|
||||
const scan = source.getPages().map(getLLMText)
|
||||
const scanned = await Promise.all(scan)
|
||||
|
||||
return new Response(scanned.join('\n\n'))
|
||||
}
|
||||
58
apps/docs/app/robots.txt/route.ts
Normal file
58
apps/docs/app/robots.txt/route.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
export const revalidate = false
|
||||
|
||||
export async function GET() {
|
||||
const baseUrl = 'https://docs.sim.ai'
|
||||
|
||||
const robotsTxt = `# Robots.txt for Sim Documentation
|
||||
# Generated on ${new Date().toISOString()}
|
||||
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
# Allow all well-behaved crawlers
|
||||
User-agent: Googlebot
|
||||
Allow: /
|
||||
|
||||
User-agent: Bingbot
|
||||
Allow: /
|
||||
|
||||
# AI and LLM crawlers
|
||||
User-agent: GPTBot
|
||||
Allow: /
|
||||
|
||||
User-agent: ChatGPT-User
|
||||
Allow: /
|
||||
|
||||
User-agent: CCBot
|
||||
Allow: /
|
||||
|
||||
User-agent: anthropic-ai
|
||||
Allow: /
|
||||
|
||||
User-agent: Claude-Web
|
||||
Allow: /
|
||||
|
||||
# Disallow admin and internal paths (if any exist)
|
||||
Disallow: /.next/
|
||||
Disallow: /api/internal/
|
||||
Disallow: /_next/static/
|
||||
Disallow: /admin/
|
||||
|
||||
# Allow but don't prioritize these
|
||||
Allow: /api/search
|
||||
Allow: /llms.txt
|
||||
Allow: /llms.mdx/
|
||||
|
||||
# Sitemaps
|
||||
Sitemap: ${baseUrl}/sitemap.xml
|
||||
|
||||
# Additional resources for AI indexing
|
||||
# See https://github.com/AnswerDotAI/llms-txt for more info
|
||||
# LLM-friendly content available at: ${baseUrl}/llms.txt`
|
||||
|
||||
return new Response(robotsTxt, {
|
||||
headers: {
|
||||
'Content-Type': 'text/plain',
|
||||
},
|
||||
})
|
||||
}
|
||||
54
apps/docs/app/sitemap.xml/route.ts
Normal file
54
apps/docs/app/sitemap.xml/route.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import { i18n } from '@/lib/i18n'
|
||||
import { source } from '@/lib/source'
|
||||
|
||||
export const revalidate = false
|
||||
|
||||
export async function GET() {
|
||||
const baseUrl = 'https://docs.sim.ai'
|
||||
|
||||
const allPages = source.getPages()
|
||||
|
||||
const urls = allPages
|
||||
.flatMap((page) => {
|
||||
const urlWithoutLang = page.url.replace(/^\/[a-z]{2}\//, '/')
|
||||
|
||||
return i18n.languages.map((lang) => {
|
||||
const url =
|
||||
lang === i18n.defaultLanguage
|
||||
? `${baseUrl}${urlWithoutLang}`
|
||||
: `${baseUrl}/${lang}${urlWithoutLang}`
|
||||
|
||||
return ` <url>
|
||||
<loc>${url}</loc>
|
||||
<lastmod>${new Date().toISOString().split('T')[0]}</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>${urlWithoutLang === '/introduction' ? '1.0' : '0.8'}</priority>
|
||||
${i18n.languages.length > 1 ? generateAlternateLinks(baseUrl, urlWithoutLang) : ''}
|
||||
</url>`
|
||||
})
|
||||
})
|
||||
.join('\n')
|
||||
|
||||
const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
${urls}
|
||||
</urlset>`
|
||||
|
||||
return new Response(sitemap, {
|
||||
headers: {
|
||||
'Content-Type': 'application/xml',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
function generateAlternateLinks(baseUrl: string, urlWithoutLang: string): string {
|
||||
return i18n.languages
|
||||
.map((lang) => {
|
||||
const url =
|
||||
lang === i18n.defaultLanguage
|
||||
? `${baseUrl}${urlWithoutLang}`
|
||||
: `${baseUrl}/${lang}${urlWithoutLang}`
|
||||
return ` <xhtml:link rel="alternate" hreflang="${lang}" href="${url}" />`
|
||||
})
|
||||
.join('\n')
|
||||
}
|
||||
295
apps/docs/components/icons.tsx
Normal file
295
apps/docs/components/icons.tsx
Normal file
File diff suppressed because one or more lines are too long
174
apps/docs/components/structured-data.tsx
Normal file
174
apps/docs/components/structured-data.tsx
Normal file
@@ -0,0 +1,174 @@
|
||||
import Script from 'next/script'
|
||||
|
||||
interface StructuredDataProps {
|
||||
title: string
|
||||
description: string
|
||||
url: string
|
||||
lang: string
|
||||
dateModified?: string
|
||||
breadcrumb?: Array<{ name: string; url: string }>
|
||||
}
|
||||
|
||||
export function StructuredData({
|
||||
title,
|
||||
description,
|
||||
url,
|
||||
lang,
|
||||
dateModified,
|
||||
breadcrumb,
|
||||
}: StructuredDataProps) {
|
||||
const baseUrl = 'https://docs.sim.ai'
|
||||
|
||||
const articleStructuredData = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'TechArticle',
|
||||
headline: title,
|
||||
description: description,
|
||||
url: url,
|
||||
datePublished: dateModified || new Date().toISOString(),
|
||||
dateModified: dateModified || new Date().toISOString(),
|
||||
author: {
|
||||
'@type': 'Organization',
|
||||
name: 'Sim Team',
|
||||
url: baseUrl,
|
||||
},
|
||||
publisher: {
|
||||
'@type': 'Organization',
|
||||
name: 'Sim',
|
||||
url: baseUrl,
|
||||
logo: {
|
||||
'@type': 'ImageObject',
|
||||
url: `${baseUrl}/static/logo.png`,
|
||||
},
|
||||
},
|
||||
mainEntityOfPage: {
|
||||
'@type': 'WebPage',
|
||||
'@id': url,
|
||||
},
|
||||
inLanguage: lang,
|
||||
isPartOf: {
|
||||
'@type': 'WebSite',
|
||||
name: 'Sim Documentation',
|
||||
url: baseUrl,
|
||||
},
|
||||
potentialAction: {
|
||||
'@type': 'ReadAction',
|
||||
target: url,
|
||||
},
|
||||
}
|
||||
|
||||
const breadcrumbStructuredData = breadcrumb && {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'BreadcrumbList',
|
||||
itemListElement: breadcrumb.map((item, index) => ({
|
||||
'@type': 'ListItem',
|
||||
position: index + 1,
|
||||
name: item.name,
|
||||
item: item.url,
|
||||
})),
|
||||
}
|
||||
|
||||
const websiteStructuredData = url === baseUrl && {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'WebSite',
|
||||
name: 'Sim Documentation',
|
||||
url: baseUrl,
|
||||
description:
|
||||
'Comprehensive documentation for Sim visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines.',
|
||||
publisher: {
|
||||
'@type': 'Organization',
|
||||
name: 'Sim',
|
||||
url: baseUrl,
|
||||
},
|
||||
potentialAction: {
|
||||
'@type': 'SearchAction',
|
||||
target: {
|
||||
'@type': 'EntryPoint',
|
||||
urlTemplate: `${baseUrl}/search?q={search_term_string}`,
|
||||
},
|
||||
'query-input': 'required name=search_term_string',
|
||||
},
|
||||
inLanguage: ['en', 'fr', 'zh'],
|
||||
}
|
||||
|
||||
const faqStructuredData = title.toLowerCase().includes('faq') && {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'FAQPage',
|
||||
mainEntity: [],
|
||||
}
|
||||
|
||||
const softwareStructuredData = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'SoftwareApplication',
|
||||
name: 'Sim',
|
||||
applicationCategory: 'DeveloperApplication',
|
||||
operatingSystem: 'Any',
|
||||
description:
|
||||
'Visual workflow builder for AI applications. Create powerful AI agents, automation workflows, and data processing pipelines by connecting blocks on a canvas—no coding required.',
|
||||
url: baseUrl,
|
||||
author: {
|
||||
'@type': 'Organization',
|
||||
name: 'Sim Team',
|
||||
},
|
||||
offers: {
|
||||
'@type': 'Offer',
|
||||
category: 'Developer Tools',
|
||||
},
|
||||
featureList: [
|
||||
'Visual workflow builder with drag-and-drop interface',
|
||||
'AI agent creation and automation',
|
||||
'80+ built-in integrations',
|
||||
'Real-time team collaboration',
|
||||
'Multiple deployment options',
|
||||
'Custom integrations via MCP protocol',
|
||||
],
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<Script
|
||||
id='article-structured-data'
|
||||
type='application/ld+json'
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(articleStructuredData),
|
||||
}}
|
||||
/>
|
||||
{breadcrumbStructuredData && (
|
||||
<Script
|
||||
id='breadcrumb-structured-data'
|
||||
type='application/ld+json'
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(breadcrumbStructuredData),
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{websiteStructuredData && (
|
||||
<Script
|
||||
id='website-structured-data'
|
||||
type='application/ld+json'
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(websiteStructuredData),
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{faqStructuredData && (
|
||||
<Script
|
||||
id='faq-structured-data'
|
||||
type='application/ld+json'
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(faqStructuredData),
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{url === baseUrl && (
|
||||
<Script
|
||||
id='software-structured-data'
|
||||
type='application/ld+json'
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify(softwareStructuredData),
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
44
apps/docs/components/ui/block-info-card.tsx
Normal file
44
apps/docs/components/ui/block-info-card.tsx
Normal file
@@ -0,0 +1,44 @@
|
||||
'use client'
|
||||
|
||||
import type * as React from 'react'
|
||||
|
||||
interface BlockInfoCardProps {
|
||||
type: string
|
||||
color: string
|
||||
icon?: boolean
|
||||
iconSvg?: string
|
||||
}
|
||||
|
||||
export function BlockInfoCard({
|
||||
type,
|
||||
color,
|
||||
icon = false,
|
||||
iconSvg,
|
||||
}: BlockInfoCardProps): React.ReactNode {
|
||||
return (
|
||||
<div className='mb-6 overflow-hidden rounded-lg border border-border'>
|
||||
<div className='flex items-center justify-center p-6'>
|
||||
<div
|
||||
className='flex h-20 w-20 items-center justify-center rounded-lg'
|
||||
style={{ backgroundColor: color }}
|
||||
>
|
||||
{iconSvg ? (
|
||||
<div className='h-10 w-10 text-white' dangerouslySetInnerHTML={{ __html: iconSvg }} />
|
||||
) : (
|
||||
<div className='font-mono text-xl opacity-70'>{type.substring(0, 2)}</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
{icon && (
|
||||
<style jsx global>{`
|
||||
.block-icon {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
margin: 1rem auto;
|
||||
display: block;
|
||||
}
|
||||
`}</style>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
53
apps/docs/components/ui/image.tsx
Normal file
53
apps/docs/components/ui/image.tsx
Normal file
@@ -0,0 +1,53 @@
|
||||
'use client'
|
||||
|
||||
import { useState } from 'react'
|
||||
import NextImage, { type ImageProps as NextImageProps } from 'next/image'
|
||||
import { cn } from '@/lib/utils'
|
||||
import { Lightbox } from './lightbox'
|
||||
|
||||
interface ImageProps extends Omit<NextImageProps, 'className'> {
|
||||
className?: string
|
||||
enableLightbox?: boolean
|
||||
}
|
||||
|
||||
export function Image({
|
||||
className = 'w-full',
|
||||
enableLightbox = true,
|
||||
alt = '',
|
||||
src,
|
||||
...props
|
||||
}: ImageProps) {
|
||||
const [isLightboxOpen, setIsLightboxOpen] = useState(false)
|
||||
|
||||
const handleImageClick = () => {
|
||||
if (enableLightbox) {
|
||||
setIsLightboxOpen(true)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<NextImage
|
||||
className={cn(
|
||||
'overflow-hidden rounded-xl border border-border object-cover shadow-sm',
|
||||
enableLightbox && 'cursor-pointer transition-opacity hover:opacity-90',
|
||||
className
|
||||
)}
|
||||
alt={alt}
|
||||
src={src}
|
||||
onClick={handleImageClick}
|
||||
{...props}
|
||||
/>
|
||||
|
||||
{enableLightbox && (
|
||||
<Lightbox
|
||||
isOpen={isLightboxOpen}
|
||||
onClose={() => setIsLightboxOpen(false)}
|
||||
src={typeof src === 'string' ? src : String(src)}
|
||||
alt={alt}
|
||||
type='image'
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
130
apps/docs/components/ui/language-dropdown.tsx
Normal file
130
apps/docs/components/ui/language-dropdown.tsx
Normal file
@@ -0,0 +1,130 @@
|
||||
'use client'
|
||||
|
||||
import { useEffect, useState } from 'react'
|
||||
import { Check, ChevronDown } from 'lucide-react'
|
||||
import { useParams, usePathname, useRouter } from 'next/navigation'
|
||||
|
||||
const languages = {
|
||||
en: { name: 'English', flag: '🇺🇸' },
|
||||
es: { name: 'Español', flag: '🇪🇸' },
|
||||
fr: { name: 'Français', flag: '🇫🇷' },
|
||||
de: { name: 'Deutsch', flag: '🇩🇪' },
|
||||
ja: { name: '日本語', flag: '🇯🇵' },
|
||||
zh: { name: '简体中文', flag: '🇨🇳' },
|
||||
}
|
||||
|
||||
export function LanguageDropdown() {
|
||||
const [isOpen, setIsOpen] = useState(false)
|
||||
const pathname = usePathname()
|
||||
const params = useParams()
|
||||
const router = useRouter()
|
||||
|
||||
const [currentLang, setCurrentLang] = useState(() => {
|
||||
const langFromParams = params?.lang as string
|
||||
return langFromParams && Object.keys(languages).includes(langFromParams) ? langFromParams : 'en'
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
const langFromParams = params?.lang as string
|
||||
|
||||
if (langFromParams && Object.keys(languages).includes(langFromParams)) {
|
||||
if (langFromParams !== currentLang) {
|
||||
setCurrentLang(langFromParams)
|
||||
}
|
||||
} else {
|
||||
if (currentLang !== 'en') {
|
||||
setCurrentLang('en')
|
||||
}
|
||||
}
|
||||
}, [params, currentLang])
|
||||
|
||||
const handleLanguageChange = (locale: string) => {
|
||||
if (locale === currentLang) {
|
||||
setIsOpen(false)
|
||||
return
|
||||
}
|
||||
|
||||
setIsOpen(false)
|
||||
|
||||
const segments = pathname.split('/').filter(Boolean)
|
||||
|
||||
if (segments[0] && Object.keys(languages).includes(segments[0])) {
|
||||
segments.shift()
|
||||
}
|
||||
|
||||
let newPath = ''
|
||||
if (locale === 'en') {
|
||||
newPath = segments.length > 0 ? `/${segments.join('/')}` : '/introduction'
|
||||
} else {
|
||||
newPath = `/${locale}${segments.length > 0 ? `/${segments.join('/')}` : '/introduction'}`
|
||||
}
|
||||
|
||||
router.push(newPath)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (!isOpen) return
|
||||
const onKey = (e: KeyboardEvent) => {
|
||||
if (e.key === 'Escape') setIsOpen(false)
|
||||
}
|
||||
window.addEventListener('keydown', onKey)
|
||||
return () => window.removeEventListener('keydown', onKey)
|
||||
}, [isOpen])
|
||||
|
||||
return (
|
||||
<div className='relative'>
|
||||
<button
|
||||
onClick={(e) => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
setIsOpen(!isOpen)
|
||||
}}
|
||||
aria-haspopup='listbox'
|
||||
aria-expanded={isOpen}
|
||||
aria-controls='language-menu'
|
||||
className='flex items-center gap-1.5 rounded-lg border border-border/30 bg-muted/40 px-2.5 py-1.5 text-sm shadow-sm backdrop-blur-sm transition-colors hover:bg-muted focus:outline-none focus-visible:ring-2 focus-visible:ring-ring'
|
||||
>
|
||||
<span className='text-sm'>{languages[currentLang as keyof typeof languages]?.flag}</span>
|
||||
<span className='font-medium text-foreground'>
|
||||
{languages[currentLang as keyof typeof languages]?.name}
|
||||
</span>
|
||||
<ChevronDown
|
||||
className={`h-3 w-3 text-muted-foreground transition-transform ${isOpen ? 'rotate-180' : ''}`}
|
||||
/>
|
||||
</button>
|
||||
|
||||
{isOpen && (
|
||||
<>
|
||||
<div className='fixed inset-0 z-[1000]' aria-hidden onClick={() => setIsOpen(false)} />
|
||||
<div
|
||||
id='language-menu'
|
||||
role='listbox'
|
||||
className='absolute top-full left-0 z-[1001] mt-1 max-h-[75vh] w-56 overflow-auto rounded-xl border border-border/50 bg-white shadow-2xl md:w-44 md:bg-background/95 md:backdrop-blur-md dark:bg-neutral-950 md:dark:bg-background/95'
|
||||
>
|
||||
{Object.entries(languages).map(([code, lang]) => (
|
||||
<button
|
||||
key={code}
|
||||
onClick={(e) => {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
handleLanguageChange(code)
|
||||
}}
|
||||
role='option'
|
||||
aria-selected={currentLang === code}
|
||||
className={`flex w-full items-center gap-3 px-3 py-3 text-base transition-colors first:rounded-t-xl last:rounded-b-xl hover:bg-muted/80 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring md:gap-2 md:px-2.5 md:py-2 md:text-sm ${
|
||||
currentLang === code ? 'bg-muted/60 font-medium text-primary' : 'text-foreground'
|
||||
}`}
|
||||
>
|
||||
<span className='text-base md:text-sm'>{lang.flag}</span>
|
||||
<span className='leading-none'>{lang.name}</span>
|
||||
{currentLang === code && (
|
||||
<Check className='ml-auto h-4 w-4 text-primary md:h-3.5 md:w-3.5' />
|
||||
)}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
74
apps/docs/components/ui/lightbox.tsx
Normal file
74
apps/docs/components/ui/lightbox.tsx
Normal file
@@ -0,0 +1,74 @@
|
||||
'use client'
|
||||
|
||||
import { useEffect, useRef } from 'react'
|
||||
import { getVideoUrl } from '@/lib/utils'
|
||||
|
||||
interface LightboxProps {
|
||||
isOpen: boolean
|
||||
onClose: () => void
|
||||
src: string
|
||||
alt: string
|
||||
type: 'image' | 'video'
|
||||
}
|
||||
|
||||
export function Lightbox({ isOpen, onClose, src, alt, type }: LightboxProps) {
|
||||
const overlayRef = useRef<HTMLDivElement>(null)
|
||||
|
||||
useEffect(() => {
|
||||
const handleKeyDown = (event: KeyboardEvent) => {
|
||||
if (event.key === 'Escape') {
|
||||
onClose()
|
||||
}
|
||||
}
|
||||
|
||||
const handleClickOutside = (event: MouseEvent) => {
|
||||
if (overlayRef.current && event.target === overlayRef.current) {
|
||||
onClose()
|
||||
}
|
||||
}
|
||||
|
||||
if (isOpen) {
|
||||
document.addEventListener('keydown', handleKeyDown)
|
||||
document.addEventListener('click', handleClickOutside)
|
||||
document.body.style.overflow = 'hidden'
|
||||
}
|
||||
|
||||
return () => {
|
||||
document.removeEventListener('keydown', handleKeyDown)
|
||||
document.removeEventListener('click', handleClickOutside)
|
||||
document.body.style.overflow = 'unset'
|
||||
}
|
||||
}, [isOpen, onClose])
|
||||
|
||||
if (!isOpen) return null
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={overlayRef}
|
||||
className='fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-12 backdrop-blur-sm'
|
||||
role='dialog'
|
||||
aria-modal='true'
|
||||
aria-label='Media viewer'
|
||||
>
|
||||
<div className='relative max-h-full max-w-full overflow-hidden rounded-xl shadow-2xl'>
|
||||
{type === 'image' ? (
|
||||
<img
|
||||
src={src}
|
||||
alt={alt}
|
||||
className='max-h-[calc(100vh-6rem)] max-w-[calc(100vw-6rem)] rounded-xl object-contain'
|
||||
loading='lazy'
|
||||
/>
|
||||
) : (
|
||||
<video
|
||||
src={getVideoUrl(src)}
|
||||
autoPlay
|
||||
loop
|
||||
muted
|
||||
playsInline
|
||||
className='max-h-[calc(100vh-6rem)] max-w-[calc(100vw-6rem)] rounded-xl outline-none focus:outline-none'
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
57
apps/docs/components/ui/video.tsx
Normal file
57
apps/docs/components/ui/video.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
'use client'
|
||||
|
||||
import { useState } from 'react'
|
||||
import { getVideoUrl } from '@/lib/utils'
|
||||
import { Lightbox } from './lightbox'
|
||||
|
||||
interface VideoProps {
|
||||
src: string
|
||||
className?: string
|
||||
autoPlay?: boolean
|
||||
loop?: boolean
|
||||
muted?: boolean
|
||||
playsInline?: boolean
|
||||
enableLightbox?: boolean
|
||||
}
|
||||
|
||||
export function Video({
|
||||
src,
|
||||
className = 'w-full rounded-xl border border-border shadow-sm overflow-hidden outline-none focus:outline-none',
|
||||
autoPlay = true,
|
||||
loop = true,
|
||||
muted = true,
|
||||
playsInline = true,
|
||||
enableLightbox = true,
|
||||
}: VideoProps) {
|
||||
const [isLightboxOpen, setIsLightboxOpen] = useState(false)
|
||||
|
||||
const handleVideoClick = () => {
|
||||
if (enableLightbox) {
|
||||
setIsLightboxOpen(true)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<video
|
||||
autoPlay={autoPlay}
|
||||
loop={loop}
|
||||
muted={muted}
|
||||
playsInline={playsInline}
|
||||
className={`${className} ${enableLightbox ? 'cursor-pointer transition-opacity hover:opacity-90' : ''}`}
|
||||
src={getVideoUrl(src)}
|
||||
onClick={handleVideoClick}
|
||||
/>
|
||||
|
||||
{enableLightbox && (
|
||||
<Lightbox
|
||||
isOpen={isLightboxOpen}
|
||||
onClose={() => setIsLightboxOpen(false)}
|
||||
src={src}
|
||||
alt={`Video: ${src}`}
|
||||
type='video'
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
280
apps/docs/content/docs/de/blocks/agent.mdx
Normal file
280
apps/docs/content/docs/de/blocks/agent.mdx
Normal file
@@ -0,0 +1,280 @@
|
||||
---
|
||||
title: Agent
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Der Agent-Block dient als Schnittstelle zwischen Ihrem Workflow und Large Language Models (LLMs). Er führt Inferenzanfragen an verschiedene KI-Anbieter aus, verarbeitet natürlichsprachliche Eingaben gemäß definierten Anweisungen und erzeugt strukturierte oder unstrukturierte Ausgaben für die nachgelagerte Verarbeitung.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/agent.png"
|
||||
alt="Agent-Block-Konfiguration"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
## Überblick
|
||||
|
||||
Der Agent-Block ermöglicht Ihnen:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Natürliche Sprache verarbeiten</strong>: Benutzereingaben analysieren und kontextbezogene Antworten generieren
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>KI-gestützte Aufgaben ausführen</strong>: Inhaltsanalyse, -erstellung und Entscheidungsfindung durchführen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Externe Tools aufrufen</strong>: Während der Verarbeitung auf APIs, Datenbanken und Dienste zugreifen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Strukturierte Ausgabe erzeugen</strong>: JSON-Daten zurückgeben, die Ihren Schema-Anforderungen entsprechen
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Konfigurationsoptionen
|
||||
|
||||
### System-Prompt
|
||||
|
||||
Der System-Prompt legt die Betriebsparameter und Verhaltenseinschränkungen des Agenten fest. Diese Konfiguration definiert die Rolle des Agenten, die Antwortmethodik und die Verarbeitungsgrenzen für alle eingehenden Anfragen.
|
||||
|
||||
```markdown
|
||||
You are a helpful assistant that specializes in financial analysis.
|
||||
Always provide clear explanations and cite sources when possible.
|
||||
When responding to questions about investments, include risk disclaimers.
|
||||
```
|
||||
|
||||
### Benutzer-Prompt
|
||||
|
||||
Der Benutzer-Prompt stellt die primären Eingabedaten für die Inferenzverarbeitung dar. Dieser Parameter akzeptiert natürlichsprachlichen Text oder strukturierte Daten, die der Agent analysieren und auf die er reagieren wird. Zu den Eingabequellen gehören:
|
||||
|
||||
- **Statische Konfiguration**: Direkte Texteingabe, die in der Block-Konfiguration angegeben ist
|
||||
- **Dynamische Eingabe**: Daten, die von vorgelagerten Blöcken über Verbindungsschnittstellen übergeben werden
|
||||
- **Laufzeitgenerierung**: Programmatisch erzeugte Inhalte während der Workflow-Ausführung
|
||||
|
||||
### Modellauswahl
|
||||
|
||||
Der Agent-Block unterstützt mehrere LLM-Anbieter über eine einheitliche Inferenzschnittstelle. Verfügbare Modelle umfassen:
|
||||
|
||||
**OpenAI-Modelle**: GPT-5, GPT-4o, o1, o3, o4-mini, gpt-4.1 (API-basierte Inferenz)
|
||||
**Anthropic-Modelle**: Claude 3.7 Sonnet (API-basierte Inferenz)
|
||||
**Google-Modelle**: Gemini 2.5 Pro, Gemini 2.0 Flash (API-basierte Inferenz)
|
||||
**Alternative Anbieter**: Groq, Cerebras, xAI, DeepSeek (API-basierte Inferenz)
|
||||
**Lokale Bereitstellung**: Ollama-kompatible Modelle (selbst gehostete Inferenz)
|
||||
|
||||
<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
|
||||
<Video src="models.mp4" width={500} height={350} />
|
||||
</div>
|
||||
|
||||
### Temperatur
|
||||
|
||||
Steuern Sie die Kreativität und Zufälligkeit der Antworten:
|
||||
|
||||
<Tabs items={['Niedrig (0-0,3)', 'Mittel (0,3-0,7)', 'Hoch (0,7-2,0)']}>
|
||||
<Tab>
|
||||
Deterministische, fokussierte Antworten. Am besten für faktische Aufgaben, Kundensupport und
|
||||
Situationen, in denen Genauigkeit entscheidend ist.
|
||||
</Tab>
|
||||
<Tab>
|
||||
Ausgewogene Kreativität und Fokus. Geeignet für allgemeine Anwendungen, die sowohl
|
||||
Genauigkeit als auch etwas Kreativität erfordern.
|
||||
</Tab>
|
||||
<Tab>
|
||||
Kreativere, abwechslungsreichere Antworten. Ideal für kreatives Schreiben, Brainstorming und das Generieren
|
||||
vielfältiger Ideen.
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<div className="mt-4 text-sm text-gray-600 dark:text-gray-400">
|
||||
Der Temperaturbereich (0-1 oder 0-2) variiert je nach ausgewähltem Modell.
|
||||
</div>
|
||||
|
||||
### API-Schlüssel
|
||||
|
||||
Ihr API-Schlüssel für den ausgewählten LLM-Anbieter. Dieser wird sicher gespeichert und für die Authentifizierung verwendet.
|
||||
|
||||
### Tools
|
||||
|
||||
Tools erweitern die Fähigkeiten des Agenten durch externe API-Integrationen und Service-Verbindungen. Das Tool-System ermöglicht Funktionsaufrufe, sodass der Agent Operationen über die Texterstellung hinaus ausführen kann.
|
||||
|
||||
**Tool-Integrationsprozess**:
|
||||
1. Zugriff auf den Tools-Konfigurationsbereich innerhalb des Agent-Blocks
|
||||
2. Auswahl aus über 60 vorgefertigten Integrationen oder Definition benutzerdefinierter Funktionen
|
||||
3. Konfiguration von Authentifizierungsparametern und Betriebseinschränkungen
|
||||
|
||||
<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
|
||||
<Video src="tools.mp4" width={500} height={350} />
|
||||
</div>
|
||||
|
||||
**Verfügbare Tool-Kategorien**:
|
||||
- **Kommunikation**: Gmail, Slack, Telegram, WhatsApp, Microsoft Teams
|
||||
- **Datenquellen**: Notion, Google Sheets, Airtable, Supabase, Pinecone
|
||||
- **Webdienste**: Firecrawl, Google Search, Exa AI, Browser-Automatisierung
|
||||
- **Entwicklung**: GitHub, Jira, Linear Repository- und Issue-Management
|
||||
- **KI-Dienste**: OpenAI, Perplexity, Hugging Face, ElevenLabs
|
||||
|
||||
**Steuerung der Tool-Ausführung**:
|
||||
- **Auto**: Modell bestimmt Tool-Aufruf basierend auf Kontext und Notwendigkeit
|
||||
- **Required**: Tool muss bei jeder Inferenzanfrage aufgerufen werden
|
||||
- **None**: Tool-Definition verfügbar, aber vom Modellkontext ausgeschlossen
|
||||
|
||||
<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
|
||||
<Video src="granular-tool-control.mp4" width={500} height={350} />
|
||||
</div>
|
||||
|
||||
### Antwortformat
|
||||
|
||||
Der Parameter für das Antwortformat erzwingt eine strukturierte Ausgabegenerierung durch JSON-Schema-Validierung. Dies gewährleistet konsistente, maschinenlesbare Antworten, die vordefinierten Datenstrukturen entsprechen:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "user_analysis",
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"sentiment": {
|
||||
"type": "string",
|
||||
"enum": ["positive", "negative", "neutral"]
|
||||
},
|
||||
"confidence": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 1
|
||||
}
|
||||
},
|
||||
"required": ["sentiment", "confidence"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Diese Konfiguration beschränkt die Ausgabe des Modells auf die Einhaltung des angegebenen Schemas, verhindert Freitext-Antworten und stellt eine strukturierte Datengenerierung sicher.
|
||||
|
||||
### Zugriff auf Ergebnisse
|
||||
|
||||
Nach Abschluss eines Agenten können Sie auf seine Ausgaben zugreifen:
|
||||
|
||||
- **`<agent.content>`**: Der Antworttext oder die strukturierten Daten des Agenten
|
||||
- **`<agent.tokens>`**: Token-Nutzungsstatistiken (Prompt, Completion, Gesamt)
|
||||
- **`<agent.tool_calls>`**: Details zu allen Tools, die der Agent während der Ausführung verwendet hat
|
||||
- **`<agent.cost>`**: Geschätzte Kosten des API-Aufrufs (falls verfügbar)
|
||||
|
||||
## Erweiterte Funktionen
|
||||
|
||||
### Memory + Agent: Gesprächsverlauf
|
||||
|
||||
Verwenden Sie einen `Memory`Block mit einer konsistenten `id` (zum Beispiel `chat`), um Nachrichten zwischen Durchläufen zu speichern und diesen Verlauf in den Prompt des Agenten einzubeziehen.
|
||||
|
||||
- Fügen Sie die Nachricht des Benutzers vor dem Agenten hinzu
|
||||
- Lesen Sie den Gesprächsverlauf für den Kontext
|
||||
- Hängen Sie die Antwort des Agenten nach dessen Ausführung an
|
||||
|
||||
Siehe die [`Memory`](/tools/memory) Blockreferenz für Details.
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Konfiguration', 'Variablen', 'Ergebnisse']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>System-Prompt</strong>: Anweisungen, die das Verhalten und die Rolle des Agenten definieren
|
||||
</li>
|
||||
<li>
|
||||
<strong>Benutzer-Prompt</strong>: Eingabetext oder zu verarbeitende Daten
|
||||
</li>
|
||||
<li>
|
||||
<strong>Modell</strong>: KI-Modellauswahl (OpenAI, Anthropic, Google, usw.)
|
||||
</li>
|
||||
<li>
|
||||
<strong>Temperatur</strong>: Steuerung der Zufälligkeit der Antwort (0-2)
|
||||
</li>
|
||||
<li>
|
||||
<strong>Tools</strong>: Array verfügbarer Tools für Funktionsaufrufe
|
||||
</li>
|
||||
<li>
|
||||
<strong>Antwortformat</strong>: JSON-Schema für strukturierte Ausgabe
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>agent.content</strong>: Antworttext oder strukturierte Daten des Agenten
|
||||
</li>
|
||||
<li>
|
||||
<strong>agent.tokens</strong>: Token-Nutzungsstatistik-Objekt
|
||||
</li>
|
||||
<li>
|
||||
<strong>agent.tool_calls</strong>: Array mit Details zur Tool-Ausführung
|
||||
</li>
|
||||
<li>
|
||||
<strong>agent.cost</strong>: Geschätzte API-Aufrufkosten (falls verfügbar)
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Content</strong>: Primäre Antwortausgabe vom Agenten
|
||||
</li>
|
||||
<li>
|
||||
<strong>Metadata</strong>: Nutzungsstatistiken und Ausführungsdetails
|
||||
</li>
|
||||
<li>
|
||||
<strong>Access</strong>: Verfügbar in Blöcken nach dem Agenten
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### Automatisierung des Kundenservice
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Bearbeitung von Kundenanfragen mit Datenbankzugriff</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Benutzer reicht ein Support-Ticket über den API-Block ein</li>
|
||||
<li>Agent prüft Bestellungen/Abonnements in Postgres und durchsucht die Wissensdatenbank nach Anleitungen</li>
|
||||
<li>Falls eine Eskalation erforderlich ist, erstellt der Agent ein Linear-Ticket mit relevantem Kontext</li>
|
||||
<li>Agent erstellt eine klare E-Mail-Antwort</li>
|
||||
<li>Gmail sendet die Antwort an den Kunden</li>
|
||||
<li>Konversation wird im Memory gespeichert, um den Verlauf für zukünftige Nachrichten beizubehalten</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Multi-Modell-Inhaltsanalyse
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Analyse von Inhalten mit verschiedenen KI-Modellen</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Funktionsblock verarbeitet hochgeladenes Dokument</li>
|
||||
<li>Agent mit GPT-4o führt technische Analyse durch</li>
|
||||
<li>Agent mit Claude analysiert Stimmung und Tonfall</li>
|
||||
<li>Funktionsblock kombiniert Ergebnisse für den Abschlussbericht</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Werkzeuggestützter Forschungsassistent
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Forschungsassistent mit Websuche und Dokumentenzugriff</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Benutzeranfrage über Eingabe erhalten</li>
|
||||
<li>Agent durchsucht das Web mit dem Google-Suchwerkzeug</li>
|
||||
<li>Agent greift auf Notion-Datenbank für interne Dokumente zu</li>
|
||||
<li>Agent erstellt umfassenden Forschungsbericht</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
## Bewährte Praktiken
|
||||
|
||||
- **Sei spezifisch in System-Prompts**: Definiere die Rolle, den Ton und die Einschränkungen des Agenten klar. Je spezifischer deine Anweisungen sind, desto besser kann der Agent seinen vorgesehenen Zweck erfüllen.
|
||||
- **Wähle die richtige Temperatureinstellung**: Verwende niedrigere Temperatureinstellungen (0-0,3), wenn Genauigkeit wichtig ist, oder erhöhe die Temperatur (0,7-2,0) für kreativere oder abwechslungsreichere Antworten
|
||||
- **Nutze Werkzeuge effektiv**: Integriere Werkzeuge, die den Zweck des Agenten ergänzen und seine Fähigkeiten verbessern. Sei selektiv bei der Auswahl der Werkzeuge, um den Agenten nicht zu überfordern. Für Aufgaben mit wenig Überschneidung verwende einen anderen Agent-Block für die besten Ergebnisse.
|
||||
232
apps/docs/content/docs/de/blocks/api.mdx
Normal file
232
apps/docs/content/docs/de/blocks/api.mdx
Normal file
@@ -0,0 +1,232 @@
|
||||
---
|
||||
title: API
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Der API-Block ermöglicht es Ihnen, Ihren Workflow über API-Endpunkte mit externen Diensten zu verbinden, indem HTTP-Anfragen verwendet werden. Er unterstützt verschiedene Methoden wie GET, POST, PUT, DELETE und PATCH, wodurch Sie mit praktisch jedem API-Endpunkt interagieren können.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/api.png"
|
||||
alt="API-Block"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
## Überblick
|
||||
|
||||
Der API-Block ermöglicht Ihnen:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Verbindung zu externen Diensten</strong>: HTTP-Anfragen an REST-APIs und Webdienste stellen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Daten senden und empfangen</strong>: Antworten verarbeiten und Daten aus externen Quellen transformieren
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Integration von Drittanbieter-Plattformen</strong>: Verbindung mit Diensten wie Stripe, Slack oder benutzerdefinierten APIs
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Authentifizierung verwalten</strong>: Unterstützung verschiedener Authentifizierungsmethoden einschließlich Bearer-Tokens und API-Schlüssel
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
Der API-Block verarbeitet HTTP-Anfragen durch einen strukturierten Ansatz:
|
||||
|
||||
1. **Anfrage konfigurieren** - URL, Methode, Header und Body-Parameter festlegen
|
||||
2. **Anfrage ausführen** - HTTP-Anfrage an den angegebenen Endpunkt senden
|
||||
3. **Antwort verarbeiten** - Antwortdaten, Statuscodes und Header verarbeiten
|
||||
4. **Fehlerbehandlung** - Timeouts, Wiederholungsversuche und Fehlerbedingungen verwalten
|
||||
|
||||
## Konfigurationsoptionen
|
||||
|
||||
### URL
|
||||
|
||||
Die Endpunkt-URL für die API-Anfrage. Dies kann sein:
|
||||
|
||||
- Eine statische URL, die direkt im Block eingegeben wird
|
||||
- Eine dynamische URL, die mit der Ausgabe eines anderen Blocks verbunden ist
|
||||
- Eine URL mit Pfadparametern
|
||||
|
||||
### Methode
|
||||
|
||||
Wählen Sie die HTTP-Methode für Ihre Anfrage:
|
||||
|
||||
- **GET**: Daten vom Server abrufen
|
||||
- **POST**: Daten an den Server senden, um eine Ressource zu erstellen
|
||||
- **PUT**: Eine bestehende Ressource auf dem Server aktualisieren
|
||||
- **DELETE**: Eine Ressource vom Server entfernen
|
||||
- **PATCH**: Eine bestehende Ressource teilweise aktualisieren
|
||||
|
||||
### Abfrageparameter
|
||||
|
||||
Definieren Sie Schlüssel-Wert-Paare, die als Abfrageparameter an die URL angehängt werden. Zum Beispiel:
|
||||
|
||||
```
|
||||
Key: apiKey
|
||||
Value: your_api_key_here
|
||||
|
||||
Key: limit
|
||||
Value: 10
|
||||
```
|
||||
|
||||
Diese würden der URL als `?apiKey=your_api_key_here&limit=10` hinzugefügt werden.
|
||||
|
||||
### Header
|
||||
|
||||
Konfigurieren Sie HTTP-Header für Ihre Anfrage. Häufige Header sind:
|
||||
|
||||
```
|
||||
Key: Content-Type
|
||||
Value: application/json
|
||||
|
||||
Key: Authorization
|
||||
Value: Bearer your_token_here
|
||||
```
|
||||
|
||||
### Anfrage-Body
|
||||
|
||||
Für Methoden, die einen Anfrage-Body unterstützen (POST, PUT, PATCH), können Sie die zu sendenden Daten definieren. Der Body kann sein:
|
||||
|
||||
- JSON-Daten, die direkt im Block eingegeben werden
|
||||
- Daten, die mit der Ausgabe eines anderen Blocks verbunden sind
|
||||
- Dynamisch während der Workflow-Ausführung generierte Daten
|
||||
|
||||
### Zugriff auf Ergebnisse
|
||||
|
||||
Nach Abschluss einer API-Anfrage können Sie auf folgende Ausgaben zugreifen:
|
||||
|
||||
- **`<api.data>`**: Die Antwortdaten vom API
|
||||
- **`<api.status>`**: HTTP-Statuscode (200, 404, 500, usw.)
|
||||
- **`<api.headers>`**: Antwort-Header vom Server
|
||||
- **`<api.error>`**: Fehlerdetails, falls die Anfrage fehlgeschlagen ist
|
||||
|
||||
## Erweiterte Funktionen
|
||||
|
||||
### Dynamische URL-Konstruktion
|
||||
|
||||
Bauen Sie URLs dynamisch mit Variablen aus vorherigen Blöcken:
|
||||
|
||||
```javascript
|
||||
// In a Function block before the API
|
||||
const userId = <start.userId>;
|
||||
const apiUrl = `https://api.example.com/users/${userId}/profile`;
|
||||
```
|
||||
|
||||
### Anfrage-Wiederholungen
|
||||
|
||||
Der API-Block behandelt automatisch:
|
||||
- Netzwerk-Timeouts mit exponentiellem Backoff
|
||||
- Rate-Limit-Antworten (429-Statuscodes)
|
||||
- Serverfehler (5xx-Statuscodes) mit Wiederholungslogik
|
||||
- Verbindungsfehler mit Wiederverbindungsversuchen
|
||||
|
||||
### Antwortvalidierung
|
||||
|
||||
Validieren Sie API-Antworten vor der Verarbeitung:
|
||||
|
||||
```javascript
|
||||
// In a Function block after the API
|
||||
if (<api.status> === 200) {
|
||||
const data = <api.data>;
|
||||
// Process successful response
|
||||
} else {
|
||||
// Handle error response
|
||||
console.error(`API Error: ${<api.status>}`);
|
||||
}
|
||||
```
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Configuration', 'Variables', 'Results']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>URL</strong>: Der Endpunkt, an den die Anfrage gesendet werden soll
|
||||
</li>
|
||||
<li>
|
||||
<strong>Method</strong>: HTTP-Methode (GET, POST, PUT, DELETE, PATCH)
|
||||
</li>
|
||||
<li>
|
||||
<strong>Query Parameters</strong>: Schlüssel-Wert-Paare für URL-Parameter
|
||||
</li>
|
||||
<li>
|
||||
<strong>Headers</strong>: HTTP-Header für Authentifizierung und Inhaltstyp
|
||||
</li>
|
||||
<li>
|
||||
<strong>Body</strong>: Anfrage-Payload für POST/PUT/PATCH-Methoden
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>api.data</strong>: Antwortdaten vom API-Aufruf
|
||||
</li>
|
||||
<li>
|
||||
<strong>api.status</strong>: Vom Server zurückgegebener HTTP-Statuscode
|
||||
</li>
|
||||
<li>
|
||||
<strong>api.headers</strong>: Antwort-Header vom Server
|
||||
</li>
|
||||
<li>
|
||||
<strong>api.error</strong>: Fehlerdetails, falls die Anfrage fehlgeschlagen ist
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Response Data</strong>: Primärer API-Antwortinhalt
|
||||
</li>
|
||||
<li>
|
||||
<strong>Status Information</strong>: HTTP-Status und Fehlerdetails
|
||||
</li>
|
||||
<li>
|
||||
<strong>Access</strong>: Verfügbar in Blöcken nach dem API-Aufruf
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### Benutzerprofildaten abrufen
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Benutzerinformationen von externem Dienst abrufen</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Funktionsblock erstellt Benutzer-ID aus Eingabe</li>
|
||||
<li>API-Block ruft GET /users/{id} Endpunkt auf</li>
|
||||
<li>Funktionsblock verarbeitet und formatiert Benutzerdaten</li>
|
||||
<li>Antwortblock gibt formatiertes Profil zurück</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Zahlungsabwicklung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Zahlung über Stripe API verarbeiten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Funktionsblock validiert Zahlungsdaten</li>
|
||||
<li>API-Block erstellt Zahlungsabsicht über Stripe</li>
|
||||
<li>Bedingungsblock behandelt Zahlungserfolg/-fehler</li>
|
||||
<li>Supabase-Block aktualisiert Bestellstatus in der Datenbank</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
## Best Practices
|
||||
|
||||
- **Umgebungsvariablen für sensible Daten verwenden**: Keine API-Schlüssel oder Anmeldedaten im Code hinterlegen
|
||||
- **Fehler elegant behandeln**: Fehlerbehandlungslogik für fehlgeschlagene Anfragen einbinden
|
||||
- **Antworten validieren**: Statuscodes und Antwortformate vor der Datenverarbeitung prüfen
|
||||
- **Ratenbegrenzungen beachten**: Auf API-Ratenbegrenzungen achten und angemessene Drosselung implementieren
|
||||
242
apps/docs/content/docs/de/blocks/condition.mdx
Normal file
242
apps/docs/content/docs/de/blocks/condition.mdx
Normal file
@@ -0,0 +1,242 @@
|
||||
---
|
||||
title: Bedingung
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Der Bedingungsblock ermöglicht es Ihnen, den Ausführungspfad Ihres Workflows basierend auf booleschen Ausdrücken zu verzweigen und so dynamische, reaktionsfähige Workflows mit unterschiedlichen Ausführungspfaden zu erstellen. Er wertet Bedingungen aus und leitet den Workflow entsprechend weiter, sodass Sie den Ausführungsfluss basierend auf Daten oder Logik steuern können, ohne ein LLM zu benötigen.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/condition.png"
|
||||
alt="Bedingungsblock"
|
||||
width={500}
|
||||
height={350}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<Callout>
|
||||
Bedingungsblöcke ermöglichen deterministische Entscheidungsfindung ohne ein LLM zu benötigen, was sie ideal
|
||||
für unkomplizierte Verzweigungslogik macht.
|
||||
</Callout>
|
||||
|
||||
## Überblick
|
||||
|
||||
Der Bedingungsblock ermöglicht Ihnen:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Verzweigungslogik erstellen</strong>: Workflows basierend auf booleschen Ausdrücken leiten
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Datengesteuerte Entscheidungen treffen</strong>: Bedingungen anhand von Ausgaben vorheriger Blöcke auswerten
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Mehrere Szenarien behandeln</strong>: Mehrere Bedingungen mit unterschiedlichen Pfaden definieren
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Deterministische Weiterleitung bieten</strong>: Entscheidungen ohne ein LLM treffen
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
Der Bedingungsblock arbeitet durch einen sequentiellen Auswertungsprozess:
|
||||
|
||||
1. **Ausdruck auswerten** - Verarbeitet den JavaScript/TypeScript-booleschen Ausdruck mit aktuellen Workflow-Daten
|
||||
2. **Ergebnis bestimmen** - Gibt basierend auf der Ausdrucksauswertung true oder false zurück
|
||||
3. **Workflow weiterleiten** - Leitet die Ausführung basierend auf dem Ergebnis an den entsprechenden Zielblock weiter
|
||||
4. **Kontext bereitstellen** - Generiert Metadaten über die Entscheidung für Debugging und Überwachung
|
||||
|
||||
## Konfigurationsoptionen
|
||||
|
||||
### Bedingungen
|
||||
|
||||
Definieren Sie eine oder mehrere Bedingungen, die ausgewertet werden. Jede Bedingung umfasst:
|
||||
|
||||
- **Ausdruck**: Ein JavaScript/TypeScript-Ausdruck, der zu true oder false ausgewertet wird
|
||||
- **Pfad**: Der Zielblock, zu dem weitergeleitet werden soll, wenn die Bedingung true ist
|
||||
- **Beschreibung**: Optionale Erklärung, was die Bedingung prüft
|
||||
|
||||
Sie können mehrere Bedingungen erstellen, die der Reihe nach ausgewertet werden, wobei die erste übereinstimmende Bedingung den Ausführungspfad bestimmt.
|
||||
|
||||
### Format für Bedingungsausdrücke
|
||||
|
||||
Bedingungen verwenden JavaScript-Syntax und können auf Eingabewerte aus vorherigen Blöcken verweisen.
|
||||
|
||||
<Tabs items={['Schwellenwert', 'Textanalyse', 'Mehrere Bedingungen']}>
|
||||
<Tab>
|
||||
|
||||
```javascript
|
||||
// Check if a score is above a threshold
|
||||
<agent.score> > 75
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
|
||||
```javascript
|
||||
// Check if a text contains specific keywords
|
||||
<agent.text>.includes('urgent') || <agent.text>.includes('emergency')
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
|
||||
```javascript
|
||||
// Check multiple conditions
|
||||
<agent.age> >= 18 && <agent.country> === 'US'
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Zugriff auf Ergebnisse
|
||||
|
||||
Nach der Auswertung einer Bedingung können Sie auf folgende Ausgaben zugreifen:
|
||||
|
||||
- **`<condition.result>`**: Boolesches Ergebnis der Bedingungsauswertung
|
||||
- **`<condition.matched_condition>`**: ID der übereinstimmenden Bedingung
|
||||
- **`<condition.content>`**: Beschreibung des Auswertungsergebnisses
|
||||
- **`<condition.path>`**: Details zum gewählten Routing-Ziel
|
||||
|
||||
## Erweiterte Funktionen
|
||||
|
||||
### Komplexe Ausdrücke
|
||||
|
||||
Verwenden Sie JavaScript-Operatoren und -Funktionen in Bedingungen:
|
||||
|
||||
```javascript
|
||||
// String operations
|
||||
<user.email>.endsWith('@company.com')
|
||||
|
||||
// Array operations
|
||||
<api.tags>.includes('urgent')
|
||||
|
||||
// Mathematical operations
|
||||
<agent.confidence> * 100 > 85
|
||||
|
||||
// Date comparisons
|
||||
new Date(<api.created_at>) > new Date('2024-01-01')
|
||||
```
|
||||
|
||||
### Auswertung mehrerer Bedingungen
|
||||
|
||||
Bedingungen werden der Reihe nach ausgewertet, bis eine übereinstimmt:
|
||||
|
||||
```javascript
|
||||
// Condition 1: Check for high priority
|
||||
<ticket.priority> === 'high'
|
||||
|
||||
// Condition 2: Check for urgent keywords
|
||||
<ticket.subject>.toLowerCase().includes('urgent')
|
||||
|
||||
// Condition 3: Default fallback
|
||||
true
|
||||
```
|
||||
|
||||
### Fehlerbehandlung
|
||||
|
||||
Bedingungen behandeln automatisch:
|
||||
- Undefinierte oder Null-Werte mit sicherer Auswertung
|
||||
- Typabweichungen mit geeigneten Fallbacks
|
||||
- Ungültige Ausdrücke mit Fehlerprotokollierung
|
||||
- Fehlende Variablen mit Standardwerten
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Konfiguration', 'Variablen', 'Ergebnisse']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Bedingungen</strong>: Array von booleschen Ausdrücken zur Auswertung
|
||||
</li>
|
||||
<li>
|
||||
<strong>Ausdrücke</strong>: JavaScript/TypeScript-Bedingungen mit Block-Ausgaben
|
||||
</li>
|
||||
<li>
|
||||
<strong>Routing-Pfade</strong>: Zielblöcke für jedes Bedingungsergebnis
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>condition.result</strong>: Boolesches Ergebnis der Bedingungsauswertung
|
||||
</li>
|
||||
<li>
|
||||
<strong>condition.matched_condition</strong>: ID der übereinstimmenden Bedingung
|
||||
</li>
|
||||
<li>
|
||||
<strong>condition.content</strong>: Beschreibung des Auswertungsergebnisses
|
||||
</li>
|
||||
<li>
|
||||
<strong>condition.path</strong>: Details zum gewählten Routing-Ziel
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Boolesches Ergebnis</strong>: Primäres Ergebnis der Bedingungsauswertung
|
||||
</li>
|
||||
<li>
|
||||
<strong>Routing-Informationen</strong>: Pfadauswahl und Bedingungsdetails
|
||||
</li>
|
||||
<li>
|
||||
<strong>Zugriff</strong>: Verfügbar in Blöcken nach der Bedingung
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### Routing im Kundenservice
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Support-Tickets nach Priorität weiterleiten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>API-Block ruft Support-Ticket-Daten ab</li>
|
||||
<li>Bedingung prüft, ob `<api.priority>` gleich 'high' ist</li>
|
||||
<li>Tickets mit hoher Priorität → Mitarbeiter mit Eskalationswerkzeugen</li>
|
||||
<li>Tickets mit normaler Priorität → Standard-Support-Mitarbeiter</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Inhaltsmoderation
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Inhalte basierend auf Analyseergebnissen filtern</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Agent analysiert nutzergenerierte Inhalte</li>
|
||||
<li>Bedingung prüft, ob `<agent.toxicity_score>` > 0.7</li>
|
||||
<li>Toxische Inhalte → Moderationsworkflow</li>
|
||||
<li>Unbedenkliche Inhalte → Veröffentlichungsworkflow</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Benutzer-Onboarding-Prozess
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Onboarding basierend auf Benutzertyp personalisieren</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Funktionsblock verarbeitet Benutzerregistrierungsdaten</li>
|
||||
<li>Bedingung prüft, ob `<user.account_type>` === 'enterprise'</li>
|
||||
<li>Unternehmensbenutzer → Erweiterter Einrichtungsworkflow</li>
|
||||
<li>Einzelbenutzer → Einfacher Onboarding-Workflow</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
## Best Practices
|
||||
|
||||
- **Bedingungen richtig anordnen**: Platzieren Sie spezifischere Bedingungen vor allgemeinen, damit spezifische Logik Vorrang vor Fallbacks hat
|
||||
- **Standardbedingung einfügen**: Fügen Sie eine Auffangbedingung (`true`) als letzte Bedingung hinzu, um nicht übereinstimmende Fälle zu behandeln und zu verhindern, dass die Workflow-Ausführung stecken bleibt
|
||||
- **Ausdrücke einfach halten**: Verwenden Sie klare, unkomplizierte boolesche Ausdrücke für bessere Lesbarkeit und einfachere Fehlersuche
|
||||
- **Dokumentieren Sie Ihre Bedingungen**: Fügen Sie Beschreibungen hinzu, um den Zweck jeder Bedingung für bessere Teamzusammenarbeit und Wartung zu erklären
|
||||
- **Testen Sie Grenzfälle**: Überprüfen Sie, ob Bedingungen Grenzwerte korrekt behandeln, indem Sie mit Werten an den Grenzen Ihrer Bedingungsbereiche testen
|
||||
199
apps/docs/content/docs/de/blocks/evaluator.mdx
Normal file
199
apps/docs/content/docs/de/blocks/evaluator.mdx
Normal file
@@ -0,0 +1,199 @@
|
||||
---
|
||||
title: Evaluator
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Der Evaluator-Block nutzt KI, um die Inhaltsqualität anhand anpassbarer Bewertungsmetriken zu bewerten, die du selbst definierst. Perfekt für Qualitätskontrolle, A/B-Tests und um sicherzustellen, dass deine KI-Ausgaben bestimmte Standards erfüllen.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/evaluator.png"
|
||||
alt="Evaluator-Block-Konfiguration"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
## Überblick
|
||||
|
||||
Mit dem Evaluator-Block kannst du:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Inhaltsqualität bewerten</strong>: Nutze KI, um Inhalte anhand benutzerdefinierter Metriken mit numerischen Werten zu bewerten
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Benutzerdefinierte Metriken erstellen</strong>: Erstelle spezifische Bewertungskriterien, die auf deinen Anwendungsfall zugeschnitten sind
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Qualitätskontrolle automatisieren</strong>: Erstelle Workflows, die Inhalte automatisch bewerten und filtern
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Leistung verfolgen</strong>: Überwache Verbesserungen und Konsistenz im Laufe der Zeit mit objektiver Bewertung
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
Der Evaluator-Block verarbeitet Inhalte durch KI-gestützte Bewertung:
|
||||
|
||||
1. **Inhalte empfangen** - Nimmt Eingabeinhalte von vorherigen Blöcken in deinem Workflow entgegen
|
||||
2. **Metriken anwenden** - Bewertet Inhalte anhand deiner definierten benutzerdefinierten Metriken
|
||||
3. **Bewertungen generieren** - KI-Modell weist numerische Werte für jede Metrik zu
|
||||
4. **Zusammenfassung bereitstellen** - Liefert detaillierte Auswertung mit Bewertungen und Erklärungen
|
||||
|
||||
## Konfigurationsoptionen
|
||||
|
||||
### Bewertungsmetriken
|
||||
|
||||
Definiere benutzerdefinierte Metriken, anhand derer Inhalte bewertet werden. Jede Metrik umfasst:
|
||||
|
||||
- **Name**: Eine kurze Bezeichnung für die Metrik
|
||||
- **Beschreibung**: Eine detaillierte Erklärung dessen, was die Metrik misst
|
||||
- **Bereich**: Der numerische Bereich für die Bewertung (z.B. 1-5, 0-10)
|
||||
|
||||
Beispielmetriken:
|
||||
|
||||
```
|
||||
Accuracy (1-5): How factually accurate is the content?
|
||||
Clarity (1-5): How clear and understandable is the content?
|
||||
Relevance (1-5): How relevant is the content to the original query?
|
||||
```
|
||||
|
||||
### Inhalt
|
||||
|
||||
Der zu bewertende Inhalt. Dies kann sein:
|
||||
|
||||
- Direkt in der Blockkonfiguration bereitgestellt
|
||||
- Verbunden mit der Ausgabe eines anderen Blocks (typischerweise ein Agent-Block)
|
||||
- Dynamisch während der Workflow-Ausführung generiert
|
||||
|
||||
### Modellauswahl
|
||||
|
||||
Wählen Sie ein KI-Modell für die Durchführung der Bewertung:
|
||||
|
||||
**OpenAI**: GPT-4o, o1, o3, o4-mini, gpt-4.1
|
||||
**Anthropic**: Claude 3.7 Sonnet
|
||||
**Google**: Gemini 2.5 Pro, Gemini 2.0 Flash
|
||||
**Andere Anbieter**: Groq, Cerebras, xAI, DeepSeek
|
||||
**Lokale Modelle**: Jedes Modell, das auf Ollama läuft
|
||||
|
||||
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
|
||||
<Video src="models.mp4" width={500} height={350} />
|
||||
</div>
|
||||
|
||||
**Empfehlung**: Verwenden Sie Modelle mit starken Argumentationsfähigkeiten wie GPT-4o oder Claude 3.7 Sonnet für genauere Bewertungen.
|
||||
|
||||
### API-Schlüssel
|
||||
|
||||
Ihr API-Schlüssel für den ausgewählten LLM-Anbieter. Dieser wird sicher gespeichert und für die Authentifizierung verwendet.
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
1. Der Evaluator-Block nimmt den bereitgestellten Inhalt und Ihre benutzerdefinierten Metriken
|
||||
2. Er generiert einen spezialisierten Prompt, der das LLM anweist, den Inhalt zu bewerten
|
||||
3. Der Prompt enthält klare Richtlinien zur Bewertung jeder Metrik
|
||||
4. Das LLM bewertet den Inhalt und gibt numerische Werte für jede Metrik zurück
|
||||
5. Der Evaluator-Block formatiert diese Werte als strukturierte Ausgabe zur Verwendung in Ihrem Workflow
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### Bewertung der Inhaltsqualität
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Bewertung der Blogpost-Qualität vor der Veröffentlichung</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Agent-Block generiert Blogpost-Inhalte</li>
|
||||
<li>Evaluator bewertet Genauigkeit, Lesbarkeit und Engagement</li>
|
||||
<li>Bedingungsblock prüft, ob die Werte Mindestschwellen erreichen</li>
|
||||
<li>Hohe Werte → Veröffentlichen, Niedrige Werte → Überarbeiten und erneut versuchen</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### A/B-Testing von Inhalten
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Vergleich mehrerer KI-generierter Antworten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Parallelblock generiert mehrere Antwortvarianten</li>
|
||||
<li>Evaluator bewertet jede Variante nach Klarheit und Relevanz</li>
|
||||
<li>Funktionsblock wählt die Antwort mit der höchsten Bewertung aus</li>
|
||||
<li>Antwortblock gibt das beste Ergebnis zurück</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Qualitätskontrolle im Kundensupport
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Sicherstellen, dass Support-Antworten den Qualitätsstandards entsprechen</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Support-Mitarbeiter generiert Antwort auf Kundenanfrage</li>
|
||||
<li>Evaluator bewertet Hilfsbereitschaft, Einfühlungsvermögen und Genauigkeit</li>
|
||||
<li>Bewertungen werden für Training und Leistungsüberwachung protokolliert</li>
|
||||
<li>Niedrige Bewertungen lösen einen manuellen Überprüfungsprozess aus</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Konfiguration', 'Variablen', 'Ergebnisse']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Inhalt</strong>: Der zu bewertende Text oder strukturierte Daten
|
||||
</li>
|
||||
<li>
|
||||
<strong>Bewertungsmetriken</strong>: Benutzerdefinierte Kriterien mit Bewertungsbereichen
|
||||
</li>
|
||||
<li>
|
||||
<strong>Modell</strong>: KI-Modell für die Bewertungsanalyse
|
||||
</li>
|
||||
<li>
|
||||
<strong>API-Schlüssel</strong>: Authentifizierung für den ausgewählten LLM-Anbieter
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>evaluator.content</strong>: Zusammenfassung der Bewertung
|
||||
</li>
|
||||
<li>
|
||||
<strong>evaluator.model</strong>: Für die Bewertung verwendetes Modell
|
||||
</li>
|
||||
<li>
|
||||
<strong>evaluator.tokens</strong>: Token-Nutzungsstatistiken
|
||||
</li>
|
||||
<li>
|
||||
<strong>evaluator.cost</strong>: Kostenübersicht für den Bewertungsaufruf
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Metrik-Bewertungen</strong>: Numerische Bewertungen für jede definierte Metrik
|
||||
</li>
|
||||
<li>
|
||||
<strong>Bewertungszusammenfassung</strong>: Detaillierte Beurteilung mit Erläuterungen
|
||||
</li>
|
||||
<li>
|
||||
<strong>Zugriff</strong>: Verfügbar in Blöcken nach dem Evaluator
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Best Practices
|
||||
|
||||
- **Verwenden Sie spezifische Metrikbeschreibungen**: Definieren Sie klar, was jede Metrik misst, um genauere Bewertungen zu erhalten
|
||||
- **Wählen Sie geeignete Bereiche**: Wählen Sie Bewertungsbereiche, die ausreichend Granularität bieten, ohne übermäßig komplex zu sein
|
||||
- **Verbinden Sie mit Agent-Blöcken**: Verwenden Sie Evaluator-Blöcke, um die Ausgaben von Agent-Blöcken zu bewerten und Feedback-Schleifen zu erstellen
|
||||
- **Verwenden Sie konsistente Metriken**: Für vergleichende Analysen sollten Sie konsistente Metriken über ähnliche Bewertungen hinweg beibehalten
|
||||
- **Kombinieren Sie mehrere Metriken**: Verwenden Sie mehrere Metriken, um eine umfassende Bewertung zu erhalten
|
||||
156
apps/docs/content/docs/de/blocks/function.mdx
Normal file
156
apps/docs/content/docs/de/blocks/function.mdx
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
title: Funktion
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Der Funktionsblock ermöglicht die Ausführung von benutzerdefiniertem JavaScript- oder TypeScript-Code in Ihren Workflows. Verwenden Sie ihn, um Daten zu transformieren, Berechnungen durchzuführen oder benutzerdefinierte Logik zu implementieren, die in anderen Blöcken nicht verfügbar ist.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/function.png"
|
||||
alt="Funktionsblock mit Code-Editor"
|
||||
width={500}
|
||||
height={350}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
## Überblick
|
||||
|
||||
Der Funktionsblock ermöglicht Ihnen:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Daten transformieren</strong>: Formate konvertieren, Text analysieren, Arrays und Objekte manipulieren
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Berechnungen durchführen</strong>: Mathematische Operationen, Statistiken, Finanzberechnungen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Benutzerdefinierte Logik implementieren</strong>: Komplexe Bedingungen, Schleifen und Algorithmen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Externe Daten verarbeiten</strong>: Antworten parsen, Anfragen formatieren, Authentifizierung verwalten
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
Der Funktionsblock führt Ihren Code in einer sicheren, isolierten Umgebung aus:
|
||||
|
||||
1. **Eingabe empfangen**: Zugriff auf Daten aus vorherigen Blöcken über das `input` Objekt
|
||||
2. **Code ausführen**: Führen Sie Ihren JavaScript/Python-Code aus
|
||||
3. **Ergebnisse zurückgeben**: Verwenden Sie `return`, um Daten an den nächsten Block zu übergeben
|
||||
4. **Fehler behandeln**: Integrierte Fehlerbehandlung und Protokollierung
|
||||
|
||||
## Remote-Ausführung (E2B)
|
||||
|
||||
- **Sprachen**: JavaScript und Python in einer isolierten E2B-Sandbox ausführen.
|
||||
- **Aktivierung**: Schalten Sie “Remote Code Execution” im Funktionsblock ein.
|
||||
- **Einsatzbereich**: Schwerere Logik, externe Bibliotheken oder Python-spezifischer Code.
|
||||
- **Leistung**: Langsamer als lokales JS aufgrund von Sandbox-Start und Netzwerk-Overhead.
|
||||
- **Hinweise**: Erfordert `E2B_API_KEY` bei lokaler Ausführung. Für niedrigste Latenz verwenden Sie nativ lokales JS (Fast Mode).
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Configuration', 'Variables']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Code</strong>: Ihr JavaScript/Python-Code zur Ausführung
|
||||
</li>
|
||||
<li>
|
||||
<strong>Timeout</strong>: Maximale Ausführungszeit (standardmäßig 30 Sekunden)
|
||||
</li>
|
||||
<li>
|
||||
<strong>Eingabedaten</strong>: Alle verbundenen Block-Ausgaben sind über Variablen verfügbar
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>function.result</strong>: Der von Ihrer Funktion zurückgegebene Wert
|
||||
</li>
|
||||
<li>
|
||||
<strong>function.stdout</strong>: Console.log()-Ausgabe aus Ihrem Code
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### Datenverarbeitungspipeline
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: API-Antwort in strukturierte Daten umwandeln</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>API-Block ruft Rohdaten der Kunden ab</li>
|
||||
<li>Funktionsblock verarbeitet und validiert Daten</li>
|
||||
<li>Funktionsblock berechnet abgeleitete Metriken</li>
|
||||
<li>Antwortblock gibt formatierte Ergebnisse zurück</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Implementierung von Geschäftslogik
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Berechnung von Treuepunkten und Stufen</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Agent ruft Kaufhistorie des Kunden ab</li>
|
||||
<li>Funktionsblock berechnet Treuemetriken</li>
|
||||
<li>Funktionsblock bestimmt Kundenstufe</li>
|
||||
<li>Bedingungsblock leitet basierend auf der Stufenhöhe weiter</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Datenvalidierung und -bereinigung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Benutzereingaben validieren und bereinigen</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Benutzereingabe aus Formularübermittlung erhalten</li>
|
||||
<li>Funktionsblock validiert E-Mail-Format und Telefonnummern</li>
|
||||
<li>Funktionsblock bereinigt und normalisiert Daten</li>
|
||||
<li>API-Block speichert validierte Daten in der Datenbank</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Beispiel: Treuepunkte-Rechner
|
||||
|
||||
```javascript title="loyalty-calculator.js"
|
||||
// Process customer data and calculate loyalty score
|
||||
const { purchaseHistory, accountAge, supportTickets } = <agent>;
|
||||
|
||||
// Calculate metrics
|
||||
const totalSpent = purchaseHistory.reduce((sum, purchase) => sum + purchase.amount, 0);
|
||||
const purchaseFrequency = purchaseHistory.length / (accountAge / 365);
|
||||
const ticketRatio = supportTickets.resolved / supportTickets.total;
|
||||
|
||||
// Calculate loyalty score (0-100)
|
||||
const spendScore = Math.min(totalSpent / 1000 * 30, 30);
|
||||
const frequencyScore = Math.min(purchaseFrequency * 20, 40);
|
||||
const supportScore = ticketRatio * 30;
|
||||
|
||||
const loyaltyScore = Math.round(spendScore + frequencyScore + supportScore);
|
||||
|
||||
return {
|
||||
customer: <agent.name>,
|
||||
loyaltyScore,
|
||||
loyaltyTier: loyaltyScore >= 80 ? "Platinum" : loyaltyScore >= 60 ? "Gold" : "Silver",
|
||||
metrics: { spendScore, frequencyScore, supportScore }
|
||||
};
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
- **Funktionen fokussiert halten**: Schreiben Sie Funktionen, die eine Sache gut erledigen, um die Wartbarkeit und Fehlersuche zu verbessern
|
||||
- **Fehler elegant behandeln**: Verwenden Sie try/catch-Blöcke, um potenzielle Fehler zu behandeln und aussagekräftige Fehlermeldungen bereitzustellen
|
||||
- **Grenzfälle testen**: Stellen Sie sicher, dass Ihr Code ungewöhnliche Eingaben, Null-Werte und Grenzbedingungen korrekt behandelt
|
||||
- **Auf Leistung optimieren**: Achten Sie bei großen Datensätzen auf die Berechnungskomplexität und den Speicherverbrauch
|
||||
- **console.log() zum Debuggen verwenden**: Nutzen Sie die Stdout-Ausgabe zum Debuggen und Überwachen der Funktionsausführung
|
||||
129
apps/docs/content/docs/de/blocks/index.mdx
Normal file
129
apps/docs/content/docs/de/blocks/index.mdx
Normal file
@@ -0,0 +1,129 @@
|
||||
---
|
||||
title: Blöcke
|
||||
description: Die Bausteine deiner KI-Workflows
|
||||
---
|
||||
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Blöcke sind die Bausteine, die du miteinander verbindest, um KI-Workflows zu erstellen. Betrachte sie als spezialisierte Module, die jeweils eine bestimmte Aufgabe übernehmen – vom Chatten mit KI-Modellen über API-Aufrufe bis hin zur Datenverarbeitung.
|
||||
|
||||
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
|
||||
<Video src="connections.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
## Grundlegende Blocktypen
|
||||
|
||||
Sim bietet sieben grundlegende Blocktypen, die die wesentlichen Funktionen von KI-Workflows abdecken:
|
||||
|
||||
### Verarbeitungsblöcke
|
||||
- **[Agent](/blocks/agent)** - Chatte mit KI-Modellen (OpenAI, Anthropic, Google, lokale Modelle)
|
||||
- **[Function](/blocks/function)** - Führe benutzerdefinierten JavaScript/TypeScript-Code aus
|
||||
- **[API](/blocks/api)** - Verbinde dich mit externen Diensten über HTTP-Anfragen
|
||||
|
||||
### Logikblöcke
|
||||
- **[Condition](/blocks/condition)** - Verzweige Workflow-Pfade basierend auf booleschen Ausdrücken
|
||||
- **[Router](/blocks/router)** - Nutze KI, um Anfragen intelligent auf verschiedene Pfade zu leiten
|
||||
- **[Evaluator](/blocks/evaluator)** - Bewerte und beurteile die Inhaltsqualität mit KI
|
||||
|
||||
### Ausgabeblöcke
|
||||
- **[Response](/blocks/response)** - Formatiere und gib endgültige Ergebnisse aus deinem Workflow zurück
|
||||
|
||||
## Wie Blöcke funktionieren
|
||||
|
||||
Jeder Block hat drei Hauptkomponenten:
|
||||
|
||||
**Eingaben**: Daten, die in den Block von anderen Blöcken oder Benutzereingaben kommen
|
||||
**Konfiguration**: Einstellungen, die das Verhalten des Blocks steuern
|
||||
**Ausgaben**: Daten, die der Block für andere Blöcke produziert
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Eingabe empfangen</strong>: Block erhält Daten von verbundenen Blöcken oder Benutzereingaben
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Verarbeiten</strong>: Block verarbeitet die Eingabe gemäß seiner Konfiguration
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Ergebnisse ausgeben</strong>: Block erzeugt Ausgabedaten für die nächsten Blöcke im Workflow
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Blöcke verbinden
|
||||
|
||||
Sie erstellen Workflows, indem Sie Blöcke miteinander verbinden. Die Ausgabe eines Blocks wird zur Eingabe eines anderen:
|
||||
|
||||
- **Ziehen zum Verbinden**: Ziehen Sie von einem Ausgabeport zu einem Eingabeport
|
||||
- **Mehrfachverbindungen**: Eine Ausgabe kann mit mehreren Eingängen verbunden werden
|
||||
- **Verzweigende Pfade**: Einige Blöcke können basierend auf Bedingungen zu verschiedenen Pfaden weiterleiten
|
||||
|
||||
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
|
||||
<Video src="connections.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
## Häufige Muster
|
||||
|
||||
### Sequentielle Verarbeitung
|
||||
Verbinden Sie Blöcke in einer Kette, wobei jeder Block die Ausgabe des vorherigen verarbeitet:
|
||||
|
||||
```
|
||||
User Input → Agent → Function → Response
|
||||
```
|
||||
|
||||
### Bedingte Verzweigung
|
||||
Verwenden Sie Bedingungsblöcke oder Router-Blöcke, um verschiedene Pfade zu erstellen:
|
||||
|
||||
```
|
||||
User Input → Router → Agent A (for questions)
|
||||
→ Agent B (for commands)
|
||||
```
|
||||
|
||||
### Qualitätskontrolle
|
||||
Verwenden Sie Evaluator-Blöcke, um Ausgaben zu bewerten und zu filtern:
|
||||
|
||||
```
|
||||
Agent → Evaluator → Condition → Response (if good)
|
||||
→ Agent (retry if bad)
|
||||
```
|
||||
|
||||
## Block-Konfiguration
|
||||
|
||||
Jeder Blocktyp hat spezifische Konfigurationsoptionen:
|
||||
|
||||
**Alle Blöcke**:
|
||||
- Ein-/Ausgabeverbindungen
|
||||
- Fehlerbehandlungsverhalten
|
||||
- Zeitüberschreitungseinstellungen für die Ausführung
|
||||
|
||||
**KI-Blöcke** (Agent, Router, Evaluator):
|
||||
- Modellauswahl (OpenAI, Anthropic, Google, lokal)
|
||||
- API-Schlüssel und Authentifizierung
|
||||
- Temperature und andere Modellparameter
|
||||
- Systemaufforderungen und Anweisungen
|
||||
|
||||
**Logikblöcke** (Bedingung, Funktion):
|
||||
- Benutzerdefinierte Ausdrücke oder Code
|
||||
- Variablenreferenzen
|
||||
- Einstellungen für die Ausführungsumgebung
|
||||
|
||||
**Integrationsblöcke** (API, Antwort):
|
||||
- Endpunktkonfiguration
|
||||
- Header und Authentifizierung
|
||||
- Anfrage-/Antwortformatierung
|
||||
|
||||
<Cards>
|
||||
<Card title="Agent Block" href="/blocks/agent">
|
||||
Verbindung zu KI-Modellen herstellen und intelligente Antworten erzeugen
|
||||
</Card>
|
||||
<Card title="Function Block" href="/blocks/function">
|
||||
Benutzerdefinierten Code ausführen, um Daten zu verarbeiten und zu transformieren
|
||||
</Card>
|
||||
<Card title="API Block" href="/blocks/api">
|
||||
Integration mit externen Diensten und APIs
|
||||
</Card>
|
||||
<Card title="Condition Block" href="/blocks/condition">
|
||||
Verzweigende Logik basierend auf Datenbewertung erstellen
|
||||
</Card>
|
||||
</Cards>
|
||||
211
apps/docs/content/docs/de/blocks/loop.mdx
Normal file
211
apps/docs/content/docs/de/blocks/loop.mdx
Normal file
@@ -0,0 +1,211 @@
|
||||
---
|
||||
title: Loop
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Der Loop-Block ist ein Container-Block in Sim, der es ermöglicht, iterative Workflows zu erstellen, indem eine Gruppe von Blöcken wiederholt ausgeführt wird. Loops ermöglichen iterative Verarbeitung in deinen Workflows.
|
||||
|
||||
Der Loop-Block unterstützt zwei Arten der Iteration:
|
||||
|
||||
<Callout type="info">
|
||||
Loop-Blöcke sind Container-Knoten, die andere Blöcke enthalten können. Die Blöcke innerhalb einer Schleife werden basierend auf deiner Konfiguration mehrfach ausgeführt.
|
||||
</Callout>
|
||||
|
||||
## Überblick
|
||||
|
||||
Der Loop-Block ermöglicht dir:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Über Sammlungen iterieren</strong>: Arrays oder Objekte Element für Element verarbeiten
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Operationen wiederholen</strong>: Blöcke eine festgelegte Anzahl von Malen ausführen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Sequentielle Verarbeitung</strong>: Datentransformation in geordneten Iterationen durchführen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Ergebnisse aggregieren</strong>: Ausgaben aus allen Schleifeniterationen sammeln
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
Der Loop-Block führt enthaltene Blöcke durch sequentielle Iteration aus:
|
||||
|
||||
1. **Schleife initialisieren** - Iterationsparameter festlegen (Anzahl oder Sammlung)
|
||||
2. **Iteration ausführen** - Enthaltene Blöcke für aktuelle Iteration ausführen
|
||||
3. **Ergebnisse sammeln** - Ausgabe jeder Iteration speichern
|
||||
4. **Fortfahren oder abschließen** - Zur nächsten Iteration übergehen oder Schleife beenden
|
||||
|
||||
## Konfigurationsoptionen
|
||||
|
||||
### Schleifentyp
|
||||
|
||||
Wähle zwischen zwei Arten von Schleifen:
|
||||
|
||||
<Tabs items={['For Loop', 'ForEach Loop']}>
|
||||
<Tab>
|
||||
**For Loop (Iterationen)** - Eine numerische Schleife, die eine feste Anzahl von Malen ausgeführt wird:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/loop-1.png"
|
||||
alt="For Loop mit Iterationen"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Verwende diese Option, wenn du eine Operation eine bestimmte Anzahl von Malen wiederholen musst.
|
||||
|
||||
|
||||
```
|
||||
Example: Run 5 times
|
||||
- Iteration 1
|
||||
- Iteration 2
|
||||
- Iteration 3
|
||||
- Iteration 4
|
||||
- Iteration 5
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
**ForEach-Schleife (Sammlung)** - Eine sammlungsbasierte Schleife, die über jedes Element in einem Array oder Objekt iteriert:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/loop-2.png"
|
||||
alt="ForEach-Schleife mit Sammlung"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Verwende diese, wenn du eine Sammlung von Elementen verarbeiten musst.
|
||||
|
||||
|
||||
```
|
||||
Example: Process ["apple", "banana", "orange"]
|
||||
- Iteration 1: Process "apple"
|
||||
- Iteration 2: Process "banana"
|
||||
- Iteration 3: Process "orange"
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Wie man Schleifen verwendet
|
||||
|
||||
### Eine Schleife erstellen
|
||||
|
||||
1. Ziehe einen Schleifenblock aus der Werkzeugleiste auf deine Leinwand
|
||||
2. Konfiguriere den Schleifentyp und die Parameter
|
||||
3. Ziehe andere Blöcke in den Schleifencontainer
|
||||
4. Verbinde die Blöcke nach Bedarf
|
||||
|
||||
### Auf Ergebnisse zugreifen
|
||||
|
||||
Nach Abschluss einer Schleife kannst du auf aggregierte Ergebnisse zugreifen:
|
||||
|
||||
- **`<loop.results>`**: Array von Ergebnissen aus allen Schleifendurchläufen
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### Verarbeitung von API-Ergebnissen
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Mehrere Kundendatensätze verarbeiten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>API-Block ruft Kundenliste ab</li>
|
||||
<li>ForEach-Schleife iteriert über jeden Kunden</li>
|
||||
<li>Innerhalb der Schleife: Agent analysiert Kundendaten</li>
|
||||
<li>Innerhalb der Schleife: Funktion speichert Analyseergebnisse</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Iterative Inhaltserstellung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Mehrere Variationen generieren</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>For-Schleife auf 5 Iterationen einstellen</li>
|
||||
<li>Innerhalb der Schleife: Agent generiert Inhaltsvariante</li>
|
||||
<li>Innerhalb der Schleife: Evaluator bewertet den Inhalt</li>
|
||||
<li>Nach der Schleife: Funktion wählt die beste Variante aus</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
## Erweiterte Funktionen
|
||||
|
||||
### Einschränkungen
|
||||
|
||||
<Callout type="warning">
|
||||
Container-Blöcke (Schleifen und Parallele) können nicht ineinander verschachtelt werden. Das bedeutet:
|
||||
- Du kannst keinen Schleifenblock in einen anderen Schleifenblock platzieren
|
||||
- Du kannst keinen Parallelblock in einen Schleifenblock platzieren
|
||||
- Du kannst keinen Container-Block in einen anderen Container-Block platzieren
|
||||
|
||||
Wenn du mehrdimensionale Iterationen benötigst, erwäge eine Umstrukturierung deines Workflows, um sequentielle Schleifen zu verwenden oder Daten in Stufen zu verarbeiten.
|
||||
</Callout>
|
||||
|
||||
<Callout type="info">
|
||||
Schleifen werden sequentiell ausgeführt, nicht parallel. Wenn Sie eine gleichzeitige Ausführung benötigen, verwenden Sie stattdessen den Parallel-Block.
|
||||
</Callout>
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Konfiguration', 'Variablen', 'Ergebnisse']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Schleifentyp</strong>: Wählen Sie zwischen 'for' oder 'forEach'
|
||||
</li>
|
||||
<li>
|
||||
<strong>Iterationen</strong>: Anzahl der Ausführungen (für for-Schleifen)
|
||||
</li>
|
||||
<li>
|
||||
<strong>Sammlung</strong>: Array oder Objekt zum Durchlaufen (für forEach-Schleifen)
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>loop.currentItem</strong>: Aktuell verarbeitetes Element
|
||||
</li>
|
||||
<li>
|
||||
<strong>loop.index</strong>: Aktuelle Iterationsnummer (0-basiert)
|
||||
</li>
|
||||
<li>
|
||||
<strong>loop.items</strong>: Vollständige Sammlung (forEach-Schleifen)
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>loop.results</strong>: Array aller Iterationsergebnisse
|
||||
</li>
|
||||
<li>
|
||||
<strong>Struktur</strong>: Ergebnisse behalten die Iterationsreihenfolge bei
|
||||
</li>
|
||||
<li>
|
||||
<strong>Zugriff</strong>: Verfügbar in Blöcken nach der Schleife
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Best Practices
|
||||
|
||||
- **Setzen Sie vernünftige Grenzen**: Halten Sie die Anzahl der Iterationen in einem vernünftigen Rahmen, um lange Ausführungszeiten zu vermeiden
|
||||
- **Verwenden Sie ForEach für Sammlungen**: Verwenden Sie ForEach statt For-Schleifen, wenn Sie Arrays oder Objekte verarbeiten
|
||||
- **Behandeln Sie Fehler angemessen**: Erwägen Sie, Fehlerbehandlung innerhalb von Schleifen einzubauen, um robuste Workflows zu gewährleisten
|
||||
231
apps/docs/content/docs/de/blocks/parallel.mdx
Normal file
231
apps/docs/content/docs/de/blocks/parallel.mdx
Normal file
@@ -0,0 +1,231 @@
|
||||
---
|
||||
title: Parallel
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Der Parallel-Block ist ein Container-Block in Sim, der es ermöglicht, mehrere Instanzen von Blöcken gleichzeitig auszuführen, um Workflows schneller zu verarbeiten.
|
||||
|
||||
Der Parallel-Block unterstützt zwei Arten der gleichzeitigen Ausführung:
|
||||
|
||||
<Callout type="info">
|
||||
Parallel-Blöcke sind Container-Knoten, die ihre Inhalte mehrfach gleichzeitig ausführen, im Gegensatz zu Schleifen, die sequentiell ausgeführt werden.
|
||||
</Callout>
|
||||
|
||||
## Überblick
|
||||
|
||||
Der Parallel-Block ermöglicht es dir:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Arbeit zu verteilen</strong>: Mehrere Elemente gleichzeitig zu verarbeiten
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Ausführung zu beschleunigen</strong>: Unabhängige Operationen gleichzeitig auszuführen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Massenoperationen zu bewältigen</strong>: Große Datensätze effizient zu verarbeiten
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Ergebnisse zu aggregieren</strong>: Ausgaben aus allen parallelen Ausführungen zu sammeln
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Konfigurationsoptionen
|
||||
|
||||
### Parallel-Typ
|
||||
|
||||
Wähle zwischen zwei Arten der parallelen Ausführung:
|
||||
|
||||
<Tabs items={['Count-based', 'Collection-based']}>
|
||||
<Tab>
|
||||
**Anzahlbasierte Parallelität** - Führe eine feste Anzahl paralleler Instanzen aus:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/parallel-1.png"
|
||||
alt="Anzahlbasierte parallele Ausführung"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Verwende dies, wenn du dieselbe Operation mehrmals gleichzeitig ausführen musst.
|
||||
|
||||
|
||||
```
|
||||
Example: Run 5 parallel instances
|
||||
- Instance 1 ┐
|
||||
- Instance 2 ├─ All execute simultaneously
|
||||
- Instance 3 │
|
||||
- Instance 4 │
|
||||
- Instance 5 ┘
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
**Sammlungsbasierte Parallelität** - Verteile eine Sammlung auf parallele Instanzen:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/parallel-2.png"
|
||||
alt="Sammlungsbasierte parallele Ausführung"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Jede Instanz verarbeitet gleichzeitig ein Element aus der Sammlung.
|
||||
|
||||
|
||||
```
|
||||
Example: Process ["task1", "task2", "task3"] in parallel
|
||||
- Instance 1: Process "task1" ┐
|
||||
- Instance 2: Process "task2" ├─ All execute simultaneously
|
||||
- Instance 3: Process "task3" ┘
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Wie man Parallel-Blöcke verwendet
|
||||
|
||||
### Einen Parallel-Block erstellen
|
||||
|
||||
1. Ziehe einen Parallel-Block aus der Werkzeugleiste auf deine Leinwand
|
||||
2. Konfiguriere den Parallel-Typ und die Parameter
|
||||
3. Ziehe einen einzelnen Block in den Parallel-Container
|
||||
4. Verbinde den Block nach Bedarf
|
||||
|
||||
### Auf Ergebnisse zugreifen
|
||||
|
||||
Nach Abschluss eines parallelen Blocks können Sie auf aggregierte Ergebnisse zugreifen:
|
||||
|
||||
- **`<parallel.results>`**: Array mit Ergebnissen aus allen parallelen Instanzen
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### Batch-API-Verarbeitung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Mehrere API-Aufrufe gleichzeitig verarbeiten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Paralleler Block mit einer Sammlung von API-Endpunkten</li>
|
||||
<li>Innerhalb des parallelen Blocks: API-Block ruft jeden Endpunkt auf</li>
|
||||
<li>Nach dem parallelen Block: Alle Antworten gemeinsam verarbeiten</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Multi-Modell-KI-Verarbeitung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Antworten von mehreren KI-Modellen erhalten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Sammlungsbasierte Parallelverarbeitung über eine Liste von Modell-IDs (z.B. ["gpt-4o", "claude-3.7-sonnet", "gemini-2.5-pro"])</li>
|
||||
<li>Innerhalb des parallelen Blocks: Das Modell des Agenten wird auf das aktuelle Element aus der Sammlung gesetzt</li>
|
||||
<li>Nach dem parallelen Block: Vergleichen und Auswählen der besten Antwort</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
## Erweiterte Funktionen
|
||||
|
||||
### Ergebnisaggregation
|
||||
|
||||
Ergebnisse aus allen parallelen Instanzen werden automatisch gesammelt:
|
||||
|
||||
```javascript
|
||||
// In a Function block after the parallel
|
||||
const allResults = input.parallel.results;
|
||||
// Returns: [result1, result2, result3, ...]
|
||||
```
|
||||
|
||||
### Instanzisolierung
|
||||
|
||||
Jede parallele Instanz läuft unabhängig:
|
||||
- Separate Variablenbereiche
|
||||
- Kein gemeinsamer Zustand zwischen Instanzen
|
||||
- Fehler in einer Instanz beeinflussen andere nicht
|
||||
|
||||
### Einschränkungen
|
||||
|
||||
<Callout type="warning">
|
||||
Container-Blöcke (Schleifen und Parallele) können nicht ineinander verschachtelt werden. Das bedeutet:
|
||||
- Sie können keinen Schleifenblock in einen parallelen Block platzieren
|
||||
- Sie können keinen weiteren parallelen Block in einen parallelen Block platzieren
|
||||
- Sie können keinen Container-Block in einen anderen Container-Block platzieren
|
||||
</Callout>
|
||||
|
||||
<Callout type="warning">
|
||||
Parallele Blöcke können nur einen einzigen Block enthalten. Sie können nicht mehrere Blöcke haben, die innerhalb eines parallelen Blocks miteinander verbunden sind - in diesem Fall würde nur der erste Block ausgeführt werden.
|
||||
</Callout>
|
||||
|
||||
<Callout type="info">
|
||||
Obwohl die parallele Ausführung schneller ist, sollten Sie Folgendes beachten:
|
||||
- API-Ratenbegrenzungen bei gleichzeitigen Anfragen
|
||||
- Speichernutzung bei großen Datensätzen
|
||||
- Maximum von 20 gleichzeitigen Instanzen, um Ressourcenerschöpfung zu vermeiden
|
||||
</Callout>
|
||||
|
||||
## Parallel vs. Loop
|
||||
|
||||
Verstehen, wann was zu verwenden ist:
|
||||
|
||||
| Funktion | Parallel | Loop |
|
||||
|---------|----------|------|
|
||||
| Ausführung | Gleichzeitig | Sequentiell |
|
||||
| Geschwindigkeit | Schneller für unabhängige Operationen | Langsamer, aber geordnet |
|
||||
| Reihenfolge | Keine garantierte Reihenfolge | Behält Reihenfolge bei |
|
||||
| Anwendungsfall | Unabhängige Operationen | Abhängige Operationen |
|
||||
| Ressourcennutzung | Höher | Niedriger |
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Konfiguration', 'Variablen', 'Ergebnisse']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Parallel-Typ</strong>: Wählen Sie zwischen 'count' oder 'collection'
|
||||
</li>
|
||||
<li>
|
||||
<strong>Count</strong>: Anzahl der auszuführenden Instanzen (anzahlbasiert)
|
||||
</li>
|
||||
<li>
|
||||
<strong>Collection</strong>: Array oder Objekt zur Verteilung (sammlungsbasiert)
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>parallel.currentItem</strong>: Element für diese Instanz
|
||||
</li>
|
||||
<li>
|
||||
<strong>parallel.index</strong>: Instanznummer (0-basiert)
|
||||
</li>
|
||||
<li>
|
||||
<strong>parallel.items</strong>: Vollständige Sammlung (sammlungsbasiert)
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>parallel.results</strong>: Array aller Instanzergebnisse
|
||||
</li>
|
||||
<li>
|
||||
<strong>Access</strong>: Verfügbar in Blöcken nach dem Parallel
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Best Practices
|
||||
|
||||
- **Nur unabhängige Operationen**: Stellen Sie sicher, dass Operationen nicht voneinander abhängen
|
||||
- **Rate-Limits berücksichtigen**: Fügen Sie Verzögerungen oder Drosselungen für API-intensive Workflows hinzu
|
||||
- **Fehlerbehandlung**: Jede Instanz sollte ihre eigenen Fehler angemessen behandeln
|
||||
246
apps/docs/content/docs/de/blocks/response.mdx
Normal file
246
apps/docs/content/docs/de/blocks/response.mdx
Normal file
@@ -0,0 +1,246 @@
|
||||
---
|
||||
title: Antwort
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Der Antwort-Block ist der letzte Schritt in deinem Workflow, der eine strukturierte Antwort formatiert und an API-Aufrufe zurücksendet. Er funktioniert wie eine "return"-Anweisung für deinen gesamten Workflow – er verpackt Ergebnisse und sendet sie zurück.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/response.png"
|
||||
alt="Konfiguration des Antwort-Blocks"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<Callout type="info">
|
||||
Antwort-Blöcke sind terminale Blöcke - sie beenden die Workflow-Ausführung und können nicht mit anderen Blöcken verbunden werden.
|
||||
</Callout>
|
||||
|
||||
## Überblick
|
||||
|
||||
Der Antwort-Block ermöglicht dir:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>API-Antworten formatieren</strong>: Strukturierung von Workflow-Ergebnissen in korrekte HTTP-Antworten
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Statuscodes festlegen</strong>: Konfiguration passender HTTP-Statuscodes basierend auf Workflow-Ergebnissen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Header kontrollieren</strong>: Hinzufügen benutzerdefinierter Header für API-Antworten und Webhooks
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Daten transformieren</strong>: Umwandlung von Workflow-Variablen in client-freundliche Antwortformate
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Wie es funktioniert
|
||||
|
||||
Der Antwort-Block schließt die Workflow-Ausführung ab:
|
||||
|
||||
1. **Daten sammeln** - Sammelt Variablen und Ausgaben von vorherigen Blöcken
|
||||
2. **Antwort formatieren** - Strukturiert Daten gemäß deiner Konfiguration
|
||||
3. **HTTP-Details festlegen** - Wendet Statuscodes und Header an
|
||||
4. **Antwort senden** - Gibt die formatierte Antwort an den API-Aufrufer zurück
|
||||
|
||||
## Wann du Antwort-Blöcke benötigst
|
||||
|
||||
- **API-Endpunkte**: Wenn dein Workflow über eine API aufgerufen wird, formatieren Antwort-Blöcke die Rückgabedaten
|
||||
- **Webhooks**: Rückgabe von Bestätigungen oder Daten an das aufrufende System
|
||||
- **Testen**: Anzeige formatierter Ergebnisse beim Testen deines Workflows
|
||||
|
||||
## Zwei Möglichkeiten zum Erstellen von Antworten
|
||||
|
||||
### Builder-Modus (Empfohlen)
|
||||
Visuelle Oberfläche zum Erstellen der Antwortstruktur:
|
||||
- Felder per Drag-and-Drop einfügen
|
||||
- Einfache Referenzierung von Workflow-Variablen
|
||||
- Visuelle Vorschau der Antwortstruktur
|
||||
|
||||
### Editor-Modus (Fortgeschritten)
|
||||
JSON direkt schreiben:
|
||||
- Volle Kontrolle über das Antwortformat
|
||||
- Unterstützung für komplexe verschachtelte Strukturen
|
||||
- Verwendung der `<variable.name>`Syntax für dynamische Werte
|
||||
|
||||
## Konfigurationsoptionen
|
||||
|
||||
### Antwortdaten
|
||||
|
||||
Die Antwortdaten sind der Hauptinhalt, der an den API-Aufrufer zurückgesendet wird. Diese sollten als JSON formatiert sein und können Folgendes enthalten:
|
||||
|
||||
- Statische Werte
|
||||
- Dynamische Verweise auf Workflow-Variablen mit der `<variable.name>`Syntax
|
||||
- Verschachtelte Objekte und Arrays
|
||||
- Jede gültige JSON-Struktur
|
||||
|
||||
### Statuscode
|
||||
|
||||
Legen Sie den HTTP-Statuscode für die Antwort fest. Häufige Statuscodes sind:
|
||||
|
||||
<Tabs items={['Erfolg (2xx)', 'Client-Fehler (4xx)', 'Server-Fehler (5xx)']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li><strong>200</strong>: OK - Standard-Erfolgsantwort</li>
|
||||
<li><strong>201</strong>: Erstellt - Ressource erfolgreich erstellt</li>
|
||||
<li><strong>204</strong>: Kein Inhalt - Erfolg ohne Antworttext</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li><strong>400</strong>: Ungültige Anfrage - Ungültige Anfrageparameter</li>
|
||||
<li><strong>401</strong>: Nicht autorisiert - Authentifizierung erforderlich</li>
|
||||
<li><strong>404</strong>: Nicht gefunden - Ressource existiert nicht</li>
|
||||
<li><strong>422</strong>: Nicht verarbeitbare Entität - Validierungsfehler</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li><strong>500</strong>: Interner Serverfehler - Serverseitiger Fehler</li>
|
||||
<li><strong>502</strong>: Bad Gateway - Fehler eines externen Dienstes</li>
|
||||
<li><strong>503</strong>: Dienst nicht verfügbar - Dienst vorübergehend nicht erreichbar</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<div className="mt-4 text-sm text-gray-600 dark:text-gray-400">
|
||||
Der Standard-Statuscode ist 200, wenn nicht anders angegeben.
|
||||
</div>
|
||||
|
||||
### Antwort-Header
|
||||
|
||||
Konfigurieren Sie zusätzliche HTTP-Header, die in die Antwort aufgenommen werden sollen.
|
||||
|
||||
Header werden als Schlüssel-Wert-Paare konfiguriert:
|
||||
|
||||
| Schlüssel | Wert |
|
||||
|-----|-------|
|
||||
| Content-Type | application/json |
|
||||
| Cache-Control | no-cache |
|
||||
| X-API-Version | 1.0 |
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### API-Endpunkt-Antwort
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Strukturierte Daten von einer Such-API zurückgeben</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Workflow verarbeitet Suchanfrage und ruft Ergebnisse ab</li>
|
||||
<li>Funktionsblock formatiert und paginiert Ergebnisse</li>
|
||||
<li>Antwortblock gibt JSON mit Daten, Paginierung und Metadaten zurück</li>
|
||||
<li>Client erhält strukturierte Antwort mit Status 200</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Webhook-Bestätigung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Bestätigung des Webhook-Empfangs und der Verarbeitung</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Webhook-Trigger empfängt Daten vom externen System</li>
|
||||
<li>Workflow verarbeitet die eingehenden Daten</li>
|
||||
<li>Antwortblock gibt Bestätigung mit Verarbeitungsstatus zurück</li>
|
||||
<li>Externes System erhält Bestätigung</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Fehlerantwort-Behandlung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Angemessene Fehlerantworten zurückgeben</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Bedingungsblock erkennt Validierungsfehler oder Systemfehler</li>
|
||||
<li>Router leitet zum Fehlerbehandlungspfad weiter</li>
|
||||
<li>Antwortblock gibt Status 400/500 mit Fehlerdetails zurück</li>
|
||||
<li>Client erhält strukturierte Fehlerinformationen</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Konfiguration', 'Variablen', 'Ergebnisse']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Antwortdaten</strong>: JSON-Struktur für den Antworttext
|
||||
</li>
|
||||
<li>
|
||||
<strong>Statuscode</strong>: HTTP-Statuscode (Standard: 200)
|
||||
</li>
|
||||
<li>
|
||||
<strong>Header</strong>: Benutzerdefinierte HTTP-Header als Schlüssel-Wert-Paare
|
||||
</li>
|
||||
<li>
|
||||
<strong>Modus</strong>: Builder- oder Editor-Modus für die Antworterstellung
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>response.data</strong>: Der strukturierte Antworttext
|
||||
</li>
|
||||
<li>
|
||||
<strong>response.status</strong>: Gesendeter HTTP-Statuscode
|
||||
</li>
|
||||
<li>
|
||||
<strong>response.headers</strong>: In der Antwort enthaltene Header
|
||||
</li>
|
||||
<li>
|
||||
<strong>response.success</strong>: Boolescher Wert, der erfolgreichen Abschluss anzeigt
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>HTTP-Antwort</strong>: Vollständige Antwort an den API-Aufrufer
|
||||
</li>
|
||||
<li>
|
||||
<strong>Workflow-Beendigung</strong>: Beendet die Workflow-Ausführung
|
||||
</li>
|
||||
<li>
|
||||
<strong>Zugriff</strong>: Antwortblöcke sind terminal - keine nachfolgenden Blöcke
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Variablenreferenzen
|
||||
|
||||
Verwenden Sie die `<variable.name>` Syntax, um Workflow-Variablen dynamisch in Ihre Antwort einzufügen:
|
||||
|
||||
```json
|
||||
{
|
||||
"user": {
|
||||
"id": "<variable.userId>",
|
||||
"name": "<variable.userName>",
|
||||
"email": "<variable.userEmail>"
|
||||
},
|
||||
"query": "<variable.searchQuery>",
|
||||
"results": "<variable.searchResults>",
|
||||
"totalFound": "<variable.resultCount>",
|
||||
"processingTime": "<variable.executionTime>ms"
|
||||
}
|
||||
```
|
||||
|
||||
<Callout type="warning">
|
||||
Variablennamen sind Groß- und Kleinschreibung sensitiv und müssen exakt mit den in Ihrem Workflow verfügbaren Variablen übereinstimmen.
|
||||
</Callout>
|
||||
|
||||
## Best Practices
|
||||
|
||||
- **Verwenden Sie aussagekräftige Statuscodes**: Wählen Sie passende HTTP-Statuscodes, die das Ergebnis des Workflows genau widerspiegeln
|
||||
- **Strukturieren Sie Ihre Antworten einheitlich**: Behalten Sie eine konsistente JSON-Struktur über alle API-Endpunkte hinweg für eine bessere Entwicklererfahrung bei
|
||||
- **Fügen Sie relevante Metadaten hinzu**: Ergänzen Sie Zeitstempel und Versionsinformationen, um bei der Fehlersuche und Überwachung zu helfen
|
||||
- **Behandeln Sie Fehler elegant**: Verwenden Sie bedingte Logik in Ihrem Workflow, um angemessene Fehlerantworten mit aussagekräftigen Meldungen zu setzen
|
||||
- **Validieren Sie Variablenreferenzen**: Stellen Sie sicher, dass alle referenzierten Variablen existieren und die erwarteten Datentypen enthalten, bevor der Response-Block ausgeführt wird
|
||||
225
apps/docs/content/docs/de/blocks/router.mdx
Normal file
225
apps/docs/content/docs/de/blocks/router.mdx
Normal file
@@ -0,0 +1,225 @@
|
||||
---
|
||||
title: Router
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'
|
||||
import { Image } from '@/components/ui/image'
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Der Router-Block nutzt KI, um intelligent zu entscheiden, welchen Pfad Ihr Workflow als nächstes nehmen sollte, indem er die Workflow-Ausführung basierend auf spezifischen Bedingungen oder Logik leitet. Im Gegensatz zu Bedingungsblöcken, die einfache Regeln verwenden, können Router-Blöcke den Kontext verstehen und intelligente Routing-Entscheidungen auf Basis von Inhaltsanalysen treffen.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/blocks/router.png"
|
||||
alt="Router-Block mit mehreren Pfaden"
|
||||
width={500}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
## Überblick
|
||||
|
||||
Der Router-Block ermöglicht Ihnen:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Intelligentes Content-Routing</strong>: Nutzung von KI zum Verständnis von Absicht und Kontext
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Dynamische Pfadauswahl</strong>: Routing von Workflows basierend auf unstrukturierter Inhaltsanalyse
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Kontextbewusste Entscheidungen</strong>: Treffen intelligenter Routing-Entscheidungen über einfache Regeln hinaus
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Multi-Pfad-Management</strong>: Verwaltung komplexer Workflows mit mehreren potenziellen Zielen
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Router vs. Bedingungsblöcke
|
||||
|
||||
<Accordions>
|
||||
<Accordion title="Wann Router verwenden">
|
||||
- KI-gestützte Inhaltsanalyse erforderlich
|
||||
- Unstrukturierte oder variierende Inhaltstypen
|
||||
- Absichtsbasiertes Routing (z.B. "Support-Tickets an Abteilungen weiterleiten")
|
||||
- Kontextbewusste Entscheidungsfindung erforderlich
|
||||
</Accordion>
|
||||
<Accordion title="Wann Bedingung verwenden">
|
||||
- Einfache, regelbasierte Entscheidungen
|
||||
- Strukturierte Daten oder numerische Vergleiche
|
||||
- Schnelles, deterministisches Routing erforderlich
|
||||
- Boolesche Logik ausreichend
|
||||
</Accordion>
|
||||
</Accordions>
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
Der Router-Block:
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Analysiert Inhalte</strong>: Verwendet ein LLM, um Eingabeinhalte und Kontext zu verstehen
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Bewertet Ziele</strong>: Vergleicht Inhalte mit verfügbaren Zielblöcken
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Wählt Ziel aus</strong>: Identifiziert den am besten geeigneten Pfad basierend auf der Absicht
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Leitet Ausführung</strong>: Dirigiert den Workflow zum ausgewählten Block
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Konfigurationsoptionen
|
||||
|
||||
### Inhalt/Prompt
|
||||
|
||||
Der Inhalt oder Prompt, den der Router analysiert, um Routing-Entscheidungen zu treffen. Dies kann sein:
|
||||
|
||||
- Eine direkte Benutzeranfrage oder -eingabe
|
||||
- Ausgabe aus einem vorherigen Block
|
||||
- Eine vom System generierte Nachricht
|
||||
|
||||
### Zielblöcke
|
||||
|
||||
Die möglichen Zielblöcke, aus denen der Router auswählen kann. Der Router erkennt automatisch verbundene Blöcke, aber Sie können auch:
|
||||
|
||||
- Die Beschreibungen der Zielblöcke anpassen, um die Routing-Genauigkeit zu verbessern
|
||||
- Routing-Kriterien für jeden Zielblock festlegen
|
||||
- Bestimmte Blöcke von der Berücksichtigung als Routing-Ziele ausschließen
|
||||
|
||||
### Modellauswahl
|
||||
|
||||
Wählen Sie ein KI-Modell für die Routing-Entscheidung:
|
||||
|
||||
**OpenAI**: GPT-4o, o1, o3, o4-mini, gpt-4.1 \
|
||||
**Anthropic**: Claude 3.7 Sonnet \
|
||||
**Google**: Gemini 2.5 Pro, Gemini 2.0 Flash \
|
||||
**Andere Anbieter**: Groq, Cerebras, xAI, DeepSeek \
|
||||
**Lokale Modelle**: Jedes Modell, das auf Ollama läuft
|
||||
|
||||
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
|
||||
<Video src="router-model-dropdown.mp4" width={500} height={350} />
|
||||
</div>
|
||||
|
||||
**Empfehlung**: Verwenden Sie Modelle mit starken Reasoning-Fähigkeiten wie GPT-4o oder Claude 3.7 Sonnet für genauere Routing-Entscheidungen.
|
||||
|
||||
### API-Schlüssel
|
||||
|
||||
Ihr API-Schlüssel für den ausgewählten LLM-Anbieter. Dieser wird sicher gespeichert und für die Authentifizierung verwendet.
|
||||
|
||||
### Zugriff auf Ergebnisse
|
||||
|
||||
Nachdem ein Router eine Entscheidung getroffen hat, können Sie auf seine Ausgaben zugreifen:
|
||||
|
||||
- **`<router.prompt>`**: Zusammenfassung des verwendeten Routing-Prompts
|
||||
- **`<router.selected_path>`**: Details zum ausgewählten Zielblock
|
||||
- **`<router.tokens>`**: Token-Nutzungsstatistiken vom LLM
|
||||
- **`<router.cost>`**: Kostenübersicht für den Routing-Aufruf (Eingabe, Ausgabe, Gesamt)
|
||||
- **`<router.model>`**: Das für die Entscheidungsfindung verwendete Modell
|
||||
|
||||
## Erweiterte Funktionen
|
||||
|
||||
### Benutzerdefinierte Routing-Kriterien
|
||||
|
||||
Definieren Sie spezifische Kriterien für jeden Zielblock:
|
||||
|
||||
```javascript
|
||||
// Example routing descriptions
|
||||
Target Block 1: "Technical support issues, API problems, integration questions"
|
||||
Target Block 2: "Billing inquiries, subscription changes, payment issues"
|
||||
Target Block 3: "General questions, feedback, feature requests"
|
||||
```
|
||||
|
||||
## Eingaben und Ausgaben
|
||||
|
||||
<Tabs items={['Konfiguration', 'Variablen']}>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>Inhalt/Prompt</strong>: Zu analysierender Text für Routing-Entscheidungen
|
||||
</li>
|
||||
<li>
|
||||
<strong>Zielblöcke</strong>: Verbundene Blöcke als potenzielle Ziele
|
||||
</li>
|
||||
<li>
|
||||
<strong>Modell</strong>: KI-Modell für Routing-Analyse
|
||||
</li>
|
||||
<li>
|
||||
<strong>API-Schlüssel</strong>: Authentifizierung für ausgewählten LLM-Anbieter
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
<Tab>
|
||||
<ul className="list-disc space-y-2 pl-6">
|
||||
<li>
|
||||
<strong>router.prompt</strong>: Zusammenfassung des verwendeten Routing-Prompts
|
||||
</li>
|
||||
<li>
|
||||
<strong>router.selected_path</strong>: Details zum gewählten Ziel
|
||||
</li>
|
||||
<li>
|
||||
<strong>router.tokens</strong>: Token-Nutzungsstatistiken
|
||||
</li>
|
||||
<li>
|
||||
<strong>router.cost</strong>: Kostenübersicht für den Routing-Aufruf (Eingabe, Ausgabe, Gesamt)
|
||||
</li>
|
||||
<li>
|
||||
<strong>router.model</strong>: Für die Entscheidungsfindung verwendetes Modell
|
||||
</li>
|
||||
</ul>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Beispielanwendungsfälle
|
||||
|
||||
### Kundensupport-Triage
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Support-Tickets an spezialisierte Abteilungen weiterleiten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Benutzer reicht Supportanfrage über Formular ein</li>
|
||||
<li>Router analysiert Ticket-Inhalt und Kontext</li>
|
||||
<li>Technische Probleme → Engineering-Support-Mitarbeiter</li>
|
||||
<li>Abrechnungsfragen → Finanz-Support-Mitarbeiter</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Inhaltsklassifizierung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Benutzergenerierte Inhalte klassifizieren und weiterleiten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Benutzer reicht Inhalt oder Feedback ein</li>
|
||||
<li>Router analysiert Inhaltstyp und Stimmung</li>
|
||||
<li>Feature-Anfragen → Produkt-Team-Workflow</li>
|
||||
<li>Fehlerberichte → Technischer Support-Workflow</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
### Lead-Qualifizierung
|
||||
|
||||
<div className="mb-4 rounded-md border p-4">
|
||||
<h4 className="font-medium">Szenario: Leads basierend auf Qualifizierungskriterien weiterleiten</h4>
|
||||
<ol className="list-decimal pl-5 text-sm">
|
||||
<li>Lead-Informationen aus Formular erfasst</li>
|
||||
<li>Router analysiert Unternehmensgröße, Branche und Bedürfnisse</li>
|
||||
<li>Enterprise-Leads → Vertriebsteam mit individueller Preisgestaltung</li>
|
||||
<li>KMU-Leads → Self-Service-Onboarding-Prozess</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
## Best Practices
|
||||
|
||||
- **Klare Zielbeschreibungen bereitstellen**: Helfen Sie dem Router zu verstehen, wann jedes Ziel mit spezifischen, detaillierten Beschreibungen ausgewählt werden soll
|
||||
- **Spezifische Routing-Kriterien verwenden**: Definieren Sie klare Bedingungen und Beispiele für jeden Pfad, um die Genauigkeit zu verbessern
|
||||
- **Fallback-Pfade implementieren**: Verbinden Sie ein Standardziel für Fälle, in denen kein spezifischer Pfad geeignet ist
|
||||
- **Mit verschiedenen Eingaben testen**: Stellen Sie sicher, dass der Router verschiedene Eingabetypen, Grenzfälle und unerwartete Inhalte verarbeiten kann
|
||||
- **Routing-Leistung überwachen**: Überprüfen Sie Routing-Entscheidungen regelmäßig und verfeinern Sie Kriterien basierend auf tatsächlichen Nutzungsmustern
|
||||
- **Geeignete Modelle auswählen**: Verwenden Sie Modelle mit starken Argumentationsfähigkeiten für komplexe Routing-Entscheidungen
|
||||
40
apps/docs/content/docs/de/blocks/workflow.mdx
Normal file
40
apps/docs/content/docs/de/blocks/workflow.mdx
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: Workflow-Block
|
||||
description: Führe einen anderen Workflow innerhalb des aktuellen Ablaufs aus
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
## Was er macht
|
||||
|
||||
<div className='flex justify-center my-6'>
|
||||
<Image
|
||||
src='/static/blocks/workflow.png'
|
||||
alt='Workflow-Block-Konfiguration'
|
||||
width={400}
|
||||
height={280}
|
||||
className='rounded-xl border border-border shadow-sm'
|
||||
/>
|
||||
</div>
|
||||
|
||||
Füge einen Workflow-Block hinzu, wenn du einen untergeordneten Workflow als Teil eines größeren Ablaufs aufrufen möchtest. Der Block führt die neueste bereitgestellte Version dieses Workflows aus, wartet auf dessen Abschluss und setzt dann mit dem übergeordneten Workflow fort.
|
||||
|
||||
## Konfiguration
|
||||
|
||||
1. **Wähle einen Workflow** aus dem Dropdown-Menü (Selbstreferenzen sind blockiert, um Schleifen zu verhindern).
|
||||
2. **Eingaben zuordnen**: Wenn der untergeordnete Workflow einen Eingabeformular-Trigger hat, siehst du jedes Feld und kannst übergeordnete Variablen verbinden. Die zugeordneten Werte sind das, was der untergeordnete Workflow erhält.
|
||||
3. **Ausgaben**: Nach Abschluss des untergeordneten Workflows stellt der Block folgendes bereit:
|
||||
- `result` – die endgültige Antwort des untergeordneten Workflows
|
||||
- `success` – ob er ohne Fehler ausgeführt wurde
|
||||
- `error` – Nachricht, wenn die Ausführung fehlschlägt
|
||||
|
||||
## Ausführungshinweise
|
||||
|
||||
- Untergeordnete Workflows laufen im gleichen Workspace-Kontext, sodass Umgebungsvariablen und Tools übernommen werden.
|
||||
- Der Block verwendet Deployment-Versionierung: Jede API-, Zeitplan-, Webhook-, manuelle oder Chat-Ausführung ruft den bereitgestellten Snapshot auf. Stelle den untergeordneten Workflow neu bereit, wenn du ihn änderst.
|
||||
- Wenn der untergeordnete Workflow fehlschlägt, löst der Block einen Fehler aus, es sei denn, du behandelst ihn nachgelagert.
|
||||
|
||||
<Callout>
|
||||
Halte untergeordnete Workflows fokussiert. Kleine, wiederverwendbare Abläufe machen es einfacher, sie zu kombinieren, ohne tiefe Verschachtelungen zu erzeugen.
|
||||
</Callout>
|
||||
42
apps/docs/content/docs/de/connections/basics.mdx
Normal file
42
apps/docs/content/docs/de/connections/basics.mdx
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Verbindungsgrundlagen
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
|
||||
## Wie Verbindungen funktionieren
|
||||
|
||||
Verbindungen sind die Pfade, die den Datenfluss zwischen Blöcken in Ihrem Workflow ermöglichen. In Sim definieren Verbindungen, wie Informationen von einem Block zum anderen übertragen werden und ermöglichen so den Datenfluss durch Ihren gesamten Workflow.
|
||||
|
||||
<Callout type="info">
|
||||
Jede Verbindung stellt eine gerichtete Beziehung dar, bei der Daten vom Ausgang eines Quellblocks
|
||||
zum Eingang eines Zielblocks fließen.
|
||||
</Callout>
|
||||
|
||||
### Verbindungen erstellen
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
<strong>Quellblock auswählen</strong>: Klicken Sie auf den Ausgangsport des Blocks, von dem aus Sie verbinden möchten
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Verbindung ziehen</strong>: Ziehen Sie zum Eingangsport des Zielblocks
|
||||
</Step>
|
||||
<Step>
|
||||
<strong>Verbindung bestätigen</strong>: Loslassen, um die Verbindung zu erstellen
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### Verbindungsfluss
|
||||
|
||||
Der Datenfluss durch Verbindungen folgt diesen Prinzipien:
|
||||
|
||||
1. **Gerichteter Fluss**: Daten fließen immer von Ausgängen zu Eingängen
|
||||
2. **Ausführungsreihenfolge**: Blöcke werden basierend auf ihren Verbindungen der Reihe nach ausgeführt
|
||||
3. **Datentransformation**: Daten können beim Übergang zwischen Blöcken transformiert werden
|
||||
4. **Bedingte Pfade**: Einige Blöcke (wie Router und Bedingung) können den Fluss auf verschiedene Pfade leiten
|
||||
|
||||
<Callout type="warning">
|
||||
Das Löschen einer Verbindung stoppt sofort den Datenfluss zwischen den Blöcken. Stellen Sie sicher, dass dies beabsichtigt ist, bevor Sie Verbindungen entfernen.
|
||||
</Callout>
|
||||
194
apps/docs/content/docs/de/connections/data-structure.mdx
Normal file
194
apps/docs/content/docs/de/connections/data-structure.mdx
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
title: Verbindungsdatenstruktur
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
|
||||
Wenn Sie Blöcke verbinden, ist das Verständnis der Datenstruktur verschiedener Block-Ausgaben wichtig, da die Ausgabedatenstruktur des Quellblocks bestimmt, welche Werte im Zielblock verfügbar sind. Jeder Blocktyp erzeugt eine spezifische Ausgabestruktur, auf die Sie in nachgelagerten Blöcken verweisen können.
|
||||
|
||||
<Callout type="info">
|
||||
Das Verständnis dieser Datenstrukturen ist wesentlich für die effektive Nutzung von Verbindungs-Tags und
|
||||
den Zugriff auf die richtigen Daten in Ihren Workflows.
|
||||
</Callout>
|
||||
|
||||
## Block-Ausgabestrukturen
|
||||
|
||||
Verschiedene Blocktypen erzeugen unterschiedliche Ausgabestrukturen. Hier ist, was Sie von jedem Blocktyp erwarten können:
|
||||
|
||||
<Tabs items={['Agent Output', 'API Output', 'Function Output', 'Evaluator Output', 'Condition Output', 'Router Output']}>
|
||||
<Tab>
|
||||
|
||||
```json
|
||||
{
|
||||
"content": "The generated text response",
|
||||
"model": "gpt-4o",
|
||||
"tokens": {
|
||||
"prompt": 120,
|
||||
"completion": 85,
|
||||
"total": 205
|
||||
},
|
||||
"toolCalls": [...],
|
||||
"cost": [...],
|
||||
"usage": [...]
|
||||
}
|
||||
```
|
||||
|
||||
### Ausgabefelder des Agent-Blocks
|
||||
|
||||
- **content**: Die vom Agenten generierte Haupttextantwort
|
||||
- **model**: Das verwendete KI-Modell (z.B. "gpt-4o", "claude-3-opus")
|
||||
- **tokens**: Token-Nutzungsstatistiken
|
||||
- **prompt**: Anzahl der Token in der Eingabeaufforderung
|
||||
- **completion**: Anzahl der Token in der Vervollständigung
|
||||
- **total**: Insgesamt verwendete Token
|
||||
- **toolCalls**: Array von Werkzeugaufrufen des Agenten (falls vorhanden)
|
||||
- **cost**: Array von Kostenobjekten für jeden Werkzeugaufruf (falls vorhanden)
|
||||
- **usage**: Token-Nutzungsstatistiken für die gesamte Antwort
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
|
||||
```json
|
||||
{
|
||||
"data": "Response data",
|
||||
"status": 200,
|
||||
"headers": {
|
||||
"content-type": "application/json",
|
||||
"cache-control": "no-cache"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Ausgabefelder des API-Blocks
|
||||
|
||||
- **data**: Die Antwortdaten von der API (kann jeden Typ haben)
|
||||
- **status**: HTTP-Statuscode der Antwort
|
||||
- **headers**: Von der API zurückgegebene HTTP-Header
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
|
||||
```json
|
||||
{
|
||||
"result": "Function return value",
|
||||
"stdout": "Console output",
|
||||
}
|
||||
```
|
||||
|
||||
### Ausgabefelder des Funktionsblocks
|
||||
|
||||
- **result**: Der Rückgabewert der Funktion (kann jeden Typ haben)
|
||||
- **stdout**: Während der Funktionsausführung erfasste Konsolenausgabe
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
|
||||
```json
|
||||
{
|
||||
"content": "Evaluation summary",
|
||||
"model": "gpt-5",
|
||||
"tokens": {
|
||||
"prompt": 120,
|
||||
"completion": 85,
|
||||
"total": 205
|
||||
},
|
||||
"metric1": 8.5,
|
||||
"metric2": 7.2,
|
||||
"metric3": 9.0
|
||||
}
|
||||
```
|
||||
|
||||
### Ausgabefelder des Evaluator-Blocks
|
||||
|
||||
- **content**: Zusammenfassung der Auswertung
|
||||
- **model**: Das für die Auswertung verwendete KI-Modell
|
||||
- **tokens**: Statistiken zur Token-Nutzung
|
||||
- **[metricName]**: Bewertung für jede im Evaluator definierte Metrik (dynamische Felder)
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
|
||||
```json
|
||||
{
|
||||
"content": "Original content passed through",
|
||||
"conditionResult": true,
|
||||
"selectedPath": {
|
||||
"blockId": "2acd9007-27e8-4510-a487-73d3b825e7c1",
|
||||
"blockType": "agent",
|
||||
"blockTitle": "Follow-up Agent"
|
||||
},
|
||||
"selectedConditionId": "condition-1"
|
||||
}
|
||||
```
|
||||
|
||||
### Ausgabefelder des Condition-Blocks
|
||||
|
||||
- **content**: Der ursprüngliche, durchgeleitete Inhalt
|
||||
- **conditionResult**: Boolesches Ergebnis der Bedingungsauswertung
|
||||
- **selectedPath**: Informationen über den ausgewählten Pfad
|
||||
- **blockId**: ID des nächsten Blocks im ausgewählten Pfad
|
||||
- **blockType**: Typ des nächsten Blocks
|
||||
- **blockTitle**: Titel des nächsten Blocks
|
||||
- **selectedConditionId**: ID der ausgewählten Bedingung
|
||||
|
||||
</Tab>
|
||||
<Tab>
|
||||
|
||||
```json
|
||||
{
|
||||
"content": "Routing decision",
|
||||
"model": "gpt-4o",
|
||||
"tokens": {
|
||||
"prompt": 120,
|
||||
"completion": 85,
|
||||
"total": 205
|
||||
},
|
||||
"selectedPath": {
|
||||
"blockId": "2acd9007-27e8-4510-a487-73d3b825e7c1",
|
||||
"blockType": "agent",
|
||||
"blockTitle": "Customer Service Agent"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Ausgabefelder des Router-Blocks
|
||||
|
||||
- **content**: Der Routing-Entscheidungstext
|
||||
- **model**: Das für das Routing verwendete KI-Modell
|
||||
- **tokens**: Statistiken zur Token-Nutzung
|
||||
- **selectedPath**: Informationen über den ausgewählten Pfad
|
||||
- **blockId**: ID des ausgewählten Zielblocks
|
||||
- **blockType**: Typ des ausgewählten Blocks
|
||||
- **blockTitle**: Titel des ausgewählten Blocks
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Benutzerdefinierte Ausgabestrukturen
|
||||
|
||||
Einige Blöcke können basierend auf ihrer Konfiguration benutzerdefinierte Ausgabestrukturen erzeugen:
|
||||
|
||||
1. **Agent-Blöcke mit Antwortformat**: Bei Verwendung eines Antwortformats in einem Agent-Block entspricht die Ausgabestruktur dem definierten Schema anstelle der Standardstruktur.
|
||||
|
||||
2. **Function-Blöcke**: Das Feld `result` kann jede Datenstruktur enthalten, die von Ihrem Funktionscode zurückgegeben wird.
|
||||
|
||||
3. **API-Blöcke**: Das Feld `data` enthält die Rückgabe der API, die jede gültige JSON-Struktur sein kann.
|
||||
|
||||
<Callout type="warning">
|
||||
Überprüfen Sie während der Entwicklung immer die tatsächliche Ausgabestruktur Ihrer Blöcke, um sicherzustellen, dass Sie in Ihren Verbindungen auf die richtigen Felder verweisen.
|
||||
</Callout>
|
||||
|
||||
## Verschachtelte Datenstrukturen
|
||||
|
||||
Viele Block-Ausgaben enthalten verschachtelte Datenstrukturen. Du kannst auf diese mit Punktnotation in Verbindungs-Tags zugreifen:
|
||||
|
||||
```
|
||||
<blockName.path.to.nested.data>
|
||||
```
|
||||
|
||||
Zum Beispiel:
|
||||
|
||||
- `<agent1.tokens.total>` - Greife auf die Gesamtzahl der Tokens aus einem Agent-Block zu
|
||||
- `<api1.data.results[0].id>` - Greife auf die ID des ersten Ergebnisses einer API-Antwort zu
|
||||
- `<function1.result.calculations.total>` - Greife auf ein verschachteltes Feld im Ergebnis eines Funktionsblocks zu
|
||||
42
apps/docs/content/docs/de/connections/index.mdx
Normal file
42
apps/docs/content/docs/de/connections/index.mdx
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Verbindungen
|
||||
description: Verbinde deine Blöcke miteinander.
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { ConnectIcon } from '@/components/icons'
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Verbindungen sind die Pfade, die den Datenfluss zwischen Blöcken in deinem Workflow ermöglichen. Sie definieren, wie Informationen von einem Block zum anderen weitergegeben werden und ermöglichen dir, komplexe, mehrstufige Prozesse zu erstellen.
|
||||
|
||||
<Callout type="info">
|
||||
Richtig konfigurierte Verbindungen sind entscheidend für die Erstellung effektiver Workflows. Sie bestimmen, wie
|
||||
Daten durch dein System fließen und wie Blöcke miteinander interagieren.
|
||||
</Callout>
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="connections.mp4" />
|
||||
</div>
|
||||
|
||||
## Verbindungstypen
|
||||
|
||||
Sim unterstützt verschiedene Arten von Verbindungen, die verschiedene Workflow-Muster ermöglichen:
|
||||
|
||||
<Cards>
|
||||
<Card title="Grundlagen der Verbindungen" href="/connections/basics">
|
||||
Lerne, wie Verbindungen funktionieren und wie du sie in deinen Workflows erstellst
|
||||
</Card>
|
||||
<Card title="Verbindungs-Tags" href="/connections/tags">
|
||||
Verstehe, wie du Verbindungs-Tags verwendest, um auf Daten zwischen Blöcken zu verweisen
|
||||
</Card>
|
||||
<Card title="Datenstruktur" href="/connections/data-structure">
|
||||
Erkunde die Ausgabedatenstrukturen verschiedener Blocktypen
|
||||
</Card>
|
||||
<Card title="Datenzugriff" href="/connections/accessing-data">
|
||||
Lerne Techniken für den Zugriff und die Manipulation verbundener Daten
|
||||
</Card>
|
||||
<Card title="Best Practices" href="/connections/best-practices">
|
||||
Folge empfohlenen Mustern für effektives Verbindungsmanagement
|
||||
</Card>
|
||||
</Cards>
|
||||
109
apps/docs/content/docs/de/connections/tags.mdx
Normal file
109
apps/docs/content/docs/de/connections/tags.mdx
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
title: Verbindungs-Tags
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Verbindungs-Tags sind visuelle Darstellungen der verfügbaren Daten aus verbundenen Blöcken und bieten eine einfache Möglichkeit, auf Daten zwischen Blöcken und Ausgaben aus vorherigen Blöcken in Ihrem Workflow zu verweisen.
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="connections.mp4" />
|
||||
</div>
|
||||
|
||||
### Was sind Verbindungs-Tags?
|
||||
|
||||
Verbindungs-Tags sind interaktive Elemente, die erscheinen, wenn Blöcke verbunden werden. Sie repräsentieren die Daten, die von einem Block zum anderen fließen können und ermöglichen es Ihnen:
|
||||
|
||||
- Verfügbare Daten aus Quellblöcken zu visualisieren
|
||||
- Auf bestimmte Datenfelder in Zielblöcken zu verweisen
|
||||
- Dynamische Datenflüsse zwischen Blöcken zu erstellen
|
||||
|
||||
<Callout type="info">
|
||||
Verbindungs-Tags machen es einfach zu sehen, welche Daten aus vorherigen Blöcken verfügbar sind und diese in Ihrem
|
||||
aktuellen Block zu verwenden, ohne sich komplexe Datenstrukturen merken zu müssen.
|
||||
</Callout>
|
||||
|
||||
## Verwendung von Verbindungs-Tags
|
||||
|
||||
Es gibt zwei Hauptmethoden, um Verbindungs-Tags in Ihren Workflows zu verwenden:
|
||||
|
||||
<div className="my-6 grid grid-cols-1 gap-4 md:grid-cols-2">
|
||||
<div className="rounded-lg border border-gray-200 p-4 dark:border-gray-800">
|
||||
<h3 className="mb-2 text-lg font-medium">Drag and Drop</h3>
|
||||
<div className="text-sm text-gray-600 dark:text-gray-400">
|
||||
Klicken Sie auf einen Verbindungs-Tag und ziehen Sie ihn in Eingabefelder von Zielblöcken. Ein Dropdown-Menü wird
|
||||
angezeigt, das verfügbare Werte zeigt.
|
||||
</div>
|
||||
<ol className="mt-2 list-decimal pl-5 text-sm text-gray-600 dark:text-gray-400">
|
||||
<li>Fahren Sie mit dem Mauszeiger über einen Verbindungs-Tag, um verfügbare Daten zu sehen</li>
|
||||
<li>Klicken und ziehen Sie den Tag in ein Eingabefeld</li>
|
||||
<li>Wählen Sie das spezifische Datenfeld aus dem Dropdown-Menü</li>
|
||||
<li>Die Referenz wird automatisch eingefügt</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div className="rounded-lg border border-gray-200 p-4 dark:border-gray-800">
|
||||
<h3 className="mb-2 text-lg font-medium">Spitze-Klammer-Syntax</h3>
|
||||
<div className="text-sm text-gray-600 dark:text-gray-400">
|
||||
Geben Sie <code><></code> in Eingabefeldern ein, um ein Dropdown-Menü mit verfügbaren Verbindungswerten
|
||||
aus vorherigen Blöcken zu sehen.
|
||||
</div>
|
||||
<ol className="mt-2 list-decimal pl-5 text-sm text-gray-600 dark:text-gray-400">
|
||||
<li>Klicken Sie in ein beliebiges Eingabefeld, in dem Sie verbundene Daten verwenden möchten</li>
|
||||
<li>
|
||||
Geben Sie <code><></code> ein, um das Verbindungs-Dropdown-Menü aufzurufen
|
||||
</li>
|
||||
<li>Durchsuchen und wählen Sie die Daten aus, auf die Sie verweisen möchten</li>
|
||||
<li>Tippen Sie weiter oder wählen Sie aus dem Dropdown-Menü, um die Referenz zu vervollständigen</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
## Tag-Syntax
|
||||
|
||||
Verbindungs-Tags verwenden eine einfache Syntax, um auf Daten zu verweisen:
|
||||
|
||||
```
|
||||
<blockName.path.to.data>
|
||||
```
|
||||
|
||||
Wobei:
|
||||
|
||||
- `blockName` ist der Name des Quellblocks
|
||||
- `path.to.data` ist der Pfad zum spezifischen Datenfeld
|
||||
|
||||
Zum Beispiel:
|
||||
|
||||
- `<agent1.content>` - Verweist auf das Inhaltsfeld eines Blocks mit der ID "agent1"
|
||||
- `<api2.data.users[0].name>` - Verweist auf den Namen des ersten Benutzers im Benutzer-Array aus dem Datenfeld eines Blocks mit der ID "api2"
|
||||
|
||||
## Dynamische Tag-Referenzen
|
||||
|
||||
Verbindungs-Tags werden zur Laufzeit ausgewertet, was bedeutet:
|
||||
|
||||
1. Sie verweisen immer auf die aktuellsten Daten
|
||||
2. Sie können in Ausdrücken verwendet und mit statischem Text kombiniert werden
|
||||
3. Sie können in andere Datenstrukturen eingebettet werden
|
||||
|
||||
### Beispiele
|
||||
|
||||
```javascript
|
||||
// Reference in text
|
||||
"The user's name is <userBlock.name>"
|
||||
|
||||
// Reference in JSON
|
||||
{
|
||||
"userName": "<userBlock.name>",
|
||||
"orderTotal": <apiBlock.data.total>
|
||||
}
|
||||
|
||||
// Reference in code
|
||||
const greeting = "Hello, <userBlock.name>!";
|
||||
const total = <apiBlock.data.total> * 1.1; // Add 10% tax
|
||||
```
|
||||
|
||||
<Callout type="warning">
|
||||
Wenn Sie Verbindungs-Tags in numerischen Kontexten verwenden, stellen Sie sicher, dass die referenzierten Daten tatsächlich eine Zahl sind,
|
||||
um Typkonvertierungsprobleme zu vermeiden.
|
||||
</Callout>
|
||||
161
apps/docs/content/docs/de/copilot/index.mdx
Normal file
161
apps/docs/content/docs/de/copilot/index.mdx
Normal file
@@ -0,0 +1,161 @@
|
||||
---
|
||||
title: Copilot
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Image } from '@/components/ui/image'
|
||||
import { MessageCircle, Package, Zap, Infinity as InfinityIcon, Brain, BrainCircuit } from 'lucide-react'
|
||||
|
||||
Copilot ist dein Assistent im Editor, der dir hilft, Workflows mit Sim Copilot zu erstellen und zu bearbeiten sowie diese zu verstehen und zu verbessern. Er kann:
|
||||
|
||||
- **Erklären**: Beantwortet Fragen zu Sim und deinem aktuellen Workflow
|
||||
- **Anleiten**: Schlägt Bearbeitungen und Best Practices vor
|
||||
- **Bearbeiten**: Nimmt Änderungen an Blöcken, Verbindungen und Einstellungen vor, wenn du zustimmst
|
||||
|
||||
<Callout type="info">
|
||||
Copilot ist ein von Sim verwalteter Dienst. Für selbst gehostete Installationen generiere einen Copilot API-Schlüssel in der gehosteten App (sim.ai → Einstellungen → Copilot)
|
||||
1. Gehe zu [sim.ai](https://sim.ai) → Einstellungen → Copilot und generiere einen Copilot API-Schlüssel
|
||||
2. Setze `COPILOT_API_KEY` in deiner selbst gehosteten Umgebung auf diesen Wert
|
||||
</Callout>
|
||||
|
||||
## Kontextmenü (@)
|
||||
|
||||
Verwende das `@` Symbol, um auf verschiedene Ressourcen zu verweisen und Copilot mehr Kontext über deinen Arbeitsbereich zu geben:
|
||||
|
||||
<Image
|
||||
src="/static/copilot/copilot-menu.png"
|
||||
alt="Copilot-Kontextmenü mit verfügbaren Referenzoptionen"
|
||||
width={600}
|
||||
height={400}
|
||||
/>
|
||||
|
||||
Das `@` Menü bietet Zugriff auf:
|
||||
- **Chats**: Verweise auf vorherige Copilot-Gespräche
|
||||
- **Alle Workflows**: Verweise auf beliebige Workflows in deinem Arbeitsbereich
|
||||
- **Workflow-Blöcke**: Verweise auf bestimmte Blöcke aus Workflows
|
||||
- **Blöcke**: Verweise auf Blocktypen und Vorlagen
|
||||
- **Wissen**: Verweise auf deine hochgeladenen Dokumente und Wissensdatenbank
|
||||
- **Dokumentation**: Verweise auf Sim-Dokumentation
|
||||
- **Vorlagen**: Verweise auf Workflow-Vorlagen
|
||||
- **Logs**: Verweise auf Ausführungsprotokolle und Ergebnisse
|
||||
|
||||
Diese kontextbezogenen Informationen helfen Copilot, genauere und relevantere Unterstützung für deinen spezifischen Anwendungsfall zu bieten.
|
||||
|
||||
## Modi
|
||||
|
||||
<Cards>
|
||||
<Card
|
||||
title={
|
||||
<span className="inline-flex items-center gap-2">
|
||||
<MessageCircle className="h-4 w-4 text-muted-foreground" />
|
||||
Fragen
|
||||
</span>
|
||||
}
|
||||
>
|
||||
<div className="m-0 text-sm">
|
||||
Frage-Antwort-Modus für Erklärungen, Anleitungen und Vorschläge ohne Änderungen an deinem Workflow vorzunehmen.
|
||||
</div>
|
||||
</Card>
|
||||
<Card
|
||||
title={
|
||||
<span className="inline-flex items-center gap-2">
|
||||
<Package className="h-4 w-4 text-muted-foreground" />
|
||||
Agent
|
||||
</span>
|
||||
}
|
||||
>
|
||||
<div className="m-0 text-sm">
|
||||
Erstellen-und-Bearbeiten-Modus. Copilot schlägt spezifische Änderungen vor (Blöcke hinzufügen, Variablen verbinden, Einstellungen anpassen) und wendet sie an, wenn du zustimmst.
|
||||
</div>
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
## Tiefenebenen
|
||||
|
||||
<Cards>
|
||||
<Card
|
||||
title={
|
||||
<span className="inline-flex items-center gap-2">
|
||||
<Zap className="h-4 w-4 text-muted-foreground" />
|
||||
Schnell
|
||||
</span>
|
||||
}
|
||||
>
|
||||
<div className="m-0 text-sm">Am schnellsten und günstigsten. Ideal für kleine Änderungen, einfache Workflows und geringfügige Anpassungen.</div>
|
||||
</Card>
|
||||
<Card
|
||||
title={
|
||||
<span className="inline-flex items-center gap-2">
|
||||
<InfinityIcon className="h-4 w-4 text-muted-foreground" />
|
||||
Auto
|
||||
</span>
|
||||
}
|
||||
>
|
||||
<div className="m-0 text-sm">Ausgewogene Geschwindigkeit und Denkleistung. Empfohlene Standardeinstellung für die meisten Aufgaben.</div>
|
||||
</Card>
|
||||
<Card
|
||||
title={
|
||||
<span className="inline-flex items-center gap-2">
|
||||
<Brain className="h-4 w-4 text-muted-foreground" />
|
||||
Erweitert
|
||||
</span>
|
||||
}
|
||||
>
|
||||
<div className="m-0 text-sm">Mehr Denkleistung für umfangreichere Workflows und komplexe Änderungen bei gleichzeitiger Leistungsfähigkeit.</div>
|
||||
</Card>
|
||||
<Card
|
||||
title={
|
||||
<span className="inline-flex items-center gap-2">
|
||||
<BrainCircuit className="h-4 w-4 text-muted-foreground" />
|
||||
Behemoth
|
||||
</span>
|
||||
}
|
||||
>
|
||||
<div className="m-0 text-sm">Maximale Denkleistung für tiefgreifende Planung, Fehlerbehebung und komplexe architektonische Änderungen.</div>
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
### Modusauswahl-Oberfläche
|
||||
|
||||
Du kannst einfach zwischen verschiedenen Denkmodi über den Modusauswähler in der Copilot-Oberfläche wechseln:
|
||||
|
||||
<Image
|
||||
src="/static/copilot/copilot-models.png"
|
||||
alt="Copilot-Modusauswahl zeigt den erweiterten Modus mit MAX-Umschalter"
|
||||
width={600}
|
||||
height={300}
|
||||
/>
|
||||
|
||||
Die Oberfläche ermöglicht dir:
|
||||
- **Denkebene auswählen**: Wähle zwischen Schnell, Auto, Erweitert oder Behemoth
|
||||
- **MAX-Modus aktivieren**: Umschalten für maximale Denkfähigkeiten, wenn du die gründlichste Analyse benötigst
|
||||
- **Modusbeschreibungen anzeigen**: Verstehe, wofür jeder Modus optimiert ist
|
||||
|
||||
Wähle deinen Modus basierend auf der Komplexität deiner Aufgabe - verwende Schnell für einfache Fragen und Behemoth für komplexe architektonische Änderungen.
|
||||
|
||||
## Abrechnung und Kostenberechnung
|
||||
|
||||
### Wie Kosten berechnet werden
|
||||
|
||||
Die Copilot-Nutzung wird pro Token vom zugrundeliegenden LLM abgerechnet:
|
||||
|
||||
- **Eingabe-Tokens**: werden zum Basistarif des Anbieters berechnet (**zum Selbstkostenpreis**)
|
||||
- **Ausgabe-Tokens**: werden mit dem **1,5-fachen** des Basisausgabepreises des Anbieters berechnet
|
||||
|
||||
```javascript
|
||||
copilotCost = (inputTokens × inputPrice + outputTokens × (outputPrice × 1.5)) / 1,000,000
|
||||
```
|
||||
|
||||
| Komponente | Angewendeter Tarif |
|
||||
|------------|------------------------|
|
||||
| Input | inputPrice |
|
||||
| Output | outputPrice × 1,5 |
|
||||
|
||||
<Callout type="warning">
|
||||
Die angezeigten Preise spiegeln die Tarife vom 4. September 2025 wider. Überprüfen Sie die Anbieterdokumentation für aktuelle Preise.
|
||||
</Callout>
|
||||
|
||||
<Callout type="info">
|
||||
Modellpreise werden pro Million Token berechnet. Die Berechnung teilt durch 1.000.000, um die tatsächlichen Kosten zu ermitteln. Siehe <a href="/execution/costs">die Seite zur Kostenberechnung</a> für Hintergründe und Beispiele.
|
||||
</Callout>
|
||||
551
apps/docs/content/docs/de/execution/api.mdx
Normal file
551
apps/docs/content/docs/de/execution/api.mdx
Normal file
@@ -0,0 +1,551 @@
|
||||
---
|
||||
title: Externe API
|
||||
---
|
||||
|
||||
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { CodeBlock } from 'fumadocs-ui/components/codeblock'
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Sim bietet eine umfassende externe API zum Abfragen von Workflow-Ausführungsprotokollen und zum Einrichten von Webhooks für Echtzeit-Benachrichtigungen, wenn Workflows abgeschlossen werden.
|
||||
|
||||
## Authentifizierung
|
||||
|
||||
Alle API-Anfragen erfordern einen API-Schlüssel, der im Header `x-api-key` übergeben wird:
|
||||
|
||||
```bash
|
||||
curl -H "x-api-key: YOUR_API_KEY" \
|
||||
https://sim.ai/api/v1/logs?workspaceId=YOUR_WORKSPACE_ID
|
||||
```
|
||||
|
||||
Sie können API-Schlüssel in Ihren Benutzereinstellungen im Sim-Dashboard generieren.
|
||||
|
||||
## Logs-API
|
||||
|
||||
Alle API-Antworten enthalten Informationen über Ihre Workflow-Ausführungslimits und -nutzung:
|
||||
|
||||
```json
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"limit": 60, // Max sync workflow executions per minute
|
||||
"remaining": 58, // Remaining sync workflow executions
|
||||
"resetAt": "..." // When the window resets
|
||||
},
|
||||
"async": {
|
||||
"limit": 60, // Max async workflow executions per minute
|
||||
"remaining": 59, // Remaining async workflow executions
|
||||
"resetAt": "..." // When the window resets
|
||||
}
|
||||
},
|
||||
"usage": {
|
||||
"currentPeriodCost": 1.234, // Current billing period usage in USD
|
||||
"limit": 10, // Usage limit in USD
|
||||
"plan": "pro", // Current subscription plan
|
||||
"isExceeded": false // Whether limit is exceeded
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Hinweis:** Die Ratenbegrenzungen in der Antwort beziehen sich auf Workflow-Ausführungen. Die Ratenbegrenzungen für den Aufruf dieses API-Endpunkts befinden sich in den Antwort-Headern (`X-RateLimit-*`).
|
||||
|
||||
### Logs abfragen
|
||||
|
||||
Fragen Sie Workflow-Ausführungsprotokolle mit umfangreichen Filteroptionen ab.
|
||||
|
||||
<Tabs items={['Request', 'Response']}>
|
||||
<Tab value="Request">
|
||||
|
||||
```http
|
||||
GET /api/v1/logs
|
||||
```
|
||||
|
||||
**Erforderliche Parameter:**
|
||||
- `workspaceId` - Ihre Workspace-ID
|
||||
|
||||
**Optionale Filter:**
|
||||
- `workflowIds` - Kommagetrennte Workflow-IDs
|
||||
- `folderIds` - Kommagetrennte Ordner-IDs
|
||||
- `triggers` - Kommagetrennte Auslösertypen: `api`, `webhook`, `schedule`, `manual`, `chat`
|
||||
- `level` - Nach Level filtern: `info`, `error`
|
||||
- `startDate` - ISO-Zeitstempel für den Beginn des Datumsbereichs
|
||||
- `endDate` - ISO-Zeitstempel für das Ende des Datumsbereichs
|
||||
- `executionId` - Exakte Übereinstimmung der Ausführungs-ID
|
||||
- `minDurationMs` - Minimale Ausführungsdauer in Millisekunden
|
||||
- `maxDurationMs` - Maximale Ausführungsdauer in Millisekunden
|
||||
- `minCost` - Minimale Ausführungskosten
|
||||
- `maxCost` - Maximale Ausführungskosten
|
||||
- `model` - Nach verwendetem KI-Modell filtern
|
||||
|
||||
**Paginierung:**
|
||||
- `limit` - Ergebnisse pro Seite (Standard: 100)
|
||||
- `cursor` - Cursor für die nächste Seite
|
||||
- `order` - Sortierreihenfolge: `desc`, `asc` (Standard: desc)
|
||||
|
||||
**Detailebene:**
|
||||
- `details` - Detailebene der Antwort: `basic`, `full` (Standard: basic)
|
||||
- `includeTraceSpans` - Trace-Spans einschließen (Standard: false)
|
||||
- `includeFinalOutput` - Endgültige Ausgabe einschließen (Standard: false)
|
||||
</Tab>
|
||||
<Tab value="Response">
|
||||
|
||||
```json
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "log_abc123",
|
||||
"workflowId": "wf_xyz789",
|
||||
"executionId": "exec_def456",
|
||||
"level": "info",
|
||||
"trigger": "api",
|
||||
"startedAt": "2025-01-01T12:34:56.789Z",
|
||||
"endedAt": "2025-01-01T12:34:57.123Z",
|
||||
"totalDurationMs": 334,
|
||||
"cost": {
|
||||
"total": 0.00234
|
||||
},
|
||||
"files": null
|
||||
}
|
||||
],
|
||||
"nextCursor": "eyJzIjoiMjAyNS0wMS0wMVQxMjozNDo1Ni43ODlaIiwiaWQiOiJsb2dfYWJjMTIzIn0",
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"limit": 60,
|
||||
"remaining": 58,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
},
|
||||
"async": {
|
||||
"limit": 60,
|
||||
"remaining": 59,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
}
|
||||
},
|
||||
"usage": {
|
||||
"currentPeriodCost": 1.234,
|
||||
"limit": 10,
|
||||
"plan": "pro",
|
||||
"isExceeded": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Log-Details abrufen
|
||||
|
||||
Rufen Sie detaillierte Informationen zu einem bestimmten Logeintrag ab.
|
||||
|
||||
<Tabs items={['Request', 'Response']}>
|
||||
<Tab value="Request">
|
||||
|
||||
```http
|
||||
GET /api/v1/logs/{id}
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="Response">
|
||||
|
||||
```json
|
||||
{
|
||||
"data": {
|
||||
"id": "log_abc123",
|
||||
"workflowId": "wf_xyz789",
|
||||
"executionId": "exec_def456",
|
||||
"level": "info",
|
||||
"trigger": "api",
|
||||
"startedAt": "2025-01-01T12:34:56.789Z",
|
||||
"endedAt": "2025-01-01T12:34:57.123Z",
|
||||
"totalDurationMs": 334,
|
||||
"workflow": {
|
||||
"id": "wf_xyz789",
|
||||
"name": "My Workflow",
|
||||
"description": "Process customer data"
|
||||
},
|
||||
"executionData": {
|
||||
"traceSpans": [...],
|
||||
"finalOutput": {...}
|
||||
},
|
||||
"cost": {
|
||||
"total": 0.00234,
|
||||
"tokens": {
|
||||
"prompt": 123,
|
||||
"completion": 456,
|
||||
"total": 579
|
||||
},
|
||||
"models": {
|
||||
"gpt-4o": {
|
||||
"input": 0.001,
|
||||
"output": 0.00134,
|
||||
"total": 0.00234,
|
||||
"tokens": {
|
||||
"prompt": 123,
|
||||
"completion": 456,
|
||||
"total": 579
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"limits": {
|
||||
"workflowExecutionRateLimit": {
|
||||
"sync": {
|
||||
"limit": 60,
|
||||
"remaining": 58,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
},
|
||||
"async": {
|
||||
"limit": 60,
|
||||
"remaining": 59,
|
||||
"resetAt": "2025-01-01T12:35:56.789Z"
|
||||
}
|
||||
},
|
||||
"usage": {
|
||||
"currentPeriodCost": 1.234,
|
||||
"limit": 10,
|
||||
"plan": "pro",
|
||||
"isExceeded": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Ausführungsdetails abrufen
|
||||
|
||||
Rufen Sie Ausführungsdetails einschließlich des Workflow-Zustandsschnappschusses ab.
|
||||
|
||||
<Tabs items={['Request', 'Response']}>
|
||||
<Tab value="Request">
|
||||
|
||||
```http
|
||||
GET /api/v1/logs/executions/{executionId}
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="Response">
|
||||
|
||||
```json
|
||||
{
|
||||
"executionId": "exec_def456",
|
||||
"workflowId": "wf_xyz789",
|
||||
"workflowState": {
|
||||
"blocks": {...},
|
||||
"edges": [...],
|
||||
"loops": {...},
|
||||
"parallels": {...}
|
||||
},
|
||||
"executionMetadata": {
|
||||
"trigger": "api",
|
||||
"startedAt": "2025-01-01T12:34:56.789Z",
|
||||
"endedAt": "2025-01-01T12:34:57.123Z",
|
||||
"totalDurationMs": 334,
|
||||
"cost": {...}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Webhook-Abonnements
|
||||
|
||||
Erhalten Sie Echtzeitbenachrichtigungen, wenn Workflow-Ausführungen abgeschlossen werden. Webhooks werden über die Sim-Benutzeroberfläche im Workflow-Editor konfiguriert.
|
||||
|
||||
### Konfiguration
|
||||
|
||||
Webhooks können für jeden Workflow über die Benutzeroberfläche des Workflow-Editors konfiguriert werden. Klicken Sie auf das Webhook-Symbol in der Kontrollleiste, um Ihre Webhook-Abonnements einzurichten.
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="configure-webhook.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
**Verfügbare Konfigurationsoptionen:**
|
||||
- `url`: Ihre Webhook-Endpunkt-URL
|
||||
- `secret`: Optionales Geheimnis für die HMAC-Signaturverifizierung
|
||||
- `includeFinalOutput`: Die endgültige Ausgabe des Workflows in die Nutzlast einschließen
|
||||
- `includeTraceSpans`: Detaillierte Ausführungs-Trace-Spans einschließen
|
||||
- `includeRateLimits`: Informationen zum Ratelimit des Workflow-Besitzers einschließen
|
||||
- `includeUsageData`: Nutzungs- und Abrechnungsdaten des Workflow-Besitzers einschließen
|
||||
- `levelFilter`: Array von Log-Ebenen, die empfangen werden sollen (`info`, `error`)
|
||||
- `triggerFilter`: Array von Auslösertypen, die empfangen werden sollen (`api`, `webhook`, `schedule`, `manual`, `chat`)
|
||||
- `active`: Webhook-Abonnement aktivieren/deaktivieren
|
||||
|
||||
### Webhook-Nutzlast
|
||||
|
||||
Wenn eine Workflow-Ausführung abgeschlossen ist, sendet Sim eine POST-Anfrage an Ihre Webhook-URL:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "evt_123",
|
||||
"type": "workflow.execution.completed",
|
||||
"timestamp": 1735925767890,
|
||||
"data": {
|
||||
"workflowId": "wf_xyz789",
|
||||
"executionId": "exec_def456",
|
||||
"status": "success",
|
||||
"level": "info",
|
||||
"trigger": "api",
|
||||
"startedAt": "2025-01-01T12:34:56.789Z",
|
||||
"endedAt": "2025-01-01T12:34:57.123Z",
|
||||
"totalDurationMs": 334,
|
||||
"cost": {
|
||||
"total": 0.00234,
|
||||
"tokens": {
|
||||
"prompt": 123,
|
||||
"completion": 456,
|
||||
"total": 579
|
||||
},
|
||||
"models": {
|
||||
"gpt-4o": {
|
||||
"input": 0.001,
|
||||
"output": 0.00134,
|
||||
"total": 0.00234,
|
||||
"tokens": {
|
||||
"prompt": 123,
|
||||
"completion": 456,
|
||||
"total": 579
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"files": null,
|
||||
"finalOutput": {...}, // Only if includeFinalOutput=true
|
||||
"traceSpans": [...], // Only if includeTraceSpans=true
|
||||
"rateLimits": {...}, // Only if includeRateLimits=true
|
||||
"usage": {...} // Only if includeUsageData=true
|
||||
},
|
||||
"links": {
|
||||
"log": "/v1/logs/log_abc123",
|
||||
"execution": "/v1/logs/executions/exec_def456"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Webhook-Header
|
||||
|
||||
Jede Webhook-Anfrage enthält diese Header:
|
||||
|
||||
- `sim-event`: Ereignistyp (immer `workflow.execution.completed`)
|
||||
- `sim-timestamp`: Unix-Zeitstempel in Millisekunden
|
||||
- `sim-delivery-id`: Eindeutige Lieferungs-ID für Idempotenz
|
||||
- `sim-signature`: HMAC-SHA256-Signatur zur Verifizierung (falls Secret konfiguriert)
|
||||
- `Idempotency-Key`: Identisch mit der Lieferungs-ID zur Erkennung von Duplikaten
|
||||
|
||||
### Signaturverifizierung
|
||||
|
||||
Wenn Sie ein Webhook-Secret konfigurieren, überprüfen Sie die Signatur, um sicherzustellen, dass der Webhook von Sim stammt:
|
||||
|
||||
<Tabs items={['Node.js', 'Python']}>
|
||||
<Tab value="Node.js">
|
||||
|
||||
```javascript
|
||||
import crypto from 'crypto';
|
||||
|
||||
function verifyWebhookSignature(body, signature, secret) {
|
||||
const [timestampPart, signaturePart] = signature.split(',');
|
||||
const timestamp = timestampPart.replace('t=', '');
|
||||
const expectedSignature = signaturePart.replace('v1=', '');
|
||||
|
||||
const signatureBase = `${timestamp}.${body}`;
|
||||
const hmac = crypto.createHmac('sha256', secret);
|
||||
hmac.update(signatureBase);
|
||||
const computedSignature = hmac.digest('hex');
|
||||
|
||||
return computedSignature === expectedSignature;
|
||||
}
|
||||
|
||||
// In your webhook handler
|
||||
app.post('/webhook', (req, res) => {
|
||||
const signature = req.headers['sim-signature'];
|
||||
const body = JSON.stringify(req.body);
|
||||
|
||||
if (!verifyWebhookSignature(body, signature, process.env.WEBHOOK_SECRET)) {
|
||||
return res.status(401).send('Invalid signature');
|
||||
}
|
||||
|
||||
// Process the webhook...
|
||||
});
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="Python">
|
||||
|
||||
```python
|
||||
import hmac
|
||||
import hashlib
|
||||
import json
|
||||
|
||||
def verify_webhook_signature(body: str, signature: str, secret: str) -> bool:
|
||||
timestamp_part, signature_part = signature.split(',')
|
||||
timestamp = timestamp_part.replace('t=', '')
|
||||
expected_signature = signature_part.replace('v1=', '')
|
||||
|
||||
signature_base = f"{timestamp}.{body}"
|
||||
computed_signature = hmac.new(
|
||||
secret.encode(),
|
||||
signature_base.encode(),
|
||||
hashlib.sha256
|
||||
).hexdigest()
|
||||
|
||||
return hmac.compare_digest(computed_signature, expected_signature)
|
||||
|
||||
# In your webhook handler
|
||||
@app.route('/webhook', methods=['POST'])
|
||||
def webhook():
|
||||
signature = request.headers.get('sim-signature')
|
||||
body = json.dumps(request.json)
|
||||
|
||||
if not verify_webhook_signature(body, signature, os.environ['WEBHOOK_SECRET']):
|
||||
return 'Invalid signature', 401
|
||||
|
||||
# Process the webhook...
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Wiederholungsrichtlinie
|
||||
|
||||
Fehlgeschlagene Webhook-Zustellungen werden mit exponentiellem Backoff und Jitter wiederholt:
|
||||
|
||||
- Maximale Versuche: 5
|
||||
- Wiederholungsverzögerungen: 5 Sekunden, 15 Sekunden, 1 Minute, 3 Minuten, 10 Minuten
|
||||
- Jitter: Bis zu 10% zusätzliche Verzögerung, um Überlastungen zu vermeiden
|
||||
- Nur HTTP 5xx und 429 Antworten lösen Wiederholungen aus
|
||||
- Zustellungen haben ein Timeout nach 30 Sekunden
|
||||
|
||||
<Callout type="info">
|
||||
Webhook-Zustellungen werden asynchron verarbeitet und beeinträchtigen nicht die Leistung der Workflow-Ausführung.
|
||||
</Callout>
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Polling-Strategie**: Verwenden Sie beim Abfragen von Logs die cursorbasierte Paginierung mit `order=asc` und `startDate`, um neue Logs effizient abzurufen.
|
||||
|
||||
2. **Webhook-Sicherheit**: Konfigurieren Sie immer ein Webhook-Secret und überprüfen Sie Signaturen, um sicherzustellen, dass Anfragen von Sim stammen.
|
||||
|
||||
3. **Idempotenz**: Verwenden Sie den `Idempotency-Key`Header, um doppelte Webhook-Zustellungen zu erkennen und zu behandeln.
|
||||
|
||||
4. **Datenschutz**: Standardmäßig werden `finalOutput` und `traceSpans` von den Antworten ausgeschlossen. Aktivieren Sie diese nur, wenn Sie die Daten benötigen und die Datenschutzauswirkungen verstehen.
|
||||
|
||||
5. **Rate-Limiting**: Implementieren Sie exponentielles Backoff, wenn Sie 429-Antworten erhalten. Überprüfen Sie den `Retry-After`Header für die empfohlene Wartezeit.
|
||||
|
||||
## Rate-Limiting
|
||||
|
||||
Die API implementiert Rate-Limiting, um eine faire Nutzung zu gewährleisten:
|
||||
|
||||
- **Kostenloser Plan**: 10 Anfragen pro Minute
|
||||
- **Pro-Plan**: 30 Anfragen pro Minute
|
||||
- **Team-Plan**: 60 Anfragen pro Minute
|
||||
- **Enterprise-Plan**: Individuelle Limits
|
||||
|
||||
Informationen zum Rate-Limit sind in den Antwort-Headern enthalten:
|
||||
- `X-RateLimit-Limit`: Maximale Anfragen pro Zeitfenster
|
||||
- `X-RateLimit-Remaining`: Verbleibende Anfragen im aktuellen Zeitfenster
|
||||
- `X-RateLimit-Reset`: ISO-Zeitstempel, wann das Zeitfenster zurückgesetzt wird
|
||||
|
||||
## Beispiel: Abfragen neuer Logs
|
||||
|
||||
```javascript
|
||||
let cursor = null;
|
||||
const workspaceId = 'YOUR_WORKSPACE_ID';
|
||||
const startDate = new Date().toISOString();
|
||||
|
||||
async function pollLogs() {
|
||||
const params = new URLSearchParams({
|
||||
workspaceId,
|
||||
startDate,
|
||||
order: 'asc',
|
||||
limit: '100'
|
||||
});
|
||||
|
||||
if (cursor) {
|
||||
params.append('cursor', cursor);
|
||||
}
|
||||
|
||||
const response = await fetch(
|
||||
`https://sim.ai/api/v1/logs?${params}`,
|
||||
{
|
||||
headers: {
|
||||
'x-api-key': 'YOUR_API_KEY'
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
|
||||
// Process new logs
|
||||
for (const log of data.data) {
|
||||
console.log(`New execution: ${log.executionId}`);
|
||||
}
|
||||
|
||||
// Update cursor for next poll
|
||||
if (data.nextCursor) {
|
||||
cursor = data.nextCursor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Poll every 30 seconds
|
||||
setInterval(pollLogs, 30000);
|
||||
```
|
||||
|
||||
## Beispiel: Verarbeitung von Webhooks
|
||||
|
||||
```javascript
|
||||
import express from 'express';
|
||||
import crypto from 'crypto';
|
||||
|
||||
const app = express();
|
||||
app.use(express.json());
|
||||
|
||||
app.post('/sim-webhook', (req, res) => {
|
||||
// Verify signature
|
||||
const signature = req.headers['sim-signature'];
|
||||
const body = JSON.stringify(req.body);
|
||||
|
||||
if (!verifyWebhookSignature(body, signature, process.env.WEBHOOK_SECRET)) {
|
||||
return res.status(401).send('Invalid signature');
|
||||
}
|
||||
|
||||
// Check timestamp to prevent replay attacks
|
||||
const timestamp = parseInt(req.headers['sim-timestamp']);
|
||||
const fiveMinutesAgo = Date.now() - (5 * 60 * 1000);
|
||||
|
||||
if (timestamp < fiveMinutesAgo) {
|
||||
return res.status(401).send('Timestamp too old');
|
||||
}
|
||||
|
||||
// Process the webhook
|
||||
const event = req.body;
|
||||
|
||||
switch (event.type) {
|
||||
case 'workflow.execution.completed':
|
||||
const { workflowId, executionId, status, cost } = event.data;
|
||||
|
||||
if (status === 'error') {
|
||||
console.error(`Workflow ${workflowId} failed: ${executionId}`);
|
||||
// Handle error...
|
||||
} else {
|
||||
console.log(`Workflow ${workflowId} completed: ${executionId}`);
|
||||
console.log(`Cost: ${cost.total}`);
|
||||
// Process successful execution...
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Return 200 to acknowledge receipt
|
||||
res.status(200).send('OK');
|
||||
});
|
||||
|
||||
app.listen(3000, () => {
|
||||
console.log('Webhook server listening on port 3000');
|
||||
});
|
||||
```
|
||||
132
apps/docs/content/docs/de/execution/basics.mdx
Normal file
132
apps/docs/content/docs/de/execution/basics.mdx
Normal file
@@ -0,0 +1,132 @@
|
||||
---
|
||||
title: Ausführungsgrundlagen
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Image } from '@/components/ui/image'
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Das Verständnis der Workflow-Ausführung in Sim ist entscheidend für die Erstellung effizienter und zuverlässiger Automatisierungen. Die Ausführungs-Engine verwaltet automatisch Abhängigkeiten, Parallelität und Datenfluss, um sicherzustellen, dass Ihre Workflows reibungslos und vorhersehbar ablaufen.
|
||||
|
||||
## Wie Workflows ausgeführt werden
|
||||
|
||||
Die Ausführungs-Engine von Sim verarbeitet Workflows intelligent, indem sie Abhängigkeiten analysiert und Blöcke in der effizientesten Reihenfolge ausführt.
|
||||
|
||||
### Parallele Ausführung als Standard
|
||||
|
||||
Mehrere Blöcke werden gleichzeitig ausgeführt, wenn sie nicht voneinander abhängig sind. Diese parallele Ausführung verbessert die Leistung erheblich, ohne dass eine manuelle Konfiguration erforderlich ist.
|
||||
|
||||
<Image
|
||||
src="/static/execution/concurrency.png"
|
||||
alt="Mehrere Blöcke, die nach dem Start-Block parallel ausgeführt werden"
|
||||
width={800}
|
||||
height={500}
|
||||
/>
|
||||
|
||||
In diesem Beispiel werden sowohl der Kundensupport- als auch der Deep-Researcher-Agentenblock gleichzeitig nach dem Start-Block ausgeführt, was die Effizienz maximiert.
|
||||
|
||||
### Automatische Ausgabekombination
|
||||
|
||||
Wenn Blöcke mehrere Abhängigkeiten haben, wartet die Ausführungs-Engine automatisch auf den Abschluss aller Abhängigkeiten und stellt dann ihre kombinierten Ausgaben dem nächsten Block zur Verfügung. Keine manuelle Kombination erforderlich.
|
||||
|
||||
<Image
|
||||
src="/static/execution/combination.png"
|
||||
alt="Funktionsblock, der automatisch Ausgaben von mehreren vorherigen Blöcken empfängt"
|
||||
width={800}
|
||||
height={500}
|
||||
/>
|
||||
|
||||
Der Funktionsblock erhält Ausgaben von beiden Agentenblöcken, sobald diese abgeschlossen sind, sodass Sie die kombinierten Ergebnisse verarbeiten können.
|
||||
|
||||
### Intelligentes Routing
|
||||
|
||||
Workflows können sich in mehrere Richtungen verzweigen, indem sie Routing-Blöcke verwenden. Die Ausführungs-Engine unterstützt sowohl deterministisches Routing (mit Bedingungsblöcken) als auch KI-gesteuertes Routing (mit Router-Blöcken).
|
||||
|
||||
<Image
|
||||
src="/static/execution/routing.png"
|
||||
alt="Workflow, der sowohl bedingte als auch router-basierte Verzweigungen zeigt"
|
||||
width={800}
|
||||
height={500}
|
||||
/>
|
||||
|
||||
Dieser Workflow zeigt, wie die Ausführung unterschiedlichen Pfaden basierend auf Bedingungen oder KI-Entscheidungen folgen kann, wobei jeder Pfad unabhängig ausgeführt wird.
|
||||
|
||||
## Blocktypen
|
||||
|
||||
Sim bietet verschiedene Arten von Blöcken, die spezifische Zwecke in Ihren Workflows erfüllen:
|
||||
|
||||
<Cards>
|
||||
<Card title="Auslöser" href="/triggers">
|
||||
**Starter-Blöcke** initiieren Workflows und **Webhook-Blöcke** reagieren auf externe Ereignisse. Jeder Workflow benötigt einen Auslöser, um die Ausführung zu beginnen.
|
||||
</Card>
|
||||
|
||||
<Card title="Verarbeitungsblöcke" href="/blocks">
|
||||
**Agent-Blöcke** interagieren mit KI-Modellen, **Funktionsblöcke** führen benutzerdefinierten Code aus und **API-Blöcke** verbinden sich mit externen Diensten. Diese Blöcke transformieren und verarbeiten Ihre Daten.
|
||||
</Card>
|
||||
|
||||
<Card title="Kontrollfluss" href="/blocks">
|
||||
**Router-Blöcke** nutzen KI, um Pfade zu wählen, **Bedingungsblöcke** verzweigen basierend auf Logik und **Schleifen-/Parallelblöcke** handhaben Iterationen und Nebenläufigkeit.
|
||||
</Card>
|
||||
|
||||
<Card title="Ausgabe & Antwort" href="/blocks">
|
||||
**Antwortblöcke** formatieren endgültige Ausgaben für APIs und Chat-Schnittstellen und liefern strukturierte Ergebnisse aus Ihren Workflows.
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
Alle Blöcke werden automatisch basierend auf ihren Abhängigkeiten ausgeführt - Sie müssen die Ausführungsreihenfolge oder das Timing nicht manuell verwalten.
|
||||
|
||||
## Ausführungsauslöser
|
||||
|
||||
Workflows können auf verschiedene Weise ausgelöst werden, abhängig von Ihrem Anwendungsfall:
|
||||
|
||||
### Manuelles Testen
|
||||
Klicken Sie im Workflow-Editor auf "Ausführen", um Ihren Workflow während der Entwicklung zu testen. Perfekt für Debugging und Validierung.
|
||||
|
||||
### Geplante Ausführung
|
||||
Richten Sie wiederkehrende Ausführungen mit Cron-Ausdrücken ein. Ideal für regelmäßige Datenverarbeitung, Berichte oder Wartungsaufgaben.
|
||||
|
||||
### API-Bereitstellung
|
||||
Stellen Sie Workflows als HTTP-Endpunkte bereit, die programmatisch von Ihren Anwendungen aufgerufen werden können.
|
||||
|
||||
### Webhook-Integration
|
||||
Reagieren Sie in Echtzeit auf Ereignisse von externen Diensten wie GitHub, Stripe oder benutzerdefinierten Systemen.
|
||||
|
||||
### Chat-Schnittstelle
|
||||
Erstellen Sie Konversationsschnittstellen, die auf benutzerdefinierten Subdomains für benutzerorientierte KI-Anwendungen gehostet werden.
|
||||
|
||||
<Callout type="info">
|
||||
Erfahren Sie mehr über jeden Auslösertyp im [Abschnitt Auslöser](/triggers) der Dokumentation.
|
||||
</Callout>
|
||||
|
||||
## Ausführungsüberwachung
|
||||
|
||||
Wenn Workflows ausgeführt werden, bietet Sim Echtzeit-Einblick in den Ausführungsprozess:
|
||||
|
||||
- **Live-Block-Status**: Sehen Sie, welche Blöcke gerade ausgeführt werden, abgeschlossen sind oder fehlgeschlagen sind
|
||||
- **Ausführungsprotokolle**: Detaillierte Protokolle erscheinen in Echtzeit und zeigen Eingaben, Ausgaben und eventuelle Fehler
|
||||
- **Leistungskennzahlen**: Verfolgen Sie die Ausführungszeit und Kosten für jeden Block
|
||||
- **Pfadvisualisierung**: Verstehen Sie, welche Ausführungspfade durch Ihren Workflow genommen wurden
|
||||
|
||||
<Callout type="info">
|
||||
Alle Ausführungsdetails werden erfasst und sind auch nach Abschluss der Workflows zur Überprüfung verfügbar, was bei der Fehlerbehebung und Optimierung hilft.
|
||||
</Callout>
|
||||
|
||||
## Wichtige Ausführungsprinzipien
|
||||
|
||||
Das Verständnis dieser Grundprinzipien wird Ihnen helfen, bessere Workflows zu erstellen:
|
||||
|
||||
1. **Abhängigkeitsbasierte Ausführung**: Blöcke werden nur ausgeführt, wenn alle ihre Abhängigkeiten abgeschlossen sind
|
||||
2. **Automatische Parallelisierung**: Unabhängige Blöcke laufen gleichzeitig ohne Konfiguration
|
||||
3. **Intelligenter Datenfluss**: Ausgaben fließen automatisch zu verbundenen Blöcken
|
||||
4. **Fehlerbehandlung**: Fehlgeschlagene Blöcke stoppen ihren Ausführungspfad, beeinflussen aber keine unabhängigen Pfade
|
||||
5. **Zustandspersistenz**: Alle Blockausgaben und Ausführungsdetails werden für die Fehlerbehebung gespeichert
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
Nachdem Sie die Grundlagen der Ausführung verstanden haben, erkunden Sie:
|
||||
- **[Blocktypen](/blocks)** - Erfahren Sie mehr über spezifische Block-Funktionen
|
||||
- **[Protokollierung](/execution/logging)** - Überwachen Sie Workflow-Ausführungen und beheben Sie Probleme
|
||||
- **[Kostenberechnung](/execution/costs)** - Verstehen und optimieren Sie Workflow-Kosten
|
||||
- **[Auslöser](/triggers)** - Richten Sie verschiedene Möglichkeiten ein, Ihre Workflows auszuführen
|
||||
186
apps/docs/content/docs/de/execution/costs.mdx
Normal file
186
apps/docs/content/docs/de/execution/costs.mdx
Normal file
@@ -0,0 +1,186 @@
|
||||
---
|
||||
title: Kostenberechnung
|
||||
---
|
||||
|
||||
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Sim berechnet automatisch die Kosten für alle Workflow-Ausführungen und bietet transparente Preise basierend auf der Nutzung von KI-Modellen und Ausführungsgebühren. Das Verständnis dieser Kosten hilft Ihnen, Workflows zu optimieren und Ihr Budget effektiv zu verwalten.
|
||||
|
||||
## Wie Kosten berechnet werden
|
||||
|
||||
Jede Workflow-Ausführung umfasst zwei Kostenkomponenten:
|
||||
|
||||
**Basis-Ausführungsgebühr**: 0,001 $ pro Ausführung
|
||||
|
||||
**KI-Modellnutzung**: Variable Kosten basierend auf dem Token-Verbrauch
|
||||
|
||||
```javascript
|
||||
modelCost = (inputTokens × inputPrice + outputTokens × outputPrice) / 1,000,000
|
||||
totalCost = baseExecutionCharge + modelCost
|
||||
```
|
||||
|
||||
<Callout type="info">
|
||||
KI-Modellpreise werden pro Million Token berechnet. Die Berechnung teilt durch 1.000.000, um die tatsächlichen Kosten zu ermitteln. Workflows ohne KI-Blöcke verursachen nur die Basis-Ausführungsgebühr.
|
||||
</Callout>
|
||||
|
||||
## Modellaufschlüsselung in Logs
|
||||
|
||||
Für Workflows mit KI-Blöcken können Sie detaillierte Kosteninformationen in den Logs einsehen:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/logs/logs-cost.png"
|
||||
alt="Modellaufschlüsselung"
|
||||
width={600}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Die Modellaufschlüsselung zeigt:
|
||||
- **Token-Nutzung**: Eingabe- und Ausgabe-Token-Anzahl für jedes Modell
|
||||
- **Kostenaufschlüsselung**: Einzelkosten pro Modell und Operation
|
||||
- **Modellverteilung**: Welche Modelle verwendet wurden und wie oft
|
||||
- **Gesamtkosten**: Gesamtkosten für die gesamte Workflow-Ausführung
|
||||
|
||||
## Preisoptionen
|
||||
|
||||
<Tabs items={['Gehostete Modelle', 'Eigener API-Schlüssel']}>
|
||||
<Tab>
|
||||
**Gehostete Modelle** - Sim stellt API-Schlüssel mit einem 2,5-fachen Preismultiplikator bereit:
|
||||
|
||||
| Modell | Basispreis (Eingabe/Ausgabe) | Gehosteter Preis (Eingabe/Ausgabe) |
|
||||
|-------|---------------------------|----------------------------|
|
||||
| GPT-4o | 2,50 $ / 10,00 $ | 6,25 $ / 25,00 $ |
|
||||
| GPT-4.1 | 2,00 $ / 8,00 $ | 5,00 $ / 20,00 $ |
|
||||
| o1 | 15,00 $ / 60,00 $ | 37,50 $ / 150,00 $ |
|
||||
| o3 | 2,00 $ / 8,00 $ | 5,00 $ / 20,00 $ |
|
||||
| Claude 3.5 Sonnet | 3,00 $ / 15,00 $ | 7,50 $ / 37,50 $ |
|
||||
| Claude Opus 4.0 | 15,00 $ / 75,00 $ | 37,50 $ / 187,50 $ |
|
||||
|
||||
*Der 2,5-fache Multiplikator deckt Infrastruktur- und API-Verwaltungskosten ab.*
|
||||
</Tab>
|
||||
|
||||
<Tab>
|
||||
**Ihre eigenen API-Schlüssel** - Nutzen Sie jedes Modell zum Basispreis:
|
||||
|
||||
| Anbieter | Modelle | Eingabe / Ausgabe |
|
||||
|----------|---------|----------------|
|
||||
| Google | Gemini 2.5 | 0,15 $ / 0,60 $ |
|
||||
| Deepseek | V3, R1 | 0,75 $ / 1,00 $ |
|
||||
| xAI | Grok 4, Grok 3 | 5,00 $ / 25,00 $ |
|
||||
| Groq | Llama 4 Scout | 0,40 $ / 0,60 $ |
|
||||
| Cerebras | Llama 3.3 70B | 0,94 $ / 0,94 $ |
|
||||
| Ollama | Lokale Modelle | Kostenlos |
|
||||
|
||||
*Bezahlen Sie Anbieter direkt ohne Aufschlag*
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
<Callout type="warning">
|
||||
Die angezeigten Preise spiegeln die Tarife vom 10. September 2025 wider. Überprüfen Sie die Anbieterdokumentation für aktuelle Preise.
|
||||
</Callout>
|
||||
|
||||
## Kostenoptimierungsstrategien
|
||||
|
||||
<Accordions>
|
||||
<Accordion title="Modellauswahl">
|
||||
Wählen Sie Modelle basierend auf der Komplexität der Aufgabe. Einfache Aufgaben können GPT-4.1-nano ($0,10/$0,40) verwenden, während komplexes Denken möglicherweise o1 oder Claude Opus erfordert.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Prompt-Engineering">
|
||||
Gut strukturierte, präzise Prompts reduzieren den Token-Verbrauch ohne Qualitätseinbußen.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Lokale Modelle">
|
||||
Verwenden Sie Ollama für unkritische Aufgaben, um API-Kosten vollständig zu eliminieren.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Caching und Wiederverwendung">
|
||||
Speichern Sie häufig verwendete Ergebnisse in Variablen oder Dateien, um wiederholte KI-Modellaufrufe zu vermeiden.
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Batch-Verarbeitung">
|
||||
Verarbeiten Sie mehrere Elemente in einer einzigen KI-Anfrage anstatt einzelne Aufrufe zu tätigen.
|
||||
</Accordion>
|
||||
</Accordions>
|
||||
|
||||
## Nutzungsüberwachung
|
||||
|
||||
Überwachen Sie Ihre Nutzung und Abrechnung unter Einstellungen → Abonnement:
|
||||
|
||||
- **Aktuelle Nutzung**: Echtzeit-Nutzung und Kosten für den aktuellen Zeitraum
|
||||
- **Nutzungslimits**: Plangrenzen mit visuellen Fortschrittsanzeigen
|
||||
- **Abrechnungsdetails**: Prognostizierte Gebühren und Mindestverpflichtungen
|
||||
- **Planverwaltung**: Upgrade-Optionen und Abrechnungsverlauf
|
||||
|
||||
### Programmatische Nutzungsverfolgung
|
||||
|
||||
Sie können Ihre aktuelle Nutzung und Limits programmatisch über die API abfragen:
|
||||
|
||||
**Endpunkt:**
|
||||
|
||||
```text
|
||||
GET /api/users/me/usage-limits
|
||||
```
|
||||
|
||||
**Authentifizierung:**
|
||||
- Fügen Sie Ihren API-Schlüssel im `X-API-Key` Header hinzu
|
||||
|
||||
**Beispielanfrage:**
|
||||
|
||||
```bash
|
||||
curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" https://sim.ai/api/users/me/usage-limits
|
||||
```
|
||||
|
||||
**Beispielantwort:**
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"rateLimit": {
|
||||
"sync": { "isLimited": false, "limit": 10, "remaining": 10, "resetAt": "2025-09-08T22:51:55.999Z" },
|
||||
"async": { "isLimited": false, "limit": 50, "remaining": 50, "resetAt": "2025-09-08T22:51:56.155Z" },
|
||||
"authType": "api"
|
||||
},
|
||||
"usage": {
|
||||
"currentPeriodCost": 12.34,
|
||||
"limit": 100,
|
||||
"plan": "pro"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Antwortfelder:**
|
||||
- `currentPeriodCost` spiegelt die Nutzung im aktuellen Abrechnungszeitraum wider
|
||||
- `limit` wird aus individuellen Limits (Free/Pro) oder gepoolten Organisationslimits (Team/Enterprise) abgeleitet
|
||||
- `plan` ist der aktive Plan mit der höchsten Priorität, der mit Ihrem Benutzer verknüpft ist
|
||||
|
||||
## Planlimits
|
||||
|
||||
Verschiedene Abonnementpläne haben unterschiedliche Nutzungslimits:
|
||||
|
||||
| Plan | Monatliches Nutzungslimit | Ratengrenze (pro Minute) |
|
||||
|------|-------------------|-------------------------|
|
||||
| **Free** | $10 | 5 sync, 10 async |
|
||||
| **Pro** | $100 | 10 sync, 50 async |
|
||||
| **Team** | $500 (gepoolt) | 50 sync, 100 async |
|
||||
| **Enterprise** | Individuell | Individuell |
|
||||
|
||||
## Best Practices für Kostenmanagement
|
||||
|
||||
1. **Regelmäßig überwachen**: Prüfen Sie Ihr Nutzungs-Dashboard häufig, um Überraschungen zu vermeiden
|
||||
2. **Budgets festlegen**: Nutzen Sie Planlimits als Leitplanken für Ihre Ausgaben
|
||||
3. **Workflows optimieren**: Überprüfen Sie kostenintensive Ausführungen und optimieren Sie Prompts oder Modellauswahl
|
||||
4. **Passende Modelle verwenden**: Stimmen Sie die Modellkomplexität auf die Aufgabenanforderungen ab
|
||||
5. **Ähnliche Aufgaben bündeln**: Kombinieren Sie wenn möglich mehrere Anfragen, um den Overhead zu reduzieren
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
- Überprüfen Sie Ihre aktuelle Nutzung unter [Einstellungen → Abonnement](https://sim.ai/settings/subscription)
|
||||
- Erfahren Sie mehr über [Logging](/execution/logging), um Ausführungsdetails zu verfolgen
|
||||
- Erkunden Sie die [Externe API](/execution/api) für programmatische Kostenüberwachung
|
||||
- Sehen Sie sich [Workflow-Optimierungstechniken](/blocks) an, um Kosten zu reduzieren
|
||||
153
apps/docs/content/docs/de/execution/index.mdx
Normal file
153
apps/docs/content/docs/de/execution/index.mdx
Normal file
@@ -0,0 +1,153 @@
|
||||
---
|
||||
title: Ausführung
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Die Ausführungs-Engine von Sim bringt Ihre Workflows zum Leben, indem sie Blöcke in der richtigen Reihenfolge verarbeitet, den Datenfluss verwaltet und Fehler elegant behandelt, sodass Sie genau verstehen können, wie Workflows in Sim ausgeführt werden.
|
||||
|
||||
<Callout type="info">
|
||||
Jede Workflow-Ausführung folgt einem deterministischen Pfad, der auf Ihren Blockverbindungen und Ihrer Logik basiert, um vorhersehbare und zuverlässige Ergebnisse zu gewährleisten.
|
||||
</Callout>
|
||||
|
||||
## Dokumentationsübersicht
|
||||
|
||||
<Cards>
|
||||
<Card title="Grundlagen der Ausführung" href="/execution/basics">
|
||||
Erfahren Sie mehr über den grundlegenden Ausführungsablauf, Blocktypen und wie Daten durch Ihren
|
||||
Workflow fließen
|
||||
</Card>
|
||||
|
||||
<Card title="Protokollierung" href="/execution/logging">
|
||||
Überwachen Sie Workflow-Ausführungen mit umfassender Protokollierung und Echtzeit-Sichtbarkeit
|
||||
</Card>
|
||||
|
||||
<Card title="Kostenberechnung" href="/execution/costs">
|
||||
Verstehen Sie, wie die Kosten für Workflow-Ausführungen berechnet und optimiert werden
|
||||
</Card>
|
||||
|
||||
<Card title="Externe API" href="/execution/api">
|
||||
Greifen Sie programmgesteuert über REST-API auf Ausführungsprotokolle zu und richten Sie Webhooks ein
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
## Schlüsselkonzepte
|
||||
|
||||
### Topologische Ausführung
|
||||
Blöcke werden in Abhängigkeitsreihenfolge ausgeführt, ähnlich wie eine Tabellenkalkulation Zellen neu berechnet. Die Ausführungs-Engine bestimmt automatisch, welche Blöcke basierend auf abgeschlossenen Abhängigkeiten ausgeführt werden können.
|
||||
|
||||
### Pfadverfolgung
|
||||
Die Engine verfolgt aktiv Ausführungspfade durch Ihren Workflow. Router- und Bedingungsblöcke aktualisieren diese Pfade dynamisch und stellen sicher, dass nur relevante Blöcke ausgeführt werden.
|
||||
|
||||
### Schichtbasierte Verarbeitung
|
||||
Anstatt Blöcke einzeln auszuführen, identifiziert die Engine Schichten von Blöcken, die parallel ausgeführt werden können, und optimiert so die Leistung für komplexe Workflows.
|
||||
|
||||
### Ausführungskontext
|
||||
Jeder Workflow behält während der Ausführung einen umfangreichen Kontext bei, der Folgendes enthält:
|
||||
- Block-Ausgaben und -Zustände
|
||||
- Aktive Ausführungspfade
|
||||
- Verfolgung von Schleifen- und Paralleliterationen
|
||||
- Umgebungsvariablen
|
||||
- Routing-Entscheidungen
|
||||
|
||||
## Ausführungsauslöser
|
||||
|
||||
Workflows können über mehrere Kanäle ausgeführt werden:
|
||||
|
||||
- **Manuell**: Testen und debuggen direkt im Editor
|
||||
- **Als API bereitstellen**: Einen HTTP-Endpunkt erstellen, der mit API-Schlüsseln gesichert ist
|
||||
- **Als Chat bereitstellen**: Eine Konversationsschnittstelle auf einer benutzerdefinierten Subdomain erstellen
|
||||
- **Webhooks**: Auf externe Ereignisse von Drittanbieterdiensten reagieren
|
||||
- **Geplant**: Nach einem wiederkehrenden Zeitplan mit Cron-Ausdrücken ausführen
|
||||
|
||||
### Als API bereitstellen
|
||||
|
||||
Wenn Sie einen Workflow als API bereitstellen, macht Sim Folgendes:
|
||||
- Erstellt einen eindeutigen HTTP-Endpunkt: `https://sim.ai/api/workflows/{workflowId}/execute`
|
||||
- Generiert einen API-Schlüssel zur Authentifizierung
|
||||
- Akzeptiert POST-Anfragen mit JSON-Payloads
|
||||
- Gibt Workflow-Ausführungsergebnisse als JSON zurück
|
||||
|
||||
Beispiel für einen API-Aufruf:
|
||||
|
||||
```bash
|
||||
curl -X POST https://sim.ai/api/workflows/your-workflow-id/execute \
|
||||
-H "X-API-Key: your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"input": "your data here"}'
|
||||
```
|
||||
|
||||
### Als Chat bereitstellen
|
||||
|
||||
Die Chat-Bereitstellung erstellt eine Konversationsschnittstelle für Ihren Workflow:
|
||||
- Gehostet auf einer benutzerdefinierten Subdomain: `https://your-name.sim.ai`
|
||||
- Optionale Authentifizierung (öffentlich, passwortgeschützt oder E-Mail-basiert)
|
||||
- Anpassbare Benutzeroberfläche mit Ihrem Branding
|
||||
- Streaming-Antworten für Echtzeit-Interaktion
|
||||
- Perfekt für KI-Assistenten, Support-Bots oder interaktive Tools
|
||||
|
||||
Jede Bereitstellungsmethode übergibt Daten an den Starter-Block Ihres Workflows und beginnt so den Ausführungsfluss.
|
||||
|
||||
## Deployment-Snapshots
|
||||
|
||||
Alle öffentlichen Einstiegspunkte—API, Chat, Zeitplan, Webhook und manuelle Ausführungen—führen den aktiven Deployment-Snapshot des Workflows aus. Veröffentliche ein neues Deployment, wann immer du die Arbeitsfläche änderst, damit jeder Trigger die aktualisierte Version verwendet.
|
||||
|
||||
<div className='flex justify-center my-6'>
|
||||
<Image
|
||||
src='/static/execution/deployment-versions-light.png'
|
||||
alt='Tabelle mit Deployment-Versionen'
|
||||
width={500}
|
||||
height={280}
|
||||
className='rounded-xl border border-border shadow-sm'
|
||||
/>
|
||||
</div>
|
||||
|
||||
Das Deploy-Modal behält eine vollständige Versionshistorie bei—inspiziere jeden Snapshot, vergleiche ihn mit deinem Entwurf und führe Upgrades oder Rollbacks mit einem Klick durch, wenn du eine frühere Version wiederherstellen musst.
|
||||
|
||||
## Programmatische Ausführung
|
||||
|
||||
Führe Workflows aus deinen Anwendungen mit unseren offiziellen SDKs aus:
|
||||
|
||||
```bash
|
||||
# TypeScript/JavaScript
|
||||
npm install simstudio-ts-sdk
|
||||
|
||||
# Python
|
||||
pip install simstudio-sdk
|
||||
```
|
||||
|
||||
```typescript
|
||||
// TypeScript Example
|
||||
import { SimStudioClient } from 'simstudio-ts-sdk';
|
||||
|
||||
const client = new SimStudioClient({
|
||||
apiKey: 'your-api-key'
|
||||
});
|
||||
|
||||
const result = await client.executeWorkflow('workflow-id', {
|
||||
input: { message: 'Hello' }
|
||||
});
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Design für Zuverlässigkeit
|
||||
- Behandle Fehler elegant mit geeigneten Fallback-Pfaden
|
||||
- Verwende Umgebungsvariablen für sensible Daten
|
||||
- Füge Logging zu Funktionsblöcken für Debugging hinzu
|
||||
|
||||
### Leistung optimieren
|
||||
- Minimiere externe API-Aufrufe wo möglich
|
||||
- Nutze parallele Ausführung für unabhängige Operationen
|
||||
- Cache Ergebnisse mit Memory-Blöcken, wenn angemessen
|
||||
|
||||
### Ausführungen überwachen
|
||||
- Überprüfe Logs regelmäßig, um Leistungsmuster zu verstehen
|
||||
- Verfolge Kosten für KI-Modellnutzung
|
||||
- Verwende Workflow-Snapshots zur Fehlerbehebung
|
||||
|
||||
## Was kommt als nächstes?
|
||||
|
||||
Beginne mit [Ausführungsgrundlagen](/execution/basics), um zu verstehen, wie Workflows laufen, und erkunde dann [Logging](/execution/logging), um deine Ausführungen zu überwachen, sowie [Kostenberechnung](/execution/costs), um deine Ausgaben zu optimieren.
|
||||
150
apps/docs/content/docs/de/execution/logging.mdx
Normal file
150
apps/docs/content/docs/de/execution/logging.mdx
Normal file
@@ -0,0 +1,150 @@
|
||||
---
|
||||
title: Protokollierung
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Sim bietet umfassende Protokollierung für alle Workflow-Ausführungen und gibt Ihnen vollständige Transparenz darüber, wie Ihre Workflows laufen, welche Daten durch sie fließen und wo möglicherweise Probleme auftreten.
|
||||
|
||||
## Protokollierungssystem
|
||||
|
||||
Sim bietet zwei komplementäre Protokollierungsschnittstellen, die verschiedenen Workflows und Anwendungsfällen entsprechen:
|
||||
|
||||
### Echtzeit-Konsole
|
||||
|
||||
Während der manuellen oder Chat-Workflow-Ausführung erscheinen Protokolle in Echtzeit im Konsolen-Panel auf der rechten Seite des Workflow-Editors:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/logs/console.png"
|
||||
alt="Echtzeit-Konsolen-Panel"
|
||||
width={400}
|
||||
height={300}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Die Konsole zeigt:
|
||||
- Fortschritt der Blockausführung mit Hervorhebung des aktiven Blocks
|
||||
- Echtzeit-Ausgaben nach Abschluss der Blöcke
|
||||
- Ausführungszeit für jeden Block
|
||||
- Erfolgs-/Fehlerstatusanzeigen
|
||||
|
||||
### Protokollseite
|
||||
|
||||
Alle Workflow-Ausführungen – ob manuell ausgelöst, über API, Chat, Zeitplan oder Webhook – werden auf der dedizierten Protokollseite protokolliert:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/logs/logs.png"
|
||||
alt="Protokollseite"
|
||||
width={600}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Die Protokollseite bietet:
|
||||
- Umfassende Filterung nach Zeitraum, Status, Auslösertyp, Ordner und Workflow
|
||||
- Suchfunktion über alle Protokolle
|
||||
- Live-Modus für Echtzeit-Updates
|
||||
- 7-tägige Protokollaufbewahrung (erweiterbar für längere Aufbewahrung)
|
||||
|
||||
## Protokolldetails-Seitenleiste
|
||||
|
||||
Durch Klicken auf einen Protokolleintrag öffnet sich eine detaillierte Seitenleistenansicht:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/logs/logs-sidebar.png"
|
||||
alt="Protokoll-Seitenleiste mit Details"
|
||||
width={600}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
### Block-Eingabe/Ausgabe
|
||||
|
||||
Sehen Sie den vollständigen Datenfluss für jeden Block mit Tabs zum Umschalten zwischen:
|
||||
|
||||
<Tabs items={['Output', 'Input']}>
|
||||
<Tab>
|
||||
**Output-Tab** zeigt das Ausführungsergebnis des Blocks:
|
||||
- Strukturierte Daten mit JSON-Formatierung
|
||||
- Markdown-Rendering für KI-generierte Inhalte
|
||||
- Kopierschaltfläche für einfache Datenextraktion
|
||||
</Tab>
|
||||
|
||||
<Tab>
|
||||
**Input-Tab** zeigt, was an den Block übergeben wurde:
|
||||
- Aufgelöste Variablenwerte
|
||||
- Referenzierte Ausgaben anderer Blöcke
|
||||
- Verwendete Umgebungsvariablen
|
||||
- API-Schlüssel werden aus Sicherheitsgründen automatisch unkenntlich gemacht
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Ausführungszeitlinie
|
||||
|
||||
Für Workflow-übergreifende Protokolle, sehen Sie detaillierte Ausführungsmetriken:
|
||||
- Start- und Endzeitstempel
|
||||
- Gesamtdauer des Workflows
|
||||
- Ausführungszeiten einzelner Blöcke
|
||||
- Identifikation von Leistungsengpässen
|
||||
|
||||
## Workflow-Snapshots
|
||||
|
||||
Für jede protokollierte Ausführung klicken Sie auf "Snapshot anzeigen", um den exakten Workflow-Zustand zum Ausführungszeitpunkt zu sehen:
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/logs/logs-frozen-canvas.png"
|
||||
alt="Workflow-Snapshot"
|
||||
width={600}
|
||||
height={400}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Der Snapshot bietet:
|
||||
- Eingefrorene Arbeitsfläche, die die Workflow-Struktur zeigt
|
||||
- Block-Zustände und Verbindungen, wie sie während der Ausführung waren
|
||||
- Klicken Sie auf einen beliebigen Block, um dessen Ein- und Ausgaben zu sehen
|
||||
- Nützlich zum Debuggen von Workflows, die seitdem geändert wurden
|
||||
|
||||
<Callout type="info">
|
||||
Workflow-Snapshots sind nur für Ausführungen verfügbar, die nach der Einführung des erweiterten Protokollierungssystems durchgeführt wurden. Ältere migrierte Protokolle zeigen die Meldung "Protokollierter Zustand nicht gefunden".
|
||||
</Callout>
|
||||
|
||||
## Protokollaufbewahrung
|
||||
|
||||
- **Kostenloser Plan**: 7 Tage Protokollaufbewahrung
|
||||
- **Pro-Plan**: 30 Tage Protokollaufbewahrung
|
||||
- **Team-Plan**: 90 Tage Protokollaufbewahrung
|
||||
- **Enterprise-Plan**: Individuelle Aufbewahrungszeiträume verfügbar
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Für die Entwicklung
|
||||
- Verwenden Sie die Echtzeit-Konsole für sofortiges Feedback während des Testens
|
||||
- Überprüfen Sie Block-Ein- und Ausgaben, um den Datenfluss zu verifizieren
|
||||
- Nutzen Sie Workflow-Snapshots, um funktionierende mit fehlerhaften Versionen zu vergleichen
|
||||
|
||||
### Für die Produktion
|
||||
- Überwachen Sie die Protokollseite regelmäßig auf Fehler oder Leistungsprobleme
|
||||
- Richten Sie Filter ein, um sich auf bestimmte Workflows oder Zeiträume zu konzentrieren
|
||||
- Verwenden Sie den Live-Modus während kritischer Bereitstellungen, um Ausführungen in Echtzeit zu beobachten
|
||||
|
||||
### Für das Debugging
|
||||
- Überprüfen Sie immer die Ausführungszeitlinie, um langsame Blöcke zu identifizieren
|
||||
- Vergleichen Sie Eingaben zwischen funktionierenden und fehlerhaften Ausführungen
|
||||
- Verwenden Sie Workflow-Snapshots, um den genauen Zustand zu sehen, wenn Probleme aufgetreten sind
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
- Erfahren Sie mehr über die [Kostenberechnung](/execution/costs), um die Preisgestaltung von Workflows zu verstehen
|
||||
- Erkunden Sie die [externe API](/execution/api) für programmatischen Zugriff auf Protokolle
|
||||
- Richten Sie [Webhook-Benachrichtigungen](/execution/api#webhook-subscriptions) für Echtzeit-Warnungen ein
|
||||
193
apps/docs/content/docs/de/getting-started/index.mdx
Normal file
193
apps/docs/content/docs/de/getting-started/index.mdx
Normal file
@@ -0,0 +1,193 @@
|
||||
---
|
||||
title: Erste Schritte
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { File, Files, Folder } from 'fumadocs-ui/components/files'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
import {
|
||||
AgentIcon,
|
||||
ApiIcon,
|
||||
ChartBarIcon,
|
||||
CodeIcon,
|
||||
ConditionalIcon,
|
||||
ConnectIcon,
|
||||
ExaAIIcon,
|
||||
FirecrawlIcon,
|
||||
GmailIcon,
|
||||
NotionIcon,
|
||||
PerplexityIcon,
|
||||
SlackIcon,
|
||||
} from '@/components/icons'
|
||||
import { Video } from '@/components/ui/video'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Dieses Tutorial führt dich durch den Aufbau deines ersten KI-Workflows in Sim. Wir erstellen einen Personen-Recherche-Agenten, der Informationen über Personen mithilfe modernster LLM-Suchwerkzeuge finden kann.
|
||||
|
||||
<Callout type="info">
|
||||
Dieses Tutorial dauert etwa 10 Minuten und behandelt die wesentlichen Konzepte zum Erstellen von Workflows in Sim.
|
||||
</Callout>
|
||||
|
||||
## Was wir erstellen
|
||||
|
||||
Einen Personen-Recherche-Agenten, der:
|
||||
1. Den Namen einer Person über eine Chat-Schnittstelle empfängt
|
||||
2. Einen KI-Agenten mit erweiterten Suchfähigkeiten nutzt
|
||||
3. Das Web mithilfe modernster LLM-Suchwerkzeuge (Exa und Linkup) durchsucht
|
||||
4. Strukturierte Informationen mithilfe eines Antwortformats extrahiert
|
||||
5. Umfassende Daten über die Person zurückgibt
|
||||
|
||||
<Image
|
||||
src="/static/getting-started/started-1.png"
|
||||
alt="Beispiel für erste Schritte"
|
||||
width={800}
|
||||
height={500}
|
||||
/>
|
||||
|
||||
## Schritt-für-Schritt-Anleitung
|
||||
|
||||
<Steps>
|
||||
<Step title="Workflow erstellen und KI-Agenten hinzufügen">
|
||||
Öffne Sim und klicke im Dashboard auf "Neuer Workflow". Benenne ihn "Erste Schritte".
|
||||
|
||||
Wenn du einen neuen Workflow erstellst, enthält er automatisch einen **Start-Block** - dies ist der Einstiegspunkt, der Eingaben von Benutzern empfängt. Für dieses Beispiel werden wir den Workflow über den Chat auslösen, daher müssen wir am Start-Block nichts konfigurieren.
|
||||
|
||||
Ziehe nun einen **Agenten-Block** aus dem Blockbereich auf der linken Seite auf die Arbeitsfläche.
|
||||
|
||||
Konfiguriere den Agenten-Block:
|
||||
- **Modell**: Wähle "OpenAI GPT-4o"
|
||||
- **System-Prompt**: "Du bist ein Personen-Recherche-Agent. Wenn dir ein Personenname gegeben wird, nutze deine verfügbaren Suchwerkzeuge, um umfassende Informationen über diese Person zu finden, einschließlich ihres Standorts, Berufs, Bildungshintergrunds und anderer relevanter Details."
|
||||
- **Benutzer-Prompt**: Ziehe die Verbindung vom Ausgabefeld des Start-Blocks in dieses Feld (dies verbindet `<start.input>` mit dem Benutzer-Prompt)
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="getting-started/started-2.mp4" width={700} height={450} />
|
||||
</div>
|
||||
</Step>
|
||||
|
||||
<Step title="Werkzeuge zum Agenten hinzufügen">
|
||||
Verbessern wir unseren Agenten mit Werkzeugen für bessere Fähigkeiten. Klicke auf den Agenten-Block, um ihn auszuwählen.
|
||||
|
||||
Im Bereich **Werkzeuge**:
|
||||
- Klicke auf **Werkzeug hinzufügen**
|
||||
- Wähle **Exa** aus den verfügbaren Werkzeugen
|
||||
- Wähle **Linkup** aus den verfügbaren Werkzeugen
|
||||
- Füge deine API-Schlüssel für beide Werkzeuge hinzu (dies ermöglicht dem Agenten, das Web zu durchsuchen und auf zusätzliche Informationen zuzugreifen)
|
||||
|
||||
<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
|
||||
<Video src="getting-started/started-3.mp4" width={700} height={450} />
|
||||
</div>
|
||||
</Step>
|
||||
|
||||
<Step title="Den grundlegenden Workflow testen">
|
||||
Jetzt testen wir unseren Workflow. Gehe zum **Chat-Panel** auf der rechten Seite des Bildschirms.
|
||||
|
||||
Im Chat-Panel:
|
||||
- Klicke auf das Dropdown-Menü und wähle `agent1.content` (dies zeigt uns die Ausgabe unseres Agenten)
|
||||
- Gib eine Testnachricht ein, wie: "John ist ein Softwareentwickler aus San Francisco, der Informatik an der Stanford University studiert hat."
|
||||
- Klicke auf "Senden", um den Workflow auszuführen
|
||||
|
||||
Du solltest die Antwort des Agenten sehen, der die in deinem Text beschriebene Person analysiert.
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="getting-started/started-4.mp4" width={700} height={450} />
|
||||
</div>
|
||||
</Step>
|
||||
|
||||
<Step title="Strukturierte Ausgabe hinzufügen">
|
||||
Jetzt lassen wir unseren Agenten strukturierte Daten zurückgeben. Klicke auf den Agenten-Block, um ihn auszuwählen.
|
||||
|
||||
Im Bereich **Antwortformat**:
|
||||
- Klicke auf das **Zauberstab-Symbol** (✨) neben dem Schema-Feld
|
||||
- Gib in der erscheinenden Aufforderung ein: "Erstelle ein Schema namens Person, das Standort, Beruf und Bildung enthält"
|
||||
- Die KI generiert automatisch ein JSON-Schema für dich
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="getting-started/started-5.mp4" width={700} height={450} />
|
||||
</div>
|
||||
</Step>
|
||||
|
||||
<Step title="Die strukturierte Ausgabe testen">
|
||||
Gehe zurück zum **Chat-Panel**.
|
||||
|
||||
Da wir ein Antwortformat hinzugefügt haben, sind jetzt neue Ausgabeoptionen verfügbar:
|
||||
- Klicke auf das Dropdown-Menü und wähle die neue Option für strukturierte Ausgabe (das Schema, das wir gerade erstellt haben)
|
||||
- Gib eine neue Testnachricht ein, wie: "Sarah ist eine Marketing-Managerin aus New York, die einen MBA von der Harvard Business School hat."
|
||||
- Klicke auf "Senden", um den Workflow erneut auszuführen
|
||||
|
||||
Du solltest jetzt eine strukturierte JSON-Ausgabe sehen, bei der die Informationen der Person in die Felder Standort, Beruf und Bildung gegliedert sind.
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="getting-started/started-6.mp4" width={700} height={450} />
|
||||
</div>
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Was du gerade erstellt hast
|
||||
|
||||
Herzlichen Glückwunsch! Du hast deinen ersten KI-Workflow erstellt, der:
|
||||
- ✅ Texteingaben über eine Chat-Schnittstelle empfängt
|
||||
- ✅ KI nutzt, um Informationen aus unstrukturiertem Text zu extrahieren
|
||||
- ✅ Externe Tools (Exa und Linkup) für erweiterte Funktionen integriert
|
||||
- ✅ Strukturierte JSON-Daten mit KI-generierten Schemas zurückgibt
|
||||
- ✅ Workflow-Tests und Iterationen demonstriert
|
||||
- ✅ Die Leistungsfähigkeit des visuellen Workflow-Aufbaus zeigt
|
||||
|
||||
## Wichtige Konzepte, die du gelernt hast
|
||||
|
||||
### Verwendete Block-Typen
|
||||
|
||||
<Files>
|
||||
<File
|
||||
name="Start Block"
|
||||
icon={<ConnectIcon className="h-4 w-4" />}
|
||||
annotation="Einstiegspunkt für Benutzereingaben (automatisch enthalten)"
|
||||
/>
|
||||
<File
|
||||
name="Agent Block"
|
||||
icon={<AgentIcon className="h-4 w-4" />}
|
||||
annotation="KI-Modell für Textverarbeitung und -analyse"
|
||||
/>
|
||||
</Files>
|
||||
|
||||
### Grundlegende Workflow-Konzepte
|
||||
|
||||
**Datenfluss**: Variablen fließen zwischen Blöcken durch das Ziehen von Verbindungen
|
||||
|
||||
**Chat-Schnittstelle**: Teste Workflows in Echtzeit mit dem Chat-Panel mit verschiedenen Ausgabeoptionen
|
||||
|
||||
**Tool-Integration**: Erweitere die Fähigkeiten des Agenten durch Hinzufügen externer Tools wie Exa und Linkup
|
||||
|
||||
**Variablenreferenzen**: Greife auf Block-Ausgaben mit der `<blockName.output>` Syntax zu
|
||||
|
||||
**Strukturierte Ausgabe**: Verwende JSON-Schemas, um konsistente, strukturierte Daten von der KI zu erhalten
|
||||
|
||||
**KI-generierte Schemas**: Nutze den Zauberstab (✨), um Schemas mit natürlicher Sprache zu generieren
|
||||
|
||||
**Iterative Entwicklung**: Teste, modifiziere und teste Workflows einfach erneut
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
<Cards>
|
||||
<Card title="Weitere Blöcke hinzufügen" href="/blocks">
|
||||
Erfahre mehr über API-, Funktions- und Bedingungsblöcke
|
||||
</Card>
|
||||
<Card title="Tools verwenden" href="/tools">
|
||||
Integration mit externen Diensten wie Gmail, Slack und Notion
|
||||
</Card>
|
||||
<Card title="Benutzerdefinierte Logik hinzufügen" href="/blocks/function">
|
||||
Verwende Funktionsblöcke für benutzerdefinierte Datenverarbeitung
|
||||
</Card>
|
||||
<Card title="Deinen Workflow bereitstellen" href="/execution">
|
||||
Mache deinen Workflow über REST API zugänglich
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
## Brauchst du Hilfe?
|
||||
|
||||
**Bei einem Schritt hängengeblieben?** Schau in unserer [Blocks-Dokumentation](/blocks) nach detaillierten Erklärungen zu jeder Komponente.
|
||||
|
||||
**Möchten Sie mehr Beispiele sehen?** Durchsuchen Sie unsere [Tools-Dokumentation](/tools), um zu sehen, welche Integrationen verfügbar sind.
|
||||
|
||||
**Bereit für die Bereitstellung?** Erfahren Sie mehr über [Ausführung und Bereitstellung](/execution), um Ihre Workflows zu aktivieren.
|
||||
60
apps/docs/content/docs/de/index.mdx
Normal file
60
apps/docs/content/docs/de/index.mdx
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
title: Dokumentation
|
||||
---
|
||||
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
|
||||
# Sim Dokumentation
|
||||
|
||||
Willkommen bei Sim, einem visuellen Workflow-Builder für KI-Anwendungen. Erstellen Sie leistungsstarke KI-Agenten, Automatisierungs-Workflows und Datenverarbeitungs-Pipelines, indem Sie Blöcke auf einer Leinwand verbinden.
|
||||
|
||||
## Schnellstart
|
||||
|
||||
<Cards>
|
||||
<Card title="Einführung" href="/introduction">
|
||||
Erfahren Sie, was Sie mit Sim erstellen können
|
||||
</Card>
|
||||
<Card title="Erste Schritte" href="/getting-started">
|
||||
Erstellen Sie Ihren ersten Workflow in 10 Minuten
|
||||
</Card>
|
||||
<Card title="Workflow-Blöcke" href="/blocks">
|
||||
Lernen Sie die Bausteine kennen
|
||||
</Card>
|
||||
<Card title="Tools & Integrationen" href="/tools">
|
||||
Entdecken Sie über 80 integrierte Schnittstellen
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
## Kernkonzepte
|
||||
|
||||
<Cards>
|
||||
<Card title="Verbindungen" href="/connections">
|
||||
Verstehen Sie, wie Daten zwischen Blöcken fließen
|
||||
</Card>
|
||||
<Card title="Variablen" href="/variables">
|
||||
Arbeiten Sie mit Workflow- und Umgebungsvariablen
|
||||
</Card>
|
||||
<Card title="Ausführung" href="/execution">
|
||||
Überwachen Sie Workflow-Ausführungen und verwalten Sie Kosten
|
||||
</Card>
|
||||
<Card title="Trigger" href="/triggers">
|
||||
Starten Sie Workflows über API, Webhooks oder Zeitpläne
|
||||
</Card>
|
||||
</Cards>
|
||||
|
||||
## Erweiterte Funktionen
|
||||
|
||||
<Cards>
|
||||
<Card title="Team-Management" href="/permissions/roles-and-permissions">
|
||||
Richten Sie Workspace-Rollen und Berechtigungen ein
|
||||
</Card>
|
||||
<Card title="YAML-Konfiguration" href="/yaml">
|
||||
Definieren Sie Workflows als Code
|
||||
</Card>
|
||||
<Card title="MCP-Integration" href="/mcp">
|
||||
Verbinden Sie externe Dienste mit dem Model Context Protocol
|
||||
</Card>
|
||||
<Card title="SDKs" href="/sdks">
|
||||
Integrieren Sie Sim in Ihre Anwendungen
|
||||
</Card>
|
||||
</Cards>
|
||||
85
apps/docs/content/docs/de/introduction/index.mdx
Normal file
85
apps/docs/content/docs/de/introduction/index.mdx
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
title: Einführung
|
||||
---
|
||||
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Sim ist ein visueller Workflow-Builder für KI-Anwendungen, mit dem Sie KI-Agenten-Workflows visuell erstellen können. Erstellen Sie leistungsstarke KI-Agenten, Automatisierungs-Workflows und Datenverarbeitungs-Pipelines, indem Sie Blöcke auf einer Leinwand verbinden – ganz ohne Programmierung.
|
||||
|
||||
<div className="flex justify-center">
|
||||
<Image
|
||||
src="/static/introduction.png"
|
||||
alt="Sim visuelle Workflow-Leinwand"
|
||||
width={700}
|
||||
height={450}
|
||||
className="my-6"
|
||||
/>
|
||||
</div>
|
||||
|
||||
## Was Sie erstellen können
|
||||
|
||||
**KI-Assistenten & Chatbots**
|
||||
Erstellen Sie intelligente Agenten, die im Web suchen, auf Ihren Kalender zugreifen, E-Mails senden und mit Ihren Geschäftstools interagieren können.
|
||||
|
||||
**Geschäftsprozessautomatisierung**
|
||||
Automatisieren Sie wiederkehrende Aufgaben wie Dateneingabe, Berichtserstellung, Kundenservice-Antworten und Content-Erstellung.
|
||||
|
||||
**Datenverarbeitung & -analyse**
|
||||
Gewinnen Sie Erkenntnisse aus Dokumenten, analysieren Sie Datensätze, erstellen Sie Berichte und synchronisieren Sie Daten zwischen Systemen.
|
||||
|
||||
**API-Integrations-Workflows**
|
||||
Verbinden Sie mehrere Dienste zu einheitlichen Endpunkten, orchestrieren Sie komplexe Geschäftslogik und verwalten Sie ereignisgesteuerte Automatisierung.
|
||||
|
||||
## Wie es funktioniert
|
||||
|
||||
**Visuelle Leinwand**
|
||||
Ziehen Sie Blöcke per Drag-and-drop, um Workflows zu erstellen. Verbinden Sie KI-Modelle, Datenbanken, APIs und Geschäftstools mit einfachen Point-and-Click-Verbindungen.
|
||||
|
||||
**Intelligente Blöcke**
|
||||
Wählen Sie aus Verarbeitungsblöcken (KI-Agenten, APIs, Funktionen), Logikblöcken (Bedingungen, Schleifen, Router) und Ausgabeblöcken (Antworten, Evaluatoren).
|
||||
|
||||
**Mehrere Auslöser**
|
||||
Starten Sie Workflows über Chat-Schnittstelle, REST API, Webhooks, geplante Jobs oder externe Ereignisse von Diensten wie Slack und GitHub.
|
||||
|
||||
**Team-Zusammenarbeit**
|
||||
Arbeiten Sie gleichzeitig mit Teammitgliedern am selben Workflow mit Echtzeit-Bearbeitung und Berechtigungsverwaltung.
|
||||
|
||||
## Integrierte Anbindungen
|
||||
|
||||
Sim verbindet sich von Haus aus mit über 80 Diensten:
|
||||
|
||||
- **KI-Modelle**: OpenAI, Anthropic, Google, Groq, Cerebras, lokale Ollama-Modelle
|
||||
- **Kommunikation**: Gmail, Slack, Teams, Telegram, WhatsApp
|
||||
- **Produktivität**: Notion, Google Sheets, Airtable, Monday.com
|
||||
- **Entwicklung**: GitHub, Jira, Linear, Browser-Automatisierung
|
||||
- **Suche & Web**: Google Search, Perplexity, Firecrawl, Exa AI
|
||||
- **Datenbanken**: PostgreSQL, MySQL, Supabase, Pinecone, Qdrant
|
||||
|
||||
Benötigen Sie etwas Maßgeschneidertes? Nutzen Sie unsere [MCP-Integration](/mcp), um jeden externen Dienst anzubinden.
|
||||
|
||||
## Bereitstellungsoptionen
|
||||
|
||||
**Cloud-gehostet**: Starten Sie sofort bei [sim.ai](https://sim.ai) mit verwalteter Infrastruktur, automatischer Skalierung und integriertem Monitoring.
|
||||
|
||||
**Selbst-gehostet**: Stellen Sie die Anwendung auf Ihrer eigenen Infrastruktur mit Docker bereit, mit Unterstützung für lokale KI-Modelle über Ollama für vollständige Datenprivatsphäre.
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
Bereit, Ihren ersten KI-Workflow zu erstellen?
|
||||
|
||||
<Cards>
|
||||
<Card title="Erste Schritte" href="/getting-started">
|
||||
Erstellen Sie Ihren ersten Workflow in 10 Minuten
|
||||
</Card>
|
||||
<Card title="Workflow-Bausteine" href="/blocks">
|
||||
Erfahren Sie mehr über die Bausteine
|
||||
</Card>
|
||||
<Card title="Tools & Integrationen" href="/tools">
|
||||
Entdecken Sie über 60 integrierte Schnittstellen
|
||||
</Card>
|
||||
<Card title="Team-Berechtigungen" href="/permissions/roles-and-permissions">
|
||||
Richten Sie Workspace-Rollen und Berechtigungen ein
|
||||
</Card>
|
||||
</Cards>
|
||||
113
apps/docs/content/docs/de/knowledgebase/index.mdx
Normal file
113
apps/docs/content/docs/de/knowledgebase/index.mdx
Normal file
@@ -0,0 +1,113 @@
|
||||
---
|
||||
title: Wissensdatenbank
|
||||
---
|
||||
|
||||
import { Video } from '@/components/ui/video'
|
||||
import { Image } from '@/components/ui/image'
|
||||
|
||||
Die Wissensdatenbank ermöglicht es Ihnen, Ihre Dokumente hochzuladen, zu verarbeiten und mit intelligenter Vektorsuche und Chunking zu durchsuchen. Dokumente verschiedener Typen werden automatisch verarbeitet, eingebettet und durchsuchbar gemacht. Ihre Dokumente werden intelligent in Chunks aufgeteilt, und Sie können sie mit natürlichsprachlichen Abfragen anzeigen, bearbeiten und durchsuchen.
|
||||
|
||||
## Upload und Verarbeitung
|
||||
|
||||
Laden Sie einfach Ihre Dokumente hoch, um zu beginnen. Sim verarbeitet sie automatisch im Hintergrund, extrahiert Text, erstellt Embeddings und teilt sie in durchsuchbare Chunks auf.
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="knowledgebase-1.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
Das System übernimmt den gesamten Verarbeitungsprozess für Sie:
|
||||
|
||||
1. **Textextraktion**: Inhalte werden aus Ihren Dokumenten mit spezialisierten Parsern für jeden Dateityp extrahiert
|
||||
2. **Intelligentes Chunking**: Dokumente werden in sinnvolle Chunks mit konfigurierbarer Größe und Überlappung aufgeteilt
|
||||
3. **Embedding-Generierung**: Vektoreinbettungen werden für semantische Suchfunktionen erstellt
|
||||
4. **Verarbeitungsstatus**: Verfolgen Sie den Fortschritt während Ihre Dokumente verarbeitet werden
|
||||
|
||||
## Unterstützte Dateitypen
|
||||
|
||||
Sim unterstützt PDF, Word (DOC/DOCX), Klartext (TXT), Markdown (MD), HTML, Excel (XLS/XLSX), PowerPoint (PPT/PPTX) und CSV-Dateien. Dateien können bis zu 100MB groß sein, wobei die optimale Leistung bei Dateien unter 50MB liegt. Sie können mehrere Dokumente gleichzeitig hochladen, und PDF-Dateien werden mit OCR-Verarbeitung für gescannte Dokumente unterstützt.
|
||||
|
||||
## Anzeigen und Bearbeiten von Chunks
|
||||
|
||||
Sobald Ihre Dokumente verarbeitet sind, können Sie die einzelnen Chunks anzeigen und bearbeiten. Dies gibt Ihnen volle Kontrolle darüber, wie Ihre Inhalte organisiert und durchsucht werden.
|
||||
|
||||
<Image src="/static/knowledgebase/knowledgebase.png" alt="Dokumentchunk-Ansicht mit verarbeiteten Inhalten" width={800} height={500} />
|
||||
|
||||
### Chunk-Konfiguration
|
||||
- **Standardgröße der Chunks**: 1.024 Zeichen
|
||||
- **Konfigurierbarer Bereich**: 100-4.000 Zeichen pro Chunk
|
||||
- **Intelligente Überlappung**: Standardmäßig 200 Zeichen zur Kontexterhaltung
|
||||
- **Hierarchische Aufteilung**: Respektiert Dokumentstruktur (Abschnitte, Absätze, Sätze)
|
||||
|
||||
### Bearbeitungsfunktionen
|
||||
- **Chunk-Inhalt bearbeiten**: Textinhalt einzelner Chunks ändern
|
||||
- **Chunk-Grenzen anpassen**: Chunks bei Bedarf zusammenführen oder teilen
|
||||
- **Metadaten hinzufügen**: Chunks mit zusätzlichem Kontext anreichern
|
||||
- **Massenoperationen**: Effiziente Verwaltung mehrerer Chunks
|
||||
|
||||
## Erweiterte PDF-Verarbeitung
|
||||
|
||||
Für PDF-Dokumente bietet Sim erweiterte Verarbeitungsfunktionen:
|
||||
|
||||
### OCR-Unterstützung
|
||||
Bei Konfiguration mit Azure oder [Mistral OCR](https://docs.mistral.ai/ocr/):
|
||||
- **Verarbeitung gescannter Dokumente**: Text aus bildbasierten PDFs extrahieren
|
||||
- **Umgang mit gemischten Inhalten**: Verarbeitung von PDFs mit Text und Bildern
|
||||
- **Hohe Genauigkeit**: Fortschrittliche KI-Modelle gewährleisten präzise Textextraktion
|
||||
|
||||
## Verwendung des Wissensblocks in Workflows
|
||||
|
||||
Sobald Ihre Dokumente verarbeitet sind, können Sie sie in Ihren KI-Workflows über den Wissensblock nutzen. Dies ermöglicht Retrieval-Augmented Generation (RAG), wodurch Ihre KI-Agenten auf Ihre Dokumentinhalte zugreifen und darüber nachdenken können, um genauere, kontextbezogene Antworten zu liefern.
|
||||
|
||||
<Image src="/static/knowledgebase/knowledgebase-2.png" alt="Verwendung des Wissensblocks in Workflows" width={800} height={500} />
|
||||
|
||||
### Funktionen des Wissensblocks
|
||||
- **Semantische Suche**: Relevante Inhalte mit natürlichsprachlichen Abfragen finden
|
||||
- **Kontextintegration**: Automatisches Einbinden relevanter Chunks in Agenten-Prompts
|
||||
- **Dynamischer Abruf**: Suche erfolgt in Echtzeit während der Workflow-Ausführung
|
||||
- **Relevanzbewertung**: Ergebnisse nach semantischer Ähnlichkeit geordnet
|
||||
|
||||
### Integrationsoptionen
|
||||
- **System-Prompts**: Kontext für Ihre KI-Agenten bereitstellen
|
||||
- **Dynamischer Kontext**: Suche und Einbindung relevanter Informationen während Gesprächen
|
||||
- **Dokumentübergreifende Suche**: Abfrage über Ihre gesamte Wissensdatenbank
|
||||
- **Gefilterte Suche**: Kombination mit Tags für präzisen Inhaltsabruf
|
||||
|
||||
## Vektorsuchtechnologie
|
||||
|
||||
Sim verwendet Vektorsuche, die von [pgvector](https://github.com/pgvector/pgvector) unterstützt wird, um die Bedeutung und den Kontext Ihrer Inhalte zu verstehen:
|
||||
|
||||
### Semantisches Verständnis
|
||||
- **Kontextuelle Suche**: Findet relevante Inhalte, auch wenn exakte Schlüsselwörter nicht übereinstimmen
|
||||
- **Konzeptbasierte Abfrage**: Versteht Beziehungen zwischen Ideen
|
||||
- **Mehrsprachige Unterstützung**: Funktioniert über verschiedene Sprachen hinweg
|
||||
- **Synonymerkennung**: Findet verwandte Begriffe und Konzepte
|
||||
|
||||
### Suchfunktionen
|
||||
- **Natürlichsprachige Abfragen**: Stellen Sie Fragen in natürlicher Sprache
|
||||
- **Ähnlichkeitssuche**: Finden Sie konzeptionell ähnliche Inhalte
|
||||
- **Hybridsuche**: Kombiniert Vektor- und traditionelle Schlüsselwortsuche
|
||||
- **Konfigurierbare Ergebnisse**: Steuern Sie die Anzahl und den Relevanz-Schwellenwert der Ergebnisse
|
||||
|
||||
## Dokumentenverwaltung
|
||||
|
||||
### Organisationsfunktionen
|
||||
- **Massenupload**: Laden Sie mehrere Dateien gleichzeitig über die asynchrone API hoch
|
||||
- **Verarbeitungsstatus**: Echtzeit-Updates zum Dokumentenverarbeitungsprozess
|
||||
- **Suchen und Filtern**: Finden Sie Dokumente schnell in großen Sammlungen
|
||||
- **Metadaten-Tracking**: Automatische Erfassung von Dateiinformationen und Verarbeitungsdetails
|
||||
|
||||
### Sicherheit und Datenschutz
|
||||
- **Sichere Speicherung**: Dokumente werden mit Sicherheit auf Unternehmensniveau gespeichert
|
||||
- **Zugriffskontrolle**: Workspace-basierte Berechtigungen
|
||||
- **Verarbeitungsisolierung**: Jeder Workspace hat eine isolierte Dokumentenverarbeitung
|
||||
- **Datenaufbewahrung**: Konfigurieren Sie Richtlinien zur Dokumentenaufbewahrung
|
||||
|
||||
## Erste Schritte
|
||||
|
||||
1. **Navigieren Sie zu Ihrer Wissensdatenbank**: Zugriff über Ihre Workspace-Seitenleiste
|
||||
2. **Dokumente hochladen**: Drag & Drop oder wählen Sie Dateien zum Hochladen aus
|
||||
3. **Verarbeitung überwachen**: Beobachten Sie, wie Dokumente verarbeitet und in Chunks aufgeteilt werden
|
||||
4. **Chunks erkunden**: Sehen und bearbeiten Sie die verarbeiteten Inhalte
|
||||
5. **Zu Workflows hinzufügen**: Verwenden Sie den Wissensblock, um ihn in Ihre KI-Agenten zu integrieren
|
||||
|
||||
Die Wissensdatenbank verwandelt Ihre statischen Dokumente in eine intelligente, durchsuchbare Ressource, die Ihre KI-Workflows für fundiertere und kontextbezogenere Antworten nutzen können.
|
||||
108
apps/docs/content/docs/de/knowledgebase/tags.mdx
Normal file
108
apps/docs/content/docs/de/knowledgebase/tags.mdx
Normal file
@@ -0,0 +1,108 @@
|
||||
---
|
||||
title: Tags und Filterung
|
||||
---
|
||||
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Tags bieten eine leistungsstarke Möglichkeit, Ihre Dokumente zu organisieren und präzise Filterungen für Ihre Vektorsuchen zu erstellen. Durch die Kombination von tag-basierter Filterung mit semantischer Suche können Sie genau die Inhalte aus Ihrer Wissensdatenbank abrufen, die Sie benötigen.
|
||||
|
||||
## Tags zu Dokumenten hinzufügen
|
||||
|
||||
Sie können jedem Dokument in Ihrer Wissensdatenbank benutzerdefinierte Tags hinzufügen, um Ihre Inhalte zu organisieren und zu kategorisieren und so leichter auffindbar zu machen.
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="knowledgebase-tag.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
### Tag-Verwaltung
|
||||
- **Benutzerdefinierte Tags**: Erstellen Sie Ihr eigenes Tag-System, das zu Ihrem Arbeitsablauf passt
|
||||
- **Mehrere Tags pro Dokument**: Wenden Sie so viele Tags wie nötig auf jedes Dokument an, es stehen 7 Tag-Slots pro Wissensdatenbank zur Verfügung, die von allen Dokumenten in der Wissensdatenbank gemeinsam genutzt werden
|
||||
- **Tag-Organisation**: Gruppieren Sie verwandte Dokumente mit einheitlichen Tags
|
||||
|
||||
### Best Practices für Tags
|
||||
- **Einheitliche Benennung**: Verwenden Sie standardisierte Tag-Namen für alle Ihre Dokumente
|
||||
- **Beschreibende Tags**: Verwenden Sie klare, aussagekräftige Tag-Namen
|
||||
- **Regelmäßige Bereinigung**: Entfernen Sie ungenutzte oder veraltete Tags regelmäßig
|
||||
|
||||
## Verwendung von Tags in Wissensblöcken
|
||||
|
||||
Tags werden besonders leistungsstark, wenn sie mit dem Wissensblock in Ihren Workflows kombiniert werden. Sie können Ihre Suchen auf bestimmte getaggte Inhalte filtern und so sicherstellen, dass Ihre KI-Agenten die relevantesten Informationen erhalten.
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="knowledgebase-tag2.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
## Suchmodi
|
||||
|
||||
Der Wissensblock unterstützt drei verschiedene Suchmodi, abhängig davon, was Sie angeben:
|
||||
|
||||
### 1. Nur-Tag-Suche
|
||||
Wenn Sie **nur Tags angeben** (keine Suchanfrage):
|
||||
- **Direkter Abruf**: Ruft alle Dokumente ab, die die angegebenen Tags haben
|
||||
- **Keine Vektorsuche**: Ergebnisse basieren ausschließlich auf Tag-Übereinstimmung
|
||||
- **Schnelle Leistung**: Schneller Abruf ohne semantische Verarbeitung
|
||||
- **Exakte Übereinstimmung**: Nur Dokumente mit allen angegebenen Tags werden zurückgegeben
|
||||
|
||||
**Anwendungsfall**: Wenn du alle Dokumente aus einer bestimmten Kategorie oder einem Projekt benötigst
|
||||
|
||||
### 2. Nur Vektorsuche
|
||||
Wenn du **nur eine Suchanfrage angibst** (keine Tags):
|
||||
- **Semantische Suche**: Findet Inhalte basierend auf Bedeutung und Kontext
|
||||
- **Vollständige Wissensdatenbank**: Durchsucht alle Dokumente
|
||||
- **Relevanz-Ranking**: Ergebnisse nach semantischer Ähnlichkeit geordnet
|
||||
- **Natürliche Sprache**: Verwende Fragen oder Phrasen, um relevante Inhalte zu finden
|
||||
|
||||
**Anwendungsfall**: Wenn du die relevantesten Inhalte unabhängig von der Organisation benötigst
|
||||
|
||||
### 3. Kombinierte Tag-Filterung + Vektorsuche
|
||||
Wenn du **sowohl Tags als auch eine Suchanfrage angibst**:
|
||||
1. **Zuerst**: Filtere Dokumente auf solche mit den angegebenen Tags
|
||||
2. **Dann**: Führe eine Vektorsuche innerhalb dieser gefilterten Teilmenge durch
|
||||
3. **Ergebnis**: Semantisch relevante Inhalte nur aus deinen getaggten Dokumenten
|
||||
|
||||
**Anwendungsfall**: Wenn du relevante Inhalte aus einer bestimmten Kategorie oder einem Projekt benötigst
|
||||
|
||||
### Suchkonfiguration
|
||||
|
||||
#### Tag-Filterung
|
||||
- **Mehrere Tags**: Verwende mehrere Tags für ODER-Logik (Dokument muss einen oder mehrere der Tags haben)
|
||||
- **Tag-Kombinationen**: Mische verschiedene Tag-Typen für präzise Filterung
|
||||
- **Groß-/Kleinschreibung**: Tag-Abgleich ist unabhängig von Groß-/Kleinschreibung
|
||||
- **Teilabgleich**: Exakte Übereinstimmung des Tag-Namens erforderlich
|
||||
|
||||
#### Vektorsuche-Parameter
|
||||
- **Abfragekomplexität**: Fragen in natürlicher Sprache funktionieren am besten
|
||||
- **Ergebnislimits**: Konfiguriere, wie viele Chunks abgerufen werden sollen
|
||||
- **Relevanzschwelle**: Lege minimale Ähnlichkeitswerte fest
|
||||
- **Kontextfenster**: Passe die Chunk-Größe an deinen Anwendungsfall an
|
||||
|
||||
## Integration mit Workflows
|
||||
|
||||
### Konfiguration des Wissensblocks
|
||||
1. **Wissensdatenbank auswählen**: Wähle aus, welche Wissensdatenbank durchsucht werden soll
|
||||
2. **Tags hinzufügen**: Gib Filterungs-Tags an (optional)
|
||||
3. **Anfrage eingeben**: Füge deine Suchanfrage hinzu (optional)
|
||||
4. **Ergebnisse konfigurieren**: Lege die Anzahl der abzurufenden Chunks fest
|
||||
5. **Suche testen**: Sieh dir die Ergebnisse an, bevor du sie im Workflow verwendest
|
||||
|
||||
### Dynamische Tag-Nutzung
|
||||
- **Variable Tags**: Verwenden Sie Workflow-Variablen als Tag-Werte
|
||||
- **Bedingte Filterung**: Wenden Sie verschiedene Tags basierend auf Workflow-Logik an
|
||||
- **Kontextbezogene Suche**: Passen Sie Tags basierend auf dem Gesprächskontext an
|
||||
- **Mehrstufige Filterung**: Verfeinern Sie Suchen durch Workflow-Schritte
|
||||
|
||||
### Leistungsoptimierung
|
||||
- **Effiziente Filterung**: Tag-Filterung erfolgt vor der Vektorsuche für bessere Leistung
|
||||
- **Caching**: Häufig verwendete Tag-Kombinationen werden für Geschwindigkeit zwischengespeichert
|
||||
- **Parallele Verarbeitung**: Mehrere Tag-Suchen können gleichzeitig ausgeführt werden
|
||||
- **Ressourcenmanagement**: Automatische Optimierung der Suchressourcen
|
||||
|
||||
## Erste Schritte mit Tags
|
||||
|
||||
1. **Planen Sie Ihre Tag-Struktur**: Entscheiden Sie sich für einheitliche Namenskonventionen
|
||||
2. **Beginnen Sie mit dem Taggen**: Fügen Sie Ihren vorhandenen Dokumenten relevante Tags hinzu
|
||||
3. **Testen Sie Kombinationen**: Experimentieren Sie mit Tag- und Suchanfragekombinationen
|
||||
4. **Integration in Workflows**: Verwenden Sie den Knowledge-Block mit Ihrer Tagging-Strategie
|
||||
5. **Verfeinern Sie im Laufe der Zeit**: Passen Sie Ihren Tagging-Ansatz basierend auf Suchergebnissen an
|
||||
|
||||
Tags verwandeln Ihre Wissensdatenbank von einem einfachen Dokumentenspeicher in ein präzise organisiertes, durchsuchbares Intelligenzsystem, das Ihre KI-Workflows mit chirurgischer Präzision navigieren können.
|
||||
140
apps/docs/content/docs/de/mcp/index.mdx
Normal file
140
apps/docs/content/docs/de/mcp/index.mdx
Normal file
@@ -0,0 +1,140 @@
|
||||
---
|
||||
title: MCP (Model Context Protocol)
|
||||
---
|
||||
|
||||
import { Video } from '@/components/ui/video'
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
|
||||
Das Model Context Protocol ([MCP](https://modelcontextprotocol.com/)) ermöglicht es Ihnen, externe Tools und Dienste über ein standardisiertes Protokoll zu verbinden, wodurch Sie APIs und Dienste direkt in Ihre Workflows integrieren können. Mit MCP können Sie die Fähigkeiten von Sim erweitern, indem Sie benutzerdefinierte Integrationen hinzufügen, die nahtlos mit Ihren Agenten und Workflows zusammenarbeiten.
|
||||
|
||||
## Was ist MCP?
|
||||
|
||||
MCP ist ein offener Standard, der es KI-Assistenten ermöglicht, sich sicher mit externen Datenquellen und Tools zu verbinden. Es bietet eine standardisierte Methode, um:
|
||||
|
||||
- Verbindungen zu Datenbanken, APIs und Dateisystemen herzustellen
|
||||
- Auf Echtzeitdaten von externen Diensten zuzugreifen
|
||||
- Benutzerdefinierte Tools und Skripte auszuführen
|
||||
- Sicheren, kontrollierten Zugriff auf externe Ressourcen zu gewährleisten
|
||||
|
||||
## Hinzufügen von MCP-Servern
|
||||
|
||||
MCP-Server stellen Sammlungen von Tools bereit, die Ihre Agenten nutzen können. Sie können MCP-Server auf zwei Arten hinzufügen:
|
||||
|
||||
### Über die Workspace-Einstellungen
|
||||
|
||||
Konfigurieren Sie MCP-Server auf Workspace-Ebene, damit alle Teammitglieder sie nutzen können:
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="mcp-1.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
1. Navigieren Sie zu Ihren Workspace-Einstellungen
|
||||
2. Gehen Sie zum Abschnitt **MCP-Server**
|
||||
3. Klicken Sie auf **MCP-Server hinzufügen**
|
||||
4. Geben Sie die Server-Konfigurationsdetails ein
|
||||
5. Speichern Sie die Konfiguration
|
||||
|
||||
<Callout type="info">
|
||||
MCP-Server, die in den Workspace-Einstellungen konfiguriert sind, stehen allen Workspace-Mitgliedern entsprechend ihrer Berechtigungsstufen zur Verfügung.
|
||||
</Callout>
|
||||
|
||||
### Über die Agenten-Konfiguration
|
||||
|
||||
Sie können MCP-Server auch direkt innerhalb eines Agenten-Blocks hinzufügen und konfigurieren:
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="mcp-2.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
Dies ist nützlich, wenn Sie schnell eine bestimmte Integration für einen speziellen Workflow einrichten müssen.
|
||||
|
||||
## Verwendung von MCP-Tools in Agenten
|
||||
|
||||
Sobald MCP-Server konfiguriert sind, werden ihre Tools innerhalb Ihrer Agentenblöcke verfügbar:
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="mcp-3.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
1. Öffnen Sie einen **Agenten**-Block
|
||||
2. Im Abschnitt **Tools** sehen Sie verfügbare MCP-Tools
|
||||
3. Wählen Sie die Tools aus, die der Agent verwenden soll
|
||||
4. Der Agent kann nun während der Ausführung auf diese Tools zugreifen
|
||||
|
||||
## Eigenständiger MCP-Tool-Block
|
||||
|
||||
Für eine genauere Kontrolle können Sie den dedizierten MCP-Tool-Block verwenden, um bestimmte MCP-Tools auszuführen:
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="mcp-4.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
Der MCP-Tool-Block ermöglicht es Ihnen:
|
||||
- Jedes konfigurierte MCP-Tool direkt auszuführen
|
||||
- Spezifische Parameter an das Tool zu übergeben
|
||||
- Die Ausgabe des Tools in nachfolgenden Workflow-Schritten zu verwenden
|
||||
- Mehrere MCP-Tools miteinander zu verketten
|
||||
|
||||
### Wann MCP-Tool vs. Agent verwenden
|
||||
|
||||
**Verwenden Sie einen Agenten mit MCP-Tools, wenn:**
|
||||
- Sie möchten, dass die KI entscheidet, welche Tools zu verwenden sind
|
||||
- Sie komplexe Überlegungen benötigen, wann und wie Tools eingesetzt werden sollen
|
||||
- Sie eine natürlichsprachliche Interaktion mit den Tools wünschen
|
||||
|
||||
**Verwenden Sie den MCP-Tool-Block, wenn:**
|
||||
- Sie eine deterministische Tool-Ausführung benötigen
|
||||
- Sie ein bestimmtes Tool mit bekannten Parametern ausführen möchten
|
||||
- Sie strukturierte Workflows mit vorhersehbaren Schritten erstellen
|
||||
|
||||
## Berechtigungsanforderungen
|
||||
|
||||
MCP-Funktionalität erfordert spezifische Workspace-Berechtigungen:
|
||||
|
||||
| Aktion | Erforderliche Berechtigung |
|
||||
|--------|-------------------|
|
||||
| MCP-Server in den Einstellungen konfigurieren | **Admin** |
|
||||
| MCP-Tools in Agenten verwenden | **Schreiben** oder **Admin** |
|
||||
| Verfügbare MCP-Tools anzeigen | **Lesen**, **Schreiben** oder **Admin** |
|
||||
| MCP-Tool-Blöcke ausführen | **Schreiben** oder **Admin** |
|
||||
|
||||
## Häufige Anwendungsfälle
|
||||
|
||||
### Datenbankintegration
|
||||
Verbinden Sie sich mit Datenbanken, um Daten innerhalb Ihrer Workflows abzufragen, einzufügen oder zu aktualisieren.
|
||||
|
||||
### API-Integrationen
|
||||
Greifen Sie auf externe APIs und Webdienste zu, die keine integrierten Sim-Integrationen haben.
|
||||
|
||||
### Dateisystemzugriff
|
||||
Lesen, schreiben und bearbeiten Sie Dateien auf lokalen oder entfernten Dateisystemen.
|
||||
|
||||
### Benutzerdefinierte Geschäftslogik
|
||||
Führen Sie benutzerdefinierte Skripte oder Tools aus, die auf die Bedürfnisse Ihrer Organisation zugeschnitten sind.
|
||||
|
||||
### Echtzeit-Datenzugriff
|
||||
Rufen Sie während der Workflow-Ausführung Live-Daten von externen Systemen ab.
|
||||
|
||||
## Sicherheitsüberlegungen
|
||||
|
||||
- MCP-Server laufen mit den Berechtigungen des Benutzers, der sie konfiguriert hat
|
||||
- Überprüfen Sie immer die Quellen von MCP-Servern vor der Installation
|
||||
- Verwenden Sie Umgebungsvariablen für sensible Konfigurationsdaten
|
||||
- Überprüfen Sie die Fähigkeiten des MCP-Servers, bevor Sie Agenten Zugriff gewähren
|
||||
|
||||
## Fehlerbehebung
|
||||
|
||||
### MCP-Server erscheint nicht
|
||||
- Überprüfen Sie, ob die Serverkonfiguration korrekt ist
|
||||
- Prüfen Sie, ob Sie die erforderlichen Berechtigungen haben
|
||||
- Stellen Sie sicher, dass der MCP-Server läuft und zugänglich ist
|
||||
|
||||
### Fehler bei der Tool-Ausführung
|
||||
- Überprüfen Sie, ob die Tool-Parameter korrekt formatiert sind
|
||||
- Prüfen Sie die MCP-Server-Logs auf Fehlermeldungen
|
||||
- Stellen Sie sicher, dass die erforderliche Authentifizierung konfiguriert ist
|
||||
|
||||
### Berechtigungsfehler
|
||||
- Bestätigen Sie Ihre Workspace-Berechtigungsstufe
|
||||
- Prüfen Sie, ob der MCP-Server zusätzliche Authentifizierung erfordert
|
||||
- Überprüfen Sie, ob der Server für Ihren Workspace richtig konfiguriert ist
|
||||
161
apps/docs/content/docs/de/permissions/roles-and-permissions.mdx
Normal file
161
apps/docs/content/docs/de/permissions/roles-and-permissions.mdx
Normal file
@@ -0,0 +1,161 @@
|
||||
---
|
||||
title: Rollen und Berechtigungen
|
||||
---
|
||||
|
||||
import { Video } from '@/components/ui/video'
|
||||
|
||||
Wenn Sie Teammitglieder zu Ihrer Organisation oder Ihrem Workspace einladen, müssen Sie entscheiden, welche Zugriffsebene Sie ihnen gewähren möchten. Dieser Leitfaden erklärt, was Benutzer mit jeder Berechtigungsstufe tun können, und hilft Ihnen, Teamrollen und die Zugriffsrechte jeder Berechtigungsstufe zu verstehen.
|
||||
|
||||
## Wie man jemanden zu einem Workspace einlädt
|
||||
|
||||
<div className="mx-auto w-full overflow-hidden rounded-lg">
|
||||
<Video src="invitations.mp4" width={700} height={450} />
|
||||
</div>
|
||||
|
||||
## Berechtigungsstufen für Workspaces
|
||||
|
||||
Beim Einladen einer Person zu einem Workspace können Sie eine von drei Berechtigungsstufen zuweisen:
|
||||
|
||||
| Berechtigung | Was sie tun können |
|
||||
|------------|------------------|
|
||||
| **Lesen** | Workflows ansehen, Ausführungsergebnisse sehen, aber keine Änderungen vornehmen |
|
||||
| **Schreiben** | Workflows erstellen und bearbeiten, Workflows ausführen, Umgebungsvariablen verwalten |
|
||||
| **Admin** | Alles, was Schreiben kann, plus Benutzer einladen/entfernen und Workspace-Einstellungen verwalten |
|
||||
|
||||
## Was jede Berechtigungsstufe tun kann
|
||||
|
||||
Hier ist eine detaillierte Aufschlüsselung dessen, was Benutzer mit jeder Berechtigungsstufe tun können:
|
||||
|
||||
### Leseberechtigung
|
||||
**Perfekt für:** Stakeholder, Beobachter oder Teammitglieder, die Einblick benötigen, aber keine Änderungen vornehmen sollten
|
||||
|
||||
**Was sie tun können:**
|
||||
- Alle Workflows im Workspace ansehen
|
||||
- Workflow-Ausführungsergebnisse und Protokolle einsehen
|
||||
- Workflow-Konfigurationen und Einstellungen durchsuchen
|
||||
- Umgebungsvariablen anzeigen (aber nicht bearbeiten)
|
||||
|
||||
**Was sie nicht tun können:**
|
||||
- Workflows erstellen, bearbeiten oder löschen
|
||||
- Workflows ausführen oder bereitstellen
|
||||
- Workspace-Einstellungen ändern
|
||||
- Andere Benutzer einladen
|
||||
|
||||
### Schreibberechtigung
|
||||
**Perfekt für:** Entwickler, Content-Ersteller oder Teammitglieder, die aktiv an Automatisierungen arbeiten
|
||||
|
||||
**Was sie tun können:**
|
||||
- Alles, was Benutzer mit Leseberechtigung können, plus:
|
||||
- Workflows erstellen, bearbeiten und löschen
|
||||
- Workflows ausführen und bereitstellen
|
||||
- Workspace-Umgebungsvariablen hinzufügen, bearbeiten und löschen
|
||||
- Alle verfügbaren Tools und Integrationen nutzen
|
||||
- In Echtzeit bei der Workflow-Bearbeitung zusammenarbeiten
|
||||
|
||||
**Was sie nicht können:**
|
||||
- Benutzer zum Workspace einladen oder daraus entfernen
|
||||
- Workspace-Einstellungen ändern
|
||||
- Den Workspace löschen
|
||||
|
||||
### Admin-Berechtigung
|
||||
**Perfekt für:** Teamleiter, Projektmanager oder technische Leiter, die den Workspace verwalten müssen
|
||||
|
||||
**Was sie können:**
|
||||
- Alles, was Benutzer mit Schreibrechten können, plus:
|
||||
- Neue Benutzer mit beliebiger Berechtigungsstufe zum Workspace einladen
|
||||
- Benutzer aus dem Workspace entfernen
|
||||
- Workspace-Einstellungen und Integrationen verwalten
|
||||
- Verbindungen zu externen Tools konfigurieren
|
||||
- Von anderen Benutzern erstellte Workflows löschen
|
||||
|
||||
**Was sie nicht können:**
|
||||
- Den Workspace löschen (das kann nur der Workspace-Besitzer)
|
||||
- Den Workspace-Besitzer aus dem Workspace entfernen
|
||||
|
||||
---
|
||||
|
||||
## Workspace-Besitzer vs. Admin
|
||||
|
||||
Jeder Workspace hat einen **Besitzer** (die Person, die ihn erstellt hat) sowie eine beliebige Anzahl von **Admins**.
|
||||
|
||||
### Workspace-Besitzer
|
||||
- Hat alle Admin-Berechtigungen
|
||||
- Kann den Workspace löschen
|
||||
- Kann nicht aus dem Workspace entfernt werden
|
||||
- Kann die Eigentümerschaft an einen anderen Benutzer übertragen
|
||||
|
||||
### Workspace-Admin
|
||||
- Kann alles tun außer den Workspace löschen oder den Besitzer entfernen
|
||||
- Kann vom Besitzer oder anderen Admins aus dem Workspace entfernt werden
|
||||
|
||||
---
|
||||
|
||||
## Häufige Szenarien
|
||||
|
||||
### Einen neuen Entwickler zum Team hinzufügen
|
||||
1. **Organisationsebene**: Laden Sie ihn als **Organisationsmitglied** ein
|
||||
2. **Workspace-Ebene**: Geben Sie ihm **Schreib**-Berechtigung, damit er Workflows erstellen und bearbeiten kann
|
||||
|
||||
### Einen Projektmanager hinzufügen
|
||||
1. **Organisationsebene**: Laden Sie ihn als **Organisationsmitglied** ein
|
||||
2. **Workspace-Ebene**: Geben Sie ihm **Admin**-Berechtigung, damit er das Team verwalten und alles einsehen kann
|
||||
|
||||
### Einen Stakeholder oder Kunden hinzufügen
|
||||
1. **Organisationsebene**: Laden Sie ihn als **Organisationsmitglied** ein
|
||||
2. **Workspace-Ebene**: Geben Sie ihm **Lese**-Berechtigung, damit er den Fortschritt sehen, aber keine Änderungen vornehmen kann
|
||||
|
||||
---
|
||||
|
||||
## Umgebungsvariablen
|
||||
|
||||
Benutzer können zwei Arten von Umgebungsvariablen erstellen:
|
||||
|
||||
### Persönliche Umgebungsvariablen
|
||||
- Nur für den einzelnen Benutzer sichtbar
|
||||
- Verfügbar in allen Workflows, die sie ausführen
|
||||
- Werden in den Benutzereinstellungen verwaltet
|
||||
|
||||
### Workspace-Umgebungsvariablen
|
||||
- **Leserecht**: Kann Variablennamen und -werte sehen
|
||||
- **Schreib-/Administratorrecht**: Kann Variablen hinzufügen, bearbeiten und löschen
|
||||
- Verfügbar für alle Workspace-Mitglieder
|
||||
- Wenn eine persönliche Variable denselben Namen wie eine Workspace-Variable hat, hat die persönliche Variable Vorrang
|
||||
|
||||
---
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Mit minimalen Berechtigungen beginnen
|
||||
Geben Sie Benutzern die niedrigste Berechtigungsstufe, die sie für ihre Arbeit benötigen. Sie können die Berechtigungen später immer erhöhen.
|
||||
|
||||
### Organisationsstruktur klug nutzen
|
||||
- Machen Sie vertrauenswürdige Teamleiter zu **Organisationsadministratoren**
|
||||
- Die meisten Teammitglieder sollten **Organisationsmitglieder** sein
|
||||
- Reservieren Sie Workspace-**Admin**-Berechtigungen für Personen, die Benutzer verwalten müssen
|
||||
|
||||
### Berechtigungen regelmäßig überprüfen
|
||||
Überprüfen Sie regelmäßig, wer Zugriff auf was hat, besonders wenn Teammitglieder ihre Rollen wechseln oder das Unternehmen verlassen.
|
||||
|
||||
### Sicherheit von Umgebungsvariablen
|
||||
- Verwenden Sie persönliche Umgebungsvariablen für sensible API-Schlüssel
|
||||
- Verwenden Sie Workspace-Umgebungsvariablen für gemeinsame Konfigurationen
|
||||
- Überprüfen Sie regelmäßig, wer Zugriff auf sensible Variablen hat
|
||||
|
||||
---
|
||||
|
||||
## Organisationsrollen
|
||||
|
||||
Wenn Sie jemanden zu Ihrer Organisation einladen, können Sie eine von zwei Rollen zuweisen:
|
||||
|
||||
### Organisationsadministrator
|
||||
**Was sie tun können:**
|
||||
- Teammitglieder zur Organisation einladen und entfernen
|
||||
- Neue Workspaces erstellen
|
||||
- Abrechnungs- und Abonnementeinstellungen verwalten
|
||||
- Zugriff auf alle Workspaces innerhalb der Organisation
|
||||
|
||||
### Organisationsmitglied
|
||||
**Was sie tun können:**
|
||||
- Zugriff auf Workspaces, zu denen sie speziell eingeladen wurden
|
||||
- Liste der Organisationsmitglieder anzeigen
|
||||
- Können keine neuen Personen einladen oder Organisationseinstellungen verwalten
|
||||
412
apps/docs/content/docs/de/sdks/python.mdx
Normal file
412
apps/docs/content/docs/de/sdks/python.mdx
Normal file
@@ -0,0 +1,412 @@
|
||||
---
|
||||
title: Python SDK
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
|
||||
Das offizielle Python SDK für Sim ermöglicht es Ihnen, Workflows programmatisch aus Ihren Python-Anwendungen mithilfe des offiziellen Python SDKs auszuführen.
|
||||
|
||||
<Callout type="info">
|
||||
Das Python SDK unterstützt Python 3.8+ und bietet synchrone Workflow-Ausführung. Alle Workflow-Ausführungen sind derzeit synchron.
|
||||
</Callout>
|
||||
|
||||
## Installation
|
||||
|
||||
Installieren Sie das SDK mit pip:
|
||||
|
||||
```bash
|
||||
pip install simstudio-sdk
|
||||
```
|
||||
|
||||
## Schnellstart
|
||||
|
||||
Hier ist ein einfaches Beispiel für den Einstieg:
|
||||
|
||||
```python
|
||||
from simstudio import SimStudioClient
|
||||
|
||||
# Initialize the client
|
||||
client = SimStudioClient(
|
||||
api_key="your-api-key-here",
|
||||
base_url="https://sim.ai" # optional, defaults to https://sim.ai
|
||||
)
|
||||
|
||||
# Execute a workflow
|
||||
try:
|
||||
result = client.execute_workflow("workflow-id")
|
||||
print("Workflow executed successfully:", result)
|
||||
except Exception as error:
|
||||
print("Workflow execution failed:", error)
|
||||
```
|
||||
|
||||
## API-Referenz
|
||||
|
||||
### SimStudioClient
|
||||
|
||||
#### Konstruktor
|
||||
|
||||
```python
|
||||
SimStudioClient(api_key: str, base_url: str = "https://sim.ai")
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `api_key` (str): Ihr Sim API-Schlüssel
|
||||
- `base_url` (str, optional): Basis-URL für die Sim API
|
||||
|
||||
#### Methoden
|
||||
|
||||
##### execute_workflow()
|
||||
|
||||
Führt einen Workflow mit optionalen Eingabedaten aus.
|
||||
|
||||
```python
|
||||
result = client.execute_workflow(
|
||||
"workflow-id",
|
||||
input_data={"message": "Hello, world!"},
|
||||
timeout=30.0 # 30 seconds
|
||||
)
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `workflow_id` (str): Die ID des auszuführenden Workflows
|
||||
- `input_data` (dict, optional): Eingabedaten, die an den Workflow übergeben werden
|
||||
- `timeout` (float, optional): Timeout in Sekunden (Standard: 30.0)
|
||||
|
||||
**Rückgabewert:** `WorkflowExecutionResult`
|
||||
|
||||
##### get_workflow_status()
|
||||
|
||||
Ruft den Status eines Workflows ab (Deployment-Status usw.).
|
||||
|
||||
```python
|
||||
status = client.get_workflow_status("workflow-id")
|
||||
print("Is deployed:", status.is_deployed)
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `workflow_id` (str): Die ID des Workflows
|
||||
|
||||
**Rückgabe:** `WorkflowStatus`
|
||||
|
||||
##### validate_workflow()
|
||||
|
||||
Überprüft, ob ein Workflow für die Ausführung bereit ist.
|
||||
|
||||
```python
|
||||
is_ready = client.validate_workflow("workflow-id")
|
||||
if is_ready:
|
||||
# Workflow is deployed and ready
|
||||
pass
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `workflow_id` (str): Die ID des Workflows
|
||||
|
||||
**Rückgabe:** `bool`
|
||||
|
||||
##### execute_workflow_sync()
|
||||
|
||||
<Callout type="info">
|
||||
Derzeit ist diese Methode identisch mit `execute_workflow()`, da alle Ausführungen synchron sind. Diese Methode wird für zukünftige Kompatibilität bereitgestellt, wenn asynchrone Ausführung hinzugefügt wird.
|
||||
</Callout>
|
||||
|
||||
Führt einen Workflow aus (derzeit synchron, identisch mit `execute_workflow()`).
|
||||
|
||||
```python
|
||||
result = client.execute_workflow_sync(
|
||||
"workflow-id",
|
||||
input_data={"data": "some input"},
|
||||
timeout=60.0
|
||||
)
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `workflow_id` (str): Die ID des auszuführenden Workflows
|
||||
- `input_data` (dict, optional): Eingabedaten, die an den Workflow übergeben werden
|
||||
- `timeout` (float): Timeout für die initiale Anfrage in Sekunden
|
||||
|
||||
**Rückgabe:** `WorkflowExecutionResult`
|
||||
|
||||
##### set_api_key()
|
||||
|
||||
Aktualisiert den API-Schlüssel.
|
||||
|
||||
```python
|
||||
client.set_api_key("new-api-key")
|
||||
```
|
||||
|
||||
##### set_base_url()
|
||||
|
||||
Aktualisiert die Basis-URL.
|
||||
|
||||
```python
|
||||
client.set_base_url("https://my-custom-domain.com")
|
||||
```
|
||||
|
||||
##### close()
|
||||
|
||||
Schließt die zugrunde liegende HTTP-Sitzung.
|
||||
|
||||
```python
|
||||
client.close()
|
||||
```
|
||||
|
||||
## Datenklassen
|
||||
|
||||
### WorkflowExecutionResult
|
||||
|
||||
```python
|
||||
@dataclass
|
||||
class WorkflowExecutionResult:
|
||||
success: bool
|
||||
output: Optional[Any] = None
|
||||
error: Optional[str] = None
|
||||
logs: Optional[List[Any]] = None
|
||||
metadata: Optional[Dict[str, Any]] = None
|
||||
trace_spans: Optional[List[Any]] = None
|
||||
total_duration: Optional[float] = None
|
||||
```
|
||||
|
||||
### WorkflowStatus
|
||||
|
||||
```python
|
||||
@dataclass
|
||||
class WorkflowStatus:
|
||||
is_deployed: bool
|
||||
deployed_at: Optional[str] = None
|
||||
is_published: bool = False
|
||||
needs_redeployment: bool = False
|
||||
```
|
||||
|
||||
### SimStudioError
|
||||
|
||||
```python
|
||||
class SimStudioError(Exception):
|
||||
def __init__(self, message: str, code: Optional[str] = None, status: Optional[int] = None):
|
||||
super().__init__(message)
|
||||
self.code = code
|
||||
self.status = status
|
||||
```
|
||||
|
||||
## Beispiele
|
||||
|
||||
### Grundlegende Workflow-Ausführung
|
||||
|
||||
<Steps>
|
||||
<Step title="Client initialisieren">
|
||||
Richten Sie den SimStudioClient mit Ihrem API-Schlüssel ein.
|
||||
</Step>
|
||||
<Step title="Workflow validieren">
|
||||
Prüfen Sie, ob der Workflow bereitgestellt und für die Ausführung bereit ist.
|
||||
</Step>
|
||||
<Step title="Workflow ausführen">
|
||||
Führen Sie den Workflow mit Ihren Eingabedaten aus.
|
||||
</Step>
|
||||
<Step title="Ergebnis verarbeiten">
|
||||
Verarbeiten Sie das Ausführungsergebnis und behandeln Sie eventuelle Fehler.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
```python
|
||||
import os
|
||||
from simstudio import SimStudioClient
|
||||
|
||||
client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY"))
|
||||
|
||||
def run_workflow():
|
||||
try:
|
||||
# Check if workflow is ready
|
||||
is_ready = client.validate_workflow("my-workflow-id")
|
||||
if not is_ready:
|
||||
raise Exception("Workflow is not deployed or ready")
|
||||
|
||||
# Execute the workflow
|
||||
result = client.execute_workflow(
|
||||
"my-workflow-id",
|
||||
input_data={
|
||||
"message": "Process this data",
|
||||
"user_id": "12345"
|
||||
}
|
||||
)
|
||||
|
||||
if result.success:
|
||||
print("Output:", result.output)
|
||||
print("Duration:", result.metadata.get("duration") if result.metadata else None)
|
||||
else:
|
||||
print("Workflow failed:", result.error)
|
||||
|
||||
except Exception as error:
|
||||
print("Error:", error)
|
||||
|
||||
run_workflow()
|
||||
```
|
||||
|
||||
### Fehlerbehandlung
|
||||
|
||||
Behandeln Sie verschiedene Fehlertypen, die während der Workflow-Ausführung auftreten können:
|
||||
|
||||
```python
|
||||
from simstudio import SimStudioClient, SimStudioError
|
||||
import os
|
||||
|
||||
client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY"))
|
||||
|
||||
def execute_with_error_handling():
|
||||
try:
|
||||
result = client.execute_workflow("workflow-id")
|
||||
return result
|
||||
except SimStudioError as error:
|
||||
if error.code == "UNAUTHORIZED":
|
||||
print("Invalid API key")
|
||||
elif error.code == "TIMEOUT":
|
||||
print("Workflow execution timed out")
|
||||
elif error.code == "USAGE_LIMIT_EXCEEDED":
|
||||
print("Usage limit exceeded")
|
||||
elif error.code == "INVALID_JSON":
|
||||
print("Invalid JSON in request body")
|
||||
else:
|
||||
print(f"Workflow error: {error}")
|
||||
raise
|
||||
except Exception as error:
|
||||
print(f"Unexpected error: {error}")
|
||||
raise
|
||||
```
|
||||
|
||||
### Verwendung des Kontextmanagers
|
||||
|
||||
Verwenden Sie den Client als Kontextmanager, um die Ressourcenbereinigung automatisch zu handhaben:
|
||||
|
||||
```python
|
||||
from simstudio import SimStudioClient
|
||||
import os
|
||||
|
||||
# Using context manager to automatically close the session
|
||||
with SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) as client:
|
||||
result = client.execute_workflow("workflow-id")
|
||||
print("Result:", result)
|
||||
# Session is automatically closed here
|
||||
```
|
||||
|
||||
### Batch-Workflow-Ausführung
|
||||
|
||||
Führen Sie mehrere Workflows effizient aus:
|
||||
|
||||
```python
|
||||
from simstudio import SimStudioClient
|
||||
import os
|
||||
|
||||
client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY"))
|
||||
|
||||
def execute_workflows_batch(workflow_data_pairs):
|
||||
"""Execute multiple workflows with different input data."""
|
||||
results = []
|
||||
|
||||
for workflow_id, input_data in workflow_data_pairs:
|
||||
try:
|
||||
# Validate workflow before execution
|
||||
if not client.validate_workflow(workflow_id):
|
||||
print(f"Skipping {workflow_id}: not deployed")
|
||||
continue
|
||||
|
||||
result = client.execute_workflow(workflow_id, input_data)
|
||||
results.append({
|
||||
"workflow_id": workflow_id,
|
||||
"success": result.success,
|
||||
"output": result.output,
|
||||
"error": result.error
|
||||
})
|
||||
|
||||
except Exception as error:
|
||||
results.append({
|
||||
"workflow_id": workflow_id,
|
||||
"success": False,
|
||||
"error": str(error)
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
# Example usage
|
||||
workflows = [
|
||||
("workflow-1", {"type": "analysis", "data": "sample1"}),
|
||||
("workflow-2", {"type": "processing", "data": "sample2"}),
|
||||
]
|
||||
|
||||
results = execute_workflows_batch(workflows)
|
||||
for result in results:
|
||||
print(f"Workflow {result['workflow_id']}: {'Success' if result['success'] else 'Failed'}")
|
||||
```
|
||||
|
||||
### Umgebungskonfiguration
|
||||
|
||||
Konfigurieren Sie den Client mit Umgebungsvariablen:
|
||||
|
||||
<Tabs items={['Development', 'Production']}>
|
||||
<Tab value="Development">
|
||||
|
||||
```python
|
||||
import os
|
||||
from simstudio import SimStudioClient
|
||||
|
||||
# Development configuration
|
||||
client = SimStudioClient(
|
||||
api_key=os.getenv("SIMSTUDIO_API_KEY"),
|
||||
base_url=os.getenv("SIMSTUDIO_BASE_URL", "https://sim.ai")
|
||||
)
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="Production">
|
||||
|
||||
```python
|
||||
import os
|
||||
from simstudio import SimStudioClient
|
||||
|
||||
# Production configuration with error handling
|
||||
api_key = os.getenv("SIMSTUDIO_API_KEY")
|
||||
if not api_key:
|
||||
raise ValueError("SIMSTUDIO_API_KEY environment variable is required")
|
||||
|
||||
client = SimStudioClient(
|
||||
api_key=api_key,
|
||||
base_url=os.getenv("SIMSTUDIO_BASE_URL", "https://sim.ai")
|
||||
)
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## API-Schlüssel erhalten
|
||||
|
||||
<Steps>
|
||||
<Step title="Bei Sim anmelden">
|
||||
Navigieren Sie zu [Sim](https://sim.ai) und melden Sie sich bei Ihrem Konto an.
|
||||
</Step>
|
||||
<Step title="Ihren Workflow öffnen">
|
||||
Navigieren Sie zu dem Workflow, den Sie programmatisch ausführen möchten.
|
||||
</Step>
|
||||
<Step title="Ihren Workflow bereitstellen">
|
||||
Klicken Sie auf "Deploy", um Ihren Workflow bereitzustellen, falls dies noch nicht geschehen ist.
|
||||
</Step>
|
||||
<Step title="API-Schlüssel erstellen oder auswählen">
|
||||
Wählen Sie während des Bereitstellungsprozesses einen API-Schlüssel aus oder erstellen Sie einen neuen.
|
||||
</Step>
|
||||
<Step title="API-Schlüssel kopieren">
|
||||
Kopieren Sie den API-Schlüssel zur Verwendung in Ihrer Python-Anwendung.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Callout type="warning">
|
||||
Halte deinen API-Schlüssel sicher und committe ihn niemals in die Versionskontrolle. Verwende Umgebungsvariablen oder sicheres Konfigurationsmanagement.
|
||||
</Callout>
|
||||
|
||||
## Anforderungen
|
||||
|
||||
- Python 3.8+
|
||||
- requests >= 2.25.0
|
||||
|
||||
## Lizenz
|
||||
|
||||
Apache-2.0
|
||||
607
apps/docs/content/docs/de/sdks/typescript.mdx
Normal file
607
apps/docs/content/docs/de/sdks/typescript.mdx
Normal file
@@ -0,0 +1,607 @@
|
||||
---
|
||||
title: TypeScript/JavaScript SDK
|
||||
---
|
||||
|
||||
import { Callout } from 'fumadocs-ui/components/callout'
|
||||
import { Card, Cards } from 'fumadocs-ui/components/card'
|
||||
import { Step, Steps } from 'fumadocs-ui/components/steps'
|
||||
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
||||
|
||||
Das offizielle TypeScript/JavaScript SDK für Sim bietet vollständige Typsicherheit und unterstützt sowohl Node.js- als auch Browser-Umgebungen, sodass Sie Workflows programmatisch aus Ihren Node.js-Anwendungen, Webanwendungen und anderen JavaScript-Umgebungen ausführen können. Alle Workflow-Ausführungen sind derzeit synchron.
|
||||
|
||||
<Callout type="info">
|
||||
Das TypeScript SDK bietet vollständige Typsicherheit und unterstützt sowohl Node.js- als auch Browser-Umgebungen. Alle Workflow-Ausführungen sind derzeit synchron.
|
||||
</Callout>
|
||||
|
||||
## Installation
|
||||
|
||||
Installieren Sie das SDK mit Ihrem bevorzugten Paketmanager:
|
||||
|
||||
<Tabs items={['npm', 'yarn', 'bun']}>
|
||||
<Tab value="npm">
|
||||
|
||||
```bash
|
||||
npm install simstudio-ts-sdk
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="yarn">
|
||||
|
||||
```bash
|
||||
yarn add simstudio-ts-sdk
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="bun">
|
||||
|
||||
```bash
|
||||
bun add simstudio-ts-sdk
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Schnellstart
|
||||
|
||||
Hier ist ein einfaches Beispiel für den Einstieg:
|
||||
|
||||
```typescript
|
||||
import { SimStudioClient } from 'simstudio-ts-sdk';
|
||||
|
||||
// Initialize the client
|
||||
const client = new SimStudioClient({
|
||||
apiKey: 'your-api-key-here',
|
||||
baseUrl: 'https://sim.ai' // optional, defaults to https://sim.ai
|
||||
});
|
||||
|
||||
// Execute a workflow
|
||||
try {
|
||||
const result = await client.executeWorkflow('workflow-id');
|
||||
console.log('Workflow executed successfully:', result);
|
||||
} catch (error) {
|
||||
console.error('Workflow execution failed:', error);
|
||||
}
|
||||
```
|
||||
|
||||
## API-Referenz
|
||||
|
||||
### SimStudioClient
|
||||
|
||||
#### Konstruktor
|
||||
|
||||
```typescript
|
||||
new SimStudioClient(config: SimStudioConfig)
|
||||
```
|
||||
|
||||
**Konfiguration:**
|
||||
- `config.apiKey` (string): Ihr Sim API-Schlüssel
|
||||
- `config.baseUrl` (string, optional): Basis-URL für die Sim API (standardmäßig `https://sim.ai`)
|
||||
|
||||
#### Methoden
|
||||
|
||||
##### executeWorkflow()
|
||||
|
||||
Führen Sie einen Workflow mit optionalen Eingabedaten aus.
|
||||
|
||||
```typescript
|
||||
const result = await client.executeWorkflow('workflow-id', {
|
||||
input: { message: 'Hello, world!' },
|
||||
timeout: 30000 // 30 seconds
|
||||
});
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `workflowId` (string): Die ID des auszuführenden Workflows
|
||||
- `options` (ExecutionOptions, optional):
|
||||
- `input` (any): Eingabedaten, die an den Workflow übergeben werden
|
||||
- `timeout` (number): Timeout in Millisekunden (Standard: 30000)
|
||||
|
||||
**Rückgabewert:** `Promise<WorkflowExecutionResult>`
|
||||
|
||||
##### getWorkflowStatus()
|
||||
|
||||
Den Status eines Workflows abrufen (Bereitstellungsstatus usw.).
|
||||
|
||||
```typescript
|
||||
const status = await client.getWorkflowStatus('workflow-id');
|
||||
console.log('Is deployed:', status.isDeployed);
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `workflowId` (string): Die ID des Workflows
|
||||
|
||||
**Rückgabewert:** `Promise<WorkflowStatus>`
|
||||
|
||||
##### validateWorkflow()
|
||||
|
||||
Überprüfen, ob ein Workflow für die Ausführung bereit ist.
|
||||
|
||||
```typescript
|
||||
const isReady = await client.validateWorkflow('workflow-id');
|
||||
if (isReady) {
|
||||
// Workflow is deployed and ready
|
||||
}
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `workflowId` (string): Die ID des Workflows
|
||||
|
||||
**Rückgabewert:** `Promise<boolean>`
|
||||
|
||||
##### executeWorkflowSync()
|
||||
|
||||
<Callout type="info">
|
||||
Derzeit ist diese Methode identisch mit `executeWorkflow()`, da alle Ausführungen synchron sind. Diese Methode wird für zukünftige Kompatibilität bereitgestellt, wenn asynchrone Ausführung hinzugefügt wird.
|
||||
</Callout>
|
||||
|
||||
Einen Workflow ausführen (derzeit synchron, identisch mit `executeWorkflow()`).
|
||||
|
||||
```typescript
|
||||
const result = await client.executeWorkflowSync('workflow-id', {
|
||||
input: { data: 'some input' },
|
||||
timeout: 60000
|
||||
});
|
||||
```
|
||||
|
||||
**Parameter:**
|
||||
- `workflowId` (string): Die ID des auszuführenden Workflows
|
||||
- `options` (ExecutionOptions, optional):
|
||||
- `input` (any): Eingabedaten, die an den Workflow übergeben werden
|
||||
- `timeout` (number): Timeout für die initiale Anfrage in Millisekunden
|
||||
|
||||
**Rückgabewert:** `Promise<WorkflowExecutionResult>`
|
||||
|
||||
##### setApiKey()
|
||||
|
||||
Den API-Schlüssel aktualisieren.
|
||||
|
||||
```typescript
|
||||
client.setApiKey('new-api-key');
|
||||
```
|
||||
|
||||
##### setBaseUrl()
|
||||
|
||||
Die Basis-URL aktualisieren.
|
||||
|
||||
```typescript
|
||||
client.setBaseUrl('https://my-custom-domain.com');
|
||||
```
|
||||
|
||||
## Typen
|
||||
|
||||
### WorkflowExecutionResult
|
||||
|
||||
```typescript
|
||||
interface WorkflowExecutionResult {
|
||||
success: boolean;
|
||||
output?: any;
|
||||
error?: string;
|
||||
logs?: any[];
|
||||
metadata?: {
|
||||
duration?: number;
|
||||
executionId?: string;
|
||||
[key: string]: any;
|
||||
};
|
||||
traceSpans?: any[];
|
||||
totalDuration?: number;
|
||||
}
|
||||
```
|
||||
|
||||
### WorkflowStatus
|
||||
|
||||
```typescript
|
||||
interface WorkflowStatus {
|
||||
isDeployed: boolean;
|
||||
deployedAt?: string;
|
||||
isPublished: boolean;
|
||||
needsRedeployment: boolean;
|
||||
}
|
||||
```
|
||||
|
||||
### SimStudioError
|
||||
|
||||
```typescript
|
||||
class SimStudioError extends Error {
|
||||
code?: string;
|
||||
status?: number;
|
||||
}
|
||||
```
|
||||
|
||||
## Beispiele
|
||||
|
||||
### Grundlegende Workflow-Ausführung
|
||||
|
||||
<Steps>
|
||||
<Step title="Client initialisieren">
|
||||
Richten Sie den SimStudioClient mit Ihrem API-Schlüssel ein.
|
||||
</Step>
|
||||
<Step title="Workflow validieren">
|
||||
Prüfen Sie, ob der Workflow bereitgestellt und für die Ausführung bereit ist.
|
||||
</Step>
|
||||
<Step title="Workflow ausführen">
|
||||
Führen Sie den Workflow mit Ihren Eingabedaten aus.
|
||||
</Step>
|
||||
<Step title="Ergebnis verarbeiten">
|
||||
Verarbeiten Sie das Ausführungsergebnis und behandeln Sie eventuelle Fehler.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
```typescript
|
||||
import { SimStudioClient } from 'simstudio-ts-sdk';
|
||||
|
||||
const client = new SimStudioClient({
|
||||
apiKey: process.env.SIMSTUDIO_API_KEY!
|
||||
});
|
||||
|
||||
async function runWorkflow() {
|
||||
try {
|
||||
// Check if workflow is ready
|
||||
const isReady = await client.validateWorkflow('my-workflow-id');
|
||||
if (!isReady) {
|
||||
throw new Error('Workflow is not deployed or ready');
|
||||
}
|
||||
|
||||
// Execute the workflow
|
||||
const result = await client.executeWorkflow('my-workflow-id', {
|
||||
input: {
|
||||
message: 'Process this data',
|
||||
userId: '12345'
|
||||
}
|
||||
});
|
||||
|
||||
if (result.success) {
|
||||
console.log('Output:', result.output);
|
||||
console.log('Duration:', result.metadata?.duration);
|
||||
} else {
|
||||
console.error('Workflow failed:', result.error);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
}
|
||||
}
|
||||
|
||||
runWorkflow();
|
||||
```
|
||||
|
||||
### Fehlerbehandlung
|
||||
|
||||
Behandeln Sie verschiedene Fehlertypen, die während der Workflow-Ausführung auftreten können:
|
||||
|
||||
```typescript
|
||||
import { SimStudioClient, SimStudioError } from 'simstudio-ts-sdk';
|
||||
|
||||
const client = new SimStudioClient({
|
||||
apiKey: process.env.SIMSTUDIO_API_KEY!
|
||||
});
|
||||
|
||||
async function executeWithErrorHandling() {
|
||||
try {
|
||||
const result = await client.executeWorkflow('workflow-id');
|
||||
return result;
|
||||
} catch (error) {
|
||||
if (error instanceof SimStudioError) {
|
||||
switch (error.code) {
|
||||
case 'UNAUTHORIZED':
|
||||
console.error('Invalid API key');
|
||||
break;
|
||||
case 'TIMEOUT':
|
||||
console.error('Workflow execution timed out');
|
||||
break;
|
||||
case 'USAGE_LIMIT_EXCEEDED':
|
||||
console.error('Usage limit exceeded');
|
||||
break;
|
||||
case 'INVALID_JSON':
|
||||
console.error('Invalid JSON in request body');
|
||||
break;
|
||||
default:
|
||||
console.error('Workflow error:', error.message);
|
||||
}
|
||||
} else {
|
||||
console.error('Unexpected error:', error);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Umgebungskonfiguration
|
||||
|
||||
Konfigurieren Sie den Client mit Umgebungsvariablen:
|
||||
|
||||
<Tabs items={['Development', 'Production']}>
|
||||
<Tab value="Development">
|
||||
|
||||
```typescript
|
||||
import { SimStudioClient } from 'simstudio-ts-sdk';
|
||||
|
||||
// Development configuration
|
||||
const apiKey = process.env.SIMSTUDIO_API_KEY;
|
||||
if (!apiKey) {
|
||||
throw new Error('SIMSTUDIO_API_KEY environment variable is required');
|
||||
}
|
||||
|
||||
const client = new SimStudioClient({
|
||||
apiKey,
|
||||
baseUrl: process.env.SIMSTUDIO_BASE_URL // optional
|
||||
});
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab value="Production">
|
||||
|
||||
```typescript
|
||||
import { SimStudioClient } from 'simstudio-ts-sdk';
|
||||
|
||||
// Production configuration with validation
|
||||
const apiKey = process.env.SIMSTUDIO_API_KEY;
|
||||
if (!apiKey) {
|
||||
throw new Error('SIMSTUDIO_API_KEY environment variable is required');
|
||||
}
|
||||
|
||||
const client = new SimStudioClient({
|
||||
apiKey,
|
||||
baseUrl: process.env.SIMSTUDIO_BASE_URL || 'https://sim.ai'
|
||||
});
|
||||
```
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Node.js Express-Integration
|
||||
|
||||
Integration mit einem Express.js-Server:
|
||||
|
||||
```typescript
|
||||
import express from 'express';
|
||||
import { SimStudioClient } from 'simstudio-ts-sdk';
|
||||
|
||||
const app = express();
|
||||
const client = new SimStudioClient({
|
||||
apiKey: process.env.SIMSTUDIO_API_KEY!
|
||||
});
|
||||
|
||||
app.use(express.json());
|
||||
|
||||
app.post('/execute-workflow', async (req, res) => {
|
||||
try {
|
||||
const { workflowId, input } = req.body;
|
||||
|
||||
const result = await client.executeWorkflow(workflowId, {
|
||||
input,
|
||||
timeout: 60000
|
||||
});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: result
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Workflow execution error:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: error instanceof Error ? error.message : 'Unknown error'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
app.listen(3000, () => {
|
||||
console.log('Server running on port 3000');
|
||||
});
|
||||
```
|
||||
|
||||
### Next.js API-Route
|
||||
|
||||
Verwendung mit Next.js API-Routen:
|
||||
|
||||
```typescript
|
||||
// pages/api/workflow.ts or app/api/workflow/route.ts
|
||||
import { NextApiRequest, NextApiResponse } from 'next';
|
||||
import { SimStudioClient } from 'simstudio-ts-sdk';
|
||||
|
||||
const client = new SimStudioClient({
|
||||
apiKey: process.env.SIMSTUDIO_API_KEY!
|
||||
});
|
||||
|
||||
export default async function handler(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse
|
||||
) {
|
||||
if (req.method !== 'POST') {
|
||||
return res.status(405).json({ error: 'Method not allowed' });
|
||||
}
|
||||
|
||||
try {
|
||||
const { workflowId, input } = req.body;
|
||||
|
||||
const result = await client.executeWorkflow(workflowId, {
|
||||
input,
|
||||
timeout: 30000
|
||||
});
|
||||
|
||||
res.status(200).json(result);
|
||||
} catch (error) {
|
||||
console.error('Error executing workflow:', error);
|
||||
res.status(500).json({
|
||||
error: 'Failed to execute workflow'
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Browser-Nutzung
|
||||
|
||||
Verwendung im Browser (mit korrekter CORS-Konfiguration):
|
||||
|
||||
```typescript
|
||||
import { SimStudioClient } from 'simstudio-ts-sdk';
|
||||
|
||||
// Note: In production, use a proxy server to avoid exposing API keys
|
||||
const client = new SimStudioClient({
|
||||
apiKey: 'your-public-api-key', // Use with caution in browser
|
||||
baseUrl: 'https://sim.ai'
|
||||
});
|
||||
|
||||
async function executeClientSideWorkflow() {
|
||||
try {
|
||||
const result = await client.executeWorkflow('workflow-id', {
|
||||
input: {
|
||||
userInput: 'Hello from browser'
|
||||
}
|
||||
});
|
||||
|
||||
console.log('Workflow result:', result);
|
||||
|
||||
// Update UI with result
|
||||
document.getElementById('result')!.textContent =
|
||||
JSON.stringify(result.output, null, 2);
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Attach to button click
|
||||
document.getElementById('executeBtn')?.addEventListener('click', executeClientSideWorkflow);
|
||||
```
|
||||
|
||||
<Callout type="warning">
|
||||
Bei der Verwendung des SDK im Browser sollten Sie darauf achten, keine sensiblen API-Schlüssel offenzulegen. Erwägen Sie die Verwendung eines Backend-Proxys oder öffentlicher API-Schlüssel mit eingeschränkten Berechtigungen.
|
||||
</Callout>
|
||||
|
||||
### React Hook Beispiel
|
||||
|
||||
Erstellen Sie einen benutzerdefinierten React Hook für die Workflow-Ausführung:
|
||||
|
||||
```typescript
|
||||
import { useState, useCallback } from 'react';
|
||||
import { SimStudioClient, WorkflowExecutionResult } from 'simstudio-ts-sdk';
|
||||
|
||||
const client = new SimStudioClient({
|
||||
apiKey: process.env.NEXT_PUBLIC_SIMSTUDIO_API_KEY!
|
||||
});
|
||||
|
||||
interface UseWorkflowResult {
|
||||
result: WorkflowExecutionResult | null;
|
||||
loading: boolean;
|
||||
error: Error | null;
|
||||
executeWorkflow: (workflowId: string, input?: any) => Promise<void>;
|
||||
}
|
||||
|
||||
export function useWorkflow(): UseWorkflowResult {
|
||||
const [result, setResult] = useState<WorkflowExecutionResult | null>(null);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState<Error | null>(null);
|
||||
|
||||
const executeWorkflow = useCallback(async (workflowId: string, input?: any) => {
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
setResult(null);
|
||||
|
||||
try {
|
||||
const workflowResult = await client.executeWorkflow(workflowId, {
|
||||
input,
|
||||
timeout: 30000
|
||||
});
|
||||
setResult(workflowResult);
|
||||
} catch (err) {
|
||||
setError(err instanceof Error ? err : new Error('Unknown error'));
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, []);
|
||||
|
||||
return {
|
||||
result,
|
||||
loading,
|
||||
error,
|
||||
executeWorkflow
|
||||
};
|
||||
}
|
||||
|
||||
// Usage in component
|
||||
function WorkflowComponent() {
|
||||
const { result, loading, error, executeWorkflow } = useWorkflow();
|
||||
|
||||
const handleExecute = () => {
|
||||
executeWorkflow('my-workflow-id', {
|
||||
message: 'Hello from React!'
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<button onClick={handleExecute} disabled={loading}>
|
||||
{loading ? 'Executing...' : 'Execute Workflow'}
|
||||
</button>
|
||||
|
||||
{error && <div>Error: {error.message}</div>}
|
||||
{result && (
|
||||
<div>
|
||||
<h3>Result:</h3>
|
||||
<pre>{JSON.stringify(result, null, 2)}</pre>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
## Ihren API-Schlüssel erhalten
|
||||
|
||||
<Steps>
|
||||
<Step title="Bei Sim anmelden">
|
||||
Navigieren Sie zu [Sim](https://sim.ai) und melden Sie sich bei Ihrem Konto an.
|
||||
</Step>
|
||||
<Step title="Öffnen Sie Ihren Workflow">
|
||||
Navigieren Sie zu dem Workflow, den Sie programmatisch ausführen möchten.
|
||||
</Step>
|
||||
<Step title="Deployen Sie Ihren Workflow">
|
||||
Klicken Sie auf "Deploy", um Ihren Workflow zu deployen, falls dies noch nicht geschehen ist.
|
||||
</Step>
|
||||
<Step title="Erstellen oder wählen Sie einen API-Schlüssel">
|
||||
Wählen Sie während des Deployment-Prozesses einen API-Schlüssel aus oder erstellen Sie einen neuen.
|
||||
</Step>
|
||||
<Step title="Kopieren Sie den API-Schlüssel">
|
||||
Kopieren Sie den API-Schlüssel zur Verwendung in Ihrer TypeScript/JavaScript-Anwendung.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Callout type="warning">
|
||||
Halten Sie Ihren API-Schlüssel sicher und committen Sie ihn niemals in die Versionskontrolle. Verwenden Sie Umgebungsvariablen oder sicheres Konfigurationsmanagement.
|
||||
</Callout>
|
||||
|
||||
## Anforderungen
|
||||
|
||||
- Node.js 16+
|
||||
- TypeScript 5.0+ (für TypeScript-Projekte)
|
||||
|
||||
## TypeScript-Unterstützung
|
||||
|
||||
Das SDK ist in TypeScript geschrieben und bietet vollständige Typsicherheit:
|
||||
|
||||
```typescript
|
||||
import {
|
||||
SimStudioClient,
|
||||
WorkflowExecutionResult,
|
||||
WorkflowStatus,
|
||||
SimStudioError
|
||||
} from 'simstudio-ts-sdk';
|
||||
|
||||
// Type-safe client initialization
|
||||
const client: SimStudioClient = new SimStudioClient({
|
||||
apiKey: process.env.SIMSTUDIO_API_KEY!
|
||||
});
|
||||
|
||||
// Type-safe workflow execution
|
||||
const result: WorkflowExecutionResult = await client.executeWorkflow('workflow-id', {
|
||||
input: {
|
||||
message: 'Hello, TypeScript!'
|
||||
}
|
||||
});
|
||||
|
||||
// Type-safe status checking
|
||||
const status: WorkflowStatus = await client.getWorkflowStatus('workflow-id');
|
||||
```
|
||||
|
||||
## Lizenz
|
||||
|
||||
Apache-2.0
|
||||
161
apps/docs/content/docs/de/tools/airtable.mdx
Normal file
161
apps/docs/content/docs/de/tools/airtable.mdx
Normal file
@@ -0,0 +1,161 @@
|
||||
---
|
||||
title: Airtable
|
||||
description: Airtable lesen, erstellen und aktualisieren
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="airtable"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
|
||||
|
||||
viewBox='0 -20.5 256 256'
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
xmlnsXlink='http://www.w3.org/1999/xlink'
|
||||
preserveAspectRatio='xMidYMid'
|
||||
>
|
||||
<g>
|
||||
<path
|
||||
d='M114.25873,2.70101695 L18.8604023,42.1756384 C13.5552723,44.3711638 13.6102328,51.9065311 18.9486282,54.0225085 L114.746142,92.0117514 C123.163769,95.3498757 132.537419,95.3498757 140.9536,92.0117514 L236.75256,54.0225085 C242.08951,51.9065311 242.145916,44.3711638 236.83934,42.1756384 L141.442459,2.70101695 C132.738459,-0.900338983 122.961284,-0.900338983 114.25873,2.70101695'
|
||||
fill='#FFBF00'
|
||||
/>
|
||||
<path
|
||||
d='M136.349071,112.756863 L136.349071,207.659101 C136.349071,212.173089 140.900664,215.263892 145.096461,213.600615 L251.844122,172.166219 C254.281184,171.200072 255.879376,168.845451 255.879376,166.224705 L255.879376,71.3224678 C255.879376,66.8084791 251.327783,63.7176768 247.131986,65.3809537 L140.384325,106.815349 C137.94871,107.781496 136.349071,110.136118 136.349071,112.756863'
|
||||
fill='#26B5F8'
|
||||
/>
|
||||
<path
|
||||
d='M111.422771,117.65355 L79.742409,132.949912 L76.5257763,134.504714 L9.65047684,166.548104 C5.4112904,168.593211 0.000578531073,165.503855 0.000578531073,160.794612 L0.000578531073,71.7210757 C0.000578531073,70.0173017 0.874160452,68.5463864 2.04568588,67.4384994 C2.53454463,66.9481944 3.08848814,66.5446689 3.66412655,66.2250305 C5.26231864,65.2661153 7.54173107,65.0101153 9.47981017,65.7766689 L110.890522,105.957098 C116.045234,108.002206 116.450206,115.225166 111.422771,117.65355'
|
||||
fill='#ED3049'
|
||||
/>
|
||||
<path
|
||||
d='M111.422771,117.65355 L79.742409,132.949912 L2.04568588,67.4384994 C2.53454463,66.9481944 3.08848814,66.5446689 3.66412655,66.2250305 C5.26231864,65.2661153 7.54173107,65.0101153 9.47981017,65.7766689 L110.890522,105.957098 C116.045234,108.002206 116.450206,115.225166 111.422771,117.65355'
|
||||
fillOpacity='0.25'
|
||||
fill='#000000'
|
||||
/>
|
||||
</g>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Airtable](https://airtable.com/) ist eine leistungsstarke cloudbasierte Plattform, die die Funktionalität einer Datenbank mit der Einfachheit einer Tabellenkalkulation verbindet. Sie ermöglicht Benutzern, flexible Datenbanken zur Organisation, Speicherung und Zusammenarbeit an Informationen zu erstellen.
|
||||
|
||||
Mit Airtable können Sie:
|
||||
|
||||
- **Benutzerdefinierte Datenbanken erstellen**: Maßgeschneiderte Lösungen für Projektmanagement, Content-Kalender, Bestandsverfolgung und mehr entwickeln
|
||||
- **Daten visualisieren**: Ihre Informationen als Raster, Kanban-Board, Kalender oder Galerie anzeigen
|
||||
- **Arbeitsabläufe automatisieren**: Auslöser und Aktionen einrichten, um wiederkehrende Aufgaben zu automatisieren
|
||||
- **Mit anderen Tools integrieren**: Verbindung zu Hunderten anderer Anwendungen durch native Integrationen und APIs herstellen
|
||||
|
||||
In Sim ermöglicht die Airtable-Integration Ihren Agenten, programmatisch mit Ihren Airtable-Basen zu interagieren. Dies erlaubt nahtlose Datenoperationen wie das Abrufen von Informationen, Erstellen neuer Datensätze und Aktualisieren vorhandener Daten - alles innerhalb Ihrer Agenten-Workflows. Nutzen Sie Airtable als dynamische Datenquelle oder -ziel für Ihre Agenten, sodass sie im Rahmen ihrer Entscheidungsfindung und Aufgabenausführung auf strukturierte Informationen zugreifen und diese bearbeiten können.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanweisungen
|
||||
|
||||
Integriert Airtable in den Workflow. Kann Airtable-Datensätze erstellen, abrufen, auflisten oder aktualisieren. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine Aktualisierung an einer Airtable-Tabelle vorgenommen wird.
|
||||
|
||||
## Tools
|
||||
|
||||
### `airtable_list_records`
|
||||
|
||||
Datensätze aus einer Airtable-Tabelle lesen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `baseId` | string | Ja | ID der Airtable-Basis |
|
||||
| `tableId` | string | Ja | ID der Tabelle |
|
||||
| `maxRecords` | number | Nein | Maximale Anzahl der zurückzugebenden Datensätze |
|
||||
| `filterFormula` | string | Nein | Formel zum Filtern von Datensätzen \(z.B. "\(\{Feldname\} = \'Wert\'\)"\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `records` | json | Array der abgerufenen Airtable-Datensätze |
|
||||
|
||||
### `airtable_get_record`
|
||||
|
||||
Einen einzelnen Datensatz aus einer Airtable-Tabelle anhand seiner ID abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `baseId` | string | Ja | ID der Airtable-Basis |
|
||||
| `tableId` | string | Ja | ID oder Name der Tabelle |
|
||||
| `recordId` | string | Ja | ID des abzurufenden Datensatzes |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `record` | json | Abgerufener Airtable-Datensatz mit id, createdTime und fields |
|
||||
| `metadata` | json | Operationsmetadaten einschließlich Datensatzanzahl |
|
||||
|
||||
### `airtable_create_records`
|
||||
|
||||
Neue Datensätze in eine Airtable-Tabelle schreiben
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `baseId` | string | Ja | ID der Airtable-Basis |
|
||||
| `tableId` | string | Ja | ID oder Name der Tabelle |
|
||||
| `records` | json | Ja | Array von zu erstellenden Datensätzen, jeder mit einem `fields` Objekt |
|
||||
| `fields` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `records` | json | Array der erstellten Airtable-Datensätze |
|
||||
|
||||
### `airtable_update_record`
|
||||
|
||||
Einen vorhandenen Datensatz in einer Airtable-Tabelle nach ID aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `baseId` | string | Ja | ID der Airtable-Basis |
|
||||
| `tableId` | string | Ja | ID oder Name der Tabelle |
|
||||
| `recordId` | string | Ja | ID des zu aktualisierenden Datensatzes |
|
||||
| `fields` | json | Ja | Ein Objekt, das die Feldnamen und ihre neuen Werte enthält |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `record` | json | Aktualisierter Airtable-Datensatz mit ID, Erstellungszeit und Feldern |
|
||||
| `metadata` | json | Operationsmetadaten einschließlich Datensatzanzahl und aktualisierter Feldnamen |
|
||||
|
||||
### `airtable_update_multiple_records`
|
||||
|
||||
Mehrere vorhandene Datensätze in einer Airtable-Tabelle aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `baseId` | string | Ja | ID der Airtable-Basis |
|
||||
| `tableId` | string | Ja | ID oder Name der Tabelle |
|
||||
| `records` | json | Ja | Array von zu aktualisierenden Datensätzen, jeder mit einer `id` und einem `fields`-Objekt |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `records` | json | Array der aktualisierten Airtable-Datensätze |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `airtable`
|
||||
109
apps/docs/content/docs/de/tools/arxiv.mdx
Normal file
109
apps/docs/content/docs/de/tools/arxiv.mdx
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
title: ArXiv
|
||||
description: Suche und rufe wissenschaftliche Arbeiten von ArXiv ab
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="arxiv"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon" id='logomark' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17.732 24.269'>
|
||||
<g id='tiny'>
|
||||
<path
|
||||
d='M573.549,280.916l2.266,2.738,6.674-7.84c.353-.47.52-.717.353-1.117a1.218,1.218,0,0,0-1.061-.748h0a.953.953,0,0,0-.712.262Z'
|
||||
transform='translate(-566.984 -271.548)'
|
||||
fill='#bdb9b4'
|
||||
/>
|
||||
<path
|
||||
d='M579.525,282.225l-10.606-10.174a1.413,1.413,0,0,0-.834-.5,1.09,1.09,0,0,0-1.027.66c-.167.4-.047.681.319,1.206l8.44,10.242h0l-6.282,7.716a1.336,1.336,0,0,0-.323,1.3,1.114,1.114,0,0,0,1.04.69A.992.992,0,0,0,571,293l8.519-7.92A1.924,1.924,0,0,0,579.525,282.225Z'
|
||||
transform='translate(-566.984 -271.548)'
|
||||
fill='#b31b1b'
|
||||
/>
|
||||
<path
|
||||
d='M584.32,293.912l-8.525-10.275,0,0L573.53,280.9l-1.389,1.254a2.063,2.063,0,0,0,0,2.965l10.812,10.419a.925.925,0,0,0,.742.282,1.039,1.039,0,0,0,.953-.667A1.261,1.261,0,0,0,584.32,293.912Z'
|
||||
transform='translate(-566.984 -271.548)'
|
||||
fill='#bdb9b4'
|
||||
/>
|
||||
</g>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[ArXiv](https://arxiv.org/) ist ein kostenfreies, frei zugängliches Repository für wissenschaftliche Forschungsarbeiten in Bereichen wie Physik, Mathematik, Informatik, quantitative Biologie, quantitative Finanzwissenschaft, Statistik, Elektrotechnik, Systemwissenschaften und Wirtschaftswissenschaften. ArXiv bietet eine umfangreiche Sammlung von Preprints und veröffentlichten Artikeln und ist damit eine primäre Ressource für Forscher und Praktiker weltweit.
|
||||
|
||||
Mit ArXiv können Sie:
|
||||
|
||||
- **Nach wissenschaftlichen Arbeiten suchen**: Finden Sie Forschungsarbeiten anhand von Schlüsselwörtern, Autorennamen, Titeln, Kategorien und mehr
|
||||
- **Metadaten von Arbeiten abrufen**: Zugriff auf Abstracts, Autorenlisten, Veröffentlichungsdaten und andere bibliografische Informationen
|
||||
- **Volltext-PDFs herunterladen**: Erhalten Sie den vollständigen Text der meisten Arbeiten für eingehende Studien
|
||||
- **Autorenbeiträge erkunden**: Sehen Sie alle Arbeiten eines bestimmten Autors
|
||||
- **Auf dem Laufenden bleiben**: Entdecken Sie die neuesten Einreichungen und Trendthemen in Ihrem Fachgebiet
|
||||
|
||||
In Sim ermöglicht die ArXiv-Integration Ihren Agenten, wissenschaftliche Arbeiten von ArXiv programmatisch zu suchen, abzurufen und zu analysieren. Dies erlaubt Ihnen, Literaturrecherchen zu automatisieren, Forschungsassistenten zu erstellen oder aktuelles wissenschaftliches Wissen in Ihre agentischen Workflows einzubinden. Nutzen Sie ArXiv als dynamische Datenquelle für Forschung, Entdeckung und Wissensextraktion innerhalb Ihrer Sim-Projekte.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integriert ArXiv in den Workflow. Kann nach Arbeiten suchen, Arbeitsdetails abrufen und Autorenarbeiten finden. Benötigt kein OAuth oder einen API-Schlüssel.
|
||||
|
||||
## Tools
|
||||
|
||||
### `arxiv_search`
|
||||
|
||||
Suche nach wissenschaftlichen Artikeln auf ArXiv nach Schlüsselwörtern, Autoren, Titeln oder anderen Feldern.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `searchQuery` | string | Ja | Die auszuführende Suchanfrage |
|
||||
| `searchField` | string | Nein | Feld, in dem gesucht werden soll: all, ti \(Titel\), au \(Autor\), abs \(Abstract\), co \(Kommentar\), jr \(Journal\), cat \(Kategorie\), rn \(Berichtsnummer\) |
|
||||
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 10, max: 2000\) |
|
||||
| `sortBy` | string | Nein | Sortieren nach: relevance, lastUpdatedDate, submittedDate \(Standard: relevance\) |
|
||||
| `sortOrder` | string | Nein | Sortierreihenfolge: ascending, descending \(Standard: descending\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `papers` | json | Array von Artikeln, die der Suchanfrage entsprechen |
|
||||
|
||||
### `arxiv_get_paper`
|
||||
|
||||
Erhalte detaillierte Informationen über einen bestimmten ArXiv-Artikel anhand seiner ID.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `paperId` | string | Ja | ArXiv-Artikel-ID \(z.B. "1706.03762"\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `paper` | json | Detaillierte Informationen über den angeforderten ArXiv-Artikel |
|
||||
|
||||
### `arxiv_get_author_papers`
|
||||
|
||||
Suche nach Artikeln eines bestimmten Autors auf ArXiv.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `authorName` | string | Ja | Zu suchender Autorenname |
|
||||
| `maxResults` | number | Nein | Maximale Anzahl der zurückzugebenden Ergebnisse \(Standard: 10, max: 2000\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `authorPapers` | json | Array von Publikationen, die vom angegebenen Autor verfasst wurden |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `arxiv`
|
||||
90
apps/docs/content/docs/de/tools/browser_use.mdx
Normal file
90
apps/docs/content/docs/de/tools/browser_use.mdx
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
title: Browser-Nutzung
|
||||
description: Browser-Automatisierungsaufgaben ausführen
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="browser_use"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
version='1.0'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
|
||||
|
||||
viewBox='0 0 150 150'
|
||||
preserveAspectRatio='xMidYMid meet'
|
||||
>
|
||||
<g transform='translate(0,150) scale(0.05,-0.05)' fill='#000000' stroke='none'>
|
||||
<path
|
||||
d='M786 2713 c-184 -61 -353 -217 -439 -405 -76 -165 -65 -539 19 -666
|
||||
l57 -85 -48 -124 c-203 -517 -79 -930 346 -1155 159 -85 441 -71 585 28 l111
|
||||
77 196 -76 c763 -293 1353 304 1051 1063 -77 191 -77 189 -14 282 163 239 97
|
||||
660 -140 893 -235 231 -528 256 -975 83 l-96 -37 -121 67 c-144 79 -383 103
|
||||
-532 55z m459 -235 c88 -23 96 -51 22 -79 -29 -11 -84 -47 -121 -80 -57 -50
|
||||
-84 -59 -178 -59 -147 0 -190 -44 -238 -241 -102 -424 -230 -440 -230 -29 1
|
||||
417 289 606 745 488z m1046 -18 c174 -85 266 -309 239 -582 -26 -256 -165
|
||||
-165 -230 151 -73 356 -469 332 -954 -58 -587 -472 -829 -1251 -388 -1251 108
|
||||
0 126 -7 214 -80 54 -44 104 -80 113 -80 54 0 -2 -43 -89 -69 -220 -66 -426
|
||||
-22 -568 120 -599 599 871 2232 1663 1849z m-234 -510 c969 -1036 357 -1962
|
||||
-787 -1190 -254 171 -348 303 -323 454 21 128 40 123 231 -59 691 -658 1362
|
||||
-583 1052 117 -106 239 -366 585 -504 671 l-72 44 98 45 c150 68 169 63 305
|
||||
-82z m-329 -310 c161 -184 163 -160 -30 -338 -188 -173 -180 -173 -386 19
|
||||
-163 153 -163 157 7 324 218 213 219 213 409 -5z m354 -375 c92 -239 -179
|
||||
-462 -377 -309 l-46 35 186 163 c211 186 209 185 237 111z'
|
||||
/>
|
||||
</g>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[BrowserUse](https://browser-use.com/) ist eine leistungsstarke Browser-Automatisierungsplattform, die es ermöglicht, Browser-Aufgaben programmatisch zu erstellen und auszuführen. Sie bietet eine Möglichkeit, Webinteraktionen durch natürlichsprachliche Anweisungen zu automatisieren, sodass Sie Websites navigieren, Formulare ausfüllen, Daten extrahieren und komplexe Aktionssequenzen durchführen können, ohne Code zu schreiben.
|
||||
|
||||
Mit BrowserUse können Sie:
|
||||
|
||||
- **Webinteraktionen automatisieren**: Zu Websites navigieren, Buttons klicken, Formulare ausfüllen und andere Browser-Aktionen durchführen
|
||||
- **Daten extrahieren**: Inhalte von Websites extrahieren, einschließlich Text, Bilder und strukturierte Daten
|
||||
- **Komplexe Workflows ausführen**: Mehrere Aktionen verketten, um anspruchsvolle Web-Aufgaben zu erledigen
|
||||
- **Aufgabenausführung überwachen**: Browser-Aufgaben in Echtzeit mit visuellem Feedback beobachten
|
||||
- **Ergebnisse programmatisch verarbeiten**: Strukturierte Ausgaben von Web-Automatisierungsaufgaben erhalten
|
||||
|
||||
In Sim ermöglicht die BrowserUse-Integration Ihren Agenten, mit dem Web zu interagieren, als wären sie menschliche Benutzer. Dies ermöglicht Szenarien wie Recherche, Datenerfassung, Formularübermittlung und Web-Tests - alles durch einfache natürlichsprachliche Anweisungen. Ihre Agenten können Informationen von Websites sammeln, mit Webanwendungen interagieren und Aktionen durchführen, die normalerweise manuelles Browsen erfordern würden, wodurch ihre Fähigkeiten erweitert werden, um das gesamte Web als Ressource einzubeziehen.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie Browser Use in den Workflow. Kann im Web navigieren und Aktionen ausführen, als ob ein echter Benutzer mit dem Browser interagieren würde. Erfordert API-Schlüssel.
|
||||
|
||||
## Tools
|
||||
|
||||
### `browser_use_run_task`
|
||||
|
||||
Führt eine Browser-Automatisierungsaufgabe mit BrowserUse aus
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `task` | string | Ja | Was der Browser-Agent tun soll |
|
||||
| `variables` | json | Nein | Optionale Variablen zur Verwendung als Secrets \(Format: \{key: value\}\) |
|
||||
| `format` | string | Nein | Keine Beschreibung |
|
||||
| `save_browser_data` | boolean | Nein | Ob Browser-Daten gespeichert werden sollen |
|
||||
| `model` | string | Nein | Zu verwendende LLM-Modell \(Standard: gpt-4o\) |
|
||||
| `apiKey` | string | Ja | API-Schlüssel für die BrowserUse API |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `id` | string | Aufgabenausführungskennung |
|
||||
| `success` | boolean | Status der Aufgabenfertigstellung |
|
||||
| `output` | json | Ausgabedaten der Aufgabe |
|
||||
| `steps` | json | Ausgeführte Schritte |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `browser_use`
|
||||
97
apps/docs/content/docs/de/tools/confluence.mdx
Normal file
97
apps/docs/content/docs/de/tools/confluence.mdx
Normal file
@@ -0,0 +1,97 @@
|
||||
---
|
||||
title: Confluence
|
||||
description: Mit Confluence interagieren
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="confluence"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
|
||||
|
||||
viewBox='0 3 21 24'
|
||||
focusable='false'
|
||||
fill='none'
|
||||
aria-hidden='true'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
>
|
||||
<path
|
||||
fill='#1868DB'
|
||||
d='M20.602 20.234c-6.584-3.183-8.507-3.66-11.281-3.66-3.255 0-6.03 1.355-8.507 5.16l-.407.622c-.333.513-.407.696-.407.915s.111.403.518.659l4.18 2.598c.221.146.406.22.591.22.222 0 .37-.11.592-.44l.666-1.024c1.035-1.574 1.96-2.086 3.144-2.086 1.035 0 2.256.293 3.772 1.025l4.365 2.049c.444.22.925.11 1.146-.403l2.072-4.537c.222-.512.074-.842-.444-1.098M1.406 12.22c6.583 3.184 8.507 3.66 11.28 3.66 3.256 0 6.03-1.354 8.508-5.16l.407-.622c.332-.512.406-.695.406-.915s-.11-.402-.518-.658L17.31 5.927c-.222-.147-.407-.22-.592-.22-.222 0-.37.11-.592.44l-.665 1.024c-1.036 1.573-1.96 2.086-3.144 2.086-1.036 0-2.257-.293-3.773-1.025L4.18 6.183c-.444-.22-.925-.11-1.147.402L.962 11.123c-.222.512-.074.841.444 1.098'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Confluence](https://www.atlassian.com/software/confluence) ist Atlassians leistungsstarke Plattform für Teamzusammenarbeit und Wissensmanagement. Sie dient als zentraler Arbeitsbereich, in dem Teams Informationen über Abteilungen und Organisationen hinweg erstellen, organisieren und teilen können.
|
||||
|
||||
Mit Confluence können Sie:
|
||||
|
||||
- **Strukturierte Dokumentation erstellen**: Umfassende Wikis, Projektpläne und Wissensbasen mit umfangreicher Formatierung aufbauen
|
||||
- **In Echtzeit zusammenarbeiten**: Gemeinsam mit Teammitgliedern an Dokumenten arbeiten, mit Kommentaren, Erwähnungen und Bearbeitungsfunktionen
|
||||
- **Informationen hierarchisch organisieren**: Inhalte mit Bereichen, Seiten und verschachtelten Hierarchien für intuitive Navigation strukturieren
|
||||
- **Mit anderen Tools integrieren**: Verbindung mit Jira, Trello und anderen Atlassian-Produkten für nahtlose Workflow-Integration
|
||||
- **Zugriffsberechtigungen kontrollieren**: Verwalten, wer bestimmte Inhalte ansehen, bearbeiten oder kommentieren kann
|
||||
|
||||
In Sim ermöglicht die Confluence-Integration Ihren Agenten den Zugriff auf die Wissensdatenbank Ihrer Organisation. Agenten können Informationen von Confluence-Seiten abrufen, nach bestimmten Inhalten suchen und bei Bedarf sogar Dokumentationen aktualisieren. Dies ermöglicht es Ihren Workflows, das in Ihrer Confluence-Instanz gespeicherte kollektive Wissen zu nutzen und Agenten zu erstellen, die auf interne Dokumentationen verweisen, etablierte Verfahren befolgen und aktuelle Informationsressourcen als Teil ihrer Tätigkeiten pflegen können.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanweisungen
|
||||
|
||||
Integriert Confluence in den Workflow. Kann Seiten lesen und aktualisieren. Erfordert OAuth.
|
||||
|
||||
## Tools
|
||||
|
||||
### `confluence_retrieve`
|
||||
|
||||
Ruft Inhalte von Confluence-Seiten über die Confluence-API ab.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
|
||||
| `pageId` | string | Ja | Confluence-Seiten-ID zum Abrufen |
|
||||
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `ts` | string | Zeitstempel des Abrufs |
|
||||
| `pageId` | string | Confluence-Seiten-ID |
|
||||
| `content` | string | Seiteninhalt ohne HTML-Tags |
|
||||
| `title` | string | Seitentitel |
|
||||
|
||||
### `confluence_update`
|
||||
|
||||
Aktualisiert eine Confluence-Seite über die Confluence-API.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `domain` | string | Ja | Ihre Confluence-Domain (z.B. ihrfirma.atlassian.net) |
|
||||
| `pageId` | string | Ja | Confluence-Seiten-ID zum Aktualisieren |
|
||||
| `title` | string | Nein | Neuer Titel für die Seite |
|
||||
| `content` | string | Nein | Neuer Inhalt für die Seite im Confluence-Speicherformat |
|
||||
| `version` | number | Nein | Versionsnummer der Seite (erforderlich zur Vermeidung von Konflikten) |
|
||||
| `cloudId` | string | Nein | Confluence Cloud-ID für die Instanz. Wenn nicht angegeben, wird sie über die Domain abgerufen. |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `ts` | string | Zeitstempel der Aktualisierung |
|
||||
| `pageId` | string | Confluence-Seiten-ID |
|
||||
| `title` | string | Aktualisierter Seitentitel |
|
||||
| `success` | boolean | Erfolgsstatus der Aktualisierungsoperation |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `confluence`
|
||||
141
apps/docs/content/docs/de/tools/discord.mdx
Normal file
141
apps/docs/content/docs/de/tools/discord.mdx
Normal file
@@ -0,0 +1,141 @@
|
||||
---
|
||||
title: Discord
|
||||
description: Mit Discord interagieren
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="discord"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
|
||||
|
||||
viewBox='0 -28.5 256 256'
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
xmlnsXlink='http://www.w3.org/1999/xlink'
|
||||
preserveAspectRatio='xMidYMid'
|
||||
>
|
||||
<g>
|
||||
<path
|
||||
d='M216.856339,16.5966031 C200.285002,8.84328665 182.566144,3.2084988 164.041564,0 C161.766523,4.11318106 159.108624,9.64549908 157.276099,14.0464379 C137.583995,11.0849896 118.072967,11.0849896 98.7430163,14.0464379 C96.9108417,9.64549908 94.1925838,4.11318106 91.8971895,0 C73.3526068,3.2084988 55.6133949,8.86399117 39.0420583,16.6376612 C5.61752293,67.146514 -3.4433191,116.400813 1.08711069,164.955721 C23.2560196,181.510915 44.7403634,191.567697 65.8621325,198.148576 C71.0772151,190.971126 75.7283628,183.341335 79.7352139,175.300261 C72.104019,172.400575 64.7949724,168.822202 57.8887866,164.667963 C59.7209612,163.310589 61.5131304,161.891452 63.2445898,160.431257 C105.36741,180.133187 151.134928,180.133187 192.754523,160.431257 C194.506336,161.891452 196.298154,163.310589 198.110326,164.667963 C191.183787,168.842556 183.854737,172.420929 176.223542,175.320965 C180.230393,183.341335 184.861538,190.991831 190.096624,198.16893 C211.238746,191.588051 232.743023,181.531619 254.911949,164.955721 C260.227747,108.668201 245.831087,59.8662432 216.856339,16.5966031 Z M85.4738752,135.09489 C72.8290281,135.09489 62.4592217,123.290155 62.4592217,108.914901 C62.4592217,94.5396472 72.607595,82.7145587 85.4738752,82.7145587 C98.3405064,82.7145587 108.709962,94.5189427 108.488529,108.914901 C108.508531,123.290155 98.3405064,135.09489 85.4738752,135.09489 Z M170.525237,135.09489 C157.88039,135.09489 147.510584,123.290155 147.510584,108.914901 C147.510584,94.5396472 157.658606,82.7145587 170.525237,82.7145587 C183.391518,82.7145587 193.761324,94.5189427 193.539891,108.914901 C193.539891,123.290155 183.391518,135.09489 170.525237,135.09489 Z'
|
||||
fill='currentColor'
|
||||
fillRule='nonzero'
|
||||
/>
|
||||
</g>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Discord](https://discord.com) ist eine leistungsstarke Kommunikationsplattform, die es dir ermöglicht, dich mit Freunden, Communities und Teams zu verbinden. Sie bietet eine Reihe von Funktionen für die Teamzusammenarbeit, darunter Textkanäle, Sprachkanäle und Videoanrufe.
|
||||
|
||||
Mit einem Discord-Account oder -Bot kannst du:
|
||||
|
||||
- **Nachrichten senden**: Nachrichten an einen bestimmten Kanal senden
|
||||
- **Nachrichten abrufen**: Nachrichten aus einem bestimmten Kanal abrufen
|
||||
- **Server abrufen**: Informationen über einen bestimmten Server abrufen
|
||||
- **Benutzer abrufen**: Informationen über einen bestimmten Benutzer abrufen
|
||||
|
||||
In Sim ermöglicht die Discord-Integration deinen Agenten den Zugriff auf die Discord-Server deiner Organisation. Agenten können Informationen aus Discord-Kanälen abrufen, nach bestimmten Benutzern suchen, Serverinformationen erhalten und Nachrichten senden. Dies ermöglicht deinen Workflows, sich mit deinen Discord-Communities zu integrieren, Benachrichtigungen zu automatisieren und interaktive Erlebnisse zu schaffen.
|
||||
|
||||
> **Wichtig:** Um Nachrichteninhalte lesen zu können, benötigt dein Discord-Bot die Berechtigung "Message Content Intent" im Discord Developer Portal. Ohne diese Berechtigung erhältst du zwar weiterhin Nachrichten-Metadaten, aber das Inhaltsfeld wird leer angezeigt.
|
||||
|
||||
Discord-Komponenten in Sim verwenden effizientes Lazy Loading und rufen Daten nur bei Bedarf ab, um API-Aufrufe zu minimieren und Rate-Limiting zu verhindern. Die Token-Aktualisierung erfolgt automatisch im Hintergrund, um deine Verbindung aufrechtzuerhalten.
|
||||
|
||||
### Einrichtung deines Discord-Bots
|
||||
|
||||
1. Gehe zum [Discord Developer Portal](https://discord.com/developers/applications)
|
||||
2. Erstelle eine neue Anwendung und navigiere zum "Bot"-Tab
|
||||
3. Erstelle einen Bot und kopiere deinen Bot-Token
|
||||
4. Aktiviere unter "Privileged Gateway Intents" den **Message Content Intent**, um Nachrichteninhalte lesen zu können
|
||||
5. Lade deinen Bot mit den entsprechenden Berechtigungen auf deine Server ein
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integriert Discord in den Workflow. Kann Nachrichten senden und empfangen, Server-Informationen abrufen und Benutzerinformationen erhalten. Erfordert einen Bot-API-Schlüssel.
|
||||
|
||||
## Tools
|
||||
|
||||
### `discord_send_message`
|
||||
|
||||
Eine Nachricht an einen Discord-Kanal senden
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
|
||||
| `channelId` | string | Ja | Die Discord-Kanal-ID, an die die Nachricht gesendet werden soll |
|
||||
| `content` | string | Nein | Der Textinhalt der Nachricht |
|
||||
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `message` | string | Erfolgs- oder Fehlermeldung |
|
||||
| `data` | object | Discord-Nachrichtendaten |
|
||||
|
||||
### `discord_get_messages`
|
||||
|
||||
Nachrichten aus einem Discord-Kanal abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
|
||||
| `channelId` | string | Ja | Die Discord-Kanal-ID, von der Nachrichten abgerufen werden sollen |
|
||||
| `limit` | number | Nein | Maximale Anzahl der abzurufenden Nachrichten \(Standard: 10, max: 100\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `message` | string | Erfolgs- oder Fehlermeldung |
|
||||
| `messages` | array | Array von Discord-Nachrichten mit vollständigen Metadaten |
|
||||
|
||||
### `discord_get_server`
|
||||
|
||||
Informationen über einen Discord-Server (Guild) abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `botToken` | string | Ja | Der Bot-Token zur Authentifizierung |
|
||||
| `serverId` | string | Ja | Die Discord-Server-ID \(Guild-ID\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `message` | string | Erfolgs- oder Fehlermeldung |
|
||||
| `data` | object | Discord-Server \(Guild\) Informationen |
|
||||
|
||||
### `discord_get_user`
|
||||
|
||||
Informationen über einen Discord-Benutzer abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `botToken` | string | Ja | Discord-Bot-Token zur Authentifizierung |
|
||||
| `userId` | string | Ja | Die Discord-Benutzer-ID |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `message` | string | Erfolgs- oder Fehlermeldung |
|
||||
| `data` | object | Discord-Benutzerinformationen |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `discord`
|
||||
67
apps/docs/content/docs/de/tools/elevenlabs.mdx
Normal file
67
apps/docs/content/docs/de/tools/elevenlabs.mdx
Normal file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: ElevenLabs
|
||||
description: TTS mit ElevenLabs konvertieren
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="elevenlabs"
|
||||
color="#181C1E"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
|
||||
|
||||
viewBox='0 0 876 876'
|
||||
fill='none'
|
||||
>
|
||||
<path d='M498 138H618V738H498V138Z' fill='currentColor' />
|
||||
<path d='M258 138H378V738H258V138Z' fill='currentColor' />
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[ElevenLabs](https://elevenlabs.io/) ist eine hochmoderne Text-to-Speech-Plattform, die unglaublich natürliche und ausdrucksstarke KI-Stimmen erzeugt. Sie bietet einige der realistischsten und emotional nuanciertesten synthetischen Stimmen, die heute verfügbar sind, was sie ideal für die Erstellung lebensechter Audioinhalte macht.
|
||||
|
||||
Mit ElevenLabs können Sie:
|
||||
|
||||
- **Natürlich klingende Sprache generieren**: Audio erstellen, das kaum von menschlicher Sprache zu unterscheiden ist
|
||||
- **Aus vielfältigen Stimmoptionen wählen**: Zugriff auf eine Bibliothek vorgefertigter Stimmen mit verschiedenen Akzenten, Tonlagen und Eigenschaften
|
||||
- **Stimmen klonen**: Benutzerdefinierte Stimmen basierend auf Audiobeispielen erstellen (mit entsprechenden Genehmigungen)
|
||||
- **Sprachparameter steuern**: Stabilität, Klarheit und emotionalen Ton anpassen, um die Ausgabe zu optimieren
|
||||
- **Realistische Emotionen hinzufügen**: Natürlich klingende Emotionen wie Freude, Traurigkeit oder Aufregung einbauen
|
||||
|
||||
In Sim ermöglicht die ElevenLabs-Integration Ihren Agenten, Text in lebensechte Sprache umzuwandeln, was die Interaktivität und das Engagement Ihrer Anwendungen verbessert. Dies ist besonders wertvoll für die Erstellung von Sprachassistenten, die Generierung von Audioinhalten, die Entwicklung barrierefreier Anwendungen oder den Aufbau von Konversationsschnittstellen, die menschlicher wirken. Die Integration ermöglicht es Ihnen, die fortschrittlichen Sprachsynthesefähigkeiten von ElevenLabs nahtlos in Ihre Agenten-Workflows zu integrieren und so die Lücke zwischen textbasierter KI und natürlicher menschlicher Kommunikation zu schließen.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
ElevenLabs in den Workflow integrieren. Kann Text in Sprache umwandeln. Erfordert API-Schlüssel.
|
||||
|
||||
## Tools
|
||||
|
||||
### `elevenlabs_tts`
|
||||
|
||||
TTS mit ElevenLabs-Stimmen konvertieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `text` | string | Ja | Der Text, der in Sprache umgewandelt werden soll |
|
||||
| `voiceId` | string | Ja | Die ID der zu verwendenden Stimme |
|
||||
| `modelId` | string | Nein | Die ID des zu verwendenden Modells \(standardmäßig eleven_monolingual_v1\) |
|
||||
| `apiKey` | string | Ja | Ihr ElevenLabs API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `audioUrl` | string | Die URL der generierten Audiodatei |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `elevenlabs`
|
||||
148
apps/docs/content/docs/de/tools/exa.mdx
Normal file
148
apps/docs/content/docs/de/tools/exa.mdx
Normal file
File diff suppressed because one or more lines are too long
77
apps/docs/content/docs/de/tools/file.mdx
Normal file
77
apps/docs/content/docs/de/tools/file.mdx
Normal file
@@ -0,0 +1,77 @@
|
||||
---
|
||||
title: Datei
|
||||
description: Mehrere Dateien lesen und parsen
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="file"
|
||||
color="#40916C"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
|
||||
|
||||
viewBox='0 0 23 28'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
>
|
||||
<path
|
||||
d='M8 15.2H15.2M8 20H11.6M2 4.4V23.6C2 24.2365 2.25286 24.847 2.70294 25.2971C3.15303 25.7471 3.76348 26 4.4 26H18.8C19.4365 26 20.047 25.7471 20.4971 25.2971C20.9471 24.847 21.2 24.2365 21.2 23.6V9.6104C21.2 9.29067 21.136 8.97417 21.012 8.67949C20.8879 8.38481 20.7062 8.11789 20.4776 7.8944L15.1496 2.684C14.7012 2.24559 14.0991 2.00008 13.472 2H4.4C3.76348 2 3.15303 2.25286 2.70294 2.70294C2.25286 3.15303 2 3.76348 2 4.4Z'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2.25'
|
||||
strokeLinecap='round'
|
||||
strokeLinejoin='round'
|
||||
/>
|
||||
<path
|
||||
d='M14 2V6.8C14 7.43652 14.2529 8.04697 14.7029 8.49706C15.153 8.94714 15.7635 9.2 16.4 9.2H21.2'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2.25'
|
||||
strokeLinejoin='round'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
Das Datei-Parser-Tool bietet eine leistungsstarke Möglichkeit, Inhalte aus verschiedenen Dateiformaten zu extrahieren und zu verarbeiten, wodurch Dokumentendaten einfach in Ihre Agent-Workflows integriert werden können. Dieses Tool unterstützt mehrere Dateiformate und kann Dateien mit einer Größe von bis zu 200 MB verarbeiten.
|
||||
|
||||
Mit dem Datei-Parser können Sie:
|
||||
|
||||
- **Mehrere Dateiformate verarbeiten**: Text aus PDFs, CSVs, Word-Dokumenten (DOCX), Textdateien und mehr extrahieren
|
||||
- **Große Dateien verarbeiten**: Dokumente mit einer Größe von bis zu 200 MB verarbeiten
|
||||
- **Dateien von URLs parsen**: Inhalte direkt aus online gehosteten Dateien extrahieren, indem Sie deren URLs angeben
|
||||
- **Mehrere Dateien gleichzeitig verarbeiten**: Mehrere Dateien in einem einzigen Vorgang hochladen und parsen
|
||||
- **Strukturierte Daten extrahieren**: Formatierung und Struktur der Originaldokumente wenn möglich beibehalten
|
||||
|
||||
Das Datei-Parser-Tool ist besonders nützlich für Szenarien, in denen Ihre Agenten mit Dokumenteninhalten arbeiten müssen, wie z.B. bei der Analyse von Berichten, der Extraktion von Daten aus Tabellenkalkulationen oder der Verarbeitung von Text aus verschiedenen Dokumentenquellen. Es vereinfacht den Prozess, Dokumenteninhalte für Ihre Agenten verfügbar zu machen, sodass sie genauso einfach mit in Dateien gespeicherten Informationen arbeiten können wie mit direkter Texteingabe.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Gebrauchsanweisung
|
||||
|
||||
Datei in den Workflow integrieren. Kann eine Datei manuell hochladen oder eine Datei-URL einfügen.
|
||||
|
||||
## Tools
|
||||
|
||||
### `file_parser`
|
||||
|
||||
Parsen einer oder mehrerer hochgeladener Dateien oder Dateien von URLs (Text, PDF, CSV, Bilder usw.)
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `filePath` | string | Ja | Pfad zu der/den Datei(en). Kann ein einzelner Pfad, URL oder ein Array von Pfaden sein. |
|
||||
| `fileType` | string | Nein | Typ der zu parsenden Datei (wird automatisch erkannt, wenn nicht angegeben) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `files` | array | Array der geparsten Dateien |
|
||||
| `combinedContent` | string | Kombinierter Inhalt aller geparsten Dateien |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `file`
|
||||
124
apps/docs/content/docs/de/tools/firecrawl.mdx
Normal file
124
apps/docs/content/docs/de/tools/firecrawl.mdx
Normal file
@@ -0,0 +1,124 @@
|
||||
---
|
||||
title: Firecrawl
|
||||
description: Durchsuche oder durchforste das Web
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="firecrawl"
|
||||
color="#181C1E"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon" viewBox='0 0 642 600' xmlns='http://www.w3.org/2000/svg' >
|
||||
<path
|
||||
d='M301 63C299 91 303 122 298 149C295 158 289 165 283 169C274 172 266 170 261 167C253 176 248 183 244 191C230 226 226 263 226 301C216 310 203 317 192 310C179 295 175 277 174 259C161 273 153 288 146 304C141 321 138 336 137 352C140 372 145 388 152 402C161 421 174 435 187 449C181 462 165 453 157 450C158 454 161 458 165 461C195 490 231 500 268 509C240 494 211 471 195 442C179 413 172 378 180 344C191 353 200 362 211 364C223 365 232 361 236 353C247 274 299 214 323 143C322 136 327 140 329 142C354 165 367 191 375 218C387 254 381 294 379 329C393 345 413 334 424 329C429 342 432 352 429 362C427 378 417 388 413 400C422 407 433 403 440 400C432 423 419 442 404 460C383 483 358 501 335 512C379 502 420 491 449 459C443 458 427 464 428 452C443 437 464 423 472 403C482 383 485 362 484 339C482 307 472 280 458 254C459 267 452 276 445 284C434 289 426 279 424 272C415 247 424 220 418 198C415 179 405 165 397 150C370 114 336 86 303 64'
|
||||
fill='rgb(253,76,31)'
|
||||
/>
|
||||
<path
|
||||
d='M324 141C303 214 249 273 244 354C235 359 229 364 223 366C205 367 193 357 182 347C180 350 179 353 180 357C178 374 178 390 182 403C185 421 193 434 200 448C212 465 227 480 243 491C258 500 269 513 285 512C284 508 257 485 252 468C241 450 235 433 233 414C241 415 254 420 263 412C260 387 265 363 273 343C281 323 293 306 310 295C317 289 324 285 330 282C328 307 328 331 329 355C330 368 332 379 338 389C358 394 376 384 388 370C383 386 377 401 371 415C376 414 381 411 385 408C383 421 380 431 376 441C366 467 356 491 334 510C358 499 381 483 400 461C418 442 430 423 440 403C432 404 421 410 413 404C414 386 428 377 427 360C429 349 428 340 424 332C413 336 404 341 392 339C386 338 381 334 379 330C380 292 385 248 371 214C366 195 358 180 349 165C341 155 333 145 323 140'
|
||||
fill='rgb(254,156,69)'
|
||||
/>
|
||||
<path
|
||||
d='M330 284C309 293 289 311 279 332C267 356 261 383 265 411C256 420 242 418 235 412C237 438 245 459 258 479C269 493 281 507 295 513C288 495 265 472 265 446C272 447 281 454 288 444C296 425 303 407 309 388C317 406 321 427 336 443C346 449 358 446 363 438C355 464 348 489 334 511C344 501 352 491 357 480C370 457 379 435 385 412C380 411 376 416 371 418C376 401 382 386 387 371C379 382 369 388 358 391C348 394 337 392 334 383C324 353 328 316 330 285'
|
||||
fill='rgb(254,220,87)'
|
||||
/>
|
||||
<path
|
||||
d='M311 389C303 407 297 426 289 445C282 454 273 450 268 445C267 472 285 492 302 512C299 514 297 514 294 514C297 514 299 514 301 514C314 515 325 512 334 513C341 495 355 467 362 443C357 446 351 448 344 447C337 446 334 441 330 438C320 422 316 406 311 391'
|
||||
fill='rgb(251,250,202)'
|
||||
/>
|
||||
<path
|
||||
d='M187 163C188 181 167 187 164 203C158 215 158 228 159 241C172 233 183 221 188 209C193 194 192 178 188 166'
|
||||
fill='rgb(253,76,31)'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Firecrawl](https://firecrawl.dev/) ist eine leistungsstarke Web-Scraping- und Content-Extraktions-API, die sich nahtlos in Sim integriert und Entwicklern ermöglicht, saubere, strukturierte Inhalte von jeder Website zu extrahieren. Diese Integration bietet eine einfache Möglichkeit, Webseiten in nutzbare Datenformate wie Markdown und HTML umzuwandeln und dabei die wesentlichen Inhalte zu bewahren.
|
||||
|
||||
Mit Firecrawl in Sim können Sie:
|
||||
|
||||
- **Saubere Inhalte extrahieren**: Entfernen Sie Werbung, Navigationselemente und andere Ablenkungen, um nur den Hauptinhalt zu erhalten
|
||||
- **In strukturierte Formate umwandeln**: Transformieren Sie Webseiten in Markdown, HTML oder JSON
|
||||
- **Metadaten erfassen**: Extrahieren Sie SEO-Metadaten, Open Graph-Tags und andere Seiteninformationen
|
||||
- **JavaScript-lastige Seiten verarbeiten**: Verarbeiten Sie Inhalte von modernen Webanwendungen, die auf JavaScript basieren
|
||||
- **Inhalte filtern**: Konzentrieren Sie sich auf bestimmte Teile einer Seite mit CSS-Selektoren
|
||||
- **Skalierbar verarbeiten**: Bewältigen Sie umfangreiche Scraping-Anforderungen mit einer zuverlässigen API
|
||||
- **Im Web suchen**: Führen Sie intelligente Websuchen durch und erhalten Sie strukturierte Ergebnisse
|
||||
- **Ganze Websites crawlen**: Durchsuchen Sie mehrere Seiten einer Website und aggregieren Sie deren Inhalte
|
||||
|
||||
In Sim ermöglicht die Firecrawl-Integration Ihren Agenten, programmatisch auf Webinhalte zuzugreifen und diese als Teil ihrer Workflows zu verarbeiten. Unterstützte Operationen umfassen:
|
||||
|
||||
- **Scrape**: Extrahieren Sie strukturierte Inhalte (Markdown, HTML, Metadaten) von einer einzelnen Webseite.
|
||||
- **Search**: Durchsuchen Sie das Web nach Informationen mit Firecrawls intelligenten Suchfunktionen.
|
||||
- **Crawl**: Durchsuchen Sie mehrere Seiten einer Website und erhalten Sie strukturierte Inhalte und Metadaten für jede Seite.
|
||||
|
||||
Dies ermöglicht Ihren Agenten, Informationen von Websites zu sammeln, strukturierte Daten zu extrahieren und diese Informationen zu nutzen, um Entscheidungen zu treffen oder Erkenntnisse zu gewinnen – ohne sich mit den Komplexitäten des rohen HTML-Parsings oder der Browser-Automatisierung auseinandersetzen zu müssen. Konfigurieren Sie einfach den Firecrawl-Block mit Ihrem API-Schlüssel, wählen Sie die Operation (Scrape, Search oder Crawl) und geben Sie die relevanten Parameter an. Ihre Agenten können sofort mit Webinhalten in einem sauberen, strukturierten Format arbeiten.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanweisungen
|
||||
|
||||
Integrieren Sie Firecrawl in den Workflow. Kann Websites durchsuchen, scrapen oder crawlen. Benötigt API-Schlüssel.
|
||||
|
||||
## Tools
|
||||
|
||||
### `firecrawl_scrape`
|
||||
|
||||
Extrahieren Sie strukturierte Inhalte von Webseiten mit umfassender Metadaten-Unterstützung. Konvertiert Inhalte in Markdown oder HTML und erfasst dabei SEO-Metadaten, Open Graph-Tags und Seiteninformationen.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `url` | string | Ja | Die URL, von der Inhalte extrahiert werden sollen |
|
||||
| `scrapeOptions` | json | Nein | Optionen für das Content-Scraping |
|
||||
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `markdown` | string | Seiteninhalt im Markdown-Format |
|
||||
| `html` | string | Roher HTML-Inhalt der Seite |
|
||||
| `metadata` | object | Seiten-Metadaten einschließlich SEO- und Open Graph-Informationen |
|
||||
|
||||
### `firecrawl_search`
|
||||
|
||||
Suche nach Informationen im Web mit Firecrawl
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `query` | string | Ja | Die zu verwendende Suchanfrage |
|
||||
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `data` | array | Suchergebnisdaten |
|
||||
|
||||
### `firecrawl_crawl`
|
||||
|
||||
Crawlen Sie ganze Websites und extrahieren Sie strukturierte Inhalte von allen zugänglichen Seiten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `url` | string | Ja | Die Website-URL zum Crawlen |
|
||||
| `limit` | number | Nein | Maximale Anzahl der zu crawlenden Seiten \(Standard: 100\) |
|
||||
| `onlyMainContent` | boolean | Nein | Nur Hauptinhalt von Seiten extrahieren |
|
||||
| `apiKey` | string | Ja | Firecrawl API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `pages` | array | Array von gecrawlten Seiten mit ihrem Inhalt und Metadaten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `firecrawl`
|
||||
29
apps/docs/content/docs/de/tools/generic_webhook.mdx
Normal file
29
apps/docs/content/docs/de/tools/generic_webhook.mdx
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: Webhook
|
||||
description: Empfangen Sie Webhooks von jedem Dienst durch Konfiguration eines
|
||||
benutzerdefinierten Webhooks.
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="generic_webhook"
|
||||
color="#10B981"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
fill='currentColor'
|
||||
|
||||
|
||||
viewBox='0 0 24 24'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
>
|
||||
<path d='M17.974 7A4.967 4.967 0 0 0 18 6.5a5.5 5.5 0 1 0-8.672 4.491L7.18 15.114A2.428 2.428 0 0 0 6.496 15 2.5 2.5 0 1 0 9 17.496a2.36 2.36 0 0 0-.93-1.925l2.576-4.943-.41-.241A4.5 4.5 0 1 1 17 6.5a4.8 4.8 0 0 1-.022.452zM6.503 18.999a1.5 1.5 0 1 1 1.496-1.503A1.518 1.518 0 0 1 6.503 19zM18.5 12a5.735 5.735 0 0 0-1.453.157l-2.744-3.941A2.414 2.414 0 0 0 15 6.5a2.544 2.544 0 1 0-1.518 2.284l3.17 4.557.36-.13A4.267 4.267 0 0 1 18.5 13a4.5 4.5 0 1 1-.008 9h-.006a4.684 4.684 0 0 1-3.12-1.355l-.703.71A5.653 5.653 0 0 0 18.49 23h.011a5.5 5.5 0 0 0 0-11zM11 6.5A1.5 1.5 0 1 1 12.5 8 1.509 1.509 0 0 1 11 6.5zM18.5 20a2.5 2.5 0 1 0-2.447-3h-5.05l-.003.497A4.546 4.546 0 0 1 6.5 22 4.526 4.526 0 0 1 2 17.5a4.596 4.596 0 0 1 3.148-4.37l-.296-.954A5.606 5.606 0 0 0 1 17.5 5.532 5.532 0 0 0 6.5 23a5.573 5.573 0 0 0 5.478-5h4.08a2.487 2.487 0 0 0 2.442 2zm0-4a1.5 1.5 0 1 1-1.5 1.5 1.509 1.509 0 0 1 1.5-1.5z' />
|
||||
<path fill='none' d='M0 0h24v24H0z' />
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `triggers`
|
||||
- Typ: `generic_webhook`
|
||||
130
apps/docs/content/docs/de/tools/github.mdx
Normal file
130
apps/docs/content/docs/de/tools/github.mdx
Normal file
@@ -0,0 +1,130 @@
|
||||
---
|
||||
title: GitHub
|
||||
description: Interagiere mit GitHub oder löse Workflows durch GitHub-Events aus
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="github"
|
||||
color="#181C1E"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon" viewBox='0 0 26 26' xmlns='http://www.w3.org/2000/svg'>
|
||||
<path
|
||||
d='M13 0C11.2928 0 9.60235 0.336255 8.02511 0.989566C6.44788 1.64288 5.01477 2.60045 3.80761 3.80761C1.36964 6.24558 0 9.55219 0 13C0 18.746 3.731 23.621 8.892 25.35C9.542 25.454 9.75 25.051 9.75 24.7V22.503C6.149 23.283 5.382 20.761 5.382 20.761C4.784 19.253 3.939 18.85 3.939 18.85C2.756 18.044 4.03 18.07 4.03 18.07C5.33 18.161 6.019 19.409 6.019 19.409C7.15 21.385 9.061 20.8 9.802 20.488C9.919 19.643 10.257 19.071 10.621 18.746C7.735 18.421 4.706 17.303 4.706 12.35C4.706 10.907 5.2 9.75 6.045 8.827C5.915 8.502 5.46 7.15 6.175 5.395C6.175 5.395 7.267 5.044 9.75 6.721C10.777 6.435 11.895 6.292 13 6.292C14.105 6.292 15.223 6.435 16.25 6.721C18.733 5.044 19.825 5.395 19.825 5.395C20.54 7.15 20.085 8.502 19.955 8.827C20.8 9.75 21.294 10.907 21.294 12.35C21.294 17.316 18.252 18.408 15.353 18.733C15.821 19.136 16.25 19.929 16.25 21.138V24.7C16.25 25.051 16.458 25.467 17.121 25.35C22.282 23.608 26 18.746 26 13C26 11.2928 25.6637 9.60235 25.0104 8.02511C24.3571 6.44788 23.3995 5.01477 22.1924 3.80761C20.9852 2.60045 19.5521 1.64288 17.9749 0.989566C16.3977 0.336255 14.7072 0 13 0Z'
|
||||
fill='currentColor'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[GitHub](https://github.com/) ist die weltweit führende Plattform für Softwareentwicklung und Versionskontrolle mit Git. Sie bietet eine kollaborative Umgebung, in der Entwickler Code hosten und überprüfen, Projekte verwalten und gemeinsam Software erstellen können.
|
||||
|
||||
Mit GitHub kannst du:
|
||||
|
||||
- **Repositories hosten**: Speichere deinen Code in öffentlichen oder privaten Repositories mit Versionskontrolle
|
||||
- **An Code zusammenarbeiten**: Nutze Pull Requests, um Änderungen vorzuschlagen, Code zu überprüfen und Beiträge zusammenzuführen
|
||||
- **Issues verfolgen**: Erstelle, weise zu und verwalte Issues, um Arbeit zu organisieren und Fehler zu verfolgen
|
||||
- **Workflows automatisieren**: Nutze GitHub Actions, um Code automatisch zu erstellen, zu testen und bereitzustellen
|
||||
- **Projekte verwalten**: Organisiere Arbeit mit Projektboards, Meilensteinen und Aufgabenverfolgung
|
||||
- **Code dokumentieren**: Erstelle und pflege Dokumentation mit GitHub Pages und Wikis
|
||||
|
||||
In Sim ermöglicht die GitHub-Integration Ihren Agenten die direkte Interaktion mit GitHub-Repositories und -Workflows. Dies erlaubt leistungsstarke Automatisierungsszenarien wie Unterstützung bei Code-Reviews, Pull-Request-Management, Issue-Tracking und Repository-Exploration. Ihre Agenten können Repository-Daten abrufen, Code-Änderungen analysieren, Kommentare zu Pull Requests posten und andere GitHub-Operationen programmatisch durchführen. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und Ihren Entwicklungsprozessen und ermöglicht eine nahtlose Zusammenarbeit zwischen Ihren Agenten und Ihrem Entwicklungsteam.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanweisungen
|
||||
|
||||
Integrieren Sie Github in den Workflow. Kann PR-Details abrufen, PR-Kommentare erstellen, Repository-Informationen abrufen und den neuesten Commit anzeigen. Erfordert einen GitHub-Token-API-Schlüssel. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn ein PR erstellt wird, kommentiert wird oder ein Commit gepusht wird.
|
||||
|
||||
## Tools
|
||||
|
||||
### `github_pr`
|
||||
|
||||
PR-Details einschließlich Diff und geänderte Dateien abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `owner` | string | Ja | Repository-Besitzer |
|
||||
| `repo` | string | Ja | Repository-Name |
|
||||
| `pullNumber` | number | Ja | Pull-Request-Nummer |
|
||||
| `apiKey` | string | Ja | GitHub-API-Token |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Menschenlesbare PR-Zusammenfassung |
|
||||
| `metadata` | object | Detaillierte PR-Metadaten einschließlich Dateiänderungen |
|
||||
|
||||
### `github_comment`
|
||||
|
||||
Kommentare zu GitHub PRs erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `owner` | string | Ja | Repository-Besitzer |
|
||||
| `repo` | string | Ja | Repository-Name |
|
||||
| `body` | string | Ja | Kommentarinhalt |
|
||||
| `pullNumber` | number | Ja | Pull-Request-Nummer |
|
||||
| `path` | string | Nein | Dateipfad für Review-Kommentar |
|
||||
| `position` | number | Nein | Zeilennummer für Review-Kommentar |
|
||||
| `commentType` | string | Nein | Kommentartyp \(pr_comment oder file_comment\) |
|
||||
| `line` | number | Nein | Zeilennummer für Review-Kommentar |
|
||||
| `side` | string | Nein | Seite des Diffs \(LEFT oder RIGHT\) |
|
||||
| `commitId` | string | Nein | Der SHA des Commits, der kommentiert werden soll |
|
||||
| `apiKey` | string | Ja | GitHub API-Token |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Menschenlesbare Kommentarbestätigung |
|
||||
| `metadata` | object | Kommentar-Metadaten |
|
||||
|
||||
### `github_repo_info`
|
||||
|
||||
Ruft umfassende GitHub-Repository-Metadaten ab, einschließlich Sterne, Forks, Issues und Hauptsprache. Unterstützt sowohl öffentliche als auch private Repositories mit optionaler Authentifizierung.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `owner` | string | Ja | Repository-Besitzer \(Benutzer oder Organisation\) |
|
||||
| `repo` | string | Ja | Repository-Name |
|
||||
| `apiKey` | string | Ja | GitHub Personal Access Token |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Menschenlesbare Repository-Zusammenfassung |
|
||||
| `metadata` | object | Repository-Metadaten |
|
||||
|
||||
### `github_latest_commit`
|
||||
|
||||
Ruft den neuesten Commit aus einem GitHub-Repository ab
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `owner` | string | Ja | Repository-Besitzer (Benutzer oder Organisation) |
|
||||
| `repo` | string | Ja | Repository-Name |
|
||||
| `branch` | string | Nein | Branch-Name (standardmäßig der Standard-Branch des Repositories) |
|
||||
| `apiKey` | string | Ja | GitHub API-Token |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Menschenlesbare Commit-Zusammenfassung |
|
||||
| `metadata` | object | Commit-Metadaten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `github`
|
||||
142
apps/docs/content/docs/de/tools/gmail.mdx
Normal file
142
apps/docs/content/docs/de/tools/gmail.mdx
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
title: Gmail
|
||||
description: Gmail senden oder Workflows von Gmail-Ereignissen auslösen
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="gmail"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
viewBox='0 0 48 48'
|
||||
|
||||
|
||||
|
||||
>
|
||||
<path fill='#4caf50' d='M45,16.2l-5,2.75l-5,4.75L35,40h7c1.657,0,3-1.343,3-3V16.2z' />
|
||||
<path fill='#1e88e5' d='M3,16.2l3.614,1.71L13,23.7V40H6c-1.657,0-3-1.343-3-3V16.2z' />
|
||||
<polygon
|
||||
fill='#e53935'
|
||||
points='35,11.2 24,19.45 13,11.2 12,17 13,23.7 24,31.95 35,23.7 36,17'
|
||||
/>
|
||||
<path
|
||||
fill='#c62828'
|
||||
d='M3,12.298V16.2l10,7.5V11.2L9.876,8.859C9.132,8.301,8.228,8,7.298,8h0C4.924,8,3,9.924,3,12.298z'
|
||||
/>
|
||||
<path
|
||||
fill='#fbc02d'
|
||||
d='M45,12.298V16.2l-10,7.5V11.2l3.124-2.341C38.868,8.301,39.772,8,40.702,8h0 C43.076,8,45,9.924,45,12.298z'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Gmail](https://gmail.com) ist Googles beliebter E-Mail-Dienst, der eine robuste Plattform zum Senden, Empfangen und Verwalten von E-Mail-Kommunikation bietet. Mit über 1,8 Milliarden aktiven Nutzern weltweit bietet Gmail eine funktionsreiche Erfahrung mit leistungsstarken Suchfunktionen, Organisationstools und Integrationsoptionen.
|
||||
|
||||
Mit Gmail können Sie:
|
||||
|
||||
- **E-Mails senden und empfangen**: Kommunizieren Sie mit Kontakten über eine übersichtliche, intuitive Benutzeroberfläche
|
||||
- **Nachrichten organisieren**: Verwenden Sie Labels, Ordner und Filter, um Ihren Posteingang zu organisieren
|
||||
- **Effizient suchen**: Finden Sie bestimmte Nachrichten schnell mit Googles leistungsstarker Suchtechnologie
|
||||
- **Workflows automatisieren**: Erstellen Sie Filter und Regeln, um eingehende E-Mails automatisch zu verarbeiten
|
||||
- **Von überall zugreifen**: Nutzen Sie Gmail geräteübergreifend mit synchronisierten Inhalten und Einstellungen
|
||||
- **Mit anderen Diensten integrieren**: Verbinden Sie sich mit Google Kalender, Drive und anderen Produktivitätstools
|
||||
|
||||
In Sim ermöglicht die Gmail-Integration Ihren Agenten, E-Mails programmatisch zu senden, zu lesen und zu durchsuchen. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Senden von Benachrichtigungen, die Verarbeitung eingehender Nachrichten, das Extrahieren von Informationen aus E-Mails und das Verwalten von Kommunikationsabläufen. Ihre Agenten können personalisierte E-Mails verfassen und senden, nach bestimmten Nachrichten mit Gmails Abfragesyntax suchen und Inhalte aus E-Mails extrahieren, um sie in anderen Teilen Ihres Workflows zu verwenden. In Kürze werden Agenten auch in der Lage sein, in Echtzeit auf neue E-Mails zu achten, was reaktionsschnelle Workflows ermöglicht, die Aktionen basierend auf eingehenden Nachrichten auslösen können. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und E-Mail-Kommunikationen und ermöglicht eine nahtlose Interaktion mit einer der weltweit am häufigsten genutzten Kommunikationsplattformen.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Gmail in den Workflow integrieren. Kann E-Mails senden, lesen und durchsuchen. Erfordert OAuth. Kann im Trigger-Modus verwendet werden, um einen Workflow auszulösen, wenn eine neue E-Mail empfangen wird.
|
||||
|
||||
## Tools
|
||||
|
||||
### `gmail_send`
|
||||
|
||||
E-Mails über Gmail versenden
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
|
||||
| `subject` | string | Ja | Betreff der E-Mail |
|
||||
| `body` | string | Ja | Inhalt der E-Mail |
|
||||
| `cc` | string | Nein | CC-Empfänger \(durch Komma getrennt\) |
|
||||
| `bcc` | string | Nein | BCC-Empfänger \(durch Komma getrennt\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Erfolgsmeldung |
|
||||
| `metadata` | object | E-Mail-Metadaten |
|
||||
|
||||
### `gmail_draft`
|
||||
|
||||
E-Mail-Entwürfe in Gmail erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `to` | string | Ja | E-Mail-Adresse des Empfängers |
|
||||
| `subject` | string | Ja | Betreff der E-Mail |
|
||||
| `body` | string | Ja | Inhalt der E-Mail |
|
||||
| `cc` | string | Nein | CC-Empfänger \(durch Komma getrennt\) |
|
||||
| `bcc` | string | Nein | BCC-Empfänger \(durch Komma getrennt\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Erfolgsmeldung |
|
||||
| `metadata` | object | Entwurfs-Metadaten |
|
||||
|
||||
### `gmail_read`
|
||||
|
||||
E-Mails von Gmail lesen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `messageId` | string | Nein | ID der zu lesenden Nachricht |
|
||||
| `folder` | string | Nein | Ordner/Label, aus dem E-Mails gelesen werden sollen |
|
||||
| `unreadOnly` | boolean | Nein | Nur ungelesene Nachrichten abrufen |
|
||||
| `maxResults` | number | Nein | Maximale Anzahl abzurufender Nachrichten \(Standard: 1, max: 10\) |
|
||||
| `includeAttachments` | boolean | Nein | E-Mail-Anhänge herunterladen und einschließen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Textinhalt der E-Mail |
|
||||
| `metadata` | json | Metadaten der E-Mail |
|
||||
| `attachments` | file[] | Anhänge der E-Mail |
|
||||
|
||||
### `gmail_search`
|
||||
|
||||
E-Mails in Gmail durchsuchen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `query` | string | Ja | Suchanfrage für E-Mails |
|
||||
| `maxResults` | number | Nein | Maximale Anzahl zurückzugebender Ergebnisse |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Zusammenfassung der Suchergebnisse |
|
||||
| `metadata` | object | Such-Metadaten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `gmail`
|
||||
204
apps/docs/content/docs/de/tools/google_calendar.mdx
Normal file
204
apps/docs/content/docs/de/tools/google_calendar.mdx
Normal file
@@ -0,0 +1,204 @@
|
||||
---
|
||||
title: Google Kalender
|
||||
description: Google Kalender-Ereignisse verwalten
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_calendar"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
xmlnsXlink='http://www.w3.org/1999/xlink'
|
||||
x='0px'
|
||||
y='0px'
|
||||
viewBox='0 0 200 200'
|
||||
enableBackground='new 0 0 200 200'
|
||||
xmlSpace='preserve'
|
||||
>
|
||||
<g>
|
||||
<g transform='translate(3.75 3.75)'>
|
||||
<path
|
||||
fill='#FFFFFF'
|
||||
d='M148.882,43.618l-47.368-5.263l-57.895,5.263L38.355,96.25l5.263,52.632l52.632,6.579l52.632-6.579
|
||||
l5.263-53.947L148.882,43.618z'
|
||||
/>
|
||||
<path
|
||||
fill='#1A73E8'
|
||||
d='M65.211,125.276c-3.934-2.658-6.658-6.539-8.145-11.671l9.132-3.763c0.829,3.158,2.276,5.605,4.342,7.342
|
||||
c2.053,1.737,4.553,2.592,7.474,2.592c2.987,0,5.553-0.908,7.697-2.724s3.224-4.132,3.224-6.934c0-2.868-1.132-5.211-3.395-7.026
|
||||
s-5.105-2.724-8.5-2.724h-5.276v-9.039H76.5c2.921,0,5.382-0.789,7.382-2.368c2-1.579,3-3.737,3-6.487
|
||||
c0-2.447-0.895-4.395-2.684-5.855s-4.053-2.197-6.803-2.197c-2.684,0-4.816,0.711-6.395,2.145s-2.724,3.197-3.447,5.276
|
||||
l-9.039-3.763c1.197-3.395,3.395-6.395,6.618-8.987c3.224-2.592,7.342-3.895,12.342-3.895c3.697,0,7.026,0.711,9.974,2.145
|
||||
c2.947,1.434,5.263,3.421,6.934,5.947c1.671,2.539,2.5,5.382,2.5,8.539c0,3.224-0.776,5.947-2.329,8.184
|
||||
c-1.553,2.237-3.461,3.947-5.724,5.145v0.539c2.987,1.25,5.421,3.158,7.342,5.724c1.908,2.566,2.868,5.632,2.868,9.211
|
||||
s-0.908,6.776-2.724,9.579c-1.816,2.803-4.329,5.013-7.513,6.618c-3.197,1.605-6.789,2.421-10.776,2.421
|
||||
C73.408,129.263,69.145,127.934,65.211,125.276z'
|
||||
/>
|
||||
<path
|
||||
fill='#1A73E8'
|
||||
d='M121.25,79.961l-9.974,7.25l-5.013-7.605l17.987-12.974h6.895v61.197h-9.895L121.25,79.961z'
|
||||
/>
|
||||
<path
|
||||
fill='#EA4335'
|
||||
d='M148.882,196.25l47.368-47.368l-23.684-10.526l-23.684,10.526l-10.526,23.684L148.882,196.25z'
|
||||
/>
|
||||
<path
|
||||
fill='#34A853'
|
||||
d='M33.092,172.566l10.526,23.684h105.263v-47.368H43.618L33.092,172.566z'
|
||||
/>
|
||||
<path
|
||||
fill='#4285F4'
|
||||
d='M12.039-3.75C3.316-3.75-3.75,3.316-3.75,12.039v136.842l23.684,10.526l23.684-10.526V43.618h105.263
|
||||
l10.526-23.684L148.882-3.75H12.039z'
|
||||
/>
|
||||
<path
|
||||
fill='#188038'
|
||||
d='M-3.75,148.882v31.579c0,8.724,7.066,15.789,15.789,15.789h31.579v-47.368H-3.75z'
|
||||
/>
|
||||
<path
|
||||
fill='#FBBC04'
|
||||
d='M148.882,43.618v105.263h47.368V43.618l-23.684-10.526L148.882,43.618z'
|
||||
/>
|
||||
<path
|
||||
fill='#1967D2'
|
||||
d='M196.25,43.618V12.039c0-8.724-7.066-15.789-15.789-15.789h-31.579v47.368H196.25z'
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Google Kalender](https://calendar.google.com) ist Googles leistungsstarker Kalender- und Planungsdienst, der eine umfassende Plattform für die Verwaltung von Ereignissen, Meetings und Terminen bietet. Mit nahtloser Integration in Googles Ökosystem und weitverbreiteter Nutzung bietet Google Kalender robuste Funktionen für persönliche und berufliche Planungsbedürfnisse.
|
||||
|
||||
Mit Google Kalender können Sie:
|
||||
|
||||
- **Ereignisse erstellen und verwalten**: Planen Sie Meetings, Termine und Erinnerungen mit detaillierten Informationen
|
||||
- **Kalendereinladungen versenden**: Benachrichtigen und koordinieren Sie automatisch mit Teilnehmern durch E-Mail-Einladungen
|
||||
- **Ereigniserstellung mit natürlicher Sprache**: Fügen Sie schnell Ereignisse mit Umgangssprache hinzu, wie "Meeting mit John morgen um 15 Uhr"
|
||||
- **Ereignisse anzeigen und suchen**: Finden und greifen Sie einfach auf Ihre geplanten Ereignisse über mehrere Kalender hinweg zu
|
||||
- **Mehrere Kalender verwalten**: Organisieren Sie verschiedene Arten von Ereignissen über verschiedene Kalender hinweg
|
||||
|
||||
In Sim ermöglicht die Google Kalender-Integration Ihren Agenten, Kalenderereignisse programmatisch zu erstellen, zu lesen und zu verwalten. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie das Planen von Meetings, das Versenden von Kalendereinladungen, das Überprüfen der Verfügbarkeit und das Verwalten von Ereignisdetails. Ihre Agenten können Ereignisse mit natürlichsprachlicher Eingabe erstellen, automatisierte Kalendereinladungen an Teilnehmer senden, Ereignisinformationen abrufen und bevorstehende Ereignisse auflisten. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und der Kalenderverwaltung und ermöglicht eine nahtlose Planungsautomatisierung und Koordination mit einer der weltweit am häufigsten genutzten Kalenderplattformen.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanweisungen
|
||||
|
||||
Integriert Google Kalender in den Workflow. Kann Kalenderereignisse erstellen, lesen, aktualisieren und auflisten. Erfordert OAuth.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_calendar_create`
|
||||
|
||||
Erstellt ein neues Ereignis in Google Kalender
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `calendarId` | string | Nein | Kalender-ID \(standardmäßig primary\) |
|
||||
| `summary` | string | Ja | Ereignistitel/Zusammenfassung |
|
||||
| `description` | string | Nein | Ereignisbeschreibung |
|
||||
| `location` | string | Nein | Ereignisort |
|
||||
| `startDateTime` | string | Ja | Startdatum und -uhrzeit \(RFC3339-Format, z.B. 2025-06-03T10:00:00-08:00\) |
|
||||
| `endDateTime` | string | Ja | Enddatum und -uhrzeit \(RFC3339-Format, z.B. 2025-06-03T11:00:00-08:00\) |
|
||||
| `timeZone` | string | Nein | Zeitzone \(z.B. America/Los_Angeles\) |
|
||||
| `attendees` | array | Nein | Array mit E-Mail-Adressen der Teilnehmer |
|
||||
| `sendUpdates` | string | Nein | Wie Updates an Teilnehmer gesendet werden: all, externalOnly oder none |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Bestätigungsnachricht zur Ereigniserstellung |
|
||||
| `metadata` | json | Metadaten des erstellten Ereignisses einschließlich ID, Status und Details |
|
||||
|
||||
### `google_calendar_list`
|
||||
|
||||
Ereignisse aus Google Kalender auflisten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `calendarId` | string | Nein | Kalender-ID \(standardmäßig primary\) |
|
||||
| `timeMin` | string | Nein | Untere Grenze für Ereignisse \(RFC3339-Zeitstempel, z.B. 2025-06-03T00:00:00Z\) |
|
||||
| `timeMax` | string | Nein | Obere Grenze für Ereignisse \(RFC3339-Zeitstempel, z.B. 2025-06-04T00:00:00Z\) |
|
||||
| `orderBy` | string | Nein | Reihenfolge der zurückgegebenen Ereignisse \(startTime oder updated\) |
|
||||
| `showDeleted` | boolean | Nein | Gelöschte Ereignisse einbeziehen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Zusammenfassung der gefundenen Ereignisanzahl |
|
||||
| `metadata` | json | Liste der Ereignisse mit Paginierungstoken und Ereignisdetails |
|
||||
|
||||
### `google_calendar_get`
|
||||
|
||||
Ein bestimmtes Ereignis aus Google Kalender abrufen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `calendarId` | string | Nein | Kalender-ID (standardmäßig primary) |
|
||||
| `eventId` | string | Ja | Ereignis-ID zum Abrufen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Bestätigungsnachricht zum Abrufen des Ereignisses |
|
||||
| `metadata` | json | Ereignisdetails einschließlich ID, Status, Zeiten und Teilnehmer |
|
||||
|
||||
### `google_calendar_quick_add`
|
||||
|
||||
Ereignisse aus natürlichsprachlichem Text erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `calendarId` | string | Nein | Kalender-ID (standardmäßig primary) |
|
||||
| `text` | string | Ja | Natürlichsprachlicher Text, der das Ereignis beschreibt (z.B. "Meeting mit John morgen um 15 Uhr") |
|
||||
| `attendees` | array | Nein | Array von E-Mail-Adressen der Teilnehmer (auch durch Komma getrennte Zeichenfolge akzeptiert) |
|
||||
| `sendUpdates` | string | Nein | Wie Updates an Teilnehmer gesendet werden: all, externalOnly oder none |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Bestätigungsnachricht zur Ereigniserstellung aus natürlicher Sprache |
|
||||
| `metadata` | json | Metadaten des erstellten Ereignisses einschließlich analysierter Details |
|
||||
|
||||
### `google_calendar_invite`
|
||||
|
||||
Teilnehmer zu einem bestehenden Google Kalender-Ereignis einladen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `calendarId` | string | Nein | Kalender-ID (standardmäßig primär) |
|
||||
| `eventId` | string | Ja | Ereignis-ID, zu der Teilnehmer eingeladen werden sollen |
|
||||
| `attendees` | array | Ja | Array von E-Mail-Adressen der einzuladenden Teilnehmer |
|
||||
| `sendUpdates` | string | Nein | Wie Updates an Teilnehmer gesendet werden: all, externalOnly oder none |
|
||||
| `replaceExisting` | boolean | Nein | Ob bestehende Teilnehmer ersetzt oder hinzugefügt werden sollen (standardmäßig false) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Bestätigungsnachricht für die Teilnehmereinladung mit E-Mail-Zustellungsstatus |
|
||||
| `metadata` | json | Aktualisierte Ereignismetadaten einschließlich Teilnehmerliste und Details |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_calendar`
|
||||
144
apps/docs/content/docs/de/tools/google_docs.mdx
Normal file
144
apps/docs/content/docs/de/tools/google_docs.mdx
Normal file
@@ -0,0 +1,144 @@
|
||||
---
|
||||
title: Google Docs
|
||||
description: Dokumente lesen, schreiben und erstellen
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_docs"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
viewBox='0 0 48 48'
|
||||
|
||||
|
||||
>
|
||||
<path
|
||||
fill='#2196f3'
|
||||
d='M37,45H11c-1.657,0-3-1.343-3-3V6c0-1.657,1.343-3,3-3h19l10,10v29C40,43.657,38.657,45,37,45z'
|
||||
/>
|
||||
<path fill='#bbdefb' d='M40 13L30 13 30 3z' />
|
||||
<path fill='#1565c0' d='M30 13L40 23 40 13z' />
|
||||
<path fill='#e3f2fd' d='M15 23H33V25H15zM15 27H33V29H15zM15 31H33V33H15zM15 35H25V37H15z' />
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Google Docs](https://docs.google.com) ist ein leistungsstarker cloudbasierter Dienst zur Dokumentenerstellung und -bearbeitung, der es Benutzern ermöglicht, Dokumente in Echtzeit zu erstellen, zu bearbeiten und gemeinsam daran zu arbeiten. Als Teil der Google-Produktivitätssuite bietet Google Docs eine vielseitige Plattform für Textdokumente mit umfangreichen Formatierungs-, Kommentierungs- und Freigabefunktionen.
|
||||
|
||||
Erfahren Sie, wie Sie das Google Docs "Lesen"-Tool in Sim integrieren, um mühelos Daten aus Ihren Dokumenten abzurufen und in Ihre Workflows zu integrieren. Dieses Tutorial führt Sie durch die Verbindung mit Google Docs, die Einrichtung von Datenabfragen und die Verwendung dieser Informationen zur Automatisierung von Prozessen in Echtzeit. Perfekt für die Synchronisierung von Live-Daten mit Ihren Agenten.
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/f41gy9rBHhE"
|
||||
title="Use the Google Docs Read tool in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Erfahren Sie, wie Sie das Google Docs "Aktualisieren"-Tool in Sim integrieren, um mühelos Inhalte in Ihren Dokumenten über Ihre Workflows hinzuzufügen. Dieses Tutorial führt Sie durch die Verbindung mit Google Docs, die Konfiguration von Datenschreibvorgängen und die Verwendung dieser Informationen zur nahtlosen Automatisierung von Dokumentaktualisierungen. Perfekt für die Pflege dynamischer Echtzeit-Dokumentation mit minimalem Aufwand.
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/L64ROHS2ivA"
|
||||
title="Use the Google Docs Update tool in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Erfahren Sie, wie Sie das Google Docs "Erstellen"-Tool in Sim integrieren, um mühelos neue Dokumente über Ihre Workflows zu generieren. Dieses Tutorial führt Sie durch die Verbindung mit Google Docs, die Einrichtung der Dokumentenerstellung und die Verwendung von Workflow-Daten zur automatischen Befüllung von Inhalten. Perfekt für die Rationalisierung der Dokumentenerstellung und die Steigerung der Produktivität.
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/lWpHH4qddWk"
|
||||
title="Verwenden Sie das Google Docs Erstellungstool in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Mit Google Docs können Sie:
|
||||
|
||||
- **Dokumente erstellen und bearbeiten**: Textdokumente mit umfassenden Formatierungsoptionen entwickeln
|
||||
- **In Echtzeit zusammenarbeiten**: Gleichzeitig mit mehreren Benutzern am selben Dokument arbeiten
|
||||
- **Änderungen verfolgen**: Versionsverlauf anzeigen und frühere Versionen wiederherstellen
|
||||
- **Kommentieren und vorschlagen**: Feedback geben und Änderungen vorschlagen, ohne den Originalinhalt zu verändern
|
||||
- **Von überall zugreifen**: Google Docs geräteübergreifend nutzen mit automatischer Cloud-Synchronisierung
|
||||
- **Offline arbeiten**: Ohne Internetverbindung weiterarbeiten, wobei Änderungen synchronisiert werden, sobald Sie wieder online sind
|
||||
- **Mit anderen Diensten integrieren**: Verbindung mit Google Drive, Sheets, Slides und Drittanbieteranwendungen herstellen
|
||||
|
||||
In Sim ermöglicht die Google Docs-Integration Ihren Agenten, direkt programmatisch mit Dokumentinhalten zu interagieren. Dies erlaubt leistungsstarke Automatisierungsszenarien wie Dokumenterstellung, Inhaltsextraktion, kollaboratives Bearbeiten und Dokumentenverwaltung. Ihre Agenten können bestehende Dokumente lesen, um Informationen zu extrahieren, in Dokumente schreiben, um Inhalte zu aktualisieren, und neue Dokumente von Grund auf erstellen. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und der Dokumentenverwaltung und ermöglicht eine nahtlose Interaktion mit einer der weltweit am häufigsten genutzten Dokumentenplattformen. Durch die Verbindung von Sim mit Google Docs können Sie Dokumenten-Workflows automatisieren, Berichte generieren, Erkenntnisse aus Dokumenten extrahieren und Dokumentationen pflegen - alles durch Ihre intelligenten Agenten.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie Google Docs in den Workflow. Kann Dokumente lesen, schreiben und erstellen. Erfordert OAuth.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_docs_read`
|
||||
|
||||
Inhalte aus einem Google Docs-Dokument lesen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `documentId` | string | Ja | Die ID des zu lesenden Dokuments |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `content` | string | Extrahierter Textinhalt des Dokuments |
|
||||
| `metadata` | json | Dokument-Metadaten einschließlich ID, Titel und URL |
|
||||
|
||||
### `google_docs_write`
|
||||
|
||||
Inhalte in einem Google Docs-Dokument schreiben oder aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `documentId` | string | Ja | Die ID des Dokuments, in das geschrieben werden soll |
|
||||
| `content` | string | Ja | Der Inhalt, der in das Dokument geschrieben werden soll |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `updatedContent` | boolean | Gibt an, ob der Dokumentinhalt erfolgreich aktualisiert wurde |
|
||||
| `metadata` | json | Aktualisierte Dokument-Metadaten einschließlich ID, Titel und URL |
|
||||
|
||||
### `google_docs_create`
|
||||
|
||||
Ein neues Google Docs-Dokument erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `title` | string | Ja | Der Titel des zu erstellenden Dokuments |
|
||||
| `content` | string | Nein | Der Inhalt des zu erstellenden Dokuments |
|
||||
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, in dem das Dokument erstellt werden soll |
|
||||
| `folderId` | string | Nein | Die ID des Ordners, in dem das Dokument erstellt werden soll \(interne Verwendung\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `metadata` | json | Metadaten des erstellten Dokuments einschließlich ID, Titel und URL |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_docs`
|
||||
140
apps/docs/content/docs/de/tools/google_drive.mdx
Normal file
140
apps/docs/content/docs/de/tools/google_drive.mdx
Normal file
@@ -0,0 +1,140 @@
|
||||
---
|
||||
title: Google Drive
|
||||
description: Dateien erstellen, hochladen und auflisten
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_drive"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
viewBox='0 0 87.3 78'
|
||||
|
||||
|
||||
|
||||
>
|
||||
<path
|
||||
d='m6.6 66.85 3.85 6.65c.8 1.4 1.95 2.5 3.3 3.3l13.75-23.8h-27.5c0 1.55.4 3.1 1.2 4.5z'
|
||||
fill='#0066da'
|
||||
/>
|
||||
<path
|
||||
d='m43.65 25-13.75-23.8c-1.35.8-2.5 1.9-3.3 3.3l-25.4 44a9.06 9.06 0 0 0 -1.2 4.5h27.5z'
|
||||
fill='#00ac47'
|
||||
/>
|
||||
<path
|
||||
d='m73.55 76.8c1.35-.8 2.5-1.9 3.3-3.3l1.6-2.75 7.65-13.25c.8-1.4 1.2-2.95 1.2-4.5h-27.502l5.852 11.5z'
|
||||
fill='#ea4335'
|
||||
/>
|
||||
<path
|
||||
d='m43.65 25 13.75-23.8c-1.35-.8-2.9-1.2-4.5-1.2h-18.5c-1.6 0-3.15.45-4.5 1.2z'
|
||||
fill='#00832d'
|
||||
/>
|
||||
<path
|
||||
d='m59.8 53h-32.3l-13.75 23.8c1.35.8 2.9 1.2 4.5 1.2h50.8c1.6 0 3.15-.45 4.5-1.2z'
|
||||
fill='#2684fc'
|
||||
/>
|
||||
<path
|
||||
d='m73.4 26.5-12.7-22c-.8-1.4-1.95-2.5-3.3-3.3l-13.75 23.8 16.15 28h27.45c0-1.55-.4-3.1-1.2-4.5z'
|
||||
fill='#ffba00'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Google Drive](https://drive.google.com) ist Googles Cloud-Speicher- und Dateisynchronisierungsdienst, der es Benutzern ermöglicht, Dateien zu speichern, Dateien über verschiedene Geräte zu synchronisieren und Dateien mit anderen zu teilen. Als Kernkomponente des Produktivitätsökosystems von Google bietet Google Drive robuste Speicher-, Organisations- und Kollaborationsfunktionen.
|
||||
|
||||
Erfahren Sie, wie Sie das Google Drive-Tool in Sim integrieren, um mühelos Informationen aus Ihrem Drive durch Ihre Workflows abzurufen. Dieses Tutorial führt Sie durch die Verbindung mit Google Drive, die Einrichtung des Datenabrufs und die Verwendung gespeicherter Dokumente und Dateien zur Verbesserung der Automatisierung. Perfekt für die Synchronisierung wichtiger Daten mit Ihren Agenten in Echtzeit.
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/cRoRr4b-EAs"
|
||||
title="Use the Google Drive tool in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Mit Google Drive können Sie:
|
||||
|
||||
- **Dateien in der Cloud speichern**: Laden Sie Ihre Dateien hoch und greifen Sie von überall mit Internetzugang darauf zu
|
||||
- **Inhalte organisieren**: Erstellen Sie Ordner, verwenden Sie Farbcodierung und implementieren Sie Namenskonventionen
|
||||
- **Teilen und zusammenarbeiten**: Steuern Sie Zugriffsberechtigungen und arbeiten Sie gleichzeitig an Dateien
|
||||
- **Effizient suchen**: Finden Sie Dateien schnell mit Googles leistungsstarker Suchtechnologie
|
||||
- **Zugriff über verschiedene Geräte**: Nutzen Sie Google Drive auf Desktop-, Mobil- und Webplattformen
|
||||
- **Integration mit anderen Diensten**: Verbinden Sie sich mit Google Docs, Sheets, Slides und Anwendungen von Drittanbietern
|
||||
|
||||
In Sim ermöglicht die Google Drive-Integration Ihren Agenten, direkt und programmatisch mit Ihrem Cloud-Speicher zu interagieren. Dies erlaubt leistungsstarke Automatisierungsszenarien wie Dateiverwaltung, Inhaltsorganisation und Dokumenten-Workflows. Ihre Agenten können neue Dateien in bestimmte Ordner hochladen, bestehende Dateien herunterladen, um deren Inhalte zu verarbeiten, und Ordnerinhalte auflisten, um durch Ihre Speicherstruktur zu navigieren. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und Ihrem Dokumentenverwaltungssystem und ermöglicht nahtlose Dateioperationen ohne manuelle Eingriffe. Durch die Verbindung von Sim mit Google Drive können Sie dateibasierte Workflows automatisieren, Dokumente intelligent verwalten und Cloud-Speicheroperationen in die Fähigkeiten Ihres Agenten integrieren.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie Google Drive in den Workflow. Kann Dateien erstellen, hochladen und auflisten. Erfordert OAuth.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_drive_upload`
|
||||
|
||||
Eine Datei zu Google Drive hochladen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `fileName` | string | Ja | Der Name der hochzuladenden Datei |
|
||||
| `content` | string | Ja | Der Inhalt der hochzuladenden Datei |
|
||||
| `mimeType` | string | Nein | Der MIME-Typ der hochzuladenden Datei |
|
||||
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, in den die Datei hochgeladen werden soll |
|
||||
| `folderId` | string | Nein | Die ID des Ordners, in den die Datei hochgeladen werden soll \(interne Verwendung\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `file` | json | Metadaten der hochgeladenen Datei einschließlich ID, Name und Links |
|
||||
|
||||
### `google_drive_create_folder`
|
||||
|
||||
Einen neuen Ordner in Google Drive erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `fileName` | string | Ja | Name des zu erstellenden Ordners |
|
||||
| `folderSelector` | string | Nein | Wählen Sie den übergeordneten Ordner aus, in dem der Ordner erstellt werden soll |
|
||||
| `folderId` | string | Nein | ID des übergeordneten Ordners \(interne Verwendung\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `file` | json | Metadaten des erstellten Ordners einschließlich ID, Name und Informationen zum übergeordneten Ordner |
|
||||
|
||||
### `google_drive_list`
|
||||
|
||||
Dateien und Ordner in Google Drive auflisten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `folderSelector` | string | Nein | Wählen Sie den Ordner aus, aus dem Dateien aufgelistet werden sollen |
|
||||
| `folderId` | string | Nein | Die ID des Ordners, aus dem Dateien aufgelistet werden sollen \(interne Verwendung\) |
|
||||
| `query` | string | Nein | Eine Abfrage zum Filtern der Dateien |
|
||||
| `pageSize` | number | Nein | Die Anzahl der zurückzugebenden Dateien |
|
||||
| `pageToken` | string | Nein | Das Seitentoken für die Paginierung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `files` | json | Array von Metadatenobjekten der Dateien aus dem angegebenen Ordner |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_drive`
|
||||
82
apps/docs/content/docs/de/tools/google_forms.mdx
Normal file
82
apps/docs/content/docs/de/tools/google_forms.mdx
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
title: Google Forms
|
||||
description: Antworten aus einem Google-Formular lesen
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_forms"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 65' fill='none'>
|
||||
<path
|
||||
d='M29.583 0H4.438C1.997 0 0 1.997 0 4.438v56.208C0 63.086 1.997 65.083 4.438 65.083h38.458c2.44 0 4.437-1.997 4.437-4.437V17.75L36.979 10.354 29.583 0Z'
|
||||
fill='#673AB7'
|
||||
/>
|
||||
<path
|
||||
d='M29.583 0v10.354c0 2.45 1.986 4.438 4.438 4.438h13.312L36.979 10.354 29.583 0Z'
|
||||
fill='#B39DDB'
|
||||
/>
|
||||
<path
|
||||
d='M19.229 50.292h16.271v-2.959H19.229v2.959Zm0-17.75v2.958h16.271v-2.958H19.229Zm-3.698 1.479c0 1.224-0.995 2.219-2.219 2.219s-2.219-0.995-2.219-2.219c0-1.224 0.995-2.219 2.219-2.219s2.219 0.995 2.219 2.219Zm0 7.396c0 1.224-0.995 2.219-2.219 2.219s-2.219-0.995-2.219-2.219c0-1.224 0.995-2.219 2.219-2.219s2.219 0.995 2.219 2.219Zm0 7.396c0 1.224-0.995 2.219-2.219 2.219s-2.219-0.995-2.219-2.219c0-1.224 0.995-2.219 2.219-2.219s2.219 0.995 2.219 2.219Zm3.698-5.917h16.271v-2.959H19.229v2.959Z'
|
||||
fill='#F1F1F1'
|
||||
/>
|
||||
<defs>
|
||||
<linearGradient
|
||||
id='gf-gradient'
|
||||
x1='30.881'
|
||||
y1='16.452'
|
||||
x2='47.333'
|
||||
y2='32.9'
|
||||
gradientUnits='userSpaceOnUse'
|
||||
>
|
||||
<stop stopColor='#9575CD' />
|
||||
<stop offset='1' stopColor='#7E57C2' />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Google Forms](https://forms.google.com) ist Googles Online-Umfrage- und Formular-Tool, mit dem Benutzer Formulare erstellen, Antworten sammeln und Ergebnisse analysieren können. Als Teil der Google-Produktivitätssuite macht Google Forms es einfach, Informationen, Feedback und Daten von Benutzern zu sammeln.
|
||||
|
||||
Erfahren Sie, wie Sie das Google Forms-Tool in Sim integrieren, um Formularantworten automatisch in Ihren Workflows zu lesen und zu verarbeiten. Dieses Tutorial führt Sie durch die Verbindung mit Google Forms, das Abrufen von Antworten und die Nutzung der gesammelten Daten zur Automatisierung. Perfekt für die Synchronisierung von Umfrageergebnissen, Registrierungen oder Feedback mit Ihren Agenten in Echtzeit.
|
||||
|
||||
Mit Google Forms können Sie:
|
||||
|
||||
- **Umfragen und Formulare erstellen**: Entwerfen Sie benutzerdefinierte Formulare für Feedback, Registrierung, Quizze und mehr
|
||||
- **Antworten automatisch sammeln**: Erfassen Sie Daten von Benutzern in Echtzeit
|
||||
- **Ergebnisse analysieren**: Sehen Sie sich Antworten in Google Forms an oder exportieren Sie sie nach Google Sheets für weitere Analysen
|
||||
- **Einfach zusammenarbeiten**: Teilen Sie Formulare und arbeiten Sie mit anderen zusammen, um Fragen zu erstellen und zu überprüfen
|
||||
- **Mit anderen Google-Diensten integrieren**: Verbinden Sie sich mit Google Sheets, Drive und mehr
|
||||
|
||||
In Sim ermöglicht die Google Forms-Integration Ihren Agenten den programmatischen Zugriff auf Formularantworten. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie die Verarbeitung von Umfragedaten, das Auslösen von Workflows basierend auf neuen Einreichungen und die Synchronisierung von Formularergebnissen mit anderen Tools. Ihre Agenten können alle Antworten für ein Formular abrufen, eine bestimmte Antwort abrufen und die Daten nutzen, um intelligente Automatisierung zu steuern. Durch die Verbindung von Sim mit Google Forms können Sie die Datenerfassung automatisieren, die Feedback-Verarbeitung optimieren und Formularantworten in die Fähigkeiten Ihres Agenten integrieren.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Gebrauchsanweisung
|
||||
|
||||
Integrieren Sie Google Forms in Ihren Workflow. Geben Sie eine Formular-ID an, um Antworten aufzulisten, oder geben Sie eine Antwort-ID an, um eine einzelne Antwort abzurufen. Erfordert OAuth.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_forms_get_responses`
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| formId | string | Ja | Die ID des Google-Formulars |
|
||||
| responseId | string | Nein | Falls angegeben, wird diese spezifische Antwort zurückgegeben |
|
||||
| pageSize | number | Nein | Maximale Anzahl der zurückzugebenden Antworten (der Dienst kann weniger zurückgeben). Standardwert ist 5000 |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `data` | json | Antwort oder Liste von Antworten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_forms`
|
||||
86
apps/docs/content/docs/de/tools/google_search.mdx
Normal file
86
apps/docs/content/docs/de/tools/google_search.mdx
Normal file
@@ -0,0 +1,86 @@
|
||||
---
|
||||
title: Google Suche
|
||||
description: Das Web durchsuchen
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_search"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48' >
|
||||
<path
|
||||
fill='#fbc02d'
|
||||
d='M43.611,20.083H42V20H24v8h11.303c-1.649,4.657-6.08,8-11.303,8c-6.627,0-12-5.373-12-12 s5.373-12,12-12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C12.955,4,4,12.955,4,24s8.955,20,20,20 s20-8.955,20-20C44,22.659,43.862,21.35,43.611,20.083z'
|
||||
/>
|
||||
<path
|
||||
fill='#e53935'
|
||||
d='M6.306,14.691l6.571,4.819C14.655,15.108,18.961,12,24,12c3.059,0,5.842,1.154,7.961,3.039 l5.657-5.657C34.046,6.053,29.268,4,24,4C16.318,4,9.656,8.337,6.306,14.691z'
|
||||
/>
|
||||
<path
|
||||
fill='#4caf50'
|
||||
d='M24,44c5.166,0,9.86-1.977,13.409-5.192l-6.19-5.238C29.211,35.091,26.715,36,24,36 c-5.202,0-9.619-3.317-11.283-7.946l-6.522,5.025C9.505,39.556,16.227,44,24,44z'
|
||||
/>
|
||||
<path
|
||||
fill='#1565c0'
|
||||
d='M43.611,20.083L43.595,20L42,20H24v8h11.303c-0.792,2.237-2.231,4.166-4.087,5.571 c0.001-0.001,0.002-0.001,0.003-0.002l6.19,5.238C36.971,39.205,44,34,44,24C44,22.659,43.862,21.35,43.611,20.083z'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Google Search](https://www.google.com) ist die weltweit am häufigsten genutzte Suchmaschine, die Zugang zu Milliarden von Webseiten und Informationsquellen bietet. Google Search verwendet ausgeklügelte Algorithmen, um relevante Suchergebnisse basierend auf Nutzeranfragen zu liefern, was es zu einem unverzichtbaren Werkzeug für die Informationssuche im Internet macht.
|
||||
|
||||
Erfahren Sie, wie Sie das Google Search-Tool in Sim integrieren können, um mühelos Echtzeit-Suchergebnisse in Ihren Workflows abzurufen. Dieses Tutorial führt Sie durch die Verbindung mit Google Search, die Konfiguration von Suchanfragen und die Nutzung von Live-Daten zur Verbesserung der Automatisierung. Perfekt, um Ihre Agenten mit aktuellen Informationen und intelligenterer Entscheidungsfindung auszustatten.
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/1B7hV9b5UMQ"
|
||||
title="Verwenden Sie das Google Search-Tool in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Mit Google Search können Sie:
|
||||
|
||||
- **Relevante Informationen finden**: Zugriff auf Milliarden von Webseiten mit Googles leistungsstarken Suchalgorithmen
|
||||
- **Spezifische Ergebnisse erhalten**: Verwenden Sie Suchoperatoren, um Ihre Anfragen zu verfeinern und gezielt auszurichten
|
||||
- **Vielfältige Inhalte entdecken**: Finden Sie Texte, Bilder, Videos, Nachrichten und andere Inhaltstypen
|
||||
- **Auf Wissensgraphen zugreifen**: Erhalten Sie strukturierte Informationen über Personen, Orte und Dinge
|
||||
- **Suchfunktionen nutzen**: Nutzen Sie spezialisierte Suchwerkzeuge wie Taschenrechner, Einheitenumrechner und mehr
|
||||
|
||||
In Sim ermöglicht die Google Search-Integration Ihren Agenten, das Web programmatisch zu durchsuchen und Suchergebnisse in ihre Workflows einzubinden. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie Recherche, Faktenprüfung, Datensammlung und Informationssynthese. Ihre Agenten können Suchanfragen formulieren, relevante Ergebnisse abrufen und Informationen aus diesen Ergebnissen extrahieren, um Entscheidungen zu treffen oder Erkenntnisse zu gewinnen. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und den umfangreichen Informationen, die im Web verfügbar sind, und ermöglicht Ihren Agenten den Zugriff auf aktuelle Informationen aus dem gesamten Internet. Durch die Verbindung von Sim mit Google Search können Sie Agenten erstellen, die mit den neuesten Informationen auf dem Laufenden bleiben, Fakten überprüfen, Recherchen durchführen und Benutzern relevante Webinhalte bereitstellen - alles ohne Ihren Workflow zu verlassen.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Gebrauchsanweisung
|
||||
|
||||
Integriert Google-Suche in den Workflow. Kann im Web suchen. Erfordert API-Schlüssel.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_search`
|
||||
|
||||
Durchsuchen des Webs mit der Custom Search API
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `query` | string | Ja | Die auszuführende Suchanfrage |
|
||||
| `searchEngineId` | string | Ja | Custom Search Engine ID |
|
||||
| `num` | string | Nein | Anzahl der zurückzugebenden Ergebnisse \(Standard: 10, max: 10\) |
|
||||
| `apiKey` | string | Ja | Google API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `items` | array | Array von Suchergebnissen von Google |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_search`
|
||||
197
apps/docs/content/docs/de/tools/google_sheets.mdx
Normal file
197
apps/docs/content/docs/de/tools/google_sheets.mdx
Normal file
@@ -0,0 +1,197 @@
|
||||
---
|
||||
title: Google Sheets
|
||||
description: Daten lesen, schreiben und aktualisieren
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_sheets"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
viewBox='0 0 48 48'
|
||||
|
||||
|
||||
>
|
||||
<path
|
||||
fill='#43a047'
|
||||
d='M37,45H11c-1.657,0-3-1.343-3-3V6c0-1.657,1.343-3,3-3h19l10,10v29C40,43.657,38.657,45,37,45z'
|
||||
/>
|
||||
<path fill='#c8e6c9' d='M40 13L30 13 30 3z' />
|
||||
<path fill='#2e7d32' d='M30 13L40 23 40 13z' />
|
||||
<path
|
||||
fill='#e8f5e9'
|
||||
d='M31,23H17h-2v2v2v2v2v2v2v2h18v-2v-2v-2v-2v-2v-2v-2H31z M17,25h4v2h-4V25z M17,29h4v2h-4V29z M17,33h4v2h-4V33z M31,35h-8v-2h8V35z M31,31h-8v-2h8V31z M31,27h-8v-2h8V27z'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Google Sheets](https://sheets.google.com) ist eine leistungsstarke cloudbasierte Tabellenkalkulationsanwendung, mit der Benutzer Tabellenkalkulationen in Echtzeit erstellen, bearbeiten und gemeinsam daran arbeiten können. Als Teil der Google-Produktivitätssuite bietet Google Sheets eine vielseitige Plattform für Datenorganisation, -analyse und -visualisierung mit robusten Formatierungs-, Formel- und Freigabefunktionen.
|
||||
|
||||
Erfahren Sie, wie Sie das Google Sheets "Lesen"-Tool in Sim integrieren, um mühelos Daten aus Ihren Tabellenkalkulationen abzurufen und in Ihre Workflows zu integrieren. Dieses Tutorial führt Sie durch die Verbindung mit Google Sheets, die Einrichtung von Datenabfragen und die Verwendung dieser Informationen zur Automatisierung von Prozessen in Echtzeit. Perfekt für die Synchronisierung von Live-Daten mit Ihren Agenten.
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/xxP7MZRuq_0"
|
||||
title="Verwenden des Google Sheets Lese-Tools in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Entdecken Sie, wie Sie das Google Sheets "Schreiben"-Tool in Sim verwenden können, um automatisch Daten aus Ihren Workflows an Ihre Google Sheets zu senden. Dieses Tutorial behandelt die Einrichtung der Integration, die Konfiguration von Schreibvorgängen und die nahtlose Aktualisierung Ihrer Tabellen während der Ausführung von Workflows. Perfekt für die Führung von Echtzeit-Aufzeichnungen ohne manuelle Eingabe.
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/cO86qTj7qeY"
|
||||
title="Verwenden des Google Sheets Schreib-Tools in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Erfahren Sie, wie Sie das Google Sheets "Aktualisieren"-Tool in Sim nutzen können, um bestehende Einträge in Ihren Tabellenkalkulationen basierend auf der Workflow-Ausführung zu ändern. Dieses Tutorial zeigt die Einrichtung der Aktualisierungslogik, das Mapping von Datenfeldern und die sofortige Synchronisierung von Änderungen. Perfekt, um Ihre Daten aktuell und konsistent zu halten.
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/95by2fL9yn4"
|
||||
title="Verwenden Sie das Google Sheets Update-Tool in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Erfahren Sie, wie Sie das Google Sheets "Append"-Tool in Sim verwenden können, um mühelos neue Datenzeilen während der Workflow-Ausführung zu Ihren Tabellen hinzuzufügen. Dieses Tutorial führt Sie durch die Einrichtung der Integration, die Konfiguration von Append-Aktionen und die Sicherstellung eines reibungslosen Datenwachstums. Perfekt für die Erweiterung von Datensätzen ohne manuellen Aufwand!
|
||||
|
||||
<iframe
|
||||
width="100%"
|
||||
height="400"
|
||||
src="https://www.youtube.com/embed/8DgNvLBCsAo"
|
||||
title="Verwenden Sie das Google Sheets Append-Tool in Sim"
|
||||
frameBorder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
></iframe>
|
||||
|
||||
Mit Google Sheets können Sie:
|
||||
|
||||
- **Tabellen erstellen und bearbeiten**: Entwickeln Sie datengesteuerte Dokumente mit umfassenden Formatierungs- und Berechnungsoptionen
|
||||
- **In Echtzeit zusammenarbeiten**: Arbeiten Sie gleichzeitig mit mehreren Benutzern an derselben Tabelle
|
||||
- **Daten analysieren**: Verwenden Sie Formeln, Funktionen und Pivot-Tabellen, um Ihre Daten zu verarbeiten und zu verstehen
|
||||
- **Informationen visualisieren**: Erstellen Sie Diagramme, Grafiken und bedingte Formatierungen, um Daten visuell darzustellen
|
||||
- **Überall zugreifen**: Nutzen Sie Google Sheets geräteübergreifend mit automatischer Cloud-Synchronisierung
|
||||
- **Offline arbeiten**: Arbeiten Sie ohne Internetverbindung weiter, wobei Änderungen synchronisiert werden, sobald Sie wieder online sind
|
||||
- **Mit anderen Diensten integrieren**: Verbinden Sie mit Google Drive, Forms und Drittanbieteranwendungen
|
||||
|
||||
In Sim ermöglicht die Google Sheets-Integration Ihren Agenten, direkt programmatisch mit Tabellendaten zu interagieren. Dies ermöglicht leistungsstarke Automatisierungsszenarien wie Datenextraktion, -analyse, -berichterstattung und -verwaltung. Ihre Agenten können bestehende Tabellen lesen, um Informationen zu extrahieren, in Tabellen schreiben, um Daten zu aktualisieren, und neue Tabellen von Grund auf erstellen. Diese Integration überbrückt die Lücke zwischen Ihren KI-Workflows und der Datenverwaltung und ermöglicht eine nahtlose Interaktion mit strukturierten Daten. Durch die Verbindung von Sim mit Google Sheets können Sie Daten-Workflows automatisieren, Berichte generieren, Erkenntnisse aus Daten gewinnen und aktuelle Informationen pflegen - alles durch Ihre intelligenten Agenten. Die Integration unterstützt verschiedene Datenformate und Bereichsspezifikationen, was sie flexibel genug macht, um unterschiedliche Datenverwaltungsanforderungen zu erfüllen, während die kollaborative und zugängliche Natur von Google Sheets erhalten bleibt.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanweisungen
|
||||
|
||||
Integriert Google Sheets in den Workflow. Kann Daten lesen, schreiben, anhängen und aktualisieren. Erfordert OAuth.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_sheets_read`
|
||||
|
||||
Daten aus einer Google Sheets-Tabelle lesen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `spreadsheetId` | string | Ja | Die ID der Tabelle, aus der gelesen werden soll |
|
||||
| `range` | string | Nein | Der Zellbereich, aus dem gelesen werden soll |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `data` | json | Tabellendaten einschließlich Bereich und Zellwerte |
|
||||
| `metadata` | json | Tabellenmetadaten einschließlich ID und URL |
|
||||
|
||||
### `google_sheets_write`
|
||||
|
||||
Daten in eine Google Sheets-Tabelle schreiben
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `spreadsheetId` | string | Ja | Die ID der Tabelle, in die geschrieben werden soll |
|
||||
| `range` | string | Nein | Der Zellbereich, in den geschrieben werden soll |
|
||||
| `values` | array | Ja | Die Daten, die in die Tabelle geschrieben werden sollen |
|
||||
| `valueInputOption` | string | Nein | Das Format der zu schreibenden Daten |
|
||||
| `includeValuesInResponse` | boolean | Nein | Ob die geschriebenen Werte in der Antwort enthalten sein sollen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `updatedRange` | string | Bereich der aktualisierten Zellen |
|
||||
| `updatedRows` | number | Anzahl der aktualisierten Zeilen |
|
||||
| `updatedColumns` | number | Anzahl der aktualisierten Spalten |
|
||||
| `updatedCells` | number | Anzahl der aktualisierten Zellen |
|
||||
| `metadata` | json | Tabellenmetadaten einschließlich ID und URL |
|
||||
|
||||
### `google_sheets_update`
|
||||
|
||||
Daten in einer Google Sheets-Tabelle aktualisieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `spreadsheetId` | string | Ja | Die ID der zu aktualisierenden Tabelle |
|
||||
| `range` | string | Nein | Der Bereich der zu aktualisierenden Zellen |
|
||||
| `values` | array | Ja | Die Daten, die in der Tabelle aktualisiert werden sollen |
|
||||
| `valueInputOption` | string | Nein | Das Format der zu aktualisierenden Daten |
|
||||
| `includeValuesInResponse` | boolean | Nein | Ob die aktualisierten Werte in der Antwort enthalten sein sollen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `updatedRange` | string | Bereich der aktualisierten Zellen |
|
||||
| `updatedRows` | number | Anzahl der aktualisierten Zeilen |
|
||||
| `updatedColumns` | number | Anzahl der aktualisierten Spalten |
|
||||
| `updatedCells` | number | Anzahl der aktualisierten Zellen |
|
||||
| `metadata` | json | Tabellen-Metadaten einschließlich ID und URL |
|
||||
|
||||
### `google_sheets_append`
|
||||
|
||||
Daten am Ende einer Google Sheets-Tabelle anhängen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `spreadsheetId` | string | Ja | Die ID der Tabelle, an die angehängt werden soll |
|
||||
| `range` | string | Nein | Der Bereich der Zellen, nach dem angehängt werden soll |
|
||||
| `values` | array | Ja | Die Daten, die an die Tabelle angehängt werden sollen |
|
||||
| `valueInputOption` | string | Nein | Das Format der anzuhängenden Daten |
|
||||
| `insertDataOption` | string | Nein | Wie die Daten eingefügt werden sollen \(OVERWRITE oder INSERT_ROWS\) |
|
||||
| `includeValuesInResponse` | boolean | Nein | Ob die angehängten Werte in der Antwort enthalten sein sollen |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `tableRange` | string | Bereich der Tabelle, in dem Daten angehängt wurden |
|
||||
| `updatedRange` | string | Bereich der Zellen, die aktualisiert wurden |
|
||||
| `updatedRows` | number | Anzahl der aktualisierten Zeilen |
|
||||
| `updatedColumns` | number | Anzahl der aktualisierten Spalten |
|
||||
| `updatedCells` | number | Anzahl der aktualisierten Zellen |
|
||||
| `metadata` | json | Tabellenkalkulationsmetadaten einschließlich ID und URL |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_sheets`
|
||||
174
apps/docs/content/docs/de/tools/google_vault.mdx
Normal file
174
apps/docs/content/docs/de/tools/google_vault.mdx
Normal file
@@ -0,0 +1,174 @@
|
||||
---
|
||||
title: Google Vault
|
||||
description: Suchen, exportieren und verwalten von Sperren/Exporten für
|
||||
Vault-Angelegenheiten
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="google_vault"
|
||||
color="#E8F0FE"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon" xmlns='http://www.w3.org/2000/svg' viewBox='0 0 82 82'>
|
||||
<path
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
d='M58.0251 41.1399L63.8516 36.7242L69.0032 30.157C67.372 26.032 63.097 18.4149 63.097 18.4149C63.097 18.4149 55.6204 14.618 51.9923 13.193L45.3454 17.918L41.0563 24.0492L36.7626 17.8336L30.2001 13.1133C26.5391 14.5195 19.0063 18.7805 19.0063 18.7805C19.0063 18.7805 14.6423 25.9852 12.9923 30.157L18.1532 36.7336L23.9048 41.0742L17.7969 45.7289L12.8798 52.0195C14.3329 55.807 18.3501 63.0352 18.3501 63.0352C18.3501 63.0352 25.8735 67.6289 29.9188 69.232L36.1016 64.4649L41.0001 58.1649L45.3454 63.9258L52.072 69.2367C55.8595 67.7414 63.0595 63.6305 63.0595 63.6305C63.0595 63.6305 67.4798 56.1961 69.036 52.2258L63.9782 45.7102L58.0251 41.1399ZM41.0048 53.4633C34.2501 53.4633 28.7704 47.9883 28.7704 41.2289C28.7704 34.4742 34.2454 28.9945 41.0048 28.9945C47.7641 28.9945 53.2391 34.4695 53.2391 41.2289C53.2391 47.9883 47.7595 53.4633 41.0048 53.4633Z'
|
||||
fill='#1967D2'
|
||||
/>
|
||||
<path
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
d='M58.025 41.1401L69.0078 30.1573C70.3672 33.5839 71.1172 37.3198 71.1172 41.2292C71.1172 45.1104 70.3766 48.8183 69.036 52.2261L58.025 41.1401ZM12.9969 30.162C11.6422 33.5886 10.8875 37.3198 10.8875 41.2292C10.8875 45.0354 11.6 48.6683 12.8891 52.0198L23.9094 41.0745L12.9969 30.162ZM51.9969 13.1933C48.5891 11.8573 44.886 11.1167 41.0047 11.1167C37.1985 11.1167 33.561 11.8292 30.2047 13.1183L41.061 24.0495L51.9969 13.1933ZM29.9328 69.2323C33.3594 70.5917 37.0953 71.3417 41.0047 71.3417C44.9141 71.3417 48.6453 70.587 52.0719 69.2323L41 58.1651L29.9328 69.2323ZM69.036 52.2261C65.9891 59.9839 59.8203 66.1667 52.0719 69.2323L62.811 79.9714C64.2828 81.4433 66.6641 81.4433 68.136 79.9714L79.761 68.3464C81.2282 66.8792 81.2328 64.5026 79.7703 63.0308L69.036 52.2261ZM69.0078 30.1573L79.9766 19.1886C81.4485 17.7167 81.4485 15.3354 79.9766 13.8636L68.3516 2.23857C66.8844 0.771387 64.5078 0.766699 63.036 2.2292L51.9922 13.1933C59.7547 16.2401 65.9422 22.4089 69.0078 30.1573ZM12.8891 52.0198L2.03284 62.8011C0.551587 64.2683 0.551587 66.6589 2.02346 68.1354L13.8641 79.9761C15.336 81.4479 17.7172 81.4479 19.1891 79.9761L29.9328 69.2323C22.1141 66.1386 15.9078 59.8761 12.8891 52.0198ZM30.2047 13.1183L19.1985 2.03232C17.7313 0.551074 15.3406 0.551074 13.8641 2.02295L2.02346 13.8636C0.551587 15.3354 0.551587 17.7167 2.02346 19.1886L12.9969 30.162C16.0906 22.3479 22.3532 16.137 30.2047 13.1183Z'
|
||||
fill='#4285F4'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Verbinden Sie Google Vault, um Exporte zu erstellen, Exporte aufzulisten und Sperren innerhalb von Angelegenheiten zu verwalten.
|
||||
|
||||
## Tools
|
||||
|
||||
### `google_vault_create_matters_export`
|
||||
|
||||
Einen Export in einer Angelegenheit erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `matterId` | string | Ja | Keine Beschreibung |
|
||||
| `exportName` | string | Ja | Keine Beschreibung |
|
||||
| `corpus` | string | Ja | Zu exportierender Datenkorpus \(MAIL, DRIVE, GROUPS, HANGOUTS_CHAT, VOICE\) |
|
||||
| `accountEmails` | string | Nein | Kommagetrennte Liste von Benutzer-E-Mails zur Eingrenzung des Exports |
|
||||
| `orgUnitId` | string | Nein | Organisationseinheit-ID zur Eingrenzung des Exports \(Alternative zu E-Mails\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_list_matters_export`
|
||||
|
||||
Exporte für eine Angelegenheit auflisten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `matterId` | string | Ja | Keine Beschreibung |
|
||||
| `pageSize` | number | Nein | Keine Beschreibung |
|
||||
| `pageToken` | string | Nein | Keine Beschreibung |
|
||||
| `exportId` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_download_export_file`
|
||||
|
||||
Eine einzelne Datei aus einem Google Vault-Export herunterladen (GCS-Objekt)
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `matterId` | string | Ja | Keine Beschreibung |
|
||||
| `bucketName` | string | Ja | Keine Beschreibung |
|
||||
| `objectName` | string | Ja | Keine Beschreibung |
|
||||
| `fileName` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `file` | file | Heruntergeladene Vault-Exportdatei in den Ausführungsdateien gespeichert |
|
||||
|
||||
### `google_vault_create_matters_holds`
|
||||
|
||||
Eine Aufbewahrung in einer Angelegenheit erstellen
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `matterId` | string | Ja | Keine Beschreibung |
|
||||
| `holdName` | string | Ja | Keine Beschreibung |
|
||||
| `corpus` | string | Ja | Datenkorpus zur Aufbewahrung \(MAIL, DRIVE, GROUPS, HANGOUTS_CHAT, VOICE\) |
|
||||
| `accountEmails` | string | Nein | Kommagetrennte Liste von Benutzer-E-Mails, die aufbewahrt werden sollen |
|
||||
| `orgUnitId` | string | Nein | Organisationseinheit-ID zur Aufbewahrung \(Alternative zu Konten\) |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `output` | json | Vault-API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_list_matters_holds`
|
||||
|
||||
Aufbewahrungen für eine Angelegenheit auflisten
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `matterId` | string | Ja | Keine Beschreibung |
|
||||
| `pageSize` | number | Nein | Keine Beschreibung |
|
||||
| `pageToken` | string | Nein | Keine Beschreibung |
|
||||
| `holdId` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_create_matters`
|
||||
|
||||
Einen neuen Fall in Google Vault erstellen
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `name` | string | Ja | Keine Beschreibung |
|
||||
| `description` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
### `google_vault_list_matters`
|
||||
|
||||
Fälle auflisten oder einen bestimmten Fall abrufen, wenn matterId angegeben ist
|
||||
|
||||
#### Input
|
||||
|
||||
| Parameter | Type | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `pageSize` | number | Nein | Keine Beschreibung |
|
||||
| `pageToken` | string | Nein | Keine Beschreibung |
|
||||
| `matterId` | string | Nein | Keine Beschreibung |
|
||||
|
||||
#### Output
|
||||
|
||||
| Parameter | Type | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `output` | json | Vault API-Antwortdaten |
|
||||
| `file` | json | Heruntergeladene Exportdatei \(UserFile\) aus Ausführungsdateien |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `google_vault`
|
||||
206
apps/docs/content/docs/de/tools/hunter.mdx
Normal file
206
apps/docs/content/docs/de/tools/hunter.mdx
Normal file
@@ -0,0 +1,206 @@
|
||||
---
|
||||
title: Hunter io
|
||||
description: Finden und verifizieren Sie professionelle E-Mail-Adressen
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="hunter"
|
||||
color="#E0E0E0"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
|
||||
|
||||
viewBox='0 0 20 19'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
>
|
||||
<path
|
||||
d='M12.0671 8.43455C11.6625 8.55094 11.2164 8.55288 10.7992 8.53525C10.3141 8.51472 9.80024 8.45339 9.35223 8.25426C8.98359 8.09047 8.68787 7.79493 8.84262 7.36805C8.95175 7.06699 9.19361 6.79803 9.47319 6.64644C9.78751 6.4759 10.1329 6.50361 10.4474 6.65774C10.8005 6.83082 11.0942 7.11235 11.3604 7.3964C11.5 7.54536 11.6332 7.70002 11.7646 7.85617C11.8252 7.92801 12.2364 8.33865 12.0671 8.43455ZM18.7923 8.58131C18.17 8.43655 17.4348 8.4884 16.811 8.38867C15.8284 8.23146 14.3648 7.08576 13.5714 5.92122C13.0201 5.11202 12.757 4.28785 12.3356 3.28356C12.0415 2.58257 11.4001 0.365389 10.5032 1.40318C10.1339 1.83057 9.7204 3.23752 9.41837 3.2177C9.19467 3.26971 9.15818 2.83371 9.08739 2.64738C8.95886 2.30903 8.89071 1.9176 8.7185 1.59854C8.58086 1.34353 8.40014 1.03806 8.12337 0.91412C7.63027 0.660572 7.03575 1.42476 6.74072 2.33095C6.61457 2.81687 5.76653 3.75879 5.39721 3.9866C3.71684 5.02352 0.344233 6.11595 0.000262184 9.75358C-0.00114142 9.76867 0.000262182 9.81455 0.0573714 9.77323C0.459591 9.48197 5.02183 6.19605 2.09392 12.5476C0.300195 16.439 8.96062 18.917 9.40582 18.9271C9.46582 18.9284 9.46144 18.9011 9.46347 18.8832C10.1546 12.6724 16.9819 13.3262 18.5718 11.8387C20.1474 10.3649 20.1796 8.93816 18.7923 8.58131Z'
|
||||
fill='#FA5320'
|
||||
/>
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[Hunter.io](https://hunter.io/) ist eine führende Plattform zum Finden und Verifizieren von professionellen E-Mail-Adressen, zum Entdecken von Unternehmen und zur Anreicherung von Kontaktdaten. Hunter.io bietet leistungsstarke APIs für Domainsuche, E-Mail-Suche, Verifizierung und Unternehmenserkennung und ist damit ein unverzichtbares Tool für Vertrieb, Recruiting und Geschäftsentwicklung.
|
||||
|
||||
Mit Hunter.io können Sie:
|
||||
|
||||
- **E-Mail-Adressen nach Domain finden:** Suchen Sie nach allen öffentlich verfügbaren E-Mail-Adressen, die mit einer bestimmten Unternehmensdomäne verknüpft sind.
|
||||
- **Unternehmen entdecken:** Nutzen Sie erweiterte Filter und KI-gestützte Suche, um Unternehmen zu finden, die Ihren Kriterien entsprechen.
|
||||
- **Eine bestimmte E-Mail-Adresse finden:** Ermitteln Sie die wahrscheinlichste E-Mail-Adresse einer Person bei einem Unternehmen anhand ihres Namens und der Domain.
|
||||
- **E-Mail-Adressen verifizieren:** Überprüfen Sie die Zustellbarkeit und Gültigkeit jeder E-Mail-Adresse.
|
||||
- **Unternehmensdaten anreichern:** Rufen Sie detaillierte Informationen über Unternehmen ab, einschließlich Größe, verwendeter Technologien und mehr.
|
||||
|
||||
In Sim ermöglicht die Hunter.io-Integration Ihren Agenten, programmatisch nach E-Mail-Adressen zu suchen und diese zu verifizieren, Unternehmen zu entdecken und Kontaktdaten mithilfe der Hunter.io-API anzureichern. Dies erlaubt Ihnen, Lead-Generierung, Kontaktanreicherung und E-Mail-Verifizierung direkt in Ihren Workflows zu automatisieren. Ihre Agenten können Hunter.io's Tools nutzen, um Outreach zu optimieren, Ihr CRM aktuell zu halten und intelligente Automatisierungsszenarien für Vertrieb, Recruiting und mehr zu ermöglichen.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie Hunter in den Workflow. Kann Domains durchsuchen, E-Mail-Adressen finden, E-Mail-Adressen verifizieren, Unternehmen entdecken, Unternehmen finden und E-Mail-Adressen zählen. Erfordert API-Schlüssel.
|
||||
|
||||
## Tools
|
||||
|
||||
### `hunter_discover`
|
||||
|
||||
Gibt Unternehmen zurück, die bestimmten Kriterien entsprechen, unter Verwendung der KI-gestützten Suche von Hunter.io.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `query` | string | Nein | Natürlichsprachliche Suchanfrage für Unternehmen |
|
||||
| `domain` | string | Nein | Domain-Namen von Unternehmen zum Filtern |
|
||||
| `headcount` | string | Nein | Unternehmensgrößenfilter \(z.B. "1-10", "11-50"\) |
|
||||
| `company_type` | string | Nein | Art der Organisation |
|
||||
| `technology` | string | Nein | Von Unternehmen verwendete Technologie |
|
||||
| `apiKey` | string | Ja | Hunter.io API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `results` | array | Array von Unternehmen, die den Suchkriterien entsprechen, jeweils mit Domain, Name, Mitarbeiterzahl, Technologien und E-Mail-Anzahl |
|
||||
|
||||
### `hunter_domain_search`
|
||||
|
||||
Gibt alle gefundenen E-Mail-Adressen anhand eines bestimmten Domain-Namens mit Quellen zurück.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `domain` | string | Ja | Domainname, nach dem E-Mail-Adressen gesucht werden sollen |
|
||||
| `limit` | number | Nein | Maximale Anzahl zurückzugebender E-Mail-Adressen \(Standard: 10\) |
|
||||
| `offset` | number | Nein | Anzahl der zu überspringenden E-Mail-Adressen |
|
||||
| `type` | string | Nein | Filter für persönliche oder allgemeine E-Mails |
|
||||
| `seniority` | string | Nein | Filter nach Seniorität: junior, senior oder executive |
|
||||
| `department` | string | Nein | Filter nach bestimmten Abteilungen \(z.B. sales, marketing\) |
|
||||
| `apiKey` | string | Ja | Hunter.io API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `domain` | string | Der gesuchte Domainname |
|
||||
| `disposable` | boolean | Ob die Domain Wegwerf-E-Mail-Adressen akzeptiert |
|
||||
| `webmail` | boolean | Ob die Domain ein Webmail-Anbieter ist |
|
||||
| `accept_all` | boolean | Ob die Domain alle E-Mail-Adressen akzeptiert |
|
||||
| `pattern` | string | Das von der Organisation verwendete E-Mail-Muster |
|
||||
| `organization` | string | Der Name der Organisation |
|
||||
| `description` | string | Beschreibung der Organisation |
|
||||
| `industry` | string | Branche der Organisation |
|
||||
| `twitter` | string | Twitter-Profil der Organisation |
|
||||
| `facebook` | string | Facebook-Profil der Organisation |
|
||||
| `linkedin` | string | LinkedIn-Profil der Organisation |
|
||||
| `instagram` | string | Instagram-Profil der Organisation |
|
||||
| `youtube` | string | YouTube-Kanal der Organisation |
|
||||
| `technologies` | array | Array der von der Organisation verwendeten Technologien |
|
||||
| `country` | string | Land, in dem die Organisation ansässig ist |
|
||||
| `state` | string | Bundesland, in dem die Organisation ansässig ist |
|
||||
| `city` | string | Stadt, in der die Organisation ansässig ist |
|
||||
| `postal_code` | string | Postleitzahl der Organisation |
|
||||
| `street` | string | Straßenadresse der Organisation |
|
||||
| `emails` | array | Array der für die Domain gefundenen E-Mail-Adressen, jeweils mit Wert, Typ, Vertrauenswürdigkeit, Quellen und Personendetails |
|
||||
|
||||
### `hunter_email_finder`
|
||||
|
||||
Findet die wahrscheinlichste E-Mail-Adresse für eine Person anhand ihres Namens und der Unternehmensdomäne.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `domain` | string | Ja | Unternehmensdomäne |
|
||||
| `first_name` | string | Ja | Vorname der Person |
|
||||
| `last_name` | string | Ja | Nachname der Person |
|
||||
| `company` | string | Nein | Unternehmensname |
|
||||
| `apiKey` | string | Ja | Hunter.io API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `email` | string | Die gefundene E-Mail-Adresse |
|
||||
| `score` | number | Vertrauenswert für die gefundene E-Mail-Adresse |
|
||||
| `sources` | array | Array von Quellen, in denen die E-Mail gefunden wurde, jede enthält domain, uri, extracted_on, last_seen_on und still_on_page |
|
||||
| `verification` | object | Verifizierungsinformationen mit Datum und Status |
|
||||
|
||||
### `hunter_email_verifier`
|
||||
|
||||
Überprüft die Zustellbarkeit einer E-Mail-Adresse und liefert detaillierte Verifizierungsinformationen.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `email` | string | Ja | Die zu überprüfende E-Mail-Adresse |
|
||||
| `apiKey` | string | Ja | Hunter.io API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `result` | string | Zustellbarkeitsergebnis: zustellbar, nicht zustellbar oder riskant |
|
||||
| `score` | number | Vertrauenswert für das Verifizierungsergebnis |
|
||||
| `email` | string | Die überprüfte E-Mail-Adresse |
|
||||
| `regexp` | boolean | Ob die E-Mail einem gültigen Regex-Muster entspricht |
|
||||
| `gibberish` | boolean | Ob die E-Mail wie Kauderwelsch erscheint |
|
||||
| `disposable` | boolean | Ob die E-Mail von einem Anbieter für Einweg-E-Mails stammt |
|
||||
| `webmail` | boolean | Ob die E-Mail von einem Webmail-Anbieter stammt |
|
||||
| `mx_records` | boolean | Ob MX-Einträge für die Domain existieren |
|
||||
| `smtp_server` | boolean | Ob der SMTP-Server erreichbar ist |
|
||||
| `smtp_check` | boolean | Ob die SMTP-Überprüfung erfolgreich war |
|
||||
| `accept_all` | boolean | Ob die Domain alle E-Mail-Adressen akzeptiert |
|
||||
| `block` | boolean | Ob die E-Mail blockiert ist |
|
||||
| `status` | string | Verifizierungsstatus: gültig, ungültig, accept_all, webmail, disposable oder unknown |
|
||||
| `sources` | array | Array von Quellen, in denen die E-Mail gefunden wurde |
|
||||
|
||||
### `hunter_companies_find`
|
||||
|
||||
Reichert Unternehmensdaten mithilfe des Domainnamens an.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `domain` | string | Ja | Domain, für die Unternehmensdaten gefunden werden sollen |
|
||||
| `apiKey` | string | Ja | Hunter.io API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `person` | object | Personeninformationen (undefiniert für companies_find-Tool) |
|
||||
| `company` | object | Unternehmensinformationen einschließlich Name, Domain, Branche, Größe, Land, LinkedIn und Twitter |
|
||||
|
||||
### `hunter_email_count`
|
||||
|
||||
Gibt die Gesamtzahl der für eine Domain oder ein Unternehmen gefundenen E-Mail-Adressen zurück.
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `domain` | string | Nein | Domain, für die E-Mails gezählt werden sollen (erforderlich, wenn kein Unternehmen angegeben ist) |
|
||||
| `company` | string | Nein | Unternehmensname, für den E-Mails gezählt werden sollen (erforderlich, wenn keine Domain angegeben ist) |
|
||||
| `type` | string | Nein | Filter für nur persönliche oder generische E-Mails |
|
||||
| `apiKey` | string | Ja | Hunter.io API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `total` | number | Gesamtzahl der gefundenen E-Mail-Adressen |
|
||||
| `personal_emails` | number | Anzahl der gefundenen persönlichen E-Mail-Adressen |
|
||||
| `generic_emails` | number | Anzahl der gefundenen generischen E-Mail-Adressen |
|
||||
| `department` | object | Aufschlüsselung der E-Mail-Adressen nach Abteilung (Geschäftsführung, IT, Finanzen, Management, Vertrieb, Recht, Support, HR, Marketing, Kommunikation) |
|
||||
| `seniority` | object | Aufschlüsselung der E-Mail-Adressen nach Hierarchieebene (Junior, Senior, Führungskraft) |
|
||||
|
||||
## Notizen
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `hunter`
|
||||
79
apps/docs/content/docs/de/tools/image_generator.mdx
Normal file
79
apps/docs/content/docs/de/tools/image_generator.mdx
Normal file
@@ -0,0 +1,79 @@
|
||||
---
|
||||
title: Bildgenerator
|
||||
description: Bilder generieren
|
||||
---
|
||||
|
||||
import { BlockInfoCard } from "@/components/ui/block-info-card"
|
||||
|
||||
<BlockInfoCard
|
||||
type="image_generator"
|
||||
color="#4D5FFF"
|
||||
icon={true}
|
||||
iconSvg={`<svg className="block-icon"
|
||||
|
||||
|
||||
|
||||
viewBox='0 0 26 26'
|
||||
fill='none'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
stroke='currentColor'
|
||||
strokeWidth='2'
|
||||
strokeLinecap='round'
|
||||
strokeLinejoin='round'
|
||||
>
|
||||
<path d='M24.903 10.32C16.0897 9.10933 8.48966 15.6533 9.00033 24.3333M5.66699 7.66667C5.66699 8.37391 5.94794 9.05219 6.44804 9.55228C6.94814 10.0524 7.62641 10.3333 8.33366 10.3333C9.0409 10.3333 9.71918 10.0524 10.2193 9.55228C10.7194 9.05219 11.0003 8.37391 11.0003 7.66667C11.0003 6.95942 10.7194 6.28115 10.2193 5.78105C9.71918 5.28095 9.0409 5 8.33366 5C7.62641 5 6.94814 5.28095 6.44804 5.78105C5.94794 6.28115 5.66699 6.95942 5.66699 7.66667Z' />
|
||||
<path d='M1 14.4213C4.70667 13.908 8.03333 15.6986 9.832 18.5546' />
|
||||
<path d='M1 9.53333C1 6.54667 1 5.05333 1.58133 3.912C2.09265 2.90851 2.90851 2.09265 3.912 1.58133C5.05333 1 6.54667 1 9.53333 1H16.4667C19.4533 1 20.9467 1 22.088 1.58133C23.0915 2.09265 23.9073 2.90851 24.4187 3.912C25 5.05333 25 6.54667 25 9.53333V16.4667C25 19.4533 25 20.9467 24.4187 22.088C23.9073 23.0915 23.0915 23.9073 22.088 24.4187C20.9467 25 19.4533 25 16.4667 25H9.53333C6.54667 25 5.05333 25 3.912 24.4187C2.90851 23.9073 2.09265 23.0915 1.58133 22.088C1 20.9467 1 19.4533 1 16.4667V9.53333Z' />
|
||||
</svg>`}
|
||||
/>
|
||||
|
||||
{/* MANUAL-CONTENT-START:intro */}
|
||||
[DALL-E](https://openai.com/dall-e-3) ist OpenAIs fortschrittliches KI-System, das entwickelt wurde, um realistische Bilder und Kunst aus natürlichsprachlichen Beschreibungen zu generieren. Als hochmodernes Bildgenerierungsmodell kann DALL-E detaillierte und kreative Visualisierungen basierend auf Textaufforderungen erstellen und ermöglicht Nutzern, ihre Ideen in visuelle Inhalte umzuwandeln, ohne künstlerische Fähigkeiten zu benötigen.
|
||||
|
||||
Mit DALL-E können Sie:
|
||||
|
||||
- **Realistische Bilder generieren**: Fotorealistische Visualisierungen aus Textbeschreibungen erstellen
|
||||
- **Konzeptionelle Kunst gestalten**: Abstrakte Ideen in visuelle Darstellungen umwandeln
|
||||
- **Variationen produzieren**: Mehrere Interpretationen derselben Aufforderung generieren
|
||||
- **Künstlerischen Stil steuern**: Künstlerische Stile, Medien und visuelle Ästhetik spezifizieren
|
||||
- **Detaillierte Szenen erstellen**: Komplexe Szenen mit mehreren Elementen und Beziehungen beschreiben
|
||||
- **Produkte visualisieren**: Produktmodelle und Designkonzepte generieren
|
||||
- **Ideen illustrieren**: Schriftliche Konzepte in visuelle Illustrationen umwandeln
|
||||
|
||||
In Sim ermöglicht die DALL-E-Integration Ihren Agenten, Bilder programmatisch als Teil ihrer Arbeitsabläufe zu generieren. Dies erlaubt leistungsstarke Automatisierungsszenarien wie Content-Erstellung, visuelles Design und kreative Ideenfindung. Ihre Agenten können detaillierte Prompts formulieren, entsprechende Bilder generieren und diese visuellen Elemente in ihre Ausgaben oder nachgelagerte Prozesse einbinden. Diese Integration überbrückt die Lücke zwischen natürlicher Sprachverarbeitung und visueller Content-Erstellung, sodass Ihre Agenten nicht nur durch Text, sondern auch durch überzeugende Bilder kommunizieren können. Durch die Verbindung von Sim mit DALL-E können Sie Agenten erstellen, die visuelle Inhalte auf Abruf produzieren, Konzepte illustrieren, Design-Assets generieren und Benutzererfahrungen mit reichhaltigen visuellen Elementen verbessern - alles ohne menschliches Eingreifen im kreativen Prozess.
|
||||
{/* MANUAL-CONTENT-END */}
|
||||
|
||||
## Nutzungsanleitung
|
||||
|
||||
Integrieren Sie den Bildgenerator in den Workflow. Kann Bilder mit DALL-E 3 oder GPT Image generieren. API-Schlüssel erforderlich.
|
||||
|
||||
## Tools
|
||||
|
||||
### `openai_image`
|
||||
|
||||
Bilder mit OpenAI generieren
|
||||
|
||||
#### Eingabe
|
||||
|
||||
| Parameter | Typ | Erforderlich | Beschreibung |
|
||||
| --------- | ---- | -------- | ----------- |
|
||||
| `model` | string | Ja | Das zu verwendende Modell \(gpt-image-1 oder dall-e-3\) |
|
||||
| `prompt` | string | Ja | Eine Textbeschreibung des gewünschten Bildes |
|
||||
| `size` | string | Ja | Die Größe der generierten Bilder \(1024x1024, 1024x1792 oder 1792x1024\) |
|
||||
| `quality` | string | Nein | Die Qualität des Bildes \(standard oder hd\) |
|
||||
| `style` | string | Nein | Der Stil des Bildes \(vivid oder natural\) |
|
||||
| `background` | string | Nein | Die Hintergrundfarbe, nur für gpt-image-1 |
|
||||
| `n` | number | Nein | Die Anzahl der zu generierenden Bilder \(1-10\) |
|
||||
| `apiKey` | string | Ja | Ihr OpenAI API-Schlüssel |
|
||||
|
||||
#### Ausgabe
|
||||
|
||||
| Parameter | Typ | Beschreibung |
|
||||
| --------- | ---- | ----------- |
|
||||
| `success` | boolean | Erfolgsstatus der Operation |
|
||||
| `output` | object | Generierte Bilddaten |
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Kategorie: `tools`
|
||||
- Typ: `image_generator`
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user