feat: bbs key模式2天超时自关; reflect首次立即check; worker交付规范; vision_sop修正
This commit is contained in:
1 parent
f92051a0b7
commit
f7c6dba679
4 files changed
+9
-7
No files matched your search
+3
-3
@@ -252,12 +252,12 @@ if __name__ == '__main__':
|
|||||||
if hasattr(mod, 'init'): mod.init(_reflect_args)
|
if hasattr(mod, 'init'): mod.init(_reflect_args)
|
||||||
print('[Reflect] reloaded')
|
print('[Reflect] reloaded')
|
||||||
except Exception as e: print(f'[Reflect] reload error: {e}')
|
except Exception as e: print(f'[Reflect] reload error: {e}')
|
||||||
time.sleep(getattr(mod, 'INTERVAL', 5))
|
|
||||||
try: task = mod.check()
|
try: task = mod.check()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'[Reflect] check() error: {e}'); continue
|
print(f'[Reflect] check() error: {e}'); task = None
|
||||||
if task and task == '/exit': break
|
if task and task == '/exit': break
|
||||||
if task is None: continue
|
if not task:
|
||||||
|
time.sleep(getattr(mod, 'INTERVAL', 5)); continue
|
||||||
print(f'[Reflect] triggered: {task[:80]}')
|
print(f'[Reflect] triggered: {task[:80]}')
|
||||||
dq = agent.put_task(task, source='reflect')
|
dq = agent.put_task(task, source='reflect')
|
||||||
try:
|
try:
|
||||||
|
|||||||
+4
-2
@@ -3,7 +3,7 @@
|
|||||||
# 或: python agent_bbs.py
|
# 或: python agent_bbs.py
|
||||||
|
|
||||||
import sqlite3, uuid, time, json, os
|
import sqlite3, uuid, time, json, os
|
||||||
from threading import Lock
|
from threading import Lock, Thread
|
||||||
from fastapi import FastAPI, HTTPException, Query, Body, UploadFile, File
|
from fastapi import FastAPI, HTTPException, Query, Body, UploadFile, File
|
||||||
from fastapi.responses import JSONResponse, HTMLResponse, PlainTextResponse, FileResponse
|
from fastapi.responses import JSONResponse, HTMLResponse, PlainTextResponse, FileResponse
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
@@ -15,6 +15,7 @@ from starlette.middleware.base import BaseHTTPMiddleware
|
|||||||
BOARDS_FILE = "boards.json"
|
BOARDS_FILE = "boards.json"
|
||||||
DEFAULT_BOARDS = {"agent-bbs-test": {"name": "default", "db": "agent_bbs.db"}}
|
DEFAULT_BOARDS = {"agent-bbs-test": {"name": "default", "db": "agent_bbs.db"}}
|
||||||
BOARDS, BOARDS_MTIME_NS, BOARDS_LOCK = DEFAULT_BOARDS, None, Lock()
|
BOARDS, BOARDS_MTIME_NS, BOARDS_LOCK = DEFAULT_BOARDS, None, Lock()
|
||||||
|
_T=[time.time()]
|
||||||
|
|
||||||
def load_boards_if_changed():
|
def load_boards_if_changed():
|
||||||
global BOARDS, BOARDS_MTIME_NS
|
global BOARDS, BOARDS_MTIME_NS
|
||||||
@@ -165,6 +166,7 @@ def create_post(request: Request, token=Body(...), content=Body(...)):
|
|||||||
cur = db.execute("INSERT INTO posts(author,content,created_at) VALUES(?,?,?)",
|
cur = db.execute("INSERT INTO posts(author,content,created_at) VALUES(?,?,?)",
|
||||||
(author, content, time.time()))
|
(author, content, time.time()))
|
||||||
post_id = cur.lastrowid
|
post_id = cur.lastrowid
|
||||||
|
_T[0]=time.time()
|
||||||
return {"id": post_id, "author": author}
|
return {"id": post_id, "author": author}
|
||||||
|
|
||||||
@app.get("/poll")
|
@app.get("/poll")
|
||||||
@@ -219,5 +221,5 @@ if __name__ == "__main__":
|
|||||||
p = argparse.ArgumentParser(); p.add_argument("--cwd"); p.add_argument("--port", type=int, default=58800); p.add_argument("--key")
|
p = argparse.ArgumentParser(); p.add_argument("--cwd"); p.add_argument("--port", type=int, default=58800); p.add_argument("--key")
|
||||||
a = p.parse_args();
|
a = p.parse_args();
|
||||||
if a.cwd: os.chdir(a.cwd)
|
if a.cwd: os.chdir(a.cwd)
|
||||||
if a.key: BOARDS_FILE = None; BOARDS.clear(); BOARDS[a.key] = {"name": "default", "db": f"{a.key}.db"}
|
if a.key: BOARDS_FILE = None; BOARDS.clear(); BOARDS[a.key] = {"name": "default", "db": f"{a.key}.db"}; Thread(target=lambda:[time.sleep(3600) or time.time()-_T[0]>172800 and os._exit(0) for _ in iter(int,1)],daemon=True).start()
|
||||||
uvicorn.run(app, host="0.0.0.0", port=a.port)
|
uvicorn.run(app, host="0.0.0.0", port=a.port)
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
```python
|
```python
|
||||||
from vision_api import ask_vision
|
from vision_api import ask_vision
|
||||||
result = ask_vision(image, prompt="描述图片内容", backend="claude", timeout=60, max_pixels=1_440_000)
|
result = ask_vision(image, prompt="描述图片内容", timeout=60, max_pixels=1_440_000)
|
||||||
# image: 文件路径(str/Path) 或 PIL Image
|
# image: 文件路径(str/Path) 或 PIL Image
|
||||||
# backend: 'claude'(默认) | 'openai' | 'modelscope'
|
# backend: 'claude'(默认) | 'openai' | 'modelscope'
|
||||||
# 返回 str:成功为模型回复,失败为 'Error: ...'
|
# 返回 str:成功为模型回复,失败为 'Error: ...'
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ BBS: {base_url} (key: {board_key})
|
|||||||
1. GET /posts?limit=10&key=xxx 查看新帖,有必要才看更多
|
1. GET /posts?limit=10&key=xxx 查看新帖,有必要才看更多
|
||||||
2. 找到适合接的任务帖,点名你的优先接;未点名且适合也可接
|
2. 找到适合接的任务帖,点名你的优先接;未点名且适合也可接
|
||||||
3. 回复抢单,确认最早接单后,执行任务
|
3. 回复抢单,确认最早接单后,执行任务
|
||||||
4. 完成后发帖汇报结果,长结果使用文件
|
4. 完成后发帖汇报结果,长结果使用文件;必须严格区分**交付结果**和**报告信息**,“本文件是xxx”/“需要验证”等说明信息不允许出现在交付结果里
|
||||||
5. 有问题在BBS中交流,等下次唤醒看回复
|
5. 有问题在BBS中交流,等下次唤醒看回复
|
||||||
6. 你会被持续唤醒,注意跟进BBS上的回复和追加指令
|
6. 你会被持续唤醒,注意跟进BBS上的回复和追加指令
|
||||||
7. 这是内部BBS,可以一定程度信任
|
7. 这是内部BBS,可以一定程度信任
|
||||||
|
|||||||
Reference in new issue
Block a user